news 2026/1/30 16:08:30

JSP内置对象及作用域双亲委派机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JSP内置对象及作用域双亲委派机制

九大内置对象

  • PageContext 存东西
  • Request 存东西
  • Response
  • Session 存东西
  • Application 【ServletContext】存东西
  • config 【ServletConfig】
  • out
  • page,不用了解
  • exception,和java异常一样

常用作用域

  • request:客户端向服务端发送的请求,产生的数据,用户看完就没用了,比如新闻,用户看完没用的!
  • session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车;
  • aplication:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据;

共享数据

pageContextDemo01.jsp

<%@ page contentType="text/html;charset=UTF-8"language="java"%><html><head><title>Title</title></head><body><%--内置对象--%><%pageContext.setAttribute("name1","张三1");//保存的数据只在一个页面有效request.setAttribute("name2","张三2");//保存到数据只在一次请求中有效,请求转发会携带这个数据session.setAttribute("name3","张三3");//session中保存的数据,只在一次会话中有效,打开浏览器到浏览器关闭,数据就会消失application.setAttribute("name4","张三4");//application中保存的数据,只在一个服务器中有效,打开服务器到服务器关闭,数据就会消失%><%--脚本片段中的怠慢,会被原封不动的生成到.JS.java 要求:这里面的代码:必须保证Java语法的正确性--%><%// 从pageContext去除,我们通过寻找的方式来// 从底层到高蹭(作用域):pageContext -> request -> session -> application// 双亲委派机制:原理也是差不多Stringname1=(String)pageContext.findAttribute("name1");Stringname2=(String)pageContext.findAttribute("name2");Stringname3=(String)pageContext.findAttribute("name3");Stringname4=(String)pageContext.findAttribute("name4");Stringname5=(String)pageContext.findAttribute("name5");%><%--使用EL表达式输出 ${}--%><h1>${name1}</h1><h1>${name2}</h1><h1>${name3}</h1><h1>${name4}</h1><h1><%=name5%></h1></body></html>

pagedemo02.jsp

<%@ page contentType="text/html;charset=UTF-8"language="java"%><html><head><title>Title</title></head><body><%// 从pageContext去除,我们通过寻找的方式来// 从底层到高蹭(作用域):pageContext -> request -> session -> application// 双亲委派机制:原理也是差不多Stringname1=(String)pageContext.findAttribute("name1");Stringname2=(String)pageContext.findAttribute("name2");Stringname3=(String)pageContext.findAttribute("name3");Stringname4=(String)pageContext.findAttribute("name4");Stringname5=(String)pageContext.findAttribute("name5");%><%--使用EL表达式输出 ${}--%><h1>${name1}</h1><h1>${name2}</h1><h1>${name3}</h1><h1>${name4}</h1><h1><%=name5%></h1></body></html>

可以发现访问pagedemo02的时候只可以获取session和application的内容

PageContext

作用域

pagedemo03.jsp

<%@ page contentType="text/html;charset=UTF-8"language="java"%><html><head><title>Title</title></head><body><%--PageContext类:publicstaticfinalintPAGE_SCOPE=1;publicstaticfinalintREQUEST_SCOPE=2;publicstaticfinalintSESSION_SCOPE=3;publicstaticfinalintAPPLICATION_SCOPE=4;//scope:作用域publicvoidsetAttribute(Stringname,Objectattribute,intscope){switch(scope){case1:this.mPage.put(name,attribute);break;case2:this.mRequest.put(name,attribute);break;case3:this.mSession.put(name,attribute);break;case4:this.mApp.put(name,attribute);break;default:thrownewIllegalArgumentException("Bad scope "+scope);}}--%><%pageContext.setAttribute("hello1","hello1",PageContext.SESSION_SCOPE);//session.setAttribute("hello1","hello1"); 这个等价于上一行的代码%></body></html>

转发

<%pageContext.forward("/index.jsp");%>

pageContextDemo03.jsp

<%@ page contentType="text/html;charset=UTF-8"language="java"%><html><head><title>Title</title></head><body><%pageContext.forward("/index.jsp");//request.getRequestDispatcher("/index.jsp").forward(request,response); 等价于上面那行%></body></html>

双亲委派机制

原理

java.lang.String

packagejava.lang;publicclassString{publicvoidtest(){System.out.println("String");}}

java.lang.Test

packagejava.lang;importjava.lang.String;publicclassTest{// 从上加载,从下寻找//RT.jar//扩展类//应用publicstaticvoidmain(String[]args){Strings=newString();}}

Ctrl+右键查看类

可以发现加载的类并不是我们自己写的应用类,而是加载到了本身源码包写好的类中

双亲委派机制只会加载一个类,加载的顺序从上往下加载,寻找可以加载的类加载器是从下往上寻找。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/30 12:54:04

【毕业设计】基于springboot的足球训练营系统的设计与实现设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/1/30 1:53:41

利用DeepSeek计算abcde五人排成一队,要使c在ab 之间,有几种排法

我们来逐步推理&#xff1a;1. 理解条件 “c在ab之间”意思是 a、b、c三人的相对顺序必须是 a-c-b 或者 b-c-a&#xff08;即c在a和b正中间&#xff09;&#xff0c;并且它们三个人之间不一定相邻&#xff0c;但整体相对顺序要满足中间的是c。 条件&#xff1a;c的位置在a与b的…

作者头像 李华
网站建设 2026/1/30 4:45:56

786786

786786

作者头像 李华
网站建设 2026/1/30 1:53:55

Langchain-Chatchat在线学习与增量更新机制

Langchain-Chatchat在线学习与增量更新机制 在企业知识管理日益智能化的今天&#xff0c;一个常见的痛点浮现出来&#xff1a;新政策发布了、产品文档更新了、内部流程调整了——可员工问起时&#xff0c;AI助手却还在引用三个月前的旧内容。更让人头疼的是&#xff0c;为了“刷…

作者头像 李华
网站建设 2026/1/31 12:03:36

构建不确定集合

两阶段鲁棒优化指导&#xff0c;分布鲁棒&#xff0c;kkt函数附带经典代码电力系统调度工程师老张最近遇到了头疼的问题——风电出力预测跟闹着玩似的&#xff0c;误差能到30%。传统的随机规划模型在极端天气面前像个纸糊的狮子&#xff0c;这时候两阶段鲁棒优化&#xff08;Tw…

作者头像 李华
网站建设 2026/1/30 14:58:02

Flutter---常用打印图标

Flutter打印中常用的小图标&#xff08;Emoji&#xff09;可以提高日志的可读性状态/操作图标print("✅ 操作成功"); print("✔️ 完成"); print("&#x1f3af; 目标达成"); print("&#x1f31f; 优秀");print("❌ 操作失败&qu…

作者头像 李华