Struts2总结
接触Struts2已经接近一个月,与同样接触没有很长时间的Struts相比,也确实感觉到了很多令人耳目一新的感觉。今天有必要对Struts2的学习做一下总结。以前曾经写过一篇博文《Struts,Struts2WebWork的比较》,对这三种框架进行了综合性地叙述和比较。现在是对Struts2的总结。
Struts2的处理流程如下:
1.用户请求对Web应用执行某个动作后,Web浏览器将要求某些资源的请求发送到Web服务器。
2.服务器小程序过滤器调度程序接到请求后,分析请求,然后确定调用相应的动作,提供资源。
3.在Action被执行之前,经配置后把一些常见功能(如验证、工作流或者文件上传)作用到请求上的一组拦截器上,可自动作用到该请求上。
4Action类的一个新实例被创建,然后执行动作方法,用于把信息存储到数据库,或从数据库获取信息。
5.结果显示输出——无论输出的是HTML、图像、PDF还是其他某种格式。
6.然后,请求按照相反顺序通过拦截器传送。返回的请求允许执行其他的处理或者清理操作。
7.最后,容器把输出发送到浏览器。
 
Struts2Struts相比的的特点
1.struts2所用到的技术就是webwork的技术,它所用到的表达式语言是ognl语言,这是种非常强大的对象导航语言。(ognl-2.6.11.jar
2: struts2中不使用actionform管理表单,在struts2中用的action,整合了strtus中的actionactionform
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中定义了一个struts2FilterDispathcer(拦截器:Struts2 技术的核心)的filter FilterDispatcher用来初始化struts2并且处理所有的Web请求。
3.       编写Action类,DAObean类,整合HibernateSpring框架。
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框架整合开发实战》