zoukankan      html  css  js  c++  java
  • spring MVC设置不拦截静态资源

    问题产生:

    因为我们在web.xml中写了 拦截所有请求,当然包括了静态资源,所以页面需要引用css或js的话,该请求也会被拦截,例如:

    在style.css中写一个简单样式,加个背景颜色

    body{
        background-color: antiquewhite;
    }

    然后在index.jsp页面引用该样式:<link rel="stylesheet" href="/css/style.css">

    再一次运行项目,会看到并没有样式,F12可以看到在调用style.css的时候报了404错误,这是因为被DispatcherServlet拦截了


    解决办法:
    方案一:拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml)
    注意:需引入mvc命名空间

     <!-- 添加注解驱动 -->
    <mvc:annotation-driven/>
    <!--
        通过mvc:resources设置静态资源,这样servlet就会处理这些静态资源,而不通过控制器
        设置不过滤内容,比如:css,js,img 等资源文件
        location指的是本地的真是路径,mapping指的是映射到的虚拟路径。
    -->
    <mvc:resources mapping="/css/**" location="/css/"/>

    方案二:使用默认的servlet处理静态资源(涉及spring-mvc.xml,web.xml)

    在spring-mvc.xml中添加:
    <!--启用默认Servlet-->
    <mvc:default-servlet-handler/>
    

      在web.xml中添加:

    <!--增加对静态资源的处理,当前的设置必须在Spring的Dispatcher的前面-->
      <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
        <url-pattern>/css/*</url-pattern>
      </servlet-mapping>
    

      

    方案三:修改spring的全局拦截设置为*.do的拦截(涉及web.xml)

     <!-- 拦截所有请求 -->
      <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <!--<url-pattern>/</url-pattern>-->
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>
    

      

    这时,我们浏览器的所有访问路径就要变成:http://localhost:8080/xxx/xxx.do


    比较总结:                                                                                                              
    第一种方案配置比较臃肿,多个拦截器时增加文件行数,不推荐使用
    第二种方案使用默认的Servlet进行资源文件的访问,Spring拦截所有请求,然后再将资源文件交由默认的Sevlet进行处理,性能上少有损耗
    第三种方案Spring只是处理以'.do'结尾的访问,性能上更加高效,但是再访问路径上必须都以'.do'结尾,URL不太文雅

    综上所述,推荐使用第二和第三中方案
    ————————————————
    版权声明:本文为CSDN博主「van久」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_40594137/article/details/79112700

  • 相关阅读:
    Swift入坑系列—集合类型
    Java正则表达式入门
    Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按)
    Swift之手势总结
    Matlab图像彩色转灰色
    HDU1754_I Hate It(线段树/单点更新)
    Cocos2d-x-lua游戏两个场景互相切换MainScene01切换到MainScene02
    freemarker自己定义标签(二)
    hibernate 在tomcat7.X 下配置mysql数据源
    WinCE隐藏显示任务栏,当任务栏隐藏时将其显示,当任务栏显示时将其隐藏(FindWindow,ShowWindow,IsWindowVisible),
  • 原文地址:https://www.cnblogs.com/de-ming/p/14544842.html
Copyright © 2011-2022 走看看