servlet-mapping /与/*到底何意?

最近在看小码哥公开课的时候,有幸遇到翻车现场。先还原下现场环境:


    dispatcherServlet
    /*

Spring MVC配置如上,导致jsp无法渲染。

于是内心产生这么一个疑问,到底配置成/与/*有什么区别?为何会导致jsp无法渲染?

回答上面问题前,我们先介绍下相关知识。

一、servlet的url-pattern的四种匹配规则

1. 精确匹配

中配置的项必须与url完全精确匹配


    MyServlet
    /user/users.html
    /index.html
    /user/addUser.action

2.路径匹配

以“/*”结尾的字符串用于路径匹配


    MyServlet
    /user/*

3.扩展名匹配

以“*.”开头的字符串被用于扩展名匹配


    MyServlet
    *.jsp
    *.action

4.缺省匹配


    MyServlet
    /

四种匹配规则的优先级是 1 > 2 > 3 > 4。其中需要注意的是路径匹配和扩展名匹配无法同时设置,如/user/*.action是非法的,/aa/*/bb是精确匹配

二、Tomact中web.xml的默认配置


    default
    org.apache.catalina.servlets.DefaultServlet
    
        debug
        0
    
    
        listings
        false
    
    1



    default
    /




    jsp
    *.jsp
    *.jspx



    jsp
    org.apache.jasper.servlet.JspServlet
    
        fork
        false
    
    
        xpoweredBy
        false
    
    3

Tomact启动时是默认添加了对jsp的映射处理,如果在springMVC中配置了/*的匹配规则,按照匹配的顺序,所有请求都无法再映射到默认的jsp的servlet中了,从而导致jsp无法渲染

Servlet容器Tomcat中web.xml中url-pattern的配置详解[附带源码分析]

你可能感兴趣的:(servlet-mapping /与/*到底何意?)