spring-靜態資源訪問並使servlet請求不被攔截


復制地址:http://blog.csdn.net/wu9333/article/details/70859860

如果在web.xml 攔截配置如下:

<!-- Spring MVC servlet -->
<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>

 


那么,所有的請求都會被攔截。導致靜態資源無法訪問。

如果想要解決訪問靜態資源問題,通常使用默認handler,在spring-mvc.xml中配置如下:

<!-- 解除servlet對靜態資源文件訪問的限制,使得靜態資源先經過 -->
<mvc:default-servlet-handler />

 

<!-- 定義跳轉的文件的前后綴 ,視圖模式配置 -->
<bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 前綴和后綴,變成一個可用的url地址 -->
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

 

這個時候新的問題出現了,你會發現以前的Controller中的@RequestMapping又不能訪問了

解決辦法,spring-mvc.xml配置中增加:

<mvc:annotation-driven />

 

增加之后如下:
<!-- 默認的注解映射 -->
<mvc:annotation-driven />

<!-- 解除servlet對靜態資源文件訪問的限制,使得靜態資源先經過 -->
<mvc:default-servlet-handler />

<!-- 定義跳轉的文件的前后綴 ,視圖模式配置 -->
<bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 前綴和后綴,變成一個可用的url地址 -->
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

 

此時,靜態資源和controller都可以正常訪問。


注意:

default-servlet-handler將在SpringMVC上下文中定義一個DefaultServletHttpRequestHandler,它會對進入DispatcherServlet的請求進行篩查。

如果發現是沒有經過映射的請求,就將該請求交由WEB應用服務器默認的Servlet進行處理。如果不是靜態資源的請求,才由DispatcherServlet繼續進行處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM