`

struts2 中filterDispatcher和StrutesPrepareAndExecuteFilter的区别

 
阅读更多
在Struts2开发中,很多人问到,声明过滤器的时候,为什么有的时候用"FilterDispatcher",而有的时候用"StrutsPrepareAndExecuteFilter"?两者都可以正常工作,那区别是什么呢?
1. FilterDispatcher 例子 
...
<filter>
   <filter-name>struts2</filter-name>
   <filter-class>
     org.apache.struts2.dispatcher.FilterDispatcher
   </filter-class>
</filter>
 
<filter-mapping>
   <filter-name>struts2</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
 2. StrutsPrepareAndExecuteFilter 例子
...
<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>
 
答案
FilterDispathcer (org.apache.struts2.dispatcher.FilterDispatcher) 在早期的Struts2开发中使用,从Struts 2.1.3开始,它已不推荐使用。如果你使用的Struts的版本 >= 2.1.3,推荐升级到新的Filter-StrutsPrepareAndExecuteFilter (org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)。
 
FilterDispatcher是struts2.0.x到2.1.2版本的核心过滤器.!
StrutsPrepareAndExecuteFilter是自2.1.3开始就替代了FilterDispatcher的.!
这样的改革当然是有好处的.! 为什么这么说.? 应该知道如果我们自己定义过滤器的话, 是要放在strtus2的过滤器之前的, 如果放在struts2过滤器之后,你自己的过滤器对action的过滤就不起作用了,除非你是访问jsp/html! 那我现在有需求, 我必须使用Action的环境,而又想在执行action之前拿filter做一些事, 用FilterDispatcher是做不到的.!
那么StrutsPrepareAndExecuteFilter可以把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在这两个过滤器之间加上我们自己的过滤器.!
给你打个比喻, 现在有病人要做手术, 现在struts2要做两件事, 搭病床(环境),执行手术.! 那么打麻药的工作呢.? 不可能要病人站着打吧, 所以必须有病床的环境,打完麻药之后再动手术.!  
 
struts.xml文件中一些常见的基本配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>
	<!-- 请求参数的编码方式 -->
	<constant name="struts.i18n.encoding" value="UTF-8"/>
	<!-- 指定被struts2处理的请求后缀类型。多个用逗号隔开 -->
	<constant name="struts.action.extension" value="action,do,go,xkk"/>
	<!-- 当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开  -->
	<constant name="struts.configuration.xml.reload" value="true"/>
	<!-- 是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开  -->
	<constant name="struts.devMode" value="false"/>
	<!-- 设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭  -->
	<constant name="struts.serve.static.browserCache" value="false" />
	<!-- 是否允许在OGNL表达式中调用静态方法,默认值为false -->
	<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
	
	<!-- 指定由spring负责action对象的创建 
	<constant name="struts.objectFactory" value="spring" />
	-->
	<!-- 是否开启动态方法调用 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
	
	<package name="my" extends="struts-default" namespace="/">
		<action name="ognl" class="com.javacrazyer.web.action.OGNLAction">
			<result>/ognl_info.jsp</result>
		</action>
	</package>
	
</struts>
 
 
 
 
 
分享到:
评论

相关推荐

    org.apache.struts2.dispatcher.FilterDispatcher

    总的来说,`org.apache.struts2.dispatcher.FilterDispatcher`是Struts 2框架中一个至关重要的组件,负责请求的分发和Action的调用,对于理解和掌握Struts 2的运行机制具有重要意义。开发者需要熟悉其工作原理和配置...

    Struts1与Struts2原理 区别详解汇总

    不同于Struts1中的ActionServlet,Struts2中的FilterDispatcher是基于Java Servlet过滤器(Filter)来实现的。 2. **Action**:在Struts2中,Action不再直接与Servlet API耦合,而是通过拦截器(Interceptors)进行...

    Struts2中的session用法

    Struts2 中的 Session 用法是通过实现 SessionAware 接口和在 web.xml 文件中配置 Struts2 的 FilterDispatcher 来实现的。通过使用 Session,我们可以在服务器端存储用户数据,以便在多个请求之间共享这些数据。

    Struts2基础教程.docx

    在Struts2中,需要在web.xml文件中配置Struts2的FilterDispatcher,并在struts.xml文件中配置Action和ActionForm。Struts2也支持使用JSP页面来接收用户输入的数据,并将数据提交给Action。 在Struts2中,可以使用...

    struts2面试题

    1. Struts1 和 Struts2 的区别: Struts1 和 Struts2 是两个不同的框架,Struts2 是基于 WebWork 框架发展起来的。Struts1 使用 ActionServlet 作为核心控制器,而 Struts2 使用 FilterDispatcher 作为核心控制器。...

    struts核心过滤器FilterDispatcher介绍

    struts核心过滤器FilterDispatcher介绍,struts核心过滤器FilterDispatcher介绍

    struts1原理,struts2原理,spring mvc原理,struts1和struts2,struts和spring mvc

    Struts、Spring MVC和Struts2是Java Web开发中三个重要的MVC框架,它们都用于构建基于模型-视图-控制器(MVC)设计模式的Web应用程序。下面将分别介绍这三个框架的工作原理,并进行对比。 **Struts1原理:** Struts...

    struts2源代码分析

    ActionProxy是Struts2中的一个重要组件,因为它封装了Action的实例化和调用过程。通过ActionProxy,开发者可以实现更复杂的逻辑,如动态Action映射或延迟加载Action。 Struts2的视图组件被封装在`org.apache.struts...

    struts2 学习重点笔记

    在 web.xml 中配置 Struts2 的过滤器 FilterDispatcher。 **3.2 数据接收** - **自动填充**:Struts2 自动从 request 中获取数据并填充到 Action 对象中。 - **原理**:通过拦截器实现,拦截器会查找与 Action 类...

    struts2所用到的jar包

    这些核心类和接口定义了框架的运行机制,如`Action`接口、`ActionSupport`类、`.struts2-struts2-core.jar`包中的`FilterDispatcher`或`StrutsPrepareAndExecuteFilter`过滤器,它们负责拦截HTTP请求并将其转发给...

    struts2讲义 struts2讲义struts2讲义struts2讲义struts2讲义

    - 在web.xml中配置过滤器(Filter),通常使用`FilterDispatcher`作为入口点,它是Struts2的核心组件之一。 - 这个过滤器会捕获所有进入Web应用的HTTP请求,并将它们传递给Struts2框架处理。 - 配置过程中需要注意...

    struts2讲义,讲解struts2的框架

    在`web.xml`配置文件中,需要定义一个名为`struts2`的过滤器,类为`org.apache.struts2.dispatcher.FilterDispatcher`。过滤器的映射应覆盖所有URL,以便所有请求都能被Struts2处理。当FilterDispatcher初始化时,它...

    struts2-apps.rar

    通过深入研究"struts2-apps.rar"中的示例,Java开发者能够快速掌握Struts2的核心特性和最佳实践,从而在实际项目中游刃有余地运用这一框架。同时,不断学习和实践,可以提升解决复杂问题的能力,为职业发展打下坚实...

    struts2核心文件

    Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web框架,它在Web应用开发中被广泛使用。Struts2的核心在于提供一个强大的、灵活的、可扩展的架构,使得开发者能够更方便地实现业务逻辑与表现层...

    struts2 源码分析

    ConfigurationProvider 是 Struts2 中配置文件的解析器,Struts2 中的配置文件主要是 XmlConfigurationProvider 及其子类 StrutsXmlConfigurationProvider 来解析。ConfigurationProvider 负责解析配置文件,并将...

    struts2重要知识点原理

    总结起来,Struts2框架通过FilterDispatcher作为核心控制器拦截和处理用户请求,使用Action和Interceptor实现业务逻辑和控制流,通过配置文件(struts.xml)管理Action的映射和结果,同时依赖ObjectFactory创建和管理...

    15年9月传智播客视频struts2

    - **web.xml**:Web容器的配置文件,配置了Struts2的前端控制器FilterDispatcher。 #### 3. Struts2的拦截器 - **内置拦截器**:Struts2提供了一系列内置拦截器,如`params`(参数填充)、`token`(防止重复提交)...

    struts2.ppt struts2.ppt 我们老师发的PPT

    配置Struts2应用时,你需要在web.xml文件中定义FilterDispatcher过滤器,如下所示: ```xml &lt;filter-name&gt;struts2 &lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher &lt;filter-name&gt;struts2 ...

Global site tag (gtag.js) - Google Analytics