文档章节

Servlet url-pattern 验证

ayesd
 ayesd
发布于 2014/06/11 12:42
字数 635
阅读 2650
收藏 2
点赞 1
评论 0

配置完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
粉丝 6
博文 19
码字总数 30025
作品 0
深圳
高级程序员
Servlet的一些细节--学习笔记

Servlet细节 1)浏览器访问的url-pattern只是一个符合格式的任意字符串,以/开头 2)一个Servlet的url-pattern可以是1个或多个,有二种形式; a).xx b)/xx/ 注意:/不能一起直接使用 3)/和....

知止内明 ⋅ 04/17 ⋅ 0

(一)SpringMVC之配置DispatcherServlet的一些坑

DispatcherServlet是SpringMVC的核心控制器,就像是SpringMVC的心脏,几乎所有的请求都会经过这个控制器,通过它,大大的降低了模块之间的耦合度。所有学SpringMVC的同学们第一步肯定都是先配...

Java攻城玩家 ⋅ 06/03 ⋅ 0

Spring mvc 创建完项目测试的时候前台404,后台没有错误信息这是咋了

前天遇到一个问题,springmvc创建的项目测试的时候前台404,后台没有错误输出,奇了怪了...... 这是WEB-INF下的xml文件

好吧我输了 ⋅ 昨天 ⋅ 0

JavaWeb09-HTML篇笔记(二)

1.1 案例一:使用Servlet完成一个用户登录的案例.1.1.1 需求: 在网站的首页上,登录的链接,点击登录的链接,可以跳转到登录的页面.在登录的页面中输入用户名和密码点击登录的案例.完成登录的功...

我是小谷粒 ⋅ 05/21 ⋅ 0

干货!从Tomcat执行流程了解jsp是如何被解析的,错误提示是哪里生成的。

一.关于Tomcat组成 先上张图: Tomcat组成: 1.Server:代表整个 servlet 容器,如Tomcat,JBoss之类的。 2.Service:它由一个或者多个Connector组成,以及一个Engine,负责处理所有Connect...

宇的季节 ⋅ 05/07 ⋅ 0

web项目中web.xml的作用

每个javaEE工程中都有web.xml文件,那么它的作用是什么呢?它是每个web.xml工程都必须的吗? 一个web中可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的。 web.xml文件是用来...

ChinaHYF ⋅ 04/27 ⋅ 0

缅甸银河国际开户13170533331

解决这个问题涉及到两个方面的问题: 配置问题 、引入静态文件问题 1、配置问题 web.xml配置的DispatchServlet如下: [html] view plain copy springmvc org.springframework.web.servlet.D...

银河国际 ⋅ 05/26 ⋅ 0

tomcat、weblogic、jboss的区别,容器的作用

一、tomcat Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,它是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及...

水墨如丹青 ⋅ 04/13 ⋅ 0

JavaWeb开发比较重要的面试题

JavaWeb开发比较重要的面试题 1. 编码转换:怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串? 答:示例代码如下: String s1=”你好”; String s2=new String(s1.getBytes(“GB2312”...

xj_9264 ⋅ 05/06 ⋅ 0

Tomcat学习笔记--简单了解和Web应用的目录结构以及常见的Web应用时出现404错误

前言: Tomcat: 开源组织Apache的产品。免费的。支持部分的JavaEE规范。 如果是压缩版的话 ,直接解压就可以使用。 打开tomcat: 找到,双击这个文件 b)弹出窗口,显示信息(不要关闭次窗口...

codingcoge ⋅ 06/07 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 2

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部