Spring MVC的url-pattern配置及原理分析

本文详细讲解了在SpringMVC中如何配置url-pattern避免拦截静态资源,介绍了使用<mvc:default-servlet-handler>和<mvc:resources>解决策略,并讨论了web.xml继承导致的配置冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在SpringMVC中,我们通常会在web.xml文件中配置要拦截的url请求,这个时候就需要用到url-pattern来进行配置了。下面是一个web.xml的示例

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
      <!-- 指定的SpringMVC配置文件的路径 -->
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
     <!--拦截匹配规则的url请求,进入springmvc框架处理-->
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

1. 配置方式

● 带后缀配置,比如:.action、.do、.show等,该种方式比较精确和方便;
● / 配置,该种方式会拦截所有的请求,不会拦截.jsp文件,但是会拦截.html等静态资源(静态资源:除了servlet和jsp之外的js、css、png等),默认使用该方式。
● /*配置,该种方式会拦截所有的请求,包括.jsp

2. / 方式配置

  1. 存在问题: 拦截.html、.jsp、.css等静态资源,
  2. 原因:因为tomcat容器中有一个web.xml(父),自己的项目中也有一个web.xml(子),是一个继承关系父web.xml中有一个DefaultServlet, url-pattern 是一个 /此时我们自己的web.xml中也配置了一个 / ,覆写了父web.xml的配置。
    不拦截.jsp的原因:因为父web.xml中有一个JspServlet,这个servlet拦截.jsp文件,而我们并没有覆写这个配置, 所以springmvc此时不拦截jsp,jsp的处理交给了tomcat
  3. 解决方案:
    方案一:在springmvc的配置文件中添加以下内容
<mvc:default-servlet-handler/>

原理: 添加该标签配置之后,会在SpringMVC上下文中定义一个DefaultServletHttpRequestHandler对象这个对象如同一个检查人员,对进入DispatcherServlet的url请求进行过滤筛查,如果发现是一个静态资源请求,那么会把请求转由web应用服务器(tomcat)默认的DefaultServlet来处理,如果不是静态资源请求,那么继续由SpringMVC框架处理。
方案二:在springmvc的配置文件中添加以下内容

<mvc:resources location="classpath:/"  mapping="/resources/**"/>

原理:SpringMVC框架自己处理静态资源,mapping:约定的静态资源的url规则,location:指定的静态资源的存放位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值