org.apache.struts2.dispatcher.FilterDispatcher是Struts2的主要的Filter,负责四个方面的功能:
(1)执行Actions
(2)清除ActionContext
(3)维护静态内容
(4)清除request生命周期内的XWork的interceptors
另注:该过滤器应该过滤所有的请求URL。一般被设置为/*.
具体:
(1)执行Actions
过滤器通过ActionMapper对象,来判断是否应该被映射到Action.如果mapper对象指示他应该被映射,过滤链将会被终止,
然后Action被调用。这一点非常重要,如果同时使用SiteMesh filter,则SiteMesh filter应该放到该过滤器前,否则
Action的输出将不会被装饰。
(2)清除ActionContext
过滤器为了确保内存溢出,会自动的清除ActionContext。这可能会存在一些问题,在和其它的框架集成时,例如SiteMesh。
ActionContextCleanUp提供了怎么处理这些问题的一些信息。
(3)维护静态内容
过滤器也会维护在Struts2中使用的一些公共的静态的内容,例如JavaScript文件,CSS文件等。搜索/struts/*范围内的
请求,然后将/struts/后面的值映射到一些struts的公共包中,也可以在你的类路径中搜索。默认情况下会去查找以下
包:
org.apache.struts2.static
template
这样你只用请求/struts/xhtml/styles.css,XHTML UI主题默认的样式表将会被返回。同样,AJAX UI组件需要的
JavaScript文件,也可以在org.apache.struts2.static包中被找到。如果你想加入其它被搜索的包,在web.xml中
设置filter时,通过给"actionPackages"初始参数一个逗号隔开的包列表值来设定。
需注意的是:他会暴露一些比较敏感的信息例如,properites文件中的数据库连接信息。
注:过滤器支持以下初始参数:
config - 被调入的逗号隔开的XML文件列表。
actionPackages - 被actions扫描的逗号隔开的packages列表。
configProviders - 逗号分隔的实现了ConfigurationProvider接口(建造Configuration时被使用)的实现类。
* - 任意的struts常量。
通过重载createDispatcher()方法,可以自定义dispather。
属性列表:
(1)actionMapper:通过注入,提供一个ActionMapper实例。
(2)dispatcher:暴露给子类一个Dispatcher实例。
(3)encoding:存储StrutsConstants.STRUTS_I18N_ENCODING的设置。
(4)filterConfig:通过初始参数,提供一个FilterConfig实例。
(5)lastModifiedCal:在缓存静态content,提供一个格化的日期用于设定头信息。
(6)log:提供一个logging实例。
(7)patchPrefixs:存储静态资源的路径前缀信息。
(8)serveStatic:存储StrutsConstants.STRUTS_SERVE_STATIC_CONTENT的设置。
(9)serveStaticBrowserCache:存储StrutsConstants.STRUTS_SERVE_STATIC_BROWSER_CACHE的设置。
方法列表:
(1)copy(InputStream input, OutputStream output):从input复制数据到output。
(2)createDispatcher(FilterConfig filterConfig):创建默认的dispatcher对象,如果需要的话,子类可以重载此方法,
自定义一个dispatcher对象。
(3)destory():调用dispatcher.cleanup(),依次释放本地线程,销毁dispatcher对象。
(4)doFilter(ServletRequest request, ServeltResponse response, FilterChain chain):处理一个action或处理一个请求
的静态内容。
(5)findInputStream(String name, String packagePrefix):搜索类路径下的静态资源。
(6)findStaticResoruce(String name, HttpServletRequest request, HttpServletResponse response):搜索静态的资源,
直接复制到相应response的头信息中。
(7)getContentType(String name):获取指定资源的contentType。
(8)getFilterConfig():获取FilterConfig实例。
(9)getServletContext():给WebLogic的一些版本提供一个工作区。
(9)init(FilterConfig filterCongfig):创建默认的dispatcher对象和设置静态资源的默认包信息来初始化filter。
(10)parse(String packages):返回一个数组通过解析一个指定逗号分隔的packages列表。
(11)prepareDispatcherAndWrapRequest(HttpServletRequest request, HttpServletResponse response):对给定的request
对象进行封装返回一个封装HttpServletRequest对象。例如显示的处理multipart数据。
(12)setMapper(ActionMapper actionMapper)
(13)setEncoding(String val)
(14)setServeStaticContent(String val)
(15)setServeStaticBrowserCache(String val)
分享到:
相关推荐
3. 作用域:拦截器只能对 Action 请求起作用,而过滤器可以对几乎所有请求起作用。 4. 访问权限:拦截器可以访问 Action 上下文、值栈里的对象,而过滤器不能。 5. 执行顺序:拦截器可以多次调用,而过滤器只能在...
从 org.apache.struts2.dispatcher.FilterDispatcher 开始 Java 代码阅读,我们可以看到 FilterDispatcher 的 init 方法,它负责初始化 Dispatcher 对象,并创建了一个 ActionMapper 实例,以便对请求进行处理。...
ActionMapper的作用是确定请求与哪个Action相对应。如果需要,FilterDispatcher将请求传递给ActionProxy。ActionProxy通过Configuration Manager读取struts.xml配置文件,找到需要执行的Action类,例如,在用户注册...
Q1:关于Struts2的组成及各部分作用,我们可以理解Struts 2框架主要由三大部分构成:核心控制器FilterDispatcher、业务控制器Action和用户实现的业务逻辑组件。FilterDispatcher作为基础,负责框架的内部流程控制和...
5. `FilterDispatcher`将请求转发给`ActionMapper`,`ActionMapper`的作用是解析请求URL,判断是否需要Struts2进行处理。 6. 如果`ActionMapper`确认请求需要处理,`FilterDispatcher`会停止后续过滤器链的执行,并...
然而,要使Struts2完全发挥作用,还需配置`struts.xml`文件,其中包含了Action映射、拦截器栈、结果类型等详细信息。此外,开发人员还需编写Action类、配置视图层(如JSP页面或FreeMarker模板)以及可能的模型层实体...
在Struts2中,虽然Action类是主要的控制器角色,但Filter同样可以在处理请求时发挥重要作用。Servlet Filter是一个在请求到达目标Servlet或JSP之前对其进行预处理,以及在响应离开服务器之前进行后处理的组件。它...
- **过滤器**是在整个请求/响应周期中起作用的,通常用于跨多个Action的全局设置或功能。 #### 五、实践建议 - **深入学习源码:**为了更好地理解Struts2的工作机制,建议下载并学习`struts2-core.jar`和`struts2-...
在这个过程中,Struts2的配置文件(struts.xml)起着关键作用,它定义了Action和Action方法的映射关系。 ActionInvocation是Struts2中执行Action的核心对象,它管理Action的调用过程。在调用Action之前,一系列的...
- **作用**:负责具体的业务逻辑处理和数据操作。 - **调用方式**:Action通过调用模型组件的方法来处理用户请求。 #### 5. Struts2的视图组件 - **支持的视图技术**:Struts2支持多种视图技术,包括但不限于JSP、...
WebWork2是一个基于Java的MVC(模型-视图-控制器)框架,它在Web应用程序中起到了核心架构的作用。WebWork的工作机制分为框架初始化和用户请求处理两个主要部分。 一、WebWork框架初始化过程 WebWork框架的初始化...
Struts2中默认包含的过滤器有ActionContextCleanUp,这是一个可选过滤器,主要作用是在请求结束时清理与请求相关的上下文环境,这对于框架间的集成特别有帮助,例如在使用SiteMesh插件时。除此之外,还有其他自定义...
3. 拦截器作用于Action请求,过滤器作用范围更广。 4. 拦截器可以访问Action上下文和值栈,过滤器则不能。 **使用Struts2框架的原因**: 1. MVC架构清晰,开发流程明确,便于理解和控制。 2. 使用OGNL(Object-...
`ActionMapper`在这一过程中也起到了关键作用,它负责映射Action的执行结果到相应的视图。 6. **ObjectFactory** 在上述流程中,所有的对象(如Action、Result、Interceptor等)都是通过`ObjectFactory`创建的。`...
开发者可以通过声明局部变量、扩展RequestProcessor、在Spring中使用"prototype"作用域等方式确保线程安全。而Struts2改进了这一设计,每个请求都会创建新的Action实例,因此不存在线程安全问题,但这也意味着性能上...
4. Package 的作用: 在 Struts2 中,Package 用于组织 Action。Package 可以为空,如果为空,则表示该包为默认空间。如果 namespace 为空,Struts2 会自动将请求分配给默认空间。 5. Action 的实现方式: Action...
Struts2和Hibernate是两种广泛使用的Java Web开发框架,它们分别...通过深入理解每个组件的作用,可以更好地运用这两个框架,解决实际开发中的问题。同时,掌握配置文件的使用和拦截器的编写也是提升开发效率的关键。
其中,ActionContextCleanUp是一个可选的过滤器,它的作用是清理ActionContext,确保Struts2和其他框架(如SiteMesh Plugin)的兼容性。 接着,FilterDispatcher是Struts2的核心组件,它接收并处理来自客户端的请求...