SpringMVC下關於靜態資源訪問

走我們釣魚去發表於2021-01-24

SpringMVC靜態資源訪問

聊一聊關於靜態資源的訪問問題

首先,我們要對web.xml裡面的DispatcherServlet進行設定

<!--    中央排程器-->
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springMVC.xml</param-value>
    </init-param>
    <!--tomcat 一啟動就可以載入中央排程器,數字只要大於0 即可-->
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <!--
		url-pattern設定為:"/",當你使用了"/",他會替代Tomcat中的default,
		導致所有的資源都給DispatcherServlet處理,預設情況下DispatcherServlet
		沒有處理靜態資源的能力,沒有控制器物件能處理靜態資源的訪問,所以導致靜態資源
		訪問失敗都是404,動態代理可以正常訪問。如果不設定url-pattern設定為:"/",
		則不存在靜態資源訪問不到
	-->
    <url-pattern>/</url-pattern>
</servlet-mapping>

由於設定了url-pattern為:"/",接下來我們還需要設定springmvc的配置檔案,讓靜態資源可以被訪問到。有兩種方式

  1. 第一種方式
<!--新增該標籤-->
<mvc:default-servlet-handler />
<!--
原理:
	給程式記憶體中增加一個處理器物件:DefaultServletHttpRquestHandler。
	讓這個物件可以把接收到的請求轉發給Tomcat的default這個servlet。
	但是這個標籤與@RequestMapping這個註解有衝突,所以需要加入註解驅動:<mvc:annotation-driven /> 
-->
<mvc:annotation-driven /> 
  1. 第二種方式
<!--
	使用框架中的:<mvc:resource mapping="" location=""/>標籤,
	標籤加入後框架會自己建立ResourceHttpRequestHandler這個處理器物件。
	讓這個物件處理靜態資源的訪問,不依賴於Tomcat伺服器。該標籤與@RequestMapping
	註解有衝突,需要加註解驅動:<mvc:annotation-driven /> 
	引數:
		location:靜態資源在你的專案中的位置 
		mapping:訪問靜態資源的URI地址,使用萬用字元 ** ,代表多級任意
	引數內的靜態資源皆可以被訪問
-->
<mvc:resources location="/img/" mapping="/img/**"/>

好啦,這就是目前作為一個算不上菜鳥的菜鳥對springmvc靜態資源訪問的掌握程度。歡迎留言

相關文章