網站開發中的相對URL問題--JSP

問題描述:
入門網站開發時,咱們會在相對URL問題上有疑惑。例如,在一個jsp頁面中引入css外部文件,
<link rel="stylesheet"
          href="my-styles.css"
         type="text/css" >
當咱們直接訪問時,頁面正常顯示,而有時候跳轉到此頁面,則出現css缺失的狀況,這就是我想說的問題。
 
在分析問題以前,須要引入jsp中的兩個知識點:跳轉(forward)和重定向(redirect),若是你已瞭解相關知識,請直接閱讀解決方案。
引入:
JSP或Servlet之間有兩種相互調用方法,即跳轉(forward)和重定向(redirect).
它們的實現方式分別是:
經過RequestDispatcher的forward方法實現跳轉(你能夠經過HttpServletRequest的getRequestDispatcher方法得到RequestDispatcher);
經過HttpServletRequest的sendRequest方法實現重定向;
區別:
  1. 重定向要求客戶端(或瀏覽器)從新鏈接服務器,獲取新資源(或頁面),而跳轉不須要;
  2. 重定向不會保存HttpServletRequest的信息,跳轉保存;
  3. 重定向會使瀏覽器地址欄地址發生改變,而跳轉保持原來的地址。
說白了,重定向是瀏覽器從服務器重新獲取資源的過程,跳轉是服務器內部頁面之間相互調用的過程,與瀏覽器無關。
正由於此,頁面中相對URL的相對起始目錄會發生變化,舉例來講,page_one.jsp調用page_two.jsp時,
  1. 重定向調用,頁面的相對URL起始目錄爲page_two.jsp所在目錄;
  2. 跳轉調用,頁面的相對URL起始目錄爲page_one.jsp所在目錄;
 
若是頁面中的相對URL如以上例子中的寫法(href="my-style.css",表示css文件存在頁面的起始目錄中),由於頁面的起始目錄會發生變化,因此無論css文件放在何處,都可能出現資源不存在的狀況。
 
解決方案:
這樣的相對URL寫法(href="my-style.css")表示css文件與
由於沒法判斷頁面的訪問方式是跳轉仍是重定向,因此咱們應該以不變應萬變,使不一樣的訪問方式均能成功獲取資源。
最簡單的解決方案是:
  1. 將全部的jsp頁面放在只有服務器才能訪問的WEB-INF文件夾中;
  2. 使用起始目錄爲網站應用的相對URL,以下:
    <link rel=stylesheet
             <!-- 以斜槓"/"開始表示相對URL以網站應用爲起始目錄 -->
             href="/path/my-styles.css"
             type="text/css">
便可解決問題。
但願對你有所幫助!
相關文章
相關標籤/搜索