pageContext对象的类型是PageContext,叫jsp的上下文对象
1)可以获取其他八个内置对象
public class hello_jsp { public void _jspService(request,response){ 创建内置对象 HttpSession session =....; ServletConfig config = ....; 把8个经常使用的内置对象封装到PageContext对象中 PageContext pageContext = 封装; 调用method1方法 method1(pageContext); } public void method1(PageContext pageContext){ //希望使用内置对象 //从PageContext对象中获取其他8个内置对象 JspWriter out =pageContext.getOut(); HttpServletRequest rquest = pageContext.getRequest(); ........ } }
使用场景: 在自定义标签的时候,PageContext对象频繁使用到!!!
2)本身是一个域对象
ServletContext context域
HttpServletRequet request域
HttpSession session域
PageContext page域
作用: 保存数据和获取数据,用于共享数据
保存数据
1)默认情况下,保存到page域
pageContext.setAttribute("name");
2)可以向四个域对象保存数据
pageContext.setAttribute("name",域范围常量)
获取数据
1)默认情况下,从page域获取
pageContext.getAttribute("name")
2)可以从四个域中获取数据
pageContext.getAttribute("name",域范围常量)
域范围常量:
PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext..SESSION_SCOPE
PageContext.APPLICATION_SCOPE
3)自动在四个域中搜索数据
pageContext.findAttribute("name");
顺序: page域 -> request域 -> session域- > context域(application域)
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" isErrorPage="true" session="true" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>pageContext对象</title> </head> <body> <% //1)可以获取其他8个内置对象 //response.getWriter().write("是否相等?"+(out==pageContext.getOut()) +"<br/>"); //response.getWriter().write("是否相等?"+(session==pageContext.getSession())); %> <%-- 2)pageContext作为域对象使用 2.1 可以往不同域对象中存取数据 --%> <% //保存数据。默认情况下,保存在page域中 pageContext.setAttribute("message","page's message"); pageContext.setAttribute("message","request's messsage",PageContext.REQUEST_SCOPE);//保存到request域中 pageContext.setAttribute("message","session's messsage",PageContext.SESSION_SCOPE);//保存到sessio域中 pageContext.setAttribute("message","application's messsage",PageContext.APPLICATION_SCOPE);//保存到context域中 //request.setAttribute("message","request's message"); 等价于上面的代码 %> <% //获取数据 //String message = (String)pageContext.getAttribute("message"); //out.write(message); %> <%--从request域中取出数据 --%> <%-- 原则: 1)在哪个域中保存数据,就必须从哪个域取出数据!!! --%> <%=pageContext.getAttribute("message",PageContext.PAGE_SCOPE) %><br/> <%=pageContext.getAttribute("message",PageContext.REQUEST_SCOPE) %><br/> <%=pageContext.getAttribute("message",PageContext.SESSION_SCOPE) %><br/> <%=pageContext.getAttribute("message",PageContext.APPLICATION_SCOPE) %><br/> <hr/> <%-- findAttribute(): 在四个域自动搜索数据 顺序: page域 -> request域 -> session域 -> context域 --%> <%=pageContext.findAttribute("message") %> <% //request.getAttribute("message") %><br/> <% //转发 // request.getRequestDispatcher("/03.pageContext2.jsp").forward(request,response); //重定向 response.sendRedirect(request.getContextPath()+"/pageContext2.jsp"); %> </body> </html>
pageContext2.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>从四个域中获取数据</title> </head> <body> page域:<%=pageContext.getAttribute("message",PageContext.PAGE_SCOPE) %><br/> request域: <%=pageContext.getAttribute("message",PageContext.REQUEST_SCOPE) %><br/> session域: <%=pageContext.getAttribute("message",PageContext.SESSION_SCOPE) %><br/> context域:<%=pageContext.getAttribute("message",PageContext.APPLICATION_SCOPE) %><br/> </body> </html>
运行显示:
page域:null request域: null session域: session's messsage context域:application's messsage