Filter是一个很有用的东西,使用filter可以修改request, response,
session, application中的内容。
1.
javax.servlet.Filter有两个重要的方法
public void init(FilterConfig config)
public void doFilter(ServletRequest request, ServletResponse
response,
FilterChain
chain)
其中init方法用来作一些初始化的方法,而doFilter方法用来执行真正的过滤操作。
2. Filter的部署方法
在web.xml中要声明filter元素,并分配需要其处理的url,如下:
<filter>
<filter-name>Filter1</filter-name>
<filter-class>com.baidu.Filter1</filter-class>
</filter>
<filter>
<filter-name>Filter2</filter-name>
<filter-class>com.baidu.Filter2</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Filter2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.
doFilter函数的执行顺序
当某个url请求匹配了多个Filter时,应用服务器将多个Filter组织成FilterChain,这个链的执行顺序是由其<filter-mapping>元素在web.xml文件中的顺序决定的。
doFilter函数可以过滤请求或者响应,当其过滤完请求后将调用FilterChain的doFilter函数让FilterChain中的下一个Filter来过滤请求。最先过滤请求的Filter将最后过滤相应,下面是个简单的例子。
public void doFilter(ServletRequest request, ServletResponse
response,FilterChain chain) throws IOException,
ServletException
{
system.out.println(“filter request here ----”);
//
todo:
chain.doFilter(request,response);
system.out.println(“filter response here ----”);
//
todo:
}
4.init函数的执行顺序
对于不同的应用服务器,Filter的init函数的执行时间是不同的,例如:tomcat会在tomcat启动的时候执行init函数,而weblogic等一些其他的应用服务器则会在该Filter匹配的url被首次请求的时候加载。
(下面的部分是我通过实验猜想的,不一定正确。)
对于tomcat而言,tomcat启动时会解析web.xml文件,然后按照<filter>元素的顺序将各个Filter元素加载到一个
HashMap中。解析完成后,会从HashMap中一个个的拿出Filter元素,串行的执行其init函数(这里的执行有先后关系,是在一个线程中执
行的)。所以在tomcat中定义的多个Filter其init函数的执行顺序就是其在HashMap中的散列顺序,具体来说与其在web.xml文件中
的定义位置及其名字有关。
对于HashMap来说,如果其元素固定不变,则其顺序也是固定不变的,但当元素个数发生变化时,便不能保证其顺序(例如:当有两个元素时,A在B的前面,当再加入20个元素的时候A就不一定在B的前面了),所以init函数的执行顺序是无法保证的。
分享到:
相关推荐
在filter配置中,多个filter的初始化顺序由它们在web.xml文件中的位置决定,但filter拦截资源的顺序则是根据filter-mapping的顺序进行。每个filter-mapping对应一个filter,且filter-mapping必须位于相应的filter...
它不仅定义了Web应用的基本配置,还管理着诸如Servlet、过滤器(Filter)、监听器(Listener)等组件的配置信息。本文将详细介绍如何在`web.xml`中配置action或.do文件,以实现特定的功能需求。 #### 二、背景知识 在...
`web.xml`作为Java Web应用程序的核心配置文件,在Servlet 2.3规范中扮演着至关重要的角色。该文件通常位于WEB-INF目录下,用于定义和配置Web应用程序的各种组件和服务。通过深入解析`web.xml`的关键元素和属性,...
在 web.xml 文件中,filter 元素必须出现在任意 filter-mapping 元素之前,filter-mapping 元素又必须出现在所有 servlet 或 servlet-mapping 元素之前。 例如,下面是一个完整的 web.xml 文件: ```xml <?xml ...
<listener-class>org.springframework.web.context.ContextLoaderListener ``` 2. **Filter(过滤器)** 过滤器允许你在请求到达Servlet之前对其进行拦截和处理,也可以在响应返回给客户端之前进行修改。在web...
`web.xml` 是一个 XML 文件,用于配置 Java Web 应用程序中的各种组件和服务。它是 Java Servlet 规范的一部分,用于指定 Servlet 的配置、过滤器(Filter)、监听器(Listener)以及其他与 Web 应用相关的配置信息。 #...
`web.xml`是Java Web应用的核心配置文件,用于定义Servlet、过滤器、监听器以及其他相关组件的行为和配置。它是按照Servlet规范定义的标准格式编写,独立于任何特定的应用服务器,如Tomcat。以下是对`web.xml`文件中...
在Web开发中,`web.xml`文件是Web应用程序的部署描述符,它是Java Servlet规范的一部分,用于配置Web应用的各种组件,如Servlet、过滤器、监听器等。理解并熟练掌握`web.xml`的配置对于任何Web开发者来说都至关重要...
在Java Web开发中,`web.xml`文件是核心配置文件之一,它定义了应用程序的行为和结构,是Servlet容器(如Tomcat)运行Web应用程序的基础。本文将深入探讨`web.xml 2.4`版本中的关键节点及其详细说明,帮助开发者更好...
`Web.xml`是Java Web应用程序中的核心配置文件,它用于配置应用程序的上下文信息、servlet映射、过滤器、监听器等关键组件。以下是对`Web.xml`中常见元素的详细解析: #### <web-app> - **作用**:根元素,所有...
在这个例子中,我们将详细分析给出的`web.xml`片段,探讨其中的关键配置元素。 1. **欢迎文件**: `<welcome-file-list>`元素定义了当用户访问应用的根目录时应显示的默认页面。在这个例子中,如果用户输入`...
在Java Web开发中,`web.xml`是部署描述符的核心组成部分,它定义了Web应用程序的配置信息。此文件位于WEB-INF目录下,被服务器用来解析Web应用的各种设置,如Servlet映射、过滤器配置、监听器注册等。下面将对`web....
- 初始化:当Servlet首次被请求或者在web.xml中配置了`load-on-startup`时,Servlet容器会调用Servlet的`init()`方法进行初始化。 - 服务:每当有新的请求到来,Servlet容器创建一个Servlet实例,然后调用`service...
6. **<filter-mapping>**: 这个元素将过滤器与特定的Servlet或URL模式关联,定义过滤器的执行顺序和范围。 7. ****: listener元素声明事件监听器,它们会在特定的Servlet容器事件(如会话创建、销毁等)发生时被...
`web.xml`是Java Web应用程序中的核心配置文件,用于描述和配置Web应用程序的各种属性、组件及其行为。本文档将详细解析`web.xml`中的各个元素及其功能,帮助开发者更好地理解和使用该文件。 #### 二、常用元素及其...
web.xml中的Servlet、Bean、Filter、Listener加载顺序详解 在Java Web应用程序中,web.xml文件扮演着非常重要的角色,它定义了Web应用程序的配置信息,包括Servlet、Bean、Filter、Listener等组件的配置。其中,...
在本文中,我们将详细探讨`web.xml`中的各个元素及其功能。 #### 2. 核心元素解析 ##### 2.1 `<web-app>` - **定义**:`<web-app>`是`web.xml`文件的根元素,用于包含所有其他配置元素。 - **属性**: - `id`:可...