您的位置:首页 > 编程语言 > Java开发

SpringMVC之静态资源访问

2016-12-03 04:01 330 查看
web.xml中的DispatcherServlet对应的<url-pattern>/</url-pattern>拦截了所有请求,静态资源也无法访问。

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

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

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

<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>

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

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

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

<mvc:annotation-driven />方案二,使用<mvc:default-servlet-handler/>

直接在SpringMVC配置文件中加上以下内容即可。<mvc:default-servlet-handler/>

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

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

<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配置为:

<mvc:resources location="/static/css/" mapping="/static/css/**" />



<mvc:resources location="/static/css/" mapping="static/css/**" />

均可。

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

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

<mvc:resources location="/static/" mapping="/static/**" />
这些方式配置的文件都是可直接访问

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

<!-- 拦截器配置 -->
<mvc:interceptors>
<!-- 登录验证和session控制 -->
<mvc:interceptor>
<!-- 拦截所有路径 -->
<mvc:mapping path="/**"/>
<!-- 不过拦截器的请求 -->
<mvc:exclude-mapping path="/static/**"/>
<mvc:exclude-mapping path="/user/login"/>
<bean class="com.ack.crm.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>

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

SpringMVC可以过滤所有路径,免去了需要配置过滤器;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: