Servlet中/和/*的区别详解

问题

在搭建springmvc项目时,DispatcherServlet配置为/*welcome-file-list失效了报404异常,

配置为/时可以正常访问,下面记录问题排查过程所涉及关于servlet的知识

    <!-- welcome-file-list 配置-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

Servlet的<url-pattern/>匹配方式

  1. 精确匹配

    无通配符的精确字符串。如:

           <url-pattern>/api/demo1</url-pattern>
    <url-pattern>/api/demo2</url-pattern>
  2. 路径匹配

    /开头,且以/*结尾。如:

          <url-pattern>/api/*</url-pattern>
  3. 后缀名匹配

    *.开头(该模式以*.开头,后面的是常量,即使是*也是常量。比如*.*匹配的后缀必须是

    .*而不能是其它)。如:

          <url-pattern>*.jsp</url-pattern>
    <url-pattern>*.do</url-pattern>
  4. 缺省匹配

    固定值/(也是DefaultServlet的配置)。如:

        <url-pattern>/</url-pattern>

匹配顺序

越精确越优先,越模糊越靠后,优先级从高到底排序为:精确匹配 > 路径匹配 > 后缀名匹配 > 缺省匹配

Tomcat内置servlet配置

Tomcat在$ CATALINA_BASE/conf/web.xml中默认定义了两个Servlet:DefaultServlet

JspServlet

    <servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> <!-- The mappings for the JSP servlet -->
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>

问题分析

  • 原因

DispatcherServlet配置/时,匹配的优先级比JspServlet低,所以能正常打开页面。

配置为/*时,匹配优先级比JspServlet高,但springmvc中没有对应的试图映射,所以出现404异常。

  • 解决

welcome-file-list中增加index.do的配置

参考文章

Servlet中/和/*的区别详解

关于welcome-file-list(欢迎页)不起作用的解决办法

Servlet中/和/*的区别详解的更多相关文章

  1. javascript中=、==、===区别详解

    javascript中=.==.===区别详解今天在项目开发过中发现在一个小问题.在判断n==""结果当n=0时 n==""结果也返回了true.虽然是个小问题 ...

  2. Servlet中的过滤器Filter详解

    加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...

  3. servlet中web.xml配置详解

    Web.xml常用元素 <web-app> 所有部署描述符文件的顶层(根)元素 <display-name></display-name>定义了WEB应用的名字 & ...

  4. Servlet中Web.xml配置详解(二)

    5.2 分配JSP初始化参数给JSP页面提供初始化参数在三个方面不同于给servlet提供初始化参数.1)使用jsp-file而不是servlet-class.因此,WEB-INF/web.xml文件 ...

  5. MyBatis中#{}和${}的区别详解

    首先看一下下面两个sql语句的区别: <select id="selectByNameAndPassword" parameterType="java.util.M ...

  6. laravel中{{}}和{!! !!}的区别详解

    {{}}支持转义 一段html代码只是被当成普通的字符串输出 {!! !!} 不支持转义 一段html代码可以被正常的解析 public function html(){ $address=" ...

  7. Android中Intent传值与Bundle传值的区别详解

    Android中Intent传值与Bundle传值的区别详解 举个例子我现在要从A界面跳转到B界面或者C界面   这样的话 我就需要写2个Intent如果你还要涉及的传值的话 你的Intent就要写两 ...

  8. 基于python中staticmethod和classmethod的区别(详解)

    例子 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 class A(object):   def foo(self,x):     print "executing foo ...

  9. DOS批处理中%cd%与%~dp0的区别详解

    转载:https://www.jb51.net/article/105325.htm DOS批处理中%cd%与%~dp0的区别详解     Windows下批处理中%cd%和%~dp0都能用来表示当前 ...

  10. linux中cat、more、less命令区别详解##less 最合适最好用,和vim一样好用

    linux中cat.more.less命令区别详解 caoxinyiyi关注 0.0362018.07.02 15:46:17字数 641阅读 516 linux中命令cat.more.less均可用 ...

随机推荐

  1. nginx 如何代理websocket

    前言 下面是配置nginx websocket 的代码. # HTTPS server map $http_upgrade $connection_upgrade { default upgrade; ...

  2. 实训篇-Html-注册页面【简单】

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. 介绍一个气缸控制的FB程序块

    关键词: 气缸,双控.单控.电磁阀.感应器.初始位置(简称"始位").末端位置(简称"端位").屏蔽功能.延时功能.报警功能 正文: 1.为什么要做气缸FB功能 ...

  4. NOI 2024省选OIFC模拟21 蒲巴巴 超繁做法

    题目描述 一年一度的 PuBaBa 杯开始了! 今年的 PuBaBa 杯总共有 \(n\) 个选手来参加,编号分别为 \(1,2,\cdots,n\),他们的水平按编号依次递增,所以他们过的题目数量单 ...

  5. verilog中端口定义方式以及如何使用变量

    一.module端口定义方式 目前有两种方式能够对module端口进行定义, 第一种是我目前使用比较多的,把I/O说明写在端口声明语句里,方式A: 1 module block( 2 input a, ...

  6. 力扣219(java&python)-存在重复元素 II(简单)

    题目: 给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k .如果存在 ...

  7. word文档怎么让封面没有页码,页码从正文开始(word 2019)

    1.打开需要插入页码的文档,光标放在正文处的开头,然后点击word窗口中的 [布局]  ---> 选择[分隔符] -->选择 [分节符] 下面的   [连续]; 2.然后选择word功能区 ...

  8. PolarDB-X 发布 2.1.0 版本,Paxos 重磅开源

    ​简介:2022年4月1号,PolarDB-X 正式开源X-Paxos,基于原生MySQL存储节点,提供Paxos三副本共识协议,可以做到金融级数据库的高可用和容灾能力,做到RPO=0的生产级别可用性 ...

  9. [FAQ] CodeMirror5, CodeMirror6 EditorView 获取输入值和设置值的方式

      获取值: // CodeMirror5 cm.getValue() 改为使用 // CodeMirror6 cm.state.doc.toString() 设置值: // CodeMirror5 ...

  10. spannerlib优雅的go异常处理

    蹩脚的go 异常处理 一般写go的人,如果他不是写算法,正常写业务代码的话,可能都会为优雅的异常处理而烦恼,因为脑子抽筋的go设计者们,总是感觉语法糖是一种很低级的东西.但是在我们大多数公司的业务逻辑 ...