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/>
匹配方式
-
精确匹配
无通配符的精确字符串。如:
<url-pattern>/api/demo1</url-pattern> <url-pattern>/api/demo2</url-pattern>
-
路径匹配
以
/
开头,且以/*
结尾。如:<url-pattern>/api/*</url-pattern>
-
后缀名匹配
以
*.
开头(该模式以*.开头,后面的是常量,即使是*
也是常量。比如*.*
匹配的后缀必须是
.*
而不能是其它)。如:<url-pattern>*.jsp</url-pattern> <url-pattern>*.do</url-pattern>
-
缺省匹配
固定值
/
(也是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的配置
参考文章
关于welcome-file-list(欢迎页)不起作用的解决办法
标签:匹配,区别,配置,list,详解,jsp,Servlet From: https://www.cnblogs.com/guohf/p/18219246