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

Servlet和Filter的url匹配url-pattern(来源 100Test.Com百考试题网)

阅读更多
  一、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”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。
分享到:
评论
1 楼 theice 2007-10-19  
赶紧上网找找把不全的补齐了!!!

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


???(这里又是什么???)  “是用来定义default servlet映射的。

相关推荐

    javax.servlet.jsp.jstl-api-1.2.1.jar

    javax.servlet.jsp.jstl-api-1.2.1.jar

    servlet url-pattern

    在`WebTest`这个压缩包文件中,很可能包含了与Servlet URL-Pattern相关的测试代码或示例项目。这些代码可能包括了创建Servlet、配置web.xml以及编写测试用例,以演示如何通过不同的URL-Pattern实现对不同请求的处理...

    url-pattern的3种写法

    ### URL-Pattern的三种写法详解 在Web应用开发中,`web.xml`配置文件扮演着极其重要的角色,其中`<url-pattern>`元素用于定义Servlet的映射规则,即URL模式。通过不同的URL模式,我们可以精确地控制Servlet如何被...

    servlet的url-pattern匹配规则详细描述(小结)

    Servlet的URL-Pattern匹配规则是Web应用程序中Servlet和Filter配置的核心部分,它决定了Servlet或Filter如何响应特定的HTTP请求。以下是对这些匹配规则的详细解释: 1. **精确匹配** - 在`<url-pattern>`中指定的...

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

    Filter可以在Servlet处理请求前和响应发送后执行额外操作,例如进行身份验证、日志记录、数据转换等。通过配置`<filter>`和`<filter-mapping>`元素在web.xml中指定Filter的使用。 综上所述,`javax.servlet` jar包...

    jaxrs-api,javax.ws.rs.Path;

    import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam;... <url-pattern>/app/service/*</url-pattern> </servlet-mapping>

    JavaWeb Servlet中url-pattern的使用

    首先,我们需要了解Servlet和Filter的`url-pattern`相关说明。Servlet是一个Java类,负责处理HTTP请求和响应。Filter则是在Servlet执行前后进行预处理和后处理的组件。当一个页面请求到来时,容器会根据`url-pattern...

    jstl-1.2.1 jar

    jstl-1.2.1,之前的版本需要在服务器中配置一下,而且它分成了两个jar(jstl.jar和standard.jar)还有一个tld文件,而1.2已经不用配置了,直接把javax.servlet.jsp.jstl-1.2.1.jar和javax.servlet.jsp.jstl-api-1.2.1...

    java-servlet-连接mysql-数据库.docx

    通常,你会声明一个Servlet,然后在`<servlet-class>`标签中指定你的实现类,同时在`<servlet-mapping>`标签中指定URL模式,使得请求能够到达这个Servlet。 ```xml <web-app>... <servlet> <servlet-name>...

    URL-pattern解析

    <servlet-name>HelloServlet</servlet-name> <url-pattern>/servlet/HelloServlet</url-pattern> </servlet-mapping> ``` 这意味着所有以`/servlet/HelloServlet`开头的请求都会被映射到名为`HelloServlet`的...

    servlet-2_5-api.zip_servlet-2_5-api.jar

    在这个"**servlet-2_5-api.zip**"压缩包中包含的"**servlet-2_5-api.jar**"文件,就是用来支持开发人员按照Servlet 2.5规范进行编程的库。 Servlet是Java平台上用于扩展Web服务器功能的一种技术。在Servlet 2.5版本...

    cronolog-1.6.1-win32.zip

    cronolog是一款广泛使用的日志管理工具,尤其在Linux和Unix环境中流行。然而,这个cronolog-1.6.1-win32.zip文件表明它已被移植到Windows操作系统上,版本为1.6.1,适用于32位系统。cronolog的主要功能是按照时间...

    servlet源码 servlet-api-src javax.servlet.Servlet源码

    总的来说,理解和研究`servlet-api-src`中的`javax.servlet.Servlet`源码对于任何Java Web开发者来说都是一个重要的学习步骤。它不仅可以帮助我们深入理解Servlet的工作原理,还可以提升我们在实际项目中的开发效率...

    cors-filter-1.7.1.jar

    <url-pattern>/*</url-pattern> </filter-mapping> ``` 在这个例子中,`cors.allowOrigin`参数设置为`*`,表示允许任何源进行跨域访问。根据实际需求,你可以将`*`替换为具体的源地址,或者使用通配符来限制特定的...

    javax.servlet-api-3.1.0.jar

    javax.servlet-api-3.1.0.jar,处理找不到servlet JAR的问题

    servlet-api.jar 和jsp-api

    servlet-api.jar 和jsp-api 工具jar包

    jdk-6u20-windows-x64.exe

    %CATALINA_HOME%\common\lib\servlet-api.jar; 【注意最新版本的Tomcat中可能没有common这个文件夹了。所以servlet-api.jar应该的路径为 %CATALINA_HOME%\lib\servlet-api.jar;请根据自己的情况自己修改!】 接着...

    servlet-api-3.0.jar包

    Servlet-api-3.0.jar是Java Servlet API的第三版实现,它是开发Web应用程序的重要组成部分,特别是在基于Java的服务器端编程中。这个库包含了用于创建和管理HTTP服务端点的接口和类,允许开发者构建动态、交互式的...

    apache-tomcat-7.0.70.tar.gz

    Apache Tomcat是一个开源的软件应用服务器,主要用于部署和运行Java Servlet和JavaServer Pages(JSP)应用程序。在本例中,我们关注的是`apache-tomcat-7.0.70.tar.gz`文件,这是一个针对Linux操作系统的Tomcat ...

    org.spring-framework-3.0.4. 所有jar

    org.springframework.aop-3.0.4.RELEASE.jar ...org.springframework.web.servlet-3.0.4.RELEASE.jar org.springframework.web.struts-3.0.4.RELEASE.jar org.springframework.web-3.0.4.RELEASE.jar

Global site tag (gtag.js) - Google Analytics