`
wangyanlong0107
  • 浏览: 486399 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

【转】Servlet 和filter 执行顺序

 
阅读更多

一,servlet容器对url的匹配过程:

当一个请求发送到servlet容器的时候,容器 先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test /aaa.html我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做 servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了(filter不 同,后文会提到)。其匹配规则和顺序如下:

1.     精确路径匹配。例 子:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先 进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的servlet了。

2.     最长路径匹配。例 子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此 时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。

3.     扩展匹配,如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。例子:servletA的url-pattern:*.action

4.     如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。如果应用定义了一个default servlet,则容器会将请求丢给default servlet(什么是default servlet?后面会讲)。

     根据这个规则表,就能很清楚的知道servlet的匹配过程,所以定义servlet的时候也要考虑url-pattern的写法,以免出错。

      对于filter,不会像servlet那样只匹配一个servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一 个filter。Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同。
    二,url-pattern详解

         在web.xml文件中,以下语法用于定义映射:

 以”/’开头和以”/*”结尾的是用来做路径映射的。

 以前缀”*.”开头的是用来做扩展映射的。

 “/” 是用来定义default servlet映射的。

 剩下的都是用来定义详细映射的。比如: /aa/bb/cc.action

所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。

分享到:
评论

相关推荐

    web.xml 中的listener、 filter、servlet 加载顺序及其详解.doc

    filter 的加载顺序是在 servlet 之前的,因为 filter 需要对请求和响应进行过滤和修改,从而实现对 Web 应用的安全和过滤。servlet 的加载顺序是最后的,因为 servlet 需要处理请求和响应,从而实现对 Web 应用的...

    简单的servlet+Filter的例子

    而Filter则是在Servlet执行前后进行拦截、处理或修改请求和响应的一种机制,它提供了更灵活的控制和增强应用的能力。 首先,我们来看Servlet。Servlet生命周期包括初始化、服务、销毁三个主要阶段。当服务器启动...

    Servlet之Filter深入讲解及实例研究

    当一个请求到达Web应用程序时,Filter链会被调用,每个Filter按顺序执行其`doFilter()`方法,传递请求和响应对象到下一个Filter或目标Servlet。 2. **生命周期** Filter有三个主要的方法:`init()`, `doFilter()`,...

    Servlet中的Filter

    - Filter的执行顺序取决于它们在web.xml中的配置顺序。每个Filter的doFilter()方法会被调用,直到请求达到Servlet,或者在Filter中中断过滤链。 4. **Filter接口** - **init()**:在Filter实例化后,Web容器会...

    简单使用Filter模拟Servlet中的过滤器

    Filter的执行顺序是由它们在web.xml中的顺序决定的。如果多个Filter匹配同一个请求,它们将按照在web.xml中声明的顺序依次执行。 Filter的生命周期包括初始化(init)、过滤(doFilter)和销毁(destroy)三个阶段...

    web.xmllistener、filter、servlet加载顺序.pdf

    你可以通过调整这些标签的位置来控制过滤器的执行顺序。 3. **Servlet(服务程序)** Servlet是实现了`javax.servlet.Servlet`或其子接口的类,它们负责处理HTTP请求和生成响应。在`web.xml`中,Servlet通过`...

    servlet filter

    当一个请求经过多个Filter时,Filter链会按照它们在`web.xml`中的顺序依次执行`doFilter()`方法。这意味着,你可以创建多个Filter,每个Filter都有不同的职责,共同协作完成复杂的功能。 在实际开发中,Filter常常...

    Servlet_Filter

    一个Filter链可以包含多个Filter,这些Filter会按照它们在web.xml文件中定义的顺序依次执行。 在Web应用中,Filter的配置通常在web.xml文件中完成,其中定义了Filter的类名、映射路径以及Filter的初始化参数。...

    Servlet--2.filter

    初始化发生在Filter首次被请求时,服务阶段是Filter执行其核心功能的地方,销毁发生在应用关闭或Filter不再使用时。 2. **Filter链**:在一个Web应用中,可以定义多个Filter,它们形成一个过滤链。请求会按顺序通过...

    servlet_filter_listener

    在Java Web开发中,`Servlet`、`Filter`和`Listener`是三个核心组件,它们在构建动态Web应用程序中扮演着重要角色。本篇将详细阐述这三个概念以及它们的工作原理和应用场景。 首先,我们来了解`Servlet`。Servlet是...

    使用filter拦截servlet和jsp页面的内容,进行过滤后输出

    当一个请求到来时,Servlet容器会按照`web.xml`中定义的顺序调用Filter链。`doFilter()`方法中的`chain.doFilter(request, response)`会将请求传递给下一个Filter或目标Servlet。注意,每个Filter都可以选择是否...

    tomcat、struts2、servlet Filter(过滤器) 工作原理

    当一个请求到达Web应用时,Filter链会被触发,每个Filter按照声明的顺序执行doFilter()方法,然后传递给下一个Filter或最终的目标Servlet。Filter的使用大大增强了Web应用的灵活性和可扩展性。 结合这三个技术,...

    java filter 执行过程例子

    过滤链是Filter的执行顺序,先声明的Filter先执行。 3. **请求处理**: - **Chain.doFilter()**:当客户端发起请求时,Servlet容器首先调用第一个Filter的`doFilter()`方法。在这个方法内部,Filter可以选择处理...

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

    web.xml文件中的Servlet、Bean、Filter、Listener的加载顺序和执行顺序对应用程序的执行结果产生了重要的影响。只有正确地配置和理解这些组件的加载顺序和执行顺序,才能确保应用程序的正确执行。

    servlet过滤器技术实例,

    过滤器链的概念使得多个过滤器可以按顺序执行,每个过滤器都可以决定是否将请求传递给下一个过滤器或直接终止。 二、Filter生命周期 每个Servlet过滤器都具有三个关键方法: 1. `init(FilterConfig config)`: 过滤...

    servlet-api-3.0.jar包

    此外,过滤器链的执行模式也得到了改进,可以更好地控制过滤器的执行顺序。 6. **WebSocket支持**:虽然Servlet 3.0本身不包含WebSocket API,但它为WebSocket提供了基础框架,使得服务器端可以很容易地与WebSocket...

    JSP_利用Filter解决Servlet输出中文乱码的问题.docx

    7. **Filter的执行顺序**:在`web.xml`中,Filter的配置顺序决定了它们的执行顺序。如果多个Filter映射到同一个URL,那么在`<filter-mapping>`标签内的顺序决定了Filter的执行顺序,先声明的先执行。 通过以上知识...

    java web 入门源代码,包含servlet,jsp,filter等

    Filter链可以有多个,按照配置的顺序执行,这在权限控制、字符编码转换、日志记录等方面非常实用。在MyWebApp中,`LoggingFilter`可能用于记录每个请求的详细信息,而`EncodingFilter`则负责确保所有输入和输出都是...

    Java Servlet API 2.5

    通过配置web.xml文件,开发者可以定义多个Filter,并设置它们的执行顺序。 Listener是Servlet API中的事件监听器,用于监听Web应用中的特定事件,如会话创建、销毁、请求参数改变等。通过实现特定的监听器接口,如...

Global site tag (gtag.js) - Google Analytics