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,如需转载请自行联系原作者