`
tianhandigeng
  • 浏览: 374347 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

web.xml中Servlet Filter的调用顺序(转载)

阅读更多

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函数的执行顺序是无法保证的。
1
2
分享到:
评论

相关推荐

    web.xml文件配置.doc

    在filter配置中,多个filter的初始化顺序由它们在web.xml文件中的位置决定,但filter拦截资源的顺序则是根据filter-mapping的顺序进行。每个filter-mapping对应一个filter,且filter-mapping必须位于相应的filter...

    在web.xml中配置action或.do

    它不仅定义了Web应用的基本配置,还管理着诸如Servlet、过滤器(Filter)、监听器(Listener)等组件的配置信息。本文将详细介绍如何在`web.xml`中配置action或.do文件,以实现特定的功能需求。 #### 二、背景知识 在...

    web.xml配置汇总(servlet2.3)

    `web.xml`作为Java Web应用程序的核心配置文件,在Servlet 2.3规范中扮演着至关重要的角色。该文件通常位于WEB-INF目录下,用于定义和配置Web应用程序的各种组件和服务。通过深入解析`web.xml`的关键元素和属性,...

    web.xml中配置过滤器

    在 web.xml 文件中,filter 元素必须出现在任意 filter-mapping 元素之前,filter-mapping 元素又必须出现在所有 servlet 或 servlet-mapping 元素之前。 例如,下面是一个完整的 web.xml 文件: ```xml &lt;?xml ...

    Tomcat(二) Tomcat实现:Servlet与web.xml介绍 以及 源码分析Tomcat实现细节1

    &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener ``` 2. **Filter(过滤器)** 过滤器允许你在请求到达Servlet之前对其进行拦截和处理,也可以在响应返回给客户端之前进行修改。在web...

    web.xml.txt

    `web.xml` 是一个 XML 文件,用于配置 Java Web 应用程序中的各种组件和服务。它是 Java Servlet 规范的一部分,用于指定 Servlet 的配置、过滤器(Filter)、监听器(Listener)以及其他与 Web 应用相关的配置信息。 #...

    web.xml配置文件详解[文].pdf

    `web.xml`是Java Web应用的核心配置文件,用于定义Servlet、过滤器、监听器以及其他相关组件的行为和配置。它是按照Servlet规范定义的标准格式编写,独立于任何特定的应用服务器,如Tomcat。以下是对`web.xml`文件中...

    Web.xml配置详解

    在Web开发中,`web.xml`文件是Web应用程序的部署描述符,它是Java Servlet规范的一部分,用于配置Web应用的各种组件,如Servlet、过滤器、监听器等。理解并熟练掌握`web.xml`的配置对于任何Web开发者来说都至关重要...

    web.xml 2.4详细说明

    在Java Web开发中,`web.xml`文件是核心配置文件之一,它定义了应用程序的行为和结构,是Servlet容器(如Tomcat)运行Web应用程序的基础。本文将深入探讨`web.xml 2.4`版本中的关键节点及其详细说明,帮助开发者更好...

    Web.xml常用元素

    `Web.xml`是Java Web应用程序中的核心配置文件,它用于配置应用程序的上下文信息、servlet映射、过滤器、监听器等关键组件。以下是对`Web.xml`中常见元素的详细解析: #### &lt;web-app&gt; - **作用**:根元素,所有...

    web.xml sample

    在这个例子中,我们将详细分析给出的`web.xml`片段,探讨其中的关键配置元素。 1. **欢迎文件**: `&lt;welcome-file-list&gt;`元素定义了当用户访问应用的根目录时应显示的默认页面。在这个例子中,如果用户输入`...

    web.xml元素详解

    在Java Web开发中,`web.xml`是部署描述符的核心组成部分,它定义了Web应用程序的配置信息。此文件位于WEB-INF目录下,被服务器用来解析Web应用的各种设置,如Servlet映射、过滤器配置、监听器注册等。下面将对`web....

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    - 初始化:当Servlet首次被请求或者在web.xml中配置了`load-on-startup`时,Servlet容器会调用Servlet的`init()`方法进行初始化。 - 服务:每当有新的请求到来,Servlet容器创建一个Servlet实例,然后调用`service...

    J2EE中关于web.xml文件的配置[文].pdf

    6. **&lt;filter-mapping&gt;**: 这个元素将过滤器与特定的Servlet或URL模式关联,定义过滤器的执行顺序和范围。 7. ****: listener元素声明事件监听器,它们会在特定的Servlet容器事件(如会话创建、销毁等)发生时被...

    web.xml详细说明

    `web.xml`是Java Web应用程序中的核心配置文件,用于描述和配置Web应用程序的各种属性、组件及其行为。本文档将详细解析`web.xml`中的各个元素及其功能,帮助开发者更好地理解和使用该文件。 #### 二、常用元素及其...

    web.xml中servlet, bean, filter, listenr 加载顺序_动力节点Java学院整理

    web.xml中的Servlet、Bean、Filter、Listener加载顺序详解 在Java Web应用程序中,web.xml文件扮演着非常重要的角色,它定义了Web应用程序的配置信息,包括Servlet、Bean、Filter、Listener等组件的配置。其中,...

    web.xml详解(txt)

    在本文中,我们将详细探讨`web.xml`中的各个元素及其功能。 #### 2. 核心元素解析 ##### 2.1 `&lt;web-app&gt;` - **定义**:`&lt;web-app&gt;`是`web.xml`文件的根元素,用于包含所有其他配置元素。 - **属性**: - `id`:可...

Global site tag (gtag.js) - Google Analytics