`
ruvuoai
  • 浏览: 95698 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

servlet,filter顺序测试

    博客分类:
  • web
阅读更多
今天忽然心血来潮,想知道具体的servlet filter的顺序..于是测试:
测试环境:apache-tomcat-6.0.16

加载顺序init顺序:
filter-->servlet

处理请求顺序:
filter-->servlet-->filter

销毁顺序:
servlet-->filter


在这里粘贴前辈发表过的文章,web.xml的mapping处理
http://foxty.iteye.com/blog/39332
引用
一,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文件中,以下语法用于定义映射:

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

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

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

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

所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。
分享到:
评论
1 楼 jxausea 2008-12-17  
这是我面试时被文到的题目。当时答不出来,应该早点来看

相关推荐

    Java-filter测试程序

    当请求到达时,Filter会按照配置的顺序依次执行,直到请求传递到目标资源。 5. **Filter的实际应用**: - **安全控制**:Filter可以用来检查请求是否携带正确的认证信息,阻止未授权的访问。 - **性能优化**:...

    Servlet_Filter

    例如,使用Eclipse或IntelliJ IDEA等集成开发环境(IDE)可以方便地创建、配置和测试Servlet和Filter。同时,像Tomcat或Jetty这样的应用服务器提供了运行和调试Servlet和Filter的平台。开发者还可以利用Maven或...

    servlet-api-3.0.jar包

    开发者可以使用注解(如`@WebServlet`, `@WebFilter`, `@WebListener`)来声明Servlet、Filter和Listener,而无需在web.xml配置文件中进行硬编码。这极大地提高了代码的可读性和部署的灵活性。 2. **异步处理**:...

    servlet3.0 规范pdf 包含javadoc

    6. **Filter链的改进**:现在,Filter可以通过`doFilter(ServletRequest, ServletResponse, FilterChain)`方法中的`FilterChain`对象按顺序调用下一个Filter,允许更灵活的过滤器配置。 7. **WebSocket支持**:尽管...

    servlet资料文件

    Filter可以串联形成一个过滤链,按照定义的顺序执行。 6. **JSP与Servlet关系**:JSP(JavaServer Pages)是另一种Java Web技术,它允许开发者在HTML页面中嵌入Java代码。JSP最终会被编译为Servlet,执行逻辑后再...

    test-servlet3-without-webxml.rar

    - **属性详解**:`@WebServlet`注解有多个属性,如`name`、`urlPatterns`、`loadOnStartup`等,可以灵活地配置Servlet的名称、映射路径和加载顺序。 4. **实际应用中的好处** - **简化配置**:无web.xml部署减少...

    servlet-api.jar

    6. **Filter和FilterChain**:Servlet API还定义了`Filter`接口,允许开发者在请求到达Servlet之前或之后对其进行拦截和处理。`FilterChain`则允许一个过滤器链中的多个过滤器按顺序执行。 7. **Servlet的多线程...

    servlet-api.jar.zip

    然而,对于开发环境,开发者可能需要将此库加入到构建路径,以便编译和测试Servlet代码。 总之,Servlet-API.jar是Java Web开发的基石,提供了处理HTTP请求和构建动态Web应用的核心工具。理解并熟练运用Servlet API...

    Filter

    5. **源码分析**:博客可能涉及到对Filter的源码分析,例如分析`javax.servlet.Filter`接口和相关的实现类,理解其内部逻辑和工作流程。 6. **工具使用**:标签中的“工具”可能意味着博客中提到了某些工具或框架...

    Servlet3.0 新特性之模块化实践

    Servlet 3.0的一大亮点就是支持零XML配置,开发者可以通过注解直接在类或方法上声明Servlet、Filter和Listener。例如,我们可以使用`@WebServlet`、`@WebFilter`和`@WebListener`注解来替代传统的web.xml配置,使得...

    servlet3.0的学习(二)

    过滤器在Servlet 3.0中也得到了加强,我们可以使用`@WebFilter`注解来声明过滤器,同时可以通过`@FilterMapping`来指定过滤器的URL模式。过滤器链的控制也更加灵活,可以实现动态过滤器的注册和执行顺序的控制。 ...

    Servlet常用接口

    在web.xml文件中,Servlet可以通过<Servlet>、<ServletMapping>等元素进行配置,指定Servlet名称、URL模式、加载顺序等。 10. **动态注册Servlet**: 自JSP 2.5规范起,可以通过`@WebServlet`注解动态注册Servlet...

    jsp+servlet登录验证过滤器

    5. **过滤器链(Filter Chain)**:多个过滤器可以串联起来形成过滤器链,按照定义的顺序逐个执行。过滤器链允许开发者在单个请求中执行多个操作,如身份验证、授权、数据转换等。 6. **配置过滤器**:在`web.xml`...

    基于Annotation的Servlet配置

    在这个例子中,`name`属性定义了Servlet的名称,`urlPatterns`定义了多个URL映射,而`loadOnStartup`则指定了Servlet在应用启动时的加载顺序。 除了Servlet配置,基于Annotation的过滤器(Filter)和监听器...

    Servlet3.0微框架

    8. **过滤器链的优化**:过滤器(Filter)可以定义多个,且可以根据需要按顺序或并行执行,提高了过滤器的灵活性。 9. **MIME类型匹配**:Servlet3.0允许通过`@.WebServlet`的`mimeMapping`属性指定URL与MIME类型的...

    SpringBoot的Filter过滤器

    在Spring Boot应用中,`Filter`是一个至关重要的组件,它允许开发者在HTTP请求处理的生命周期中插入自定义逻辑。`Filter`是Java Servlet规范...在Idea中,编写和测试`Filter`十分便捷,可以帮助我们快速实现这些功能。

    过滤器拦截并处理request请求

    每个过滤器都按照在`web.xml`中的顺序依次执行`doFilter()`方法,直到请求到达目标Servlet。如果一个过滤器选择不转发请求,可以通过不调用`Chain.doFilter()`来终止请求的处理。 至于压缩包中的`test`文件,由于...

    正在研究servlet3的朋友们,有谁需要servlet3 api(英文版)的吗, 见附件

    同时,过滤器可以使用`@WebFilter`注解定义,并可以通过`@Priority`注解设置优先级,控制过滤器的执行顺序。 最后,Servlet3还增加了对WebSocket的支持,这是一种双向通信协议,允许服务器和客户端进行全双工通信。...

    j2ee开发filter课件和实例

    通常,开发者需要在web.xml中定义Filter,声明其类名、过滤的URL模式以及在请求处理链中的顺序。例如: ```xml <filter> <filter-name>MyFilter</filter-name> <filter-class>...

    JSP Servlet性能分析.rar

    - 在web.xml中配置Servlet,可以通过调整load-on-startup值来控制Servlet的初始化顺序。 - 使用线程池可以提高并发处理能力,减少请求等待时间。 - 使用Filter拦截请求,进行预处理或后处理,例如登录验证、日志...

Global site tag (gtag.js) - Google Analytics