spring mvc中页面资源无法读取css、js静态文件,404
程序员文章站
2022-04-07 21:18:29
...
问题描述:spring mvc中页面资源无法读取css、js静态文件,自行拼接静态资源的URL后发现报404。
http://localhost:8080/ds-sys-web/assets/css/ie10-viewport-bug-workaround.css
静态资源路径如下:
原因:assets/css/ie10-viewport-bug-workaround.css部分被spring拦截处理了,controller中没有配置requestmapping为assets/css/ie10-viewport-bug-workaround.css的控制器,自然报404了。
解决办法:
方法一:修改web.xml中spring拦截器的url-pattern,如下:
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.shtml</url-pattern>
<!-- 之前配置的为<url-pattern>/</url-pattern> -->
</servlet-mapping>
加一个后缀,使spring只处理以shtml结尾的url
解决!
方法二:在web.xml中添加过滤url:
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<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>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
解决!
方法三: 在spring配置文件中加入如下配置:
<mvc:resources location="/css/" mapping="/css/**" />
解决!
url-pattern有5种配置模式:
(1)/xxx:完全匹配/xxx的路径
(2)/xxx/*:匹配以/xxx开头的路径,请求中必须包含xxx。
(3)/*:匹配/下的所有路径,请求可以进入到action或controller,但是转发jsp时再次被拦截,不能访问jsp界面。
(4).xx:匹配以xx结尾的路径,所有请求必须以.xx结尾,但不会影响访问静态文件。
(5)/:默认模式,未被匹配的路径都将映射到刺servlet,对jpg,js,css等静态文件也将被拦截,不能访问。