在web.xml中配置SpringMVC

时间:2023-01-12 01:46:58

代码如下

  <servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC.xml</param-value>
</init-param>
</servlet> <servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

  可以看到,在web.xml中配置SpringMVC时,实际上是配置了一个servlet.

那么,在<servlet-mapping>下的<url-pattern>的匹配规则是怎样的呢?

url-pattern的匹配规则

<url-pattern>中的/实际上是从完整路径中项目名后的内容开始匹配

比如http://localhost:8081/projectName/homepage/test.do  ,

/*匹配的就是    /homepage/test.do    这一段

有三种,分别是:

1.精确匹配

<url-pattern>/test/userList.action</url-pattern>

  精确匹配就是完全精准地匹配到URL地址

2.路径匹配

<url-pattern>/</url-pattern>
<!--或者-->
<url-pattern>/*</url-pattern>
<!--或者-->
<url-pattern>/base/*</url-pattern>

  其中,/和/*的区别是

/   ==>  会匹配到路径型的URL,例如 /abc/test这种类型的路径

/*  ==>  则不仅匹配路径型URL,也匹配后缀型URL,例如/abc/test.jsp

因此如果<url-pattren>仅设置为/*的话,那么在请求返回时(请求返回的一般是/WEB-INF/view/XXX.jsp),也会被前端控制器(DispatcherServlet)拦截,导致找不到对应的handler,出现404错误!

如果一定要使用/*的话,可以用/XXX/*这种方法,来避免拦截返回的请求

3.扩展名匹配

<url-pattern>*.do</url-pattern>
<url-pattern>*.action</url-pattern>
<url-pattern>*</url-pattern>//这是错误用法!
<!-- 等等 -->

  会拦截以*.do和*.action结尾的请求.

容器匹配顺序

容器会首先进行精确匹配,找不到则进行路径匹配,还找不到就进行扩展名匹配.一旦匹配成功,就不进行下边的匹配.

参考:https://blog.csdn.net/yzh18373476791/article/details/82719848