文档章节

Servlet url-pattern 验证

ayesd
 ayesd
发布于 2014/06/11 12:42
字数 635
阅读 2656
收藏 3

配置完servlet和servlet-mapping之后,启动服务,进行调试,结果和想象中的完全不一样,web.xml配置如下:

    <servlet>
    <servlet-name>RefreshPropeties</servlet-name>
    <servlet-class>servlet.RefreshPropeties</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>RefreshPropeties</servlet-name>
    <url-pattern>/refresh</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>MyDispatcherServlet</servlet-name>
    <servlet-class>servlet.MyDispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>MyDispatcherServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>MyTestServetl</servlet-name>
    <servlet-class>servlet.MyTestServetl</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>MyTestServetl</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

如果访问的是http://localhost/list.do,实际上只调用了“MyDispatcherServlet“,另外一个根本没有调用,也有人可能说,是因为放置的顺序问题,我们交换下下面两个servlet顺序,发现结果还是一样!

如果访问的是http://localhost/refresh,结果是,只调用了RefreshPropeties。

这是为什么呢?

经过检验,发现,对于Servlet 的url匹配是基于这样的原则和顺序:

1、精确匹配,如第二个地址,如果能够找到,则直接调用servlet;

2、如果不能精确匹配,而且还有好几个匹配项,则选择匹配项中范围更大的那个,例如上面的例子中/*范围肯定比*.do的范围大,因此,不管两个servlet顺序如何,都将调用“MyDispatcherServlet“。

3、如果不能精确匹配,而且匹配项范围一致,则顺序在前面的被调用,测试的话可以将“MyDispatcherServlet“的url-pattern修改为*.do,再次调用地址http://localhost/list.do,则发现在前面配置的servlet将会被调用!

解释:

对于filter来说,只要匹配,都会被调用,因为filter是一个链,会根据配置顺序逐步调用

对于servlet来说,每次只会掉用一个,因为对于一个请求,如果有两个servlet去处理,那么客户端会接收到两个response吗?

因此,对于filter来说,网上讲解的没有问题,对于servlet来说,可能需要仔细斟酌了,不能以” servlet 同 filter 类似 ,此处不再赘述。“来回避了!

由此看来,自己的基础水平还有待提升哈!

果然和这个问题有缘分,今天找到一个博客也是解说此问题的,不过是从源码的角度来进行分析,比我的详细和专业,像博主致敬!地址:http://www.cnblogs.com/fangjian0423/p/servletContainer-tomcat-urlPattern.html#springmvc

© 著作权归作者所有

共有 人打赏支持
ayesd
粉丝 7
博文 19
码字总数 30025
作品 0
深圳
高级程序员
私信 提问
oscache缓存的页面为乱码

项目用的oscache,用的web.xml配置 CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8   forceEncoding   true    CharacterEncodingF......

kkli
2014/03/13
378
1
tomcat 5.5 部署项目报错 关于Filter的错误。。

我在tomcat7.0部署没不报错,但是再tomcat5.5就会报错。。 listener.ContextListener UrlRewriteFilter org.tuckey.web.filters.urlrewrite.UrlRewriteFilter logLevel WARN UrlRewriteFilte......

庄泽锐
2014/03/06
1K
5
Spring3中js/css/jpg/gif等静态资源无法找到

最近项目中使用到Spring3,在感叹Spring3注解配置清爽的同时竟然出现了这个不和谐的事情,实在无法忍受 问 题:部署项目后程序加载或用浏览器访问时出现类似的警告,2011-01-19 10:52:51,646...

零度的魚
2014/02/19
0
0
spring mvc 访问静态文件的问题!请指教!

这是web—xml的配置 TalentCloud index.jsp default *.js default *.css default *.png default *.jpg default *.gif spring3mvc org.springframework.web.servlet.DispatcherServlet 1 spri......

Ales_小溪
2013/07/22
805
1
PageOffice如何显示/隐藏Word文档中的标尺

在线打开并使用Word文档时,我们经常会需要使用打开的Word文档中,顶部的标尺来设置页面的边距、对齐位置等。这一操作,可以通过工具栏中“视图”→“标尺”选项的是否勾选来决定是否显示标尺...

yert
2013/04/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud Stream消费失败后的处理策略(四):重新入队(RabbitMQ)

应用场景 之前我们已经通过《Spring Cloud Stream消费失败后的处理策略(一):自动重试》一文介绍了Spring Cloud Stream默认的消息重试功能。本文将介绍RabbitMQ的binder提供的另外一种重试...

程序猿DD
19分钟前
0
0
kiss原则

KISS 原则是用户体验的高层境界,简单地理解这句话,就是要把一个产品做得连白痴都会用,因而也被称为“懒人原则”。换句话说来,”简单就是美“。KISS 原则源于 David Mamet(大卫马梅)的电...

NB-One
21分钟前
4
0
MYSQL事务处理

INNODB 事务里,所有表引擎必须为INNODB,在非实务表上操作,不会警告,不会报错,但没有效果

关元
今天
3
0
cmake 编译脚本

#!/bin/sh test -d build || mkdir -p build cd build cmake .. make

shzwork
今天
2
0
从零开始实现Vue简单的Toast插件

概述: 在前端项目中,有时会需要通知、提示一些信息给用户,尤其是在后台系统中,操作的正确与否,都需要给与用户一些信息。 1. 实例 在Vue组件的methods内,调用如下代码 `this``.$toast({...

前端小攻略
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部