之前一直使用*.do來做的,但是絕的*.do很丑,於是就改用“/”來配置:
<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
但是帶來的問題是如何訪問到靜態的文件,如jpg,js,css?
如果你的DispatcherServlet攔截"*.do"這樣的有后綴的URL,就不存在訪問不到靜態資源的問題。
如果你的DispatcherServlet攔截"/",為了實現REST風格,攔截了所有的請求,那么同時對*.js,*.jpg等靜態文件的訪問也就被攔截了。
我們要解決這個問題。
目的:可以正常訪問靜態文件,不可以找不到靜態文件報404。
方案一:激活Tomcat的defaultServlet來處理靜態文件
<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>
要寫在DispatcherServlet的前面, 讓 defaultServlet先攔截請求,這樣請求就不會進入Spring了,我想性能是最好的吧。
Tomcat, Jetty, JBoss, and GlassFish 自帶的默認Servlet的名字 -- "default"
Google App Engine 自帶的 默認Servlet的名字 -- "_ah_default"
Resin 自帶的 默認Servlet的名字 -- "resin-file"
WebLogic 自帶的 默認Servlet的名字 -- "FileServlet"
WebSphere 自帶的 默認Servlet的名字 -- "SimpleFileServlet"
另外還有其余兩種解決方法,大家可以參看:http://blog.csdn.net/this_super/article/details/7884383