web.xml中配置訪問資源URL/時無法訪問.html、.jsp、.js、.css等靜態資源時的解決方案
阿新 • • 發佈:2019-01-07
在web應用中,我們在web.xml配置URL路徑問題時,經常這樣配置: 在web.xml配置檔案中,加上以下程式碼即可:
<servlet-mapping>
<servlet-name>spring-MVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
當然也存在這樣的配置:
兩種配置的區別就是第一種,當我們訪問任意URL資源時,都被名為spring-MVC的servlet來處理,例如:localhost:8080/test/login。第二種則是僅僅是字尾為.do的URL才會被spring-MVC處理,例如:localhost:8080/test/login.do<servlet-mapping> <servlet-name>spring-MVC</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
但是如果我們使用第二種配置,那麼我們對於後臺的訪問都必須加上字尾.do,這明細沒有第一種配置方便,所有我們往往會使用第一種配置方式,但是,問題來了,當我們訪問一個靜態資源時,比如html頁面,同樣的這個URL也會被spring-MVC來處理,這樣往往得不到我們想要的靜態頁面。
解決方案很簡單,在spring-MVC前面,啟用tomcat的defaultServlet來攔截靜態資源的請求,
<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