注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Lable

........................................

 
 
 

日志

 
 

6_Struts2 深入  

2012-01-05 11:44:55|  分类: Struts2 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一、Struts2架构剖析

   1)体系结构

1、   客户端向Servlet容器(Tomcat)提交一个请求

2、   请求经过一系列过滤器(ActionContextCleanUp过滤器等)

3、   核心控制器被调用,询问ActionMapper来决定请求是否需要调用某个Action

4、   如果ActionMapper决定需要调用某个Action,核心控制器把控制权委派给ActionProxy(备注:JSP请求无需调用Action

5、   ActionProxy通过Configuration Manager询问框架的配置文件(struts.xml,找到需调用的Action

6、   ActionProxy创建一个Actionlnvocation的实例

7、   Actionlnvocation负责调用Action,在此之前会依次调用所有配置的拦截器

8、   Action执行完毕,Actionlnvocation负责根据结果码字符在struts.xml的配置中找到对应的返回结果

9、   拦截器被再次执行

10、过滤器被再次执行

2)对象介绍

1ActionMapper

提供了在请求和Action调用请求之间的映射,如果找到对应的Action,则返回一个描述Action映射的ActionMapping对象,没有则返回null

2ActionMapping

          本质上是一个数据传输对象,它保存了调用Action的映射信息

3ActionProxy

          ActionProxyXWork和真正的Action之间充当代理,在执行Action的过程中,因为使用代理而非直接操纵对象,所以可以在Action执行前后执行额外的操作。

4ActionInvocation

          表示Action的执行状态,它保存拦截器(按配置顺序)、Action案例,由ActionProxy创建,调用invoke()方法开始Action的执行。

5Interceptor(拦截器)

          是一种可以在请求处理之前或者之后执行的Struts2组件。

二、拦截器

1)为什么需要拦截器:拦截器会提供一些通用的操作,如请求数据的封装、类型转换、数据验证、解析上传的文件、防止表单的多次提交等。它会在Action执行之前后再执行之后自动的进行,从而将通用的操作动态地插入到Action执行的前后,这样有利于系统的解耦。

2)拦截器栈:是根据不同的应用需求而定义的拦截器组合

3)拦截器和拦截器栈的区别:从结构上看:拦截器栈相当于多个拦截器的组合;从功能上看:拦截器栈也是拦截器,具有相同的功能。

4)拦截器的工作原理:拦截器围绕着ActionResult的执行而执行。

5)执行周期:

     1、做一些Action执行前的预处理

2、调用ActionInvocationinvoke()方法将控制转交给后续的拦截器或者返回结果字符串终止执行

3、做一些Action执行后的处理。

三、Struts2自带拦截器

1params拦截器:将请求中的数据设置到Action中的属性上。

2staticParams拦截器:将在配置文件中通过action元素的子元素param设置的参数设置到对应的Action属性中。

3servletConfig拦截器:提供了一种将源于Servlet API的各种对象注入到Action当中的简洁方法。

4fileUpload拦截器:将文件和元数据从多重请求(multipart/form-date)转换为常规的请求数据,以便能将它们设置在对应的Action的属性上。

5validation拦截器:执行数据验证。

6)workflow拦截器:提供当数据验证错误时终止执行流程的功能。

7exception拦截器:捕获异常,

四、配置拦截器:

<interceptors>

        <!-- 定义权限验证拦截器 à

        <interceptor name="myAuthorization"class="cn.AuthorizationInterceptor"/>

        <interceptor name="myTime" class="cn..MyTimeInterceptor"/>

        <!—定义拦截器栈 à

        <interceptor-stack name="myStack">

            <!—指定引用的拦截器 à

             <interceptor-ref name="myTime"/>

             <interceptor-ref name="defaultStack"/>(默认的,也是必须滴)

       </interceptor-stack>

    </interceptors>

五、自定义拦截器

     1)实现 com.opensymphony.xwork2.interceptor.Interceptor 接口

     2)继承 com.opensymphony.xwork2.interceptor.AbstractInterceptor 类(推荐使用),实现intercept()方法

  评论这张
 
阅读(68)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017