SpringMVC集成静态资源

集成静态资源

静态资源&jsp是被谁处理的

tomcat是一个servlet容器,servlet容器中通常有servlet来处理各种请求,那么当访问静态资源或者jsp的时候,当然也是有servlet来处理这些请求的,但是并未在web.xml中配置哪个servlet来处理这些请求,是因为tomcat中自动配置了一些默认的servlet来处理这类的请求

tomcat的安装目录中有个web.xml文件,apache-tomcat-8.5.82\conf\web.xml,这个文件相当于对发布到tomcat中的所有web项目的默认配置,

    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

 <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>
<!-- The mapping for the default servlet -->
<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>

配置中主要定义了2个servlet

  1. JspServlet用来处理jsp文件
  2. DefaultServlet会处理/开头的请求,它会处理所有其他servlet不匹配的请求,当一个请求过来之后,会先去匹配其他的servlet,当找不到匹配的servlet的时候,才会走DefaultServlet
  3. 可以在项目中的web.xml中对tomcat/config/web.xml中的配置进行覆盖,即项目中的web.xml相对于tomcat中的web.xml有更高的优先级

如何让SpringMVC处理所有的请求

如果想让SpringMVC来处理所有的请求,只需要修改web.xml中的配置,将springmvc这个servlet的url-pattern的值设置为*/*就可以了,此时所有的请求都会被SpringMVC处理,即所有的请求都会被DispatcherServlet处理

在这里插入图片描述

SpringMVC如何处理静态资源

当我们将上面的SpringMVC的url-pattern改为/时,此时在访问静态资源的时候,会报404,这请求被DispatcherServlet接收了,但时这个Servlet默认情况下并没有处理静态资源的能力,即找不到资源,所有才会报404
在这里插入图片描述

SpringMVC处理静态资源的2中方法,区别,原理详细

方案1:使用mvc:default-servletHandler/

在SpringMVC的配置文件中添加配置

<mvc:annotation-driven/>
<mvc:default-servlet-handler/>

在这里插入图片描述

原理:

  1. 加入< mvc:default-servlet-handler/>配置后,框架会创建DefaultServletHttpRequestHandler对象,这个对象会将请求转发给tomcat的default这个servlet处理,所以静态资源就可以访问了
  2. 配置中的第一行< mvc:annotation-driven/>也必须加上,如果不加,@RequestMapping的请求就无法处理了
  3. 这个用法的前提时,web容器中需要有default这个servlet,且servlet可以处理静态资源
方案二:使用mvc:resources

从Spring3.0版本后,spring定义了专门处理静态资源访问请求的处理器,ResourceHttpRequestHandler,并且添加了mvc:resources/标签来处理静态资源无法访问的问题

需要在SpringMVC配置文件中添加如下配置

<!-- 添加mvc注解驱动 -->
<mvc:annotation-driven/>
<mvc:resources mapping="/updateFile/**" location="/updateFile/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/jsp/**" location="/jsp/"/>
  • mvc:resource:标签用来指定请求的静态资源的url和本地地址的映射关系
  • mapping:用来指定请求的地址的比如/updateFile/**,可以匹配任何的以updateFile开头的url,比如/updateFile/1.jgp
  • location:用来指定静态资源所在项目中的目录
  • 配置中的第一行必须加上,如果不加,@RequestMapping的请求就无法处理
  • 这种用法不依赖于web容器,所以比第一种方案要好一下,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆卿之

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值