SpringMVC静态资源访问问题

来源:互联网 发布:武大樱花 知乎 编辑:程序博客网 时间:2024/05/22 22:29

刚开始使用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/"/>  
建议将静态资源的请求路径和实际路径写成一样。


0 0