首页 > 其他分享 >Servlet中/和/*的区别详解

Servlet中/和/*的区别详解

时间:2024-05-28 23:32:48浏览次数:19  
标签:匹配 区别 配置 list 详解 jsp Servlet

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(欢迎页)不起作用的解决办法

标签:匹配,区别,配置,list,详解,jsp,Servlet
From: https://www.cnblogs.com/guohf/p/18219246

相关文章

  • MongoDB CRUD操作:投影Project详解
    MongoDBCRUD操作:投影Project详解文章目录MongoDBCRUD操作:投影Project详解返回文档的全部字段返回指定的字段和_id字段不输出_id字段指定排除的字段返回内嵌文档中的指定字段禁止内嵌文档中的特定字段数组中内嵌文档的投影聚合表达式的投影字段默认情况下,MongoDB查......
  • Django学习-虚拟环境创建、URL组成部分详解
    一、创建一个Django的虚拟环境 生成虚拟环境在D:\Virtualenvs下 在pycharm中引入django虚拟环境 二、URL详解 URL,统一资源定位符,一个URL由以下几部分组成:scheme://host:port/path/?query-string=xxx#anchorscheme:代表的是访问的协议,一般为http或者https以及ftp等h......
  • strcpy和memcpy的区别
    系统编程strcpy和memcpy的区别strcpy与memcpy都是标准C库函数①char*strcpy(char*dest,constchar*src);strcpy:字符串的复制and也会复制字符串的结束符。不需要指定长度,它遇到被复制字符的串结束符"\0"即结束,容易溢出。②voidmemcpy(void**dest,constvoid**sr......
  • Modbus TCP报文详解
    一、ModbusTCP协议构成ModbusTCP通信协议主要包括三个部分:报文头(MBAP)、功能码和数据。ModbusTCP/IP协议的最大数据帧为260个字节。二、MBAP报文头构成MBAP报文头占7个字节,具体构成如下:事务处理标识符(TransactionIdentifier):2个字节,为此次通信事务处理标识符,一般每次通信......
  • 大端和小端的区别
    大端(BigEndian)和小端(LittleEndian)的区别主要体现在字节序的排列上,特别是在多字节数据的存储和传输过程中。以下是两者的详细区别:一、定义与背景大端(BigEndian):指最高有效位(MSB)存储在低位内存地址,而最低有效位(LSB)存储在高位内存地址的方式。这种方式也被称为网络字节序。小......
  • css中px和em的区别
    px和em是用来表示元素大小的单位,在CSS中经常被使用。px(pixel)是像素单位,表示屏幕上的一个点。它是一个绝对单位,表示一个固定的大小。例如,一个宽度为200px的元素将始终显示为200个像素宽。em是相对单位,根据继承它的父元素的字体大小来计算实际的大小。默认情况下......
  • Java高并发编程详解:深入理解并发核心库(Java高并发编程详解:多线程与架构设计姊妹篇) (Ja
    我的阅读笔记:并发核心库概览:首先介绍Java并发核心库的组成,包括java.util.concurrent包下的主要类和接口,以及它们之间的关系。线程池技术:详细讲解Java中的线程池技术,包括线程池的创建、配置、使用以及调优。介绍不同类型的线程池(如FixedThreadPool、CachedThreadPool等)以及它们......
  • C语言中strncpy、strncat、memcpy、memmove函数的详解与比较
    目录目录C语言中strncpy、strncat、memcpy、memmove函数的详解与比较一、strncpy函数二、strncat函数三、memcpy函数四、memmove函数C语言中strncpy、strncat、memcpy、memmove函数的详解与比较一、strncpy函数strncpy是C语言标准库中的一个函数,用于将字符串src复制到字符串d......
  • sleep() 和 wait() 有什么区别?
    sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或noti......
  • Java进阶:详解与实战Java Stream API
    Java进阶:详解与实战JavaStreamAPI......