spring mvc中页面资源无法读取css、js静态文件,404

问题描述: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等静态文件也将被拦截,不能访问。

猜你喜欢

转载自dushen.iteye.com/blog/2406913