REST风格下如何放行静态资源

在配置DispatcherServlet(前端控制器)时,如果把拦截路径配置成rest风格(即斜杠/),则会将静态资源也一并拦截(比如.css .js ,jpg)为了避免这个情况,可以把拦截路径设置成*.do, *.action, *.html等等.

 1   <!-- 配置前端控制器 -->
 2   <servlet>
 3       <servlet-name>springMVC</servlet-name>
 4       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 5       <init-param>
 6           <param-name>contextConfigLocation</param-name>
 7           <param-value>classpath:springMVC.xml</param-value>
 8       </init-param>
 9   </servlet>
10   
11   <servlet-mapping>
12       <servlet-name>springMVC</servlet-name>
13         <!-- 错误配置 : /* 这样配置的话,最后转发会jsp页面时,仍会被前端控制器拦截 -->
14       <url-pattern>/</url-pattern>
15   </servlet-mapping>

但是,确实想要使用rest风格的话,应该怎么避免静态资源被拦截呢?

方法一 : 激活Tomcat的defaultServlet来处理静态文件

1 <servlet-mapping>
2     <servlet-name>default</servlet-name>
3     <url-pattern>*.jpg</url-pattern>
4 </servlet-mapping>
5 <servlet-mapping>
6     <servlet-name>default</servlet-name>
7     <url-pattern>*.js</url-pattern>
8 </servlet-mapping>
9 <servlet-mapping>

  需要写在前端控制器前,让defaultServlet先拦截.每种类型的文件都要单独写一个<servlet-mapping>

  Tomcat的默认servlet名字是default,所以<servlet-name>标签内写default.

方法二 : 使用<mvc:default-servlet-handler />

  在springMVC-servlet.xml中配置<mvc:default-servlet-handler />后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler

  如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理

  如果使用的web应用服务器的默认servlet名称不是default,那么需要再配置default-servlet-name属性,如下

 1 <mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" /> 

方法三 : 使用<mvc:resources />

 1 <mvc:resources location="/,classpath:/META-INF/publicResources/" mapping="/resources/**"/> 

  会由Spring MVC框架自己处理静态资源,而不是把静态资源的处理交给web应用服务器处理.

  <mvc:resources />允许把静态资源放在任何地方,比如WEB-INF目录下,类路径下,(正常情况下是不可以放在这些位置的,传统web容器的静态资源只能放在web容器的根路径下)甚至可以把静态文件打包到jar中.

  location : 文件真实的路径,是Resources类型的属性,因此可以使用诸如"classpath:"等的资源前缀指定资源位置

  mapping : 映射的路径

  

猜你喜欢

转载自www.cnblogs.com/jinyu59/p/10706263.html