關於WEB-INF的存取

2020-10-22 11:01:11

先上圖

在這裡插入圖片描述

說明

WEB-INF裡內容只能由伺服器級別才能存取,使用者端級別不能存取。

伺服器級別的例子就是請求轉發,轉發是由伺服器自己處理,跟使用者端(瀏覽器)無關,所以瀏覽器上的位址列也就不會改變。
使用者端級別的例子就是重定向,兩次請求,兩次響應。所以位址列會改變。

為什麼設定這種許可權

為了安全。比如圖中success.jsp在WEB-INF目錄下,在頁面中用超連結a標籤或者js的location.href去直接轉向它,會找不到。因為這種是使用者端請求,設定這種許可權就能保證一些檔案的安全。

怎麼讓使用者端級別可以存取

放在webapp下。

程式碼演示一波

  1. 看圖可知,login.jsp檔案在wepapp目錄下,也就是專案名下。

login.jsp

<form method="post" action="${pageContext.request.contextPath}/login3.action">
        使用者名稱:<input type="text" name="username"><br>
        密  碼:<input type="password" name="password"><br>
        <input type="submit" value="登入">
 </form>
  1. 輸入資料,提交到對映的處理器

UserController

	@RequestMapping("login3.action")
    public void login3(User user, HttpSession session, HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
        if ("jack".equals(user.getUsername())&&"1234".equals(user.getPassword())){
            request.getRequestDispatcher("WEB-INF/jsp/success.jsp").forward(request,response);
        }else {
            response.sendRedirect("WEB-INF/jsp/fail.jsp");
        }
    }
  1. 資料匹配正確,會請求轉發。
    注意,success.jsp頁面在WEB-INF目錄下,所以請求轉發的路徑引數要加上WEB-INF/jsp。
  2. 資料匹配不正確,會重定向。
    注意,fail.jsp在WEB-INF目錄下,所以該路徑沒寫錯。但是重定向的原理是讓使用者端再次存取,而WEB-INF目錄下的檔案不能被使用者端存取,所以會報404-未找到。

有一些標籤,可以存取到WEB-INF目錄中的檔案

如果符合要求的情況下也可以在jsp中使用,(原理也都是請求轉發)如:

<a href="javascript:<jsp:forward page='WEB-INF/xxxx.jsp'/>"></a>
<jsp:forward page = "/WEB-INF/jsp/test/test.jsp" />
<jsp:include page="WEB-INF/xxx.jsp">