SpringMVC之静态资源访问

来源:互联网 发布:小说网源码加自动采集 编辑:程序博客网 时间:2024/05/16 13:52

web.xml中的DispatcherServlet对应的<url-pattern>/</url-pattern>拦截了所有请求,静态资源也无法访问。

有的静态资源是需要限制访问的,但有的静态资源(如:css样式文件和js文件、页面用到的图片)我们是不希望进行拦截的。

SpringMVC访问静态资源有三种方式。

方案一:激活Tomcat的defaultServlet来处理静态文件

[html] view plain copy
  1. <servlet-mapping>  
  2.     <servlet-name>default</servlet-name>  
  3.     <url-pattern>*.jpg</url-pattern>  
  4. </servlet-mapping>  
  5. <servlet-mapping>  
  6.     <servlet-name>default</servlet-name>  
  7.     <url-pattern>*.js</url-pattern>  
  8. </servlet-mapping>  
  9. <servlet-mapping>  
  10.     <servlet-name>default</servlet-name>  
  11.     <url-pattern>*.css</url-pattern>  
  12. </servlet-mapping>  

每种不需要过滤文件的后缀都需要设置一个。要写在DispatcherServlet的前面, 让defaultServlet先拦截,这个就不会进入Spring

下面的两种方式都是在springmvc的配置文件中,文件的springmvc文件该怎么配置就不多说了。

且两者都引用了mvc注解,那么需要在使用它们之前加上注解支持:

[html] view plain copy
  1. <mvc:annotation-driven />  
方案二,使用<mvc:default-servlet-handler/>

直接在SpringMVC配置文件中加上以下内容即可。

[html] view plain copy
  1. <mvc:default-servlet-handler/>  

方案三: 在spring3.0.4以后版本提供了mvc:resources

按网上搜的所有方法配置,我的css文件全放在WebContent/static/css下

[html] view plain copy
  1. <mvc:resources location="/static/css/" mapping="/css/**" />  

然而依照网上的配置都不靠谱呀。

控制台出现警示:No mapping found for HTTP request with URI [/springmvcoa/static/css/ack.css] in DispatcherServlet with name 'dispatcherServlet'

页面样式无法加载。

根据控制台警告知道就是这个资源配置路径的问题。

于是直接访问样式文件,页面404报错,控制台出现上面的警告。

既然是路径的问题,我就一步步测试。

新建两个a.txt,路径分别为static/css和static/css/css

http://localhost/springmvcoa/static/css/a.txt按上面的方式,警示内容:WARN PageNotFound:1147 - No mapping found for HTTP request with URI [/springmvcoa/static/css/a.txt] in DispatcherServlet with name 'dispatcherServlet'

不停调试location和resource后,mvc:resource配置为:

[html] view plain copy
  1. <mvc:resources location="/static/css/" mapping="/static/css/**" />  

[html] view plain copy
  1. <mvc:resources location="/static/css/" mapping="static/css/**" />  

均可。
如果要配置多个文件夹就设置多个mvc:resource。

如果是访问static下所有目录,包括css、js、image等文件的目录,则配置:

[html] view plain copy
  1. <mvc:resources location="/static/" mapping="/static/**" />  

这些方式配置的文件都是可直接访问

当加了拦截器,发现配置好可以直接访问的静态资源的路径也会被拦截,

[html] view plain copy
  1. <!-- 拦截器配置 -->  
  2.   <mvc:interceptors>  
  3.     <!-- 登录验证和session控制 -->  
  4.     <mvc:interceptor>  
  5.       <!-- 拦截所有路径 -->  
  6.       <mvc:mapping path="/**"/>  
  7.       <!-- 不过拦截器的请求 -->  
  8.       <mvc:exclude-mapping path="/static/**"/>  
  9.       <mvc:exclude-mapping path="/user/login"/>  
  10.       <bean class="com.ack.crm.interceptor.LoginInterceptor"/>  
  11.     </mvc:interceptor>  
  12.   </mvc:interceptors>  

这样static以及static子目录中的文件路径不会被拦截;登录操作也要配置为不拦截,不然没法进行登录;后期还有退出登录等操作需要不拦截。

SpringMVC可以过滤所有路径,免去了需要配置过滤器;


http://blog.csdn.net/qinshijangshan/article/details/53441394




原创粉丝点击