JBOSS 點滴

          豐豐的博客

          Spring MVC程序中得到靜態(tài)資源文件css,js,圖片文件的路徑問題總結(jié)

          Spring MVC程序中得到靜態(tài)資源文件css,js,圖片

          文件的路徑


          問題總結(jié)

          用 Spring MVC 開發(fā)應(yīng)用程序,對于初學者有一個很頭疼的問題,那就是程序數(shù)據(jù)都已經(jīng)查詢出來了,但界面樣式仍然十分丑陋,加載不了 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等。所以出現(xiàn)上面描述的情況。如何解決這個css,js等路徑問題呢,有如下幾種解決方案.

          1. 使用spring mvc resource 去讀取靜態(tài)文件
          比如在 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種方法,根據(jù)情況自己任意選擇一種,現(xiàn)在沒辦法說那種好,那種方法不好,都有可取之處,用在不同的場景而已。

          posted on 2014-08-24 23:12 半導體 閱讀(23879) 評論(3)  編輯  收藏 所屬分類: JAVA環(huán)境配置

          評論

          # re: Spring MVC程序中得到靜態(tài)資源文件css,js,圖片文件的路徑問題總結(jié) 2016-03-17 15:04 王企鵝

          文青  回復  更多評論   

          # re: Spring MVC程序中得到靜態(tài)資源文件css,js,圖片文件的路徑問題總結(jié) 2016-03-22 16:48 路人甲

          非常直觀的解決了我的問題,很又幫助,謝謝。竟然不知道這個 default servlet 的用法,學習了。  回復  更多評論   

          # re: Spring MVC程序中得到靜態(tài)資源文件css,js,圖片文件的路徑問題總結(jié) 2016-05-12 13:47 小小學渣

          非常直觀的解決了我的問題,很又幫助,謝謝。  回復  更多評論   

          主站蜘蛛池模板: 青川县| 万盛区| 临漳县| 合水县| 清水县| 台北市| 迁西县| 桂阳县| 通道| 洪泽县| 大名县| 天祝| 太谷县| 嘉定区| 盱眙县| 福清市| 原平市| 安徽省| 安达市| 新巴尔虎右旗| 芜湖县| 瓦房店市| 巴楚县| 德阳市| 迁西县| 鄢陵县| 东光县| 黄骅市| 宜昌市| 沿河| 贵州省| 绥宁县| 长兴县| 怀化市| 吴堡县| 克拉玛依市| 南丰县| 郴州市| 沙坪坝区| 赫章县| 德保县|