通過案例比較四大域物件的作用域
阿新 • • 發佈:2019-01-28
pageContext的作用域只在當前頁面:
重點:
pageContext可以操作其他三大域物件
pageContext.setAttribute("p","request",PageContext.REQUEST_SCOPE);
等同於req.setAttribute("p","request");
其他session application 類似
pageContext.jsp
<body>
<%
pageContext.setAttribute("p","pp");
request.getRequestDispatcher("/pageContext1.jsp" ).forward(request,response);
//pageContext可以操作其他三大域物件
//pageContext.setAttribute("p","request",PageContext.REQUEST_SCOPE);
//等同於 req.setAttribute 其他session application 類似
%>
</body>
pageContext1.jsp
<body>
<%=pageContext.getAttribute("p")%>
</body>
pageContext.jsp轉發到pageContext.jsp的結果為:
1.看看轉發過後,四個作用域是否能取到值:
pageContext.jsp
<%
pageContext.setAttribute("p","pp");
request.setAttribute("p","request");
session.setAttribute("p","session");
application.setAttribute("p","application" );
request.getRequestDispatcher("/pageContext1.jsp").forward(request,response);
//pageContext可以操作其他三大域物件
//pageContext.setAttribute("p","request",PageContext.REQUEST_SCOPE);
//等同於 req.setAttribute 其他session application 類似
%>
pageContext1.jsp
<body>
<%=pageContext.getAttribute("p")%>
<%=request.getAttribute("p")%>
<%=session.getAttribute("p")%>
<%=application.getAttribute("p")%>
</body>
結果如下所示:
2.重定向後看看四個作用域的取值情況
3.不轉發也不重定向,先訪問pageContext.jsp,再訪問pageContext1.jsp
session能取到值的原因:
當瀏覽器去訪問第一個jsp時,伺服器端已經建立了一個session,並將sessionId回了瀏覽器端的cookie,當瀏覽器訪問此應用下的第二個頁面時,瀏覽器端帶著sessionId,那麼伺服器端就知道是同一個session了。
4.pageContext的重要方法
findAttribute(String name);
自動從page request session application依次查詢,找到了就取值,結束查詢。
四大域物件:實際開發
PageContext : pageConext 存放的資料在當前頁面有效。開發時使用較少。
ServletRequest: request 存放的資料在一次請求(轉發)內有效。使用非常多。
HttpSession: session 存放的資料在一次會話中有效。使用的比較多。如:存放使用者的登入資訊,購物車功能。
ServletContext: application 存放的資料在整個應用範圍內都有效。因為範圍太大,應儘量少用。