SpringMVC 静态资源配置,使得可以通过url直接访问!
刚开始使用springMVC开发web时,配置了DispatcherServlet拦截所有的请求(包括静态资源),对于每个请求都必须在Controller层编写相应的处理器处理。
<!-- 配置前端控制器 -->
<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/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>
按照上面的拦截配置,将无法访问http://localhsot:8080/views/index.jsp等页面静态资源。
下面列出三种方法解决问题:
方法一:在web.xml的DispatcherServlet中添加 <url-pattern>/views/</url-pattern>请求拦截;其作用是所有/views开头的请求均被转发到views目录下处理。
<!-- 配置前端控制器 -->
<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/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>/views/</url-pattern> <!--所有/views请求都会映射到views目录下-->
<url-pattern>/</url-pattern> <!--/表示拦截所有请求 -->
</servlet-mapping>
方法二:在springmvc.xml文件中添加如下资源映射配置,对于/views/xxx请求直接转到目录views下处理。
<!--views目录下的静态资源不拦截-->
<mvc:resources mapping="/views/**" location="/views/"></mvc:resources>
方法三:所有静态资源均不被配置的DispatcherServlet拦截
<!--所有静态资源都通过默认处理器处理-->
<mvc:default-servlet-handler/>
其它的如同 JS、CSS也可按照上面的方法之一配置,避免被DispatcherServlet拦截。