servlet中的url—pattern

为了定义servlet和url的对应关系,就是说通过那个url访问servlet

一,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. 以”/’开头以”/*”结尾的是用来做路径映射的。 

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

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

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

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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: servlet mappingurl-pattern是指用于匹配请求URL的模式,它可以是一个具体的URL路径,也可以是一个通配符表达式,用于匹配多个URL路径。在web.xml文件配置servlet mapping时,需要指定url-pattern,以便将请求分发到对应的servlet处理。例如,url-pattern可以是"/hello",表示匹配请求路径为"/hello"的URL,也可以是"/*",表示匹配所有请求路径的URL。 ### 回答2: 在Servleturl-pattern用于指定一个URLServlet的映射关系。当浏览器发送请求时,服务器会根据URL的匹配规则找到对应的Servlet来处理请求。 url-pattern可以使用多种形式的通配符来定义,常见的有以下几种: 1. 精确匹配:使用完整的URL路径来匹配,例如"/example"表示只有当请求的URL路径为"/example"时才能匹配到对应的Servlet。 2. 路径匹配:使用通配符"*"来匹配任意路径段,例如"/example/*"表示可以匹配任意以"/example/"开头的URL路径。 3. 后缀匹配:使用通配符"*.后缀名"来匹配以指定后缀名结尾的URL路径,例如"*.do"表示可以匹配以".do"结尾的URL路径。 4. 默认匹配:使用"/"作为url-pattern的值时,表示该Servlet是默认的Servlet,会处理所有未被其他Servlet匹配到的请求。 url-pattern的配置可以在Servlet的部署描述符(web.xml)进行,也可以使用注解(@WebServlet)来进行配置。在配置时需要注意url-pattern的顺序,首先匹配到的Servlet将处理请求。 总之,url-pattern用于定义ServletURL之间的映射关系,通过合适的配置可以确保请求能够被正确地分发给对应的Servlet进行处理。 ### 回答3: 在Servleturl-pattern是用来指定Servlet在Web应用URL映射的规则。通过url-pattern,可以将Servlet与特定的URL路径进行关联,使得当该URL被访问时,对应的Servlet能够被正确调用和执行。 url-pattern可以使用一种简单的通配符规则,以匹配不同的URL路径,包括以下几种形式: 1. 精确匹配:可以直接指定一个具体的URL路径,例如"/myservlet",表示该Servlet与路径为"/myservlet"的URL进行匹配。 2. 后缀匹配:可以使用"*.后缀名"的形式进行匹配,例如"*.do",表示该Servlet与所有以".do"结尾的URL进行匹配。 3. 前缀匹配:可以使用"前缀/*"的形式进行匹配,例如"/servlet/*",表示该Servlet与所有以"/servlet"开头的URL进行匹配。 4. 扩展名匹配:可以使用"/"和"*"进行匹配,例如"/servlet/*",表示该Servlet与所有的URL进行匹配。 在实际应用url-pattern的选择根据具体的需求来确定。精确匹配通常用于与特定的URL建立直接联系,后缀匹配和前缀匹配用于处理一类具有相同特征的URL,而扩展名匹配则用于处理所有的URL请求。 需要注意的是,当存在多个url-pattern匹配同一个URL地址时,Servlet容器会选择匹配规则最准确的Servlet进行处理。因此,在配置url-pattern时,应确保不会引起冲突或模糊性,避免出现无法预期的结果。 总之,url-patternServlet映射和URL访问的重要方式,通过合理配置url-pattern,可以实现灵活、高效的URL映射和Servlet调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值