分析:
(1)pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象,可以用来保存数据。并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。
(2)pageContext作为域对象
pageContext对象的方法
public void setAttribute(java.lang.String name,java.lang.Object value)
public java.lang.Object getAttribute(java.lang.String name)
public void removeAttribute(java.lang.String name)
pageContext对象中还封装了访问其它域的方法
public java.lang.Object getAttribute(java.lang.String name,int scope)
public void setAttribute(java.lang.String name, java.lang.Object value,int scope)
public void removeAttribute(java.lang.String name,int scope)
代表各个域的常量
PageContext.APPLICATION_SCOPE
PageContext.SESSION_SCOPE
PageContext.REQUEST_SCOPE
PageContext.PAGE_SCOPE
(3)代码:yu.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
pageContext.setAttribute("name", "wangtd-page", pageContext.PAGE_SCOPE);
pageContext.setAttribute("name", "wangtd-request", pageContext.REQUEST_SCOPE);
pageContext.setAttribute("name", "wangtd-session", pageContext.SESSION_SCOPE);
pageContext.setAttribute("name", "wangtd-application", pageContext.APPLICATION_SCOPE);
%>
<%-- <%
pageContext.setAttribute("name", "wangtd-page");//page,当前页
%> --%>
获取pageContext域中的值
<%=pageContext.getAttribute("name") %>
${name}
${pageScope.name}
<%-- <%
request.setAttribute("name", "wangtd-request");//page,当前页
%> --%>
获取request域中的值
<%=request.getAttribute("name") %>
${name}
${requestScope.name}
<%
// response.sendRedirect("./houyu.jsp");
//request.getRequestDispatcher("./houyu.jsp").forward(request, response);
%>
<%-- <%
session.setAttribute("name", "wangtd-session");//page,当前页
%> --%>
获取session域中的值
<%=session.getAttribute("name") %>
${name}
${sessionScope.name}
houyu.jsp
<%-- <%
application.setAttribute("name", "wangtd-application");//page,当前页
%> --%>
获取application域中的值
<%=application.getAttribute("name") %>
${name}
${applicationScope.name}
代码:houyu.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
显示其它页面中的pageContext的值
<%=pageContext.getAttribute("name") %>
显示其它页面中的request的值
<%=request.getAttribute("name") %>
显示其它页面中的session的值
<%=session.getAttribute("name") %>
显示其它页面中的application的值
<%=application.getAttribute("name") %>
(4)代码分析及截图
经编译的servlet源文件yu.java类
(1)分析:pageContext域,说的pageContext对象不是page对象,pageContext是当前页的上下文
下面这个页中的值(pageContex对象)
在这个页中取不到
说明pageContext这个域对象中存的值只能在当前页中有效
Page说的是pageContext对象,不是下面这个
(2)分析request域
这个页面
实现效果
分析:
在第二行得到是wangtd-page,因为写的是${name}首先从pageScope中获取,若没有再从request中获取
重定向:地址会发生变化,但是值不会传递过来response.sendRedirect("./houyu.jsp");
转发: 地址不会发生变化,但是值会传递过来request.getRequestDispatcher("./houyu.jsp").forward(request, response);
(3)session域分析
session实现效果
分析:能获取session中的值,不用转发
(4)分析:application域实现效果
分析:application域是servlet中的servletContext对象
总结:从大到小的域范围
ServletContext代表的是整个web应用程序的上下文,
session会话只有自己这个会话才有作用
request是一次请求一次响应的过程
pageContext是当前页的过程
pageContext这个也可以直接存值:
<%
pageContext.setAttribute("name", "wangtd-page", pageContext.PAGE_SCOPE);
pageContext.setAttribute("name", "wangtd-request", pageContext.REQUEST_SCOPE);
pageContext.setAttribute("name", "wangtd-session", pageContext.SESSION_SCOPE);
pageContext.setAttribute("name", "wangtd-application", pageContext.APPLICATION_SCOPE);
%>