SpringMVC静态资源访问问题

Posted 爱喝啤酒的猴子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC静态资源访问问题相关的知识,希望对你有一定的参考价值。

刚开始使用springmvc,出现了各种意想不到的问题。今天遇到了一个:在springmvc下静态资源无法被前端访问到,出现这种问题的原因如下:

在web.xml中配置springmvc的DispatcherServlet一般如下:

	<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>
如果将DispatcherServlet请求映射配置为"/",则Spring MVC将捕获Web容器所有的请求,包括在这里讨论的静态资源的请求,Spring MVC会将它们当成一个普通请求处理,因此找不到对应处理器将导致错误。

 解决的办法有两个:

1.在web.xml 中配置默认的servlet,具体方法如下:

<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 >*.png</url-pattern>   	     
	</servlet-mapping >
	<servlet-mapping >
		<servlet-name >default </servlet-name >             
		<url-pattern >*.woff</url-pattern>   		     
	</servlet-mapping >
	<servlet-mapping >
		<servlet-name >default </servlet-name >             
		<url-pattern >*.ttf</url-pattern>   		     
	</servlet-mapping >
	<servlet-mapping >
		<servlet-name >default </servlet-name >             
		<url-pattern >*.jpg</url-pattern>   		     
	</servlet-mapping >
根据请求文件的不同配置不同的后缀名。

注意:这种配置方式必须加载DispatcherServlet的配置之前,意思也就是在springmvc启动之前将静态资源的请求处理交给web容器来处理。

2.在springmvc-Servlet.xml中加入以下的配置:

 <mvc:resources location="/assets/" mapping="/assets/**"></mvc:resources>
解释:这段配置即配置静态资源的请求及路径对应的资源mapping表示请求的路径,location表示请求所对应的资源。也可以配置的更加详细:

  1.     <mvc:resources mapping="/javascript/**" location="/static_resources/javascript/"/>  
  2.     <mvc:resources mapping="/styles/**" location="/static_resources/css/"/>  
  3.     <mvc:resources mapping="/images/**" location="/static_resources/images/"/>  
建议将静态资源的请求路径和实际路径写成一样。


以上是关于SpringMVC静态资源访问问题的主要内容,如果未能解决你的问题,请参考以下文章

我在springMVC里配置了 静态资源访问 为啥还是访问不到

springMVC 下访问静态资源

SpringMVC访问静态资源的三种方式

JavaWEB项目静态资源访问问题

SpringMVC访问静态资源的三种方式

SpringMVC访问静态资源的三种方式(转)