解決使用SpringMVC時,css、js、image等靜態資源無法載入的問題
阿新 • • 發佈:2019-01-10
問題:在使用SpringMVC框架時,配置web.xml檔案時,springDispatcherServlet的配置如下
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置Spring mvc下的配置檔案的位置和名稱 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
可以看到servlet過濾的是所有的請求url,因此當瀏覽器在訪問css、js、image等靜態資源時也需要通過驗證是否已經有相關的對映,如果沒有則無法訪問到(有時可能會覺得是路徑配置不對,但是你會發現無論怎麼改路徑都訪問不到),比如你在controller裡註解了一個請求的 url,那麼你就可以訪問到你想獲取的資源或者頁面,但是靜態資源時沒有註解的,所以當你在頁面上使用css或者引入js檔案時就無法訪問到。
解決辦法:新增預設的servlet-mapping 如下面所示:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.ico</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
將你所需要訪問靜態資源添以萬用字元的形式加到web.xml的servlet-mapping中,就可以輕鬆地訪問到你精心設計的js和css了。