spring MVC设置不拦截静态资源

问题产生:

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

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

body{
    background-color: antiquewhite;
}

然后在index.jsp页面引用该样式:

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


解决办法:

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


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

在spring-mvc.xml中添加:

在web.xml中添加:

  
    default
    *.css
    /css/*
  

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

 
  
    dispatcher
    
    *.do
  

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




比较总结:                                                                                                              

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

综上所述,推荐使用第二和第三中方案

你可能感兴趣的:(spring,mvc)