【spring】靜態資源的訪問受限解決方法

前言                                                                                                     

      咱們知道在整合spring mvc框架的時候須要在web.xml中配置一個servlet css

代碼以下web

<!--spring mvc 的DispatcherServlet-->
    <servlet>
        <servlet-name>enterprise-servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--spring mvc 的 配置文件名稱,若是配置文件名和<servlet-name>相同則不須要此配置-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:enterprise-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <!--對文件上傳的限制-->
        <multipart-config>
            <max-file-size>52428800</max-file-size>
            <max-request-size>52428800</max-request-size>
            <file-size-threshold>0</file-size-threshold>
        </multipart-config>
    </servlet>
    <servlet-mapping>
        <servlet-name>enterprise-servlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

問題所在                                                                                               

    其中servlet攔截的url-pattern爲  /   :這表明該servlet攔截全部的請求,包括靜態資源文件所發出的請求  spring

如:    http://localhost:8080/work/public/image/image.png     該請求會進入DispatcherServlet,而後會檢查controller中是否存在該請求映射requestMapping,很明顯此時沒有相匹配的請求映射,最終頁面顯示圖片加載失敗。tomcat

解決                      

方法一:mvc

        這裏的DispatcherServlet 是spring mvc 中的一個servlet,而面對項目中衆多的servlet,他們都會有一個加載順序。此時咱們能夠經過激活tomcat的默認servlet default來加載靜態資源.可是該servlet必須配置在DispatcherServlet的前面app

以下配置:框架

 <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/public/*</url-pattern><!--public下存放靜態文件,包括css,lib,image等-->
 </servlet-mapping>

   也能夠分別定義:url

<servlet-mapping>  
    <servlet-name>default</servlet-name> 
    <url-pattern>*.jpg</url-pattern>    
</servlet-mapping>   
<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> 

 

方法二:spa

       spring mvc 提供瞭解決方法,即在spring mvc 的配置文件中配置一個handler,變化:在走完DispatcherServlet以後若是沒有匹配到controller,則會再去請求靜態資源,查看是否存在該靜態資源,而後加載!.net

 <mvc:default-servlet-handler/>

 

 

詳情能夠看看這裏:springMVC對靜態資源訪問的處理

相關文章
相關標籤/搜索