news 2026/4/24 4:03:31

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/4/22 19:16:17

技术三角揭秘:数据工程、指标工程与AI Agent如何协同赋能智能体

01 困境&#xff1a;数据丰饶中的洞察饥荒当代企业正陷入一种数据悖论&#xff1a;数据量呈指数级增长&#xff0c;可从中获得的实时洞察却依然稀缺。据IDC研究&#xff0c;全球企业数据利用率平均不足12%&#xff0c;大量数据资源在沉睡中贬值。问题的根源在于传统数据架构的线…

作者头像 李华
网站建设 2026/4/21 19:33:53

Java毕设选题推荐:基于SpringBoot的民宿客栈管理系统基于springboot的智能民宿预定与游玩系统设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

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

作者头像 李华
网站建设 2026/4/23 7:01:14

Langchain-Chatchat辅助撰写专利申请文件

基于 Langchain-Chatchat 的专利撰写智能辅助系统实践 在知识产权竞争日益激烈的今天&#xff0c;企业对高质量、高效率的专利申请文件撰写需求愈发迫切。一份优秀的专利说明书不仅需要准确描述技术方案&#xff0c;还要规避已有技术、语言规范严谨&#xff0c;并能经受住审查员…

作者头像 李华
网站建设 2026/4/21 2:44:42

Langchain-Chatchat构建多模态知识库的探索

Langchain-Chatchat构建多模态知识库的探索 在企业数字化转型不断深入的今天&#xff0c;一个普遍而棘手的问题浮出水面&#xff1a;如何让沉睡在成千上万个PDF、Word和TXT文件中的知识真正“活”起来&#xff1f; 这些文档可能是公司制度、技术手册、项目报告或客户合同&#…

作者头像 李华
网站建设 2026/4/23 18:44:15

Vue3 桑基图

效果图&#xff1a;<template><v-chart ref"vChartRef" :option"option"></v-chart></template><script setup lang"ts">import { ref, reactive } from "vue";import VChart from "vue-echarts&q…

作者头像 李华
网站建设 2026/4/21 16:18:56

Langchain-Chatchat连接数据库生成自然语言回答

Langchain-Chatchat连接数据库生成自然语言回答 在企业知识管理日益复杂的今天&#xff0c;一个新员工入职后常常面临这样的问题&#xff1a;“我们公司的年假政策到底是怎么规定的&#xff1f;”“报销流程需要哪些材料&#xff1f;”这些问题看似简单&#xff0c;但在文档分散…

作者头像 李华