zoukankan      html  css  js  c++  java
  • 【spring】静态资源的访问受限解决方法

    前言                                                                                                     

          我们知道在整合spring mvc框架的时候需要在web.xml中配置一个servlet

    代码如下

    <!--spring mvc 的DispatcherServlet-->
        <servlet>
            <servlet-name>enterprise-servlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--spring mvc 的 配置文件名称,如果配置文件名和<servlet-name>相同则不需要此配置-->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:enterprise-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
            <!--对文件上传的限制-->
            <multipart-config>
                <max-file-size>52428800</max-file-size>
                <max-request-size>52428800</max-request-size>
                <file-size-threshold>0</file-size-threshold>
            </multipart-config>
        </servlet>
        <servlet-mapping>
            <servlet-name>enterprise-servlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>

    问题所在                                                                                               

        其中servlet拦截的url-pattern为  /   :这代表该servlet拦截所有的请求,包括静态资源文件所发出的请求 

    如:    http://localhost:8080/work/public/image/image.png     该请求会进入DispatcherServlet,然后会检查controller中是否存在该请求映射requestMapping,很明显此时没有相匹配的请求映射,最终页面显示图片加载失败。

    解决                      

    方法一:

            这里的DispatcherServlet 是spring mvc 中的一个servlet,而面对项目中众多的servlet,他们都会有一个加载顺序。此时我们可以通过激活tomcat的默认servlet default来加载静态资源.但是该servlet必须配置在DispatcherServlet的前面

    如下配置:

     <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>/public/*</url-pattern><!--public下存放静态文件,包括css,lib,image等-->
     </servlet-mapping>

       也可以分别定义:

    <servlet-mapping>  
        <servlet-name>default</servlet-name> 
        <url-pattern>*.jpg</url-pattern>    
    </servlet-mapping>   
    <servlet-mapping>      
        <servlet-name>default</servlet-name>   
        <url-pattern>*.js</url-pattern>   
    </servlet-mapping>   
    <servlet-mapping>       
        <servlet-name>default</servlet-name>      
        <url-pattern>*.css</url-pattern>     
    </servlet-mapping> 

    方法二:

           spring mvc 提供了解决方法,即在spring mvc 的配置文件中配置一个handler,变化:在走完DispatcherServlet之后如果没有匹配到controller,则会再去请求静态资源,查看是否存在该静态资源,然后加载!

     <mvc:default-servlet-handler/>

    详情可以看看这里:springMVC对静态资源访问的处理

    欢迎关注,编程那点事儿 不定时分享技术文章,随时随地,想看就看。 欢迎品阅和指正,扫描公告栏微信二维码关注!
  • 相关阅读:
    芯片光刻的流程详解
    中国半导体上市公司2018年的表现盘点:材料和设备篇
    中国半导体上市公司2018年的表现盘点:代工和封测篇
    spring-cloud-sleuth 和 分布式链路跟踪系统
    Jdk和Spring Boot版本选择
    mockplus 原型设计工具
    showdoc 文档管理系统
    禅道项目管理系统
    docker 基础知识分享ppt
    项目管理成功之要素-转载
  • 原文地址:https://www.cnblogs.com/bg2015-07-05/p/5175828.html
Copyright © 2011-2022 走看看