JavaWeb知识小汇(5)—— pageContext

pageContext

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false" %>
<html>
<head>
    <title>scope</title>
</head>
<body>
<%
    pageContext.setAttribute("name1", "pageContext");//保存的数据只在一个人页面内有效
    request.setAttribute("name2", "request");//保存的数据只在一次请求内有效,请求转发
    session.setAttribute("name3", "session");//保存的数据只在一次会话内有效,即关闭浏览器结束一次会话
    application.setAttribute("name4", "application");//保存的数据只在服务器内有效,关闭服务器失效

%>
<%
    //从pageContext取出,是通过寻找的方式
    //作用域从底层到高层pageContext->request->session->application
    String name1 = (String) pageContext.findAttribute("name1");
    String name2 = (String) pageContext.findAttribute("name2");
    String name3 = (String) pageContext.findAttribute("name3");
    String name4 = (String) pageContext.findAttribute("name4");
    String name5 = (String) pageContext.findAttribute("name5");//不存在
%>
<h1>结果为</h1>
<h3>name1(el):${name1}</h3>
<h3>name2(el):${name2}</h3>
<h3>name3(el):${name3}</h3>
<h3>name4(el):${name4}</h3>
<h3>name5(el):${name5}</h3><!--不显示值-->
<h3>name5(java表达式输出):<%=name5%></h3><!--返回null-->

</body>
</html>

PageContext作用域从底层到高层pageContext->request->session->application,源码分析

public abstract class PageContext extends JspContext {
    
    
    public static final int PAGE_SCOPE = 1;
    public static final int REQUEST_SCOPE = 2;
    public static final int SESSION_SCOPE = 3;
    public static final int APPLICATION_SCOPE = 4;
    ...}


//因此,此代码含义一样
pageContext.setAttribute("i", "o", PageContext.SESSION_SCOPE);
session.setAttribute("i", "o");
//都是请求转发的效果
pageContext.forward("scope1.jsp");
request.getRequestDispatcher("scope1.jsp").forward(request, response);
<jsp:forward page="scope1.jsp"></jsp:forward>

request:客户端向服务的发送请求,产生的数据,用户用于用完就没有用了,比如:新闻

session:客户端向服务的发送请求,产生的数据,用户用于用完一会还要用,比如:购物车

application:客户端向服务的发送请求,产生的数据,一个用户用于用完,其他用户还可能用,比如:聊天数据

猜你喜欢

转载自blog.csdn.net/weixin_45734378/article/details/112999480