關於${pageContext.request.contextPath}的理解 (轉載)

    • ${pageContext.request.contextPath}是JSP取得絕對路徑的方法,等價於<%=request.getContextPath()%> 。

      也就是取出部署的應用程序名或者是當前的項目名稱
      瀏覽器

      好比個人項目名稱是demo1在瀏覽器中輸入爲http://localhost:8080/demo1/a.jsp ${pageContext.request.contextPath}或<%=request.getContextPath()%>取出來的就是/demo1,而"/"表明的含義就是http://localhost:8080jsp

      故有時候項目中這樣寫${pageContext.request.contextPath}/a.jsp工具

    • 絕對路徑與相對路徑的比較blog


      1)採用相對路徑遇到的問題 

                  相對路徑當然比較靈活,但若是想複製頁面內的代碼卻變得比較困難,由於不一樣的頁面具備不一樣的相對路徑,複製後必須修改每個鏈接的路徑。 
      若是頁面被多於一個的頁面所包含,那麼被包含頁面中的相對路徑將是不正確的。 
      若是採用Struts的Action返回頁面,那麼因爲頁面路徑與 Action路徑不一樣,使得瀏覽器沒法正確解釋頁面中的路徑,如頁面爲/pages/cust/cust.jsp,圖片全部目錄爲/images /title.gif,這時在/pages/cust/cust.jsp中的所用的路徑爲」http://images.cnblogs.com /title.gif」,可是若是某一個Action的Forward指向這個JSP文件,而這個Action的路徑爲/cust/manage.do, 那麼頁面內容中」http://images.cnblogs.com/title.gif」就再也不指向正確的路徑了。 
      解決以上問題彷佛只有使用絕對路徑了。

      2)採用絕對路徑遇到的問題 

       隨 着不一樣的Web應用發佈方式,絕對路徑的值也不一樣。如Web應用發佈爲MyApp,則路徑」/MyApp/images/title.gif」是正確的, 但發佈爲另外一應用時如MyApp2,這個路徑就不對了,也許這個狀況比較少,但以default方式發佈Web應用時以上絕對路徑也不 同:」/images/title.gif」。 

      二.解決方案 

      1)採用絕對路徑,但爲了解決不一樣部署方式的差異,在全部非struts標籤的路徑前加${pageContext.request.contextPath},如原路徑爲: 
      」/images/title.gif」,改成 
      「${pageContext.request.contextPath}/images/title.gif」。 
      代碼」 ${pageContext.request.contextPath}」的做用是取出部署的應用程序名,這樣無論如何部署,所用路徑都是正確的。
       
      缺點: 
      操做不便,其餘工具沒法正確解釋${pageContext.request.contextPath} 
      2) 採用相對路徑,在每一個JSP文件中加入base標籤,如: 
      <base href="http://${header['host']}${pageContext.request.contextPath}/pages/cust/relation.jsp" /> 
      這樣全部的路徑均可以使用相對路徑。
      缺點:  對於被包含的文件依然無效。      真正使用時須要靈活應用1)和2),寫出更加健壯的代碼。  在使用的時候能夠使 用${pageContext.request.contextPath},也同時能夠使 用<%=request.getContextPath()%>達到一樣的效果,同時,也能夠 將${pageContext.request.contextPath},放入一個JSP文件中,將用C:set放入一個變量中,而後在用的時候用EL 表達式取出來。  
相關文章
相關標籤/搜索