web.xml中的多个filter的运行顺序
walker(walker_cn@163.com) 2007-11-20
环境:tomcat 6.x
多个筛选器的运行顺序取决于下列规则:
将 filter-mapping 元素包含与请求匹配的 url-pattern的筛选器按其在 web.xml 部署描述符中出现的顺序添加到链中。
将 filter-mapping 元素包含与请求匹配的 servlet-name 的筛选器添加在链中与 URL 模式匹配的筛选器之后。
链上先进先出的,链中最后的项目往往是最初请求的资源。
也就是说:
1.以url-pattern方式配置的filter运行时肯定先于以servlet-name方式配置的filter
2.以url-partern方式配置的filter中,如果有多个与当前请求匹配,则按web.xml中filter-mapping出现的顺序来运行
3.对于以servlet-name方式配置的filter,如果有多个与当前请求匹配,也是按web.xml中filter-mapping出现的顺序来运行
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/weizhi/archive/2007/11/20/1895014.aspx
DEMO:
<!-- 字符编码Filter -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- 后台用户登录验证Filter -->
<filter>
<filter-name>backendFilter</filter-name>
<filter-class>com.maxwell.help.LoginFilter</filter-class>
</filter>
<!-- 前台会员登录验证Filter -->
<filter>
<filter-name>memberFilter</filter-name>
<filter-class>com.maxwell.help.MemberFilter</filter-class>
</filter>
<!-- 字符编码Filter-mapping -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 后台用户登录验证Filter-mapping -->
<filter-mapping>
<filter-name>backendFilter</filter-name>
<url-pattern>/backend/*</url-pattern>
</filter-mapping>
<!-- 前台会员登录验证Filter-mapping -->
<filter-mapping>
<filter-name>memberFilter</filter-name>
<url-pattern>/member/*</url-pattern>
</filter-mapping>
分享到:
相关推荐
filter 为例,web.xml 中当然可以定义多个 filter,与 filter 相关的一个配置节是 filter-mapping,这里一定要注意,对于拥有相同 filter-name 的 filter 和 filter-mapping 配置节而言,filter-mapping 必须出现在 ...
### 在web.xml中引入其他XML配置文件的步骤 在Java Web开发中,`web.xml`作为Web应用程序的核心配置文件,负责定义应用级别的配置信息。为了提高代码的可维护性和复用性,有时需要将一部分配置内容提取到独立的XML...
* filter-mapping 元素:一旦命名了一个过滤器,就要利用 filter-mapping 元素把它与一个或多个 servlet 或 JSP 页面相关联。 * listener 元素:事件监听程序在建立、修改和删除会话或servlet 环境时得到通知。 * ...
在 Servlet 的生命周期中,context-param 可以被多个组件所使用。 listener 元素 listener 元素用于配置监听器。监听器可以在 Web 应用启动时执行一些初始化操作。容器将创建 listener 中的类实例,并将其作为监听...
在这个主题中,我们将深入理解Filter的使用方法以及如何在`web.xml`中进行配置。 首先,Filter的工作原理是基于Servlet规范中的请求链模型,当用户发送请求到服务器时,Filter会先于Servlet拦截请求,执行预定义的...
`web.xml`文件的最外层标签为`<web-app>`,所有的配置项都需要定义在这个标签内,并且遵循一定的顺序。以下是对`web.xml`主要配置项的详细介绍: #### 三、配置项详解 1. ****:该标签用于指定Web应用的显示名称。...
`context-param`用于指定Spring上下文配置文件的位置,通常是一个或多个路径,用逗号分隔,如`classpath*:spring/spring-config.xml`。`ContextLoaderListener`监听器会在Web应用启动时读取这些配置文件,创建Spring...
distributable 元素用于指定是否可以在多个服务器之间分发该 Web 应用,<!ELEMENT distributable (true | false) >。 context-param 元素用于定义 Web 应用的参数,<!ELEMENT context-param (param-name, param-...
web.xml文件是javaweb项目中的一个非常重要的配置文件,它用于初始化工程配置信息,例如welcome页面、filter、listener、servlet、servlet-mapping、启动加载级别等等。了解web.xml文件的作用和用途对于javaweb项目...
在web.xml中,还可以定义多个filter,每个filter可以有多个<filter-mapping>节点,但每个<filter-mapping>都必须在对应的<filter>节点之后。因为当Web容器解析到filter-mapping时,必须确保filter-name已经被定义,...
web.xml中可以定义多个配置元素,包括但不限于: - **icon**: 指定IDE和GUI工具用来表示Web应用的图像文件位置。 - **context-param**: 定义Web应用范围内的初始化参数。 - **listener**: 声明Web应用启动和终止时...
在filter配置中,多个filter的初始化顺序由它们在web.xml文件中的位置决定,但filter拦截资源的顺序则是根据filter-mapping的顺序进行。每个filter-mapping对应一个filter,且filter-mapping必须位于相应的filter...
除了默认的`/WEB-INF/applicationContext.xml`,你还可以通过`contextConfigLocation`指定多个配置文件,用逗号分隔它们,例如`<param-value>classpath:app-config.xml,classpath:db-config.xml</param-value>`,这...
`web.xml`是Java Web应用的核心配置,它管理了Servlet、过滤器和监听器等组件,以及会话、安全、错误处理等多个方面。理解和熟练掌握`web.xml`配置,能有效提升开发效率,保证应用的稳定性和安全性。在实际开发中,...
此标签表明Web应用是否支持分发部署,即多个JSP容器之间能否共享会话状态。 #### 四、示例 以下是一个简单的`web.xml`文件示例: ```xml <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns=...
它可以包含多个 `<param-name>` 和 `<param-value>` 子元素,用于指定参数的名称和值。 * `<description>` 元素:用于声明描述信息。 * `<param-name>` 元素:用于指定上下文参数的名称。 * `<param-value>` 元素:...
此时,`Web.xml`可能不是唯一的部署描述符来源,服务器会将多个XML配置文件合并,包括`META-INF/web-fragment.xml`和`WEB-INF/web.xml`。 总结,`Web.xml`是Java Web应用的心脏,它定义了应用的架构、行为和运行...