1. 程式人生 > >web.xml中配置訪問資源URL/時無法訪問.html、.jsp、.js、.css等靜態資源時的解決方案

web.xml中配置訪問資源URL/時無法訪問.html、.jsp、.js、.css等靜態資源時的解決方案

在web應用中,我們在web.xml配置URL路徑問題時,經常這樣配置:
<servlet-mapping>
	<servlet-name>spring-MVC</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>

當然也存在這樣的配置:

<servlet-mapping>
	<servlet-name>spring-MVC</servlet-name>
 	<url-pattern>*.do</url-pattern> 
</servlet-mapping>
兩種配置的區別就是第一種,當我們訪問任意URL資源時,都被名為spring-MVC的servlet來處理,例如:localhost:8080/test/login。第二種則是僅僅是字尾為.do的URL才會被spring-MVC處理,例如:localhost:8080/test/login.do

但是如果我們使用第二種配置,那麼我們對於後臺的訪問都必須加上字尾.do,這明細沒有第一種配置方便,所有我們往往會使用第一種配置方式,但是,問題來了,當我們訪問一個靜態資源時,比如html頁面,同樣的這個URL也會被spring-MVC來處理,這樣往往得不到我們想要的靜態頁面。

解決方案很簡單,在spring-MVC前面,啟用tomcat的defaultServlet來攔截靜態資源的請求,

在web.xml配置檔案中,加上以下程式碼即可:

<servlet-mapping>  
	<servlet-name>default</servlet-name>  
	<url-pattern>*.html</url-pattern>  
</servlet-mapping>
對於.css等其他資源,以此類推。

以下是其他伺服器的情況

Tomcat, Jetty, JBoss, and GlassFish 自帶的預設Servlet的名字 -- "default"
Google App Engine 自帶的 預設Servlet的名字 -- "_ah_default"
Resin 自帶的 預設Servlet的名字 -- "resin-file"
WebLogic 自帶的 預設Servlet的名字  -- "FileServlet"
WebSphere  自帶的 預設Servlet的名字 -- "SimpleFileServlet" 


參閱資料:

http://www.cnblogs.com/rollenholt/archive/2012/12/26/2834209.html

http://blog.csdn.net/this_super/article/details/7884383