Struts2总结
接触Struts2已经接近一个月,与同样接触没有很长时间的Struts相比,也确实感觉到了很多令人耳目一新的感觉。今天有必要对Struts2的学习做一下总结。以前曾经写过一篇博文《Struts,Struts2和WebWork的比较》,对这三种框架进行了综合性地叙述和比较。现在是对Struts2的总结。
Struts2的处理流程如下:
1.用户请求对Web应用执行某个动作后,Web浏览器将要求某些资源的请求发送到Web服务器。
2.服务器小程序过滤器调度程序接到请求后,分析请求,然后确定调用相应的动作,提供资源。
3.在Action被执行之前,经配置后把一些常见功能(如验证、工作流或者文件上传)作用到请求上的一组拦截器上,可自动作用到该请求上。
4.Action类的一个新实例被创建,然后执行动作方法,用于把信息存储到数据库,或从数据库获取信息。
5.结果显示输出——无论输出的是HTML、图像、PDF还是其他某种格式。
6.然后,请求按照相反顺序通过拦截器传送。返回的请求允许执行其他的处理或者清理操作。
7.最后,容器把输出发送到浏览器。
Struts2与Struts相比的的特点
1.struts2所用到的技术就是webwork的技术,它所用到的表达式语言是ognl语言,这是种非常强大的对象导航语言。(ognl-2.6.11.jar)
2: struts2中不使用actionform管理表单,在struts2中用的action,整合了strtus中的action和actionform
3.在struts2中是通过标签来对表单和实体bean进行管理的,在struts2中提供了一套标签非常灵活。
构建Struts2应用的步骤:
1.
将所需Struts2的 jar包拷贝到WEB工程的/WEB-INF/lib目录下。
2.
配置web.xml文件,增加Struts2的映射。web.xml文件配置如下:
<
filter-mapping
>
<
filter-name
>
characterEncoding
</
filter-name
>
<
url-pattern
>
/*
</
url-pattern
>
</
filter-mapping
>
-
<
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.xml中定义了一个struts2的FilterDispathcer(拦截器:Struts2 技术的核心)的filter, FilterDispatcher用来初始化struts2并且处理所有的Web请求。
3.
编写Action类,DAO,bean类,整合Hibernate,Spring框架。
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
>
<
constant
name
=
"struts.enable.DynamicMethodInvocation"
value
=
"false"
/>
<
constant
name
=
"struts.devMode"
value
=
"false"
/>
<
constant
name
=
"struts.custom.i18n.resources"
value
=
"globalMessages"
/>
<!--
上传文件大小
-->
<
constant
name
=
"struts.multipart.maxSize"
value
=
"5242880"
/>
<!—
避免
Team
工作时系统资源的争夺
-->
<
include
file
=
"struts-example.xml"
/>
<
include
file
=
"struts-login.xml"
/>
...
<
include
file
=
"struts-personal.xml"
/>
<
package
name
=
"default"
extends
=
"struts-default"
>
<
interceptors
>
<
interceptor
class
=
"com.cumt.web.filter.LoginInterceptor"
name
=
"loginInterceptor"
/>
<
interceptor-stack
name
=
"CheckLogin"
>
<
interceptor-ref
name
=
"defaultStack"
/>
<
interceptor-ref
name
=
"loginInterceptor"
/>
</
interceptor-stack
>
</
interceptors
>
<!--
这里放全局的
-->
<
global-results
>
<
result
name
=
"login"
>
/loginError.jsp
</
result
>
<
result
name
=
"error"
>
/error.jsp
</
result
>
<
result
name
=
"index"
type
=
"redirect"
>
Index.action
</
result
>
<
result
name
=
"addLeader"
type
=
"redirect"
>
/public/addLeader.jsp
</
result
>
<
result
name
=
"addDepartment"
...
</
global-results
>
<
action
name
=
"Index"
>
<
result
name
=
"success"
>
/main.jsp
</
result
>
<
interceptor-ref
name
=
"CheckLogin"
/>
</
action
>
</
package
>
</
struts
>
Struts-login.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
=
"login"
namespace
=
""
extends
=
"default"
>
<
action
name
=
"Login*"
method
=
"{1}"
class
=
"LoginAction"
>
<
result
name
=
"input"
>
/login.jsp
</
result
>
<
result
type
=
"redirectAction"
>
Index
</
result
>
</
action
>
</
package
>
</
struts
>
4.
Struts2的类型转换,输入校验,核心拦截器,国际化,标签库以及对Spring,Hibernate,JSF的整合以后有时间还会做一个总结,大家可以参看这样一本书:
最后给大家推荐本书三扬科技编著,电子工业出版社出版:《开发者突击:Struts2核心技术与JavaEE框架整合开发实战》
本文转自 gaochaojs 51CTO博客,原文链接:http://blog.51cto.com/jncumter/168300,如需转载请自行联系原作者