SpringMVC开启对静态资源的访问 配置及原理

SpringMVC开启对静态资源的访问 配置及原理

配置

    要想在SpringMVC中开启对静态资源的访问,需要在核心配置文件springMVC.xml中添加以下代码片段

<!--开启对静态资源的访问-->
<mvc:default-servlet-handler/>
<!--开启注解驱动-->
<mvc:annotation-driven/>

原理

    假设工程的目录结构如下图所示,静态资源目录static位于webapp下,通过配置以上两行代码便可以访问静态资源。
在这里插入图片描述
    切记不能将静态资源放到WEB-INF下,由于WEB-INF目录下资源文件安全性都是很高的。它是不能直接通过浏览器来访问,只能通过服务器来访问。

    DispatcherServlet只能访问到WEB-INF中的资源,通过转发去访问WEB-INF下的html、Jsp等资源,而无法访问到静态资源,那么该通过什么方式去访问静态资源呢?

    Tomcat的conf目录中有个web.xml,这是对部署到Tomcat中的所有项目的统一配置,我们自己的项目也会有一个web.xml文件,当这两个web.xml对同样的配置项做了不同的配置,Tomcat会按照就近原则,将项目中的配置作为最终的配置。

    Tomcat中的web.xml,里面配置了一个Servlet:org.apache.catalina.servlets.DefaultServlet
对应的servlet-mapping配置的为/,它可以访问到static静态资源
在这里插入图片描述
在这里插入图片描述

    如果项目中的web.xml中的DispatcherServlet或其它自定义的Servlet的servlet-mapping也配置为/,那么会产生矛盾,按照就近原则,DispatcherServlet将会覆盖DefaultServlet的配置
在这里插入图片描述

    此时访问资源时只会去DispatcherServlet中匹配,而不会去DefaultServlet中匹配,这样就找不到静态资源。若要能够访问静态资源,那么就要在springMVC.xml中加上

<!--开启对静态资源的访问-->
<mvc:default-servlet-handler/>

这样就开启对静态资源的访问。

    然而,此时无法匹配到其它控制器方法中的请求映射。因为加上这行配置,请求资源时只会经过DefaultServlet,而不会经过DispatcherServlet前端控制器。

    这显然不能满足我们的要求,若想要浏览器的请求路径既能够匹配静态资源,也可以匹配到其它控制器方法中的请求映射,此时就需要开启注解驱动

<!--开启注解驱动-->
<mvc:annotation-driven/>

这时候,当浏览器向服务器请求任何资源时,会先经过DispatcherServlet寻找资源,如果没有找到,则会去DefaultServlet中匹配。如果还是没有找到资源,就会报404错误

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值