pageContext对象

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
原文地址:https://www.cnblogs.com/loaderman/p/10000880.html