SpringMVC之静态资源访问

    xiaoxiao2021-12-14  22

    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可以过滤所有路径,免去了需要配置过滤器;

    转载请注明原文地址: https://ju.6miu.com/read-968029.html

    最新回复(0)