小小標籤在web開發中的大做用

    稍微上點規模的項目,一般都會爲不一樣模塊或功能的頁面,js,css等資源創建不一樣的路徑,或者對不一樣的servlet等配置不一樣的虛擬路徑。這時,關於各類路徑的包含和轉向問題長期困擾開發人員。
    按照通常的作法,就是要理解web對資源的包含和轉向原理,即便:都是從當前所在位置起,根據路徑去尋找目標資源。
     好比:
     1.當前位置在path1下的test1.jsp,在test1.jsp中包含style目錄下的css文件drp.css。那麼test1.jsp中就應該這麼寫:
< link rel ="stylesheet" href ="../style/drp.css" >
,即從當前路徑回退一個到跟目錄,而後從根目錄下找style/drp.css。
    2.又:在test1.jsp中js函數中訪問一個配置虛擬路徑的servlet,配置是這樣的
< url-pattern >/servlet/product/AddProductServlet </ url-pattern >
那麼就應該這樣訪問:
../servlet/product/AddProductServlet
,即從當前路徑回退一個到跟目錄,而後從根目錄下找servlet/product/AddProductServlet
   3.又:在AddProductServlet中做轉向
req.getRequestDispatcher( "/path2/test2.jsp").forward(req, resp);
,而在test2.jsp中又包含style目錄下的css文件drp.css。那麼在test2.jsp中應該這麼寫:
< link rel ="stylesheet" href ="../../style/drp.css" >
,即從當前路徑(servlet/product)回退兩次到根目錄,而後從根目錄下找style/drp.css。

這只是個簡單的例子,並無牽扯到多個servlet轉向同一個頁面等複雜狀況。怎麼樣?web開發中的路徑問題夠頭疼的了吧?

如今咱們看看使用<base>標籤是怎麼輕鬆解決這個問題的。
首先,在test1.jsp和test2.jsp中都添加這樣的代碼:

<%
      String path = request.getContextPath();  
      String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
            %>
... ....
< base href="<%=basePath % >">
至於添加在哪一個位置就不用多說了吧,呵呵。
  那麼再在兩個頁面中使用任何資源都從跟目錄查找,在js中訪問任何資源只需在前面加上<%=basePath %>便可。好比上例中test1.jsp的兩處分別應該這樣寫:

< link rel ="stylesheet" href ="style/drp.css" >
... ...
< %=basePath % >servlet/product/AddProductServlet
一樣,test2.jsp中之處應該這麼寫:
< link rel ="stylesheet" href ="style/drp.css" >
不管他們之間引用的資源再多,關係再複雜,只須要記住一句話: <base>標籤讓本頁面全部引用資源都從根目錄找,但它只對頁面元素起做用,對js元素無效。
相關文章
相關標籤/搜索