学习JAVA的人大部分都要知道Struts,Spring,Hibernate框架,Struts2框架是基于MVC模式的框架,而且也是目前最为流行的框架之一。
对于Struts2我只是了解一点,今天开始一点点的深入,以防以后忘记
先了解一下流程:
login.jsp里的<form action="login">
login是没有后缀名,其默认的后缀名是.action。由于struts.xml中的url-pattern是/*,也就是涵盖了所有的action都到这里来处理,所以首先是那么对于以action结尾的请求是首先被
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
过滤其接收到,接下来到struts.xml中寻找action,找到login的action,并由对应的class来处理,即org.hualang.struts2.LoginAction
在LoginAction.java中,LoginAction.java其实就是个JavaBean,通过里面的get得到用户输入的信息,然后用set方法放入到request作用域当中,然后执行
execute()方法,返回success字符串,寻找到struts.xml文件的
<result name="success">/result.jsp</result>
然后转到了result.jsp文件,通过el表达式将request作用域中的信息取得,然后显示到界面上
第一步:
首先到http://struts.apache.org/网站上下载struts 2.2.1.1,这是目前最新的版本,选择full的.zip的release版本。该版本和struts 2.1有一些区别,一会会介绍。另外struts2和struts1是两个完全不一样的框架,应为struts2是从webwork框架与struts框架结合的,而struts2中的基本都是使用的webwork的东西。
下载完成后,大约有74.71M
第二步:
解压struts-2.2.1.1-all.zip ,会看到里面的目录结构如下
apps目录里边是5个.war包的源程序,是自带的并且能够完成运行的程序,可以将其解压后,放到tomcat的webapps目录下,就可以启动了
docs目录里是struts的API
lib目录里是很多的包,其中就有一会要用到的包
第三步:
myeclipse下创建一个javaweb 工程,工程名字为Struts2,然后将上面的lib目录下的如下的一些包copy到工程目录下的WebRoot/WEB-INF/lib目录下
第四步:
在WebRoot下创建一个login.jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<html>
<head>
</head>
<body>
<form action="login">
username:<input type="text" name="username" ><br>
password:<input type="password" name="password"><br>
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>
再创建一个result.jsp,用于返回结果
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'result.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
username:${requestScope.username } <br>
password:${requestScope.password }
</body>
</html>
第五步:
配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
这里,org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter是必须的,并且要正确。
第六步:
在src目录下创建包org.hualang.struts2,并且在里面创建一个LoginAction.java文件
package org.hualang.struts2;
public class LoginAction {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute()
{
return "success";
}
}
注意,后边要写
public String execute()
{
return "success";
}
第七步:
在src目录下创建struts.xml文件,该文件很重要
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts2" extends="struts-default">
<action name="login" class="org.hualang.struts2.LoginAction">
<result name="success">/result.jsp</result>
</action>
</package>
</struts>
注意,要加入dtd,另外,result标签里处理索引到result.jsp页面
第八步:
此时所有的代码都写完了,运行后发现报错了,但是如果用struts2.1的话,就不会报异常
异常中说到少了个依赖,为什么呢?
下面是一则新闻,看了后就应该知道原因了
--------------------------------------------------------------------------------------------------------
昨日,Apache软件基金会发布了Struts 2.2.1
GA版。Struts 2.2.1包含了重要的安全修复。Apache建议开发者将现有的Struts2应用升级到Struts
2.2.1。
Struts 2.2.1的内部变化主要有:
- XWork已经迁移到了Apache软件基金会,现在成为了Struts 2的一部分。新版XWork 2.2.0也随着Struts
2.2.1一同发布。未来,XWork将会迁移到Struts 2中。
- XWork Maven
artifact现在已位于<groupId>org.apache.struts.xwork</groupId>下。
- XWork使用了最新版的OGNL 3.0,OGNL源代码仓库则位于Github上。
- Javassist依赖被OGNL排除,要记得将其包含进来,除非在JBoss服务器上加载应用。
- 解决了XWork一些突出的缺陷,感兴趣的读者可以参考CVE-2010-1870:
Struts2/XWork remote command execution来了解详情。
- 所有的示例应用(除了jboss-blank)都包含了Javassist依赖。
- 新的jboss-blank示例应用使用了JBoss服务器,它没有将jboss-blank库包含进来,因为JBoss服务器已经提供了。
- 增加了新的Freemarker缓存选项,这会提升标签的渲染速度,感兴趣的读者可以参考WW-3467并了解关于FreeMarker的更多信息。
Struts 2.2.1修复了之前版本的众多bug,主要修复列举如下:
- <s:reset type="image">标签上缺少src属性
- Struts2 showcase无法在JBoss 5.1上部署
- struts-sitemesh-plugin 2.1.8中FreeMarkerPageFilter的失效问题
- XWork FileManager不会解码URL
- ConventionUnknownHandler与rest插件的协作问题
- StrutsSpringTestCase的内存泄漏问题
- css_xhtml主题无法应用在IE8上,在其他浏览器上也无法正常使用
- javassist在JBoss 5.1上的问题
Struts 2.2.1的主要改进列举如下:
- 升级至OGNL 2.7
- 文件上传:可以对allowedTypes参数设置不同的File Content Type值
- 完全集成了SiteMesh 2、Freemarker 2.4.2及Velocity 1.3
- 将xwork核心迁移至Struts 2
- 将FreeMarker升级至2.3.16
- 将Velocity引擎升级至1.6.3
------------------------------------------------------------------------------------------------
那么,到哪里去找那个javassist依赖呢,要知道,在下载的包中的apps目录下的5个小项目都是可以运行的,也就是说明里面存在这个依赖,解压其中的一个war后,找到里面的lib目录,你会发现有个javassist-3.7.ga.jar文件,将其拷贝到工程的lib目录下,重启tomcat并发布后,就可以运行了
第九步:
终于结束了,看看运行结果吧
上面tomcat启动后,会有那样的一条信息,是说:正在解析配置文件struts-default.xml文件,也就是我们刚才创建的struts.xml映射的E:\J2EE\tomcat6\webapps\Struts2\WEB-INF\classes\struts.xml文件
- 大小: 14.2 KB
- 大小: 12.4 KB
- 大小: 45.4 KB
- 大小: 7.1 KB
- 大小: 12.4 KB
- 大小: 17.3 KB
- 大小: 16.3 KB
分享到:
相关推荐
struts2学习笔记总结
Struts2学习笔记,介绍了struts2的基础部分
struts2学习笔记,非本人所写,但有学习的价值,总结的很好,分享一个!
这是学习struts2时记得重点笔记,包括了一些原理,ognl语句的编写,以及如何设置拦截器等等一些基本知识,起到复习和巩固的作用
1. struts2框架的引入 1)把struts2的相关jar包导入到项目中去 2)把struts2框架的配置文件struts.xml复制粘贴到项目中的src下面(同时也可以把log4j.properties放到src下) 在这里我们主要是要的这个struts.xml文件...
struts2学习笔记struts2学习笔记struts2学习笔记
本人学习struts2的笔记,希望大家可以多多学习以后共同交流
struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换
struts2四天的学习笔记。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
三、 Namespace Namespace决定了action的访问...是用来解决重名的问题,例如当系统的前台和后台都有一个action名叫hello,这时就需要用package来区分。 前台后台 struts2中的package与java的package是相同的作用的。
这个是本人自学struts2框架时的总结笔记,里面关于struts2的基本知识很是详尽,如果想要进阶的就不要看了,这只是struts2基础的笔记,个人学习用的,绝不掺假!
二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 九、 Action的属性接收参数 10 1、 在...
个人收藏,纯属备份作用,做个记录,方便需要时候查看
structs2很详细的学习笔记,structs2的建造,工作原理,例子,逐步讲解,纯文字的
北京圣思园张龙老师的笔记,十分珍贵的资源。特别全