您当前的位置: 首页 >  spring

梁同学与Android

暂无认证

  • 4浏览

    0关注

    612博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

SpringMVC 中静态资源的处理

梁同学与Android 发布时间:2020-01-24 07:14:07 ,浏览量:4

web项目中web.xml配置

在一个使用springmvc的web项目中,必然在web.xml中要配置前端控制器DispatcherServlet


  springmvc
  org.springframework.web.servlet.DispatcherServlet
  
  1


  springmvc
  / 

这里的url-pattern有两种配置方式

.扩展名,比如.do,古老的方式,不会导致静态资源文件被拦截的问题,但 是不支持RESTful编码风格 /,支持RESTful风格,但是会导致静态资源文件被拦截 还有一种错误的配置方式

/*,错误的方式,可以请求到Controller方法,但是跳转到JSP时会被拦截,JSP不能正常显示

一般来说,企业中更多的是采用第二种配置方式,但这导致了静态资源被拦截

静态资源为什么会被拦截??

我们知道,我们的web项目最终要部署到服务器上,以我们熟悉的Tomcat服务器为例进行说明。

当我们将web应用部署到tomcat服务器上,服务器是先加载全局的web.xml,即"D:\work_folder\java_studying\java_tools\apache-tomcat-9.0.12\conf\web.xml"这是tomcat自带的web.xml文件,然后才会加载我们自己web项目中的web.xml,当我们加url-pattern配置成/

会覆盖掉全局web.xml中对于静态资源的处理,具体可以参考全局web.xml中:


    default
    org.apache.catalina.servlets.DefaultServlet
    
        debug
        0
    
    
        listings
        false
    
    1





    default
    /

这就是默认的servlet,发现与我们配置的url-pattern一样了,导致静态资源也被我们自定义的dispatcherServlet所拦截,那这个类就会去找controller里面的映射了,比如我们访问http://localhost:8080/springmvc/img.png,显然是Controller里面是没有这个映射路径的。

如何处理静态资源被拦截

方式一:手动排除法 在我们的web.xml添加如下配置


        default
        *.jpg

其他地方保持不变,这个粒度显然是比/更小的,它会将*.jpg文件交给servlet-name为default的servlet去处理该请求,默认的servlet为什么就没有拦截了呢?因为它是直接访问。

当然不好的地方是,如果你需要拦截*.html又得配一个,所以比较麻烦。一般不采用

方式二:在springmvc的配置文件中加入以下代码


方式三:在springmvc配置文件中手动指定静态资源路径






这种方式更灵活,功能更丰富,也是可以的

注意 springmvc配置文件中这个配置推荐每次都加 以上就上springmvc中处理静态资源的三种方式

推荐文章:https://blog.csdn.net/xingkongdeasi/article/details/79557198

关注
打赏
1657336530
查看更多评论
立即登录/注册

微信扫码登录

0.0498s