用 Spring MVC 開發應用程序,對于初學者有一個很頭疼的問題,那就是程序數據都已經查詢出來了,但界面樣式仍然十分丑陋,加載不了 css,js,圖片等資源文件。當你在瀏覽器上直接輸入某個css文件的路徑時,直接得到404錯誤,而路徑肯定沒有錯,其原因就在于在web.xml 中配置了類似如下的 spring servlet:

程序代碼
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
請注意 <url-pattern>/</url-pattern> 這表示這個servlet 攔截了所有的請求,包括css,js等。所以出現上面描述的情況。如何解決這個css,js等路徑問題呢,有如下幾種解決方案.
1. 使用spring mvc resource 去讀取靜態文件比如在 WEN-INF 下建立static 文件夾,并在 static 文件夾里面建立css 文件夾,然后建立 1.css 文件.
修改 mvc-dispatcher-servlet.xml 文件

程序代碼
<mvc:resources mapping="/static/**" location="/WEB-INF/static/"/>
這樣配置之后,可以通過
http://your-ip:port/your-app/static/css/1.css 直接訪問了。
2. 采用 default servlet 在 web.xml 里面配置

程序代碼
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
這樣做了之后,所有前綴為static 的請求都交給default servlet 去處理。如果你請求
http://your-ip:port/your-app/static/css/1.css ,就表示在 webcontent 目錄下的css文件夾下的1.css文件。
3. 通過文件擴展名進行處理 在 web.xml 里面配置

程序代碼
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
4. 對spring servlet 不用restful 風格。在url 上加上前綴

程序代碼
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/app</url-pattern>
</servlet-mapping>
這樣做的目的是讓 dispatchservlet 去攔截以/app 開頭的那些 URL,并不攔截css,js等。
5. 對spring servlet 不用restful 風格。在url 上加上后綴

程序代碼
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
這樣做的目的是讓 dispatchservlet 只攔截*.do 的url. 并不攔截css,js等。
上面介紹的5種方法,根據情況自己任意選擇一種,現在沒辦法說那種好,那種方法不好,都有可取之處,用在不同的場景而已。