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和filter不同的地方
1. 当有一个servlet匹配成功以后,就不会去理会剩下的servlet了。
2. 对于filter,不会像servlet那样只匹配一个servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个filter。
url-pattern
在web.xml文件中,以下语法用于定义映射:
1. 以”/’开头和以”/*”结尾的是用来做路径映射的。
2. 以前缀”*.”开头的是用来做扩展映射的。
3. “/” 是用来定义default servlet映射的。
4. 剩下的都是用来定义详细映射的。比如: /aa/bb/cc.action
所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。
原文地址:http://foxty.iteye.com/blog/39332
分享到:
相关推荐
Servlet的URL-Pattern匹配规则是Web应用程序中Servlet和Filter配置的核心部分,它决定了Servlet或Filter如何响应特定的HTTP请求。以下是对这些匹配规则的详细解释: 1. **精确匹配** - 在`<url-pattern>`中指定的...
3. 默认Servlet映射:`/`作为`url-pattern`时,它被用作默认Servlet,处理所有未被其他Servlet或Filter映射的请求。 4. 详细定义:你可以自定义更复杂的`url-pattern`,如`/path/*`,这将匹配所有以`/path/`开头的...
当你想让一个Filter作用于应用中的所有资源时,你需要在`web.xml`配置文件中定义一个Filter,并设置`<url-pattern>`为`/*`。这样,任何通过HTTP请求访问的应用资源都会先经过这个Filter。例如: ```xml <filter>...
Filter在Servlet容器中注册,并通过`<filter>`和`<filter-mapping>`元素在web.xml配置文件中定义其拦截的目标Servlet或URL模式。当用户请求匹配这些配置的资源时,Filter会先于Servlet执行,执行完后,Filter再将...
虽然Servlet仍然是构建Web应用的基础,但随着Java EE(现在称为Jakarta EE)的发展,出现了更高级的组件模型,如Filter和Servlet 3.0引入的Asynchronous Servlet。Spring MVC和JSF等框架也提供了更抽象的编程模型,...
### web.xml文件中配置(servlet, spring, filter, listener)的加载顺序 在Java Web应用开发中,`web.xml`文件是整个Web应用程序的核心配置文件之一,它定义了Servlet容器如何启动、初始化以及配置各个组件如...
4. **URL路径映射**:Servlet可以通过多种方式映射到URL,如使用`<servlet-mapping>`元素的`<url-pattern>`子元素,可以使用通配符如“/*”或特定路径如“/example/*”。 5. **Servlet多线程模型**:Servlet 2.5...
9. **URL映射**:Servlet可以通过`<url-pattern>`元素在web.xml中进行URL映射,指定哪些请求应由哪个Servlet处理。 10. **异步处理**:Servlet 2.5引入了异步处理能力,通过HttpServlet的startAsync()方法,可以在...
这包括验证`web.xml`或Java配置类中的`@WebFilter`注解设置,如filter-name、url-pattern和dispatcherTypes。 2. **初始化测试**:测试`init`方法,确认初始化参数是否正确传递并被Filter实例所使用。可以使用...
<url-pattern>/myservice</url-pattern> </servlet-mapping> ``` 3. **过滤器(Filter)**:Servlet 2.4引入了过滤器,允许在请求到达Servlet之前或从Servlet返回响应之后对其进行处理。过滤器通过实现`javax....
- `<url-pattern>`或`<servlet-name>`:指定过滤器应用的具体资源。如果使用`<url-pattern>`,则过滤器将应用于所有匹配该模式的URL;如果使用`<servlet-name>`,则过滤器仅应用于指定的Servlet。 - `<dispatcher>`...
<url-pattern>/myservice</url-pattern> </servlet-mapping> ``` 5. **请求和响应对象**:`HttpServletRequest`和`HttpServletResponse`是处理HTTP请求的关键对象。`HttpServletRequest`包含客户端的所有请求...
除了URL模式,`<filter-mapping>`还可以包含`<dispatcher>`元素,用于指定Filter应拦截的Servlet容器调用方式。`<dispatcher>`元素有四种可能的值: 1. **REQUEST**:这是默认值,表示当客户端发出请求时,Filter会...
这篇博客“超级注意复杂整合环境中的Filter-Mapping的顺序--配置单点登陆及UrlRewrite有感”深入探讨了如何在这样的环境中正确配置Filter和Mapping,以实现单点登录(Single Sign-On, SSO)以及URL重写。下面我们将...
<url-pattern>/*</url-pattern> </filter-mapping> ``` 在这个配置中,`<param-name>cors.allowOrigin</param-name>`参数设为“*”表示允许任何源进行跨域请求。开发者可以根据需求调整这些设置,以实现更严格的...
<url-pattern>*.do</url-pattern> </filter-mapping> <servlet> <servlet-name>ideawu</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load...
Servlet Filter是Java Servlet API中的一个重要概念,它是Servlet容器(如Tomcat、Jetty等)提供的一种拦截请求和响应的能力,允许开发者在请求到达目标Servlet之前或之后进行处理。Filter可以用于实现诸如认证、...
<url-pattern>/somePath/*</url-pattern> </filter-mapping> ``` 这里的`myFilter`是过滤器的名称,`com.example.MyFilter`是Filter实现类的全限定名,`/somePath/*`表示所有以`/somePath/`开头的URL都将被这个...
servlet-name 元素指定了 Servlet 的名称,而 url-pattern 元素指定了访问 Servlet 的 URL。 web.xml 文件是 Tomcat 中的核心配置文件,它定义了 Web 应用的基本信息、Filter、Servlet、Session 等信息。正确地配置...