伺服器級別的例子就是請求轉發
,轉發是由伺服器自己處理,跟使用者端(瀏覽器)無關,所以瀏覽器上的位址列也就不會改變。
使用者端級別的例子就是重定向
,兩次請求,兩次響應。所以位址列會改變。
為了安全。比如圖中success.jsp在WEB-INF目錄下,在頁面中用超連結a標籤或者js的location.href去直接轉向它,會找不到。因為這種是使用者端請求,設定這種許可權就能保證一些檔案的安全。
放在webapp下。
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>
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");
}
}
如果符合要求的情況下也可以在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">