1. 程式人生 > >WEB-INF下的jsp資源訪問注意

WEB-INF下的jsp資源訪問注意

原文:http://www.cnblogs.com/x_wukong/p/3969114.html

web-inf目錄是不對外開放的,外部沒辦法直接訪問到(即不能通過URL訪問)。所有隻能通過對映來訪問,比如對映為一個action或者servlet通過伺服器端跳轉來訪問到具體的頁面。這樣可以限制訪問,提高安全性。


如圖結構:


1、把頁面資原始檔只能放在webroot下面,如 CSS,js,image等.放在WEB-INF下引用不了。

2、只能用轉向方式來訪問WEB-INF目錄下的JSP,不用採用重定向的方式請求該目錄裡面的任何資源。

       重定向方式: 如struts-config檔案中配置<forward name="success" path="/WEB-INF/main.jsp" redirect="true"/>

       或在action中response.sendRedirect("/error.jsp");                    

       重定向的含義就是伺服器把地址發給客戶端,讓客戶端去訪問.這種辦法顯然針對WEB-INF目錄是無用功.

3、WEB-INF目錄下檔案訪問資原始檔時,可以忽略WEB-INF這一層目錄。如index.jsp 要用css目錄裡的一個css檔案.     <link rel="stylesheet" type="text/css" href="css/**.css " />這樣就行了,從客戶端的地址可以看出來伺服器轉向index.jsp就是在webroot下面.所以index.jsp和css目錄可以講是同一級目錄。

4、WEB-INF目錄下的檔案之間如何訪問呢。

(1)方式一:

  在main.jsp用

    <a href="oa.do ">測試OA的路徑</a>

      或者

      <jsp:forward page ="/WEB-INF/jsp/test/test.jsp" />

  訪問。

(2)方式二:在action類中或者struts.xml中

  如果main.jsp有很多處連結到WEB-INF目錄下的其它頁面.那就得有10個轉向Action。這個可以用DispatchAction類加引數專門處理轉向工作。

      1 request.getRequestDispatcher("/WEB-INF /main.jsp").forward(request, response); 

 

      在struts-config檔案中配置    

      <forward name="success" path="/WEB-INF/main.jsp" />      

  這都是伺服器讀取了該頁面內容,併發送到客戶端.客戶端的地址不變.內容跳轉了。

另外,在jsp頁面中訪問js、css等靜態資源時,推薦使用絕對路徑,避免路徑問題而導致頁面效果出不來。

獲取專案絕對路徑(根路徑)的方法:<%path=request.getContextPath();%>

在需要訪問的資源路徑前加上path即可,如:path/js/jQuery.js。