`
啸笑天
  • 浏览: 3460996 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

ActionContextCleanUp,StrutsPrepareAndExecuteFilter,StrutsPrepareFilter,StrutsEec

阅读更多

struts2中

ActionContextCleanUp,

StrutsPrepareAndExecuteFilter,

StrutsPrepareFilter,StrutsExecuteFilter,

FilterDispatcher

 

刚看了文档中的描述(说的很清楚了,还是文档好啊):

org.apache.struts2.dispatcher

Class FilterDispatcher

Deprecated. Since Struts 2.1.3, use StrutsPrepareAndExecuteFilter instead or StrutsPrepareFilter and StrutsExecuteFilter if needing using the ActionContextCleanUp filter in addition to this one

 

org.apache.struts2.dispatcher
Class ActionContextCleanUp

Deprecated. Since Struts 2.1.3, use StrutsPrepareFilter and StrutsExecuteFilter to use other Servlet filters that need access to the ActionContext

 

org.apache.struts2.dispatcher.ng.filter
Class StrutsPrepareAndExecuteFilter

Handles both the preparation and execution phases of the Struts dispatching process. This filter is better to use when you don't have another filter that needs access to action context information, such as Sitemesh.

 

org.apache.struts2.dispatcher.ng.filter
Class StrutsPrepareFilter

Prepares the request for execution by a later StrutsExecuteFilter filter instance.

 

org.apache.struts2.dispatcher.ng.filter
Class StrutsExecuteFilter

Executes the discovered request information. This filter requires the StrutsPrepareFilter to have already been executed in the current chain.

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

FilterDispatcher是struts2.0.x到2.1.2版本的核心过滤器.
StrutsPrepareAndExecuteFilter是自2.1.3开始就替代了FilterDispatcher的.

StrutsPrepareAndExecuteFilter是StrutsPrepareFilter和StrutsExecuteFilter的组合,那什么时候用StrutsPrepareFilter和StrutsExecuteFilter的组合来替代StrutsPrepareAndExecuteFilter呢?下面会讲到。

这样的改革当然是有好处的.
为什么这么说.? 应该知道如果我们自己定义过滤器的话, 是要放在strtus2的过滤器之前的, 如果放在struts2过滤器之后,你自己的过滤器对action的过滤作用就废了,不会有效!除非你是访问jsp/html! 
那我现在有需求, 我必须使用Action的环境,而又想在执行action之前拿filter做一些事, 用FilterDispatcher是做不到的.! 
那么StrutsPrepareAndExecuteFilter可以把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在这两个过滤器之间加上我们自己的过滤器.! 
给你打个比喻, 现在有病人要做手术, 现在struts2要做两件事, 搭病床(环境),执行手术.! 那么打麻药的工作呢.? 不可能要病人站着打吧, 所以必须有病床的环境,打完麻药之后再动手术.! 这个比喻非常形象了.!

 

 

ActionContextCleanUp也是自2.1.3开始由StrutsPrepareFilter和StrutsExecuteFilter的组合替代。

看个例子:

2.1.3之前用sitemesh的web.xml的配置:

 

<filter>
   <filter-name>ActionContextCleanUp</filter-name>
   <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter>
   <filter-name>sitemesh</filter-name>
   <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter>
   <filter-name>struts2</filter-name>
   <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
   <filter-name>ActionContextCleanUp</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
   <filter-name>sitemesh</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
   <filter-name>struts2</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
 

 

  其中 ActionContextCleanUp filter
 SiteMesh filter
 FilterDispatcher
的顺序不能改变。

 ActionContextCleanUp的作用是延长action中属性的生命周期,包括自定义属性,以便在jsp页面中进行访问,让actionContextcleanup过滤器来清除属性,不让action自己清除。

 为了使用WebWork,我们只需要在web.xml配置FilterDispatcher一个过滤器即可,阅读一下FilterDispatcher的JavaDoc和源码,我们可以看到它调用了:

finally{
           ActionContextCleanUp.cleanUp(req);
}

在ActionContextCleanUp中,有这样的代码:

         req.setAttribute(CLEANUP_PRESENT, Boolean.TRUE);

如果FilterDispatcher检测到这个属性,就不会清除ActionContext中的内容了,而由ActionContextCleanUp后续的代码来清除,保证了一系列的Filter访问正确的ActionContext。

 

自Struts2是2.1.3版本开始,死活不得行,总是报错。原来新版本中已经不能再采用这种方式了。
【从struts2.1.3开始ActionContextCleanUp 和 FilterDispatcher过滤器,已经不建议使用了。
   将使用StrutsPrepareFilter和StrutsExecuteFilter拦截器替代】
而从Struts2.1.3开始应该改为以下配置才能集成起来,要不然你的装饰器页面或者被装饰页面
里面将不能使用Struts2的标签。一使用就会报错说什么the Struts Dispatcher not found

 

<filter>
   <filter-name>StrutsPrepareFilter</filter-name>
   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
</filter>
<filter>
   <filter-name>sitemesh</filter-name>
   <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter>
   <filter-name>StrutsExecuteFilter</filter-name>
   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
</filter>
<filter-mapping>
   <filter-name>StrutsPrepareFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
   <filter-name>sitemesh</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
   <filter-name>StrutsExecuteFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

 按StrutsPrepareFilter,sitemesh,StrutsExecuteFilter的顺序配置过滤器,sitemesh夹在中间。

通过以上配置能正确使用。 

 

 

分享到:
评论
1 楼 xiaolng 2014-10-30  
mark
it's very useful.

相关推荐

    strut2源码分析

    首先,客户端请求被servlet容器接收,然后一系列的过滤器处理请求,例如ActionContextCleanUp过滤器用于清理线程本地存储中的ActionContext信息,SiteMesh过滤器可能用于页面装饰。StrutsPrepareAndExecuteFilter是...

    Struts2.1.8培训资料(推荐)

    配置正确的`StrutsPrepareAndExecuteFilter`后,不再需要单独配置`ActionContextCleanUp`过滤器,因为它在Struts2.1.3之后已被弃用。`ActionContextCleanUp`的作用是与`FilterDispatcher`协作,提供更灵活的SiteMesh...

    strus工作流程详述

    `FilterDispatcher`或更现代的`StrutsPrepareAndExecuteFilter`会查找匹配的`ActionMapper`。ActionMapper负责根据请求URL映射到对应的Action。 5. **ActionProxy**: 如果ActionMapper找到了合适的Action,那么...

    java项目中 struts2升级为struts-2.3.16.3

    将原有的`ActionContextCleanUp`过滤器配置注释掉或删除,并替换为新的过滤器`StrutsPrepareAndExecuteFilter`: ```xml &lt;!-- 原有的配置 --&gt; &lt;!-- &lt;filter-name&gt;struts-cleanup &lt;filter-class&gt;org.apache....

    struts2.例子

    &lt;filter-class&gt;org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter &lt;filter-name&gt;Struts2 &lt;url-pattern&gt;/* &lt;dispatcher&gt;REQUEST &lt;dispatcher&gt;FORWARD ``` 这里的`Struts2`过滤器主要...

    Java面试100题参考答案.docx

    - **核心控制器**:StrutsPrepareAndExecuteFilter作为核心控制器,通过ActionMapper决定是否调用Action。 - **ActionProxy**:ActionProxy通过Configuration Manager找到配置文件(struts.xml)中对应的Action类。 ...

    pb 数据库struts2 课堂讲稿

    `ActionContextCleanUp`在集成其他插件时特别有用,它负责清理ActionContext的相关数据。 4. **FilterDispatcher**:过滤器链中的`FilterDispatcher`是Struts2的核心组件,它负责查找并调用对应的ActionMapper。 5...

    struts2教程

    `web.xml`是Web应用的部署描述符,它配置了`StrutsPrepareAndExecuteFilter`,这是Struts2的核心过滤器,负责初始化框架并处理所有请求。`ActionContextCleanUp`过滤器则用于在多线程环境下保持Struts2的清洁。此外...

    Struts2_OGNL 笔记

    charset=utf-8"`,并配置web.xml中的`ActionContextCleanUp`过滤器以确保请求处理时的编码一致性。 5. ActionContextCleanUp过滤器的作用: `ActionContextCleanUp`过滤器是Struts2的一部分,它用于清理...

    完美版(适合自学)struts2

    - web.xml:这是应用的部署描述符,需要配置StrutsPrepareAndExecuteFilter,它作为过滤器初始化Struts2框架,并处理所有请求。ActionContextCleanUp过滤器则负责清理工作。 - struts.xml:这是框架的核心配置文件,...

    struts2源代码分析

    请求在Struts2框架中的处理流程始于Filter链,其中Filter主要包括`ActionContextCleanUp`和`FilterDispatcher`。`ActionContextCleanUp`的作用是清理当前线程的`ActionContext`,确保每个请求的上下文环境独立。`...

    struts2的基本知识

    - **web.xml**:Web应用的部署描述符,配置Struts2的过滤器`StrutsPrepareAndExecuteFilter`。此过滤器负责初始化框架并处理所有请求。`ActionContextCleanUp`过滤器则用于清理Action上下文。 - **struts.xml**:...

    Struts2初步使用总结

    - **ActionContextCleanUp**:这是一个可选过滤器,主要用于清理线程上下文中的`ActionContext`对象,对于Struts2与其他框架的集成非常有帮助。 - **StrutsPrepareAndExecuteFilter**:这是Struts2的主要过滤器,...

    struts2教程(完全版)

    1. `web.xml`:这是Web应用程序的部署描述符,你需要在这里配置`StrutsPrepareAndExecuteFilter`,这个过滤器初始化Struts2框架并处理所有请求。`ActionContextCleanUp`过滤器用于清理特定的资源。 2. `struts.xml`...

    struts2笔记

    - **web.xml**:Web应用的部署描述符,配置Struts2的核心过滤器`StrutsPrepareAndExecuteFilter`,以及ActionContextCleanUp过滤器。前者初始化Struts框架并处理所有请求,后者则负责在多个过滤器间保持...

    Struts2源码分析

    2. **请求通过ActionContextCleanUp**:请求首先经过`ActionContextCleanUp`过滤器,清理上一个请求可能留下的数据。 3. **FilterDispatcher处理请求**:接下来,请求被`FilterDispatcher`捕获,`FilterDispatcher`...

Global site tag (gtag.js) - Google Analytics