JAVAEE——内置对象和属性范围(二)

1. 内置对象和属性范围

1.1 知识点

(1)四种属性范围

(2)九个内置对象

1.2 具体内容

    在我们之前的操作当中,经常使用到request.getParameter()来接受上一个页面传递过来的参数,那么在java当中,如果要使用一个对象,必须要先实例化,但是我们的request却一直没有实例化过就可以直接使用,这意味着这个对象在web容器当中本身就已经实例化了,这种对象我们叫做内置对象。

NO.

内置对象

类型

1

pageContext

javax.servlet.jsp.PageContext

2

request

javax.servlet.http.HttpServeltRequest

3

response

javax.servlet.http.HttpServletResponse

4

session

javax.servlet.http.HttpSession

5

application

javax.servlet.ServlertContext

6

config

javax.servlet.SerletConfig

7

out

javax.servlet.jsp.jspWriter

8

page

java.lang.Object

9

exception

java.lang.Throwable

属性范围:(四种会话跟踪技术)

所谓的属性范围,就是指在一个页面中设置了属性之后,是否能够在其他页面进行访问(是否有这种权限)。

四种属性范围分别是:

  1. 属性范围只在当前页面:一个属性只能被当前页面所取得,跳转之后就无法取得。
  2. 属性范围在一次服务器请求的范围内可以访问,也就是说,在属性经过设置之后,经过了服务端跳转,无论跳转多少次(只要还是服务端跳转),那么跳转后的页面都可以访问该属性。
  3. 在一次会话的范围,一个用户设置的属性,无论经过多少次,什么样的跳转,只要浏览器不关闭,或者该属性未被清空,那么整个会话过程中都可以去访问。
  4. 上下文范围:指的是在服务器上下文当中设置的属性,所有人都可以一直访问,只要服务器未关闭或者重启。

第一种属性范围:

      page属性范围:(pageContext)属性范围:

         这个属性范围非常好理解,指的就是本页面访问本页面设置的属性。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"></head><body><%pageContext.setAttribute("name","page属性范围");pageContext.setAttribute("date",new Date());%><h1><%=(String)pageContext.getAttribute("name")%><%=(Date)pageContext.getAttribute("date") %></h1></body>
</html>

下面进行一次服务端跳转(jsp:forward)验证跳转后的页面无法访问前一个页面的page属性。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head></head><body><%pageContext.setAttribute("name","page属性范围");pageContext.setAttribute("date",new Date());%><jsp:forward page="forwordtonext.jsp"></jsp:forward></body>
</html><%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head></head><body><h1><%=(String)pageContext.getAttribute("name")%><%=(Date)pageContext.getAttribute("date") %></h1></body>
</html>

第二种属性范围:request属性范围

Request属性范围指的就是在服务端跳转中生效的属性范围。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head></head><body><%request.setAttribute("name","page属性范围");request.setAttribute("date",new Date());%><jsp:forward page="forwordtonext.jsp"></jsp:forward></body>
</html><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head></head><body><h1><%=(String)request.getAttribute("name")%><%=(Date)request.getAttribute("date") %></h1></body>
</html>

以下验证客户端跳转是否能够访问:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head></head><body><%request.setAttribute("name","page属性范围");request.setAttribute("date",new Date());%><a href="forwordtonext.jsp"><h1>客户端跳转</h1></a></body>
</html><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head></head><body><h1><%=(String)request.getAttribute("name")%><%=(Date)request.getAttribute("date") %></h1></body>
</html>

总结一下目前学到的跳转形式:

     客户端跳转:

         第一种是表单的提交

         第二种是<a>标签超链接跳转。

     服务端跳转:

         jsp:forward

第三种属性范围:

       Session范围:

       这种属性范围,一旦设置好,只要在一个浏览器未关闭的情况下都可以访问,但是这只针对一个浏览器的一个用户而言。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head></head><body><%session.setAttribute("name","page属性范围");session.setAttribute("date",new Date());%><a href="forwordtonext.jsp"><h1>客户端跳转</h1></a></body>
</html><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head></head><body><h1><%=(String)session.getAttribute("name")%><%=(Date)session.getAttribute("date") %></h1></body>
</html>

以上验证了客户端跳转之后,session范围的属性依旧可以访问。

重新开启一个浏览器直接访问跳转后页面,发现属性无法访问,验证了session范围只针对一个浏览器一个用户而言。

重启浏览器,直接访问跳转后页面,发现属性也无法访问,验证了属性只保存在一次会话范围,想要再次访问就需要再次设置。

第四种属性范围:

     Application属性范围,指的是在服务器上面设置属性,一旦设置,用户可以随时随地范围,除非服务器关闭或者重启。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head></head><body><%application.setAttribute("name","page属性范围");application.setAttribute("date",new Date());%><a href="forwordtonext.jsp"><h1>客户端跳转</h1></a></body>
</html><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head></head><body><h1><%=(String)application.getAttribute("name")%><%=(Date)application.getAttribute("date") %></h1></body>
</html>

1.3 小结

    四种属性范围互相不冲突,独立工作,但是如果在不同的属性范围里存在着键名一样的属性的话,访问的顺序如下page范围—》request范围—》session范围—》application范围。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/618851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fiddler怎么抓请求做接口

第一步:安装fiddler 可以在官网下载最新版本 VIP小伙伴可以在课前准备下载,如果已经安装,请忽略 打开fiddler开始抓取测试对象的请求,以教管系统登录为例 打开fiddler,准备开始抓取,清空会话,开启抓取状态,因为fiddler默认抓取http协议,所以这里不需要设置什么。 打开系统登…

【Delphi 基础知识 15】手动管理内存的两种方法(New与Dispose)(GetMem与FreeMem)

New 和 Dispose 是在 Delphi 中用于动态分配和释放内存的两个关键字。 New 关键字&#xff1a; New 关键字用于动态地分配内存以存储一个或多个对象。它的一般语法为&#xff1a; New(PointerVariable);其中&#xff0c;PointerVariable 是一个指向要分配内存的类型的指针。New…

通过 CMake 制作库文件 静态库 和 动态库

hehedalinux:~/Linux/loveDBTeacher-v2$ tree . ├── CMakeLists.txt ├── include │ └── head.h ├── main.c └── src├── add.c├── div.c├── mult.c└── sub.c CMake Calc 项目 在这里有add.c,div.c,mult.c,sub.c,main.c,head.h 二、生成静态库 …

填坑 3D gaussian splatting里SIBR_viewers的安装

SIBR_VIEWERS 上次写完太忙了&#xff0c;一直都没上CSDN。。 因为3DGS生成的模型要跑起来得用到GPU&#xff0c;所以一开始我就只能用它带的viewer&#xff0c;结果装了半天装不上&#xff0c;上篇文章评论里我看大家也遇到了吧。。 如果和我的原因一样的话&#xff0c;就很…

【数据结构】二叉树问题总结

目录 1.二叉树前序遍历&#xff0c;中序遍历和后序的实现 2.层序遍历 3.求二叉树中的节点个数 4.求二叉树中的叶子节点个数 5.求二叉树的高度 6.求二叉树第k层节点个数 7.二叉树查找值为x的节点 8.单值二叉树 9.二叉树最大深度 10.翻转二叉树 11. 检查两颗树是否相同…

NetDevOps:华三交换机通过Netmiko或者Nornir获取接口信息通过TextFSM解析报错问题

python代码&#xff1a;实现功能获取交换机接口信息并通过TextFSM进行解析。 from netmiko import Netmiko import textfsm show_intf_cmd_mapping {hp_comware: display interface, }def ssh_device_2_get_intfs(device_type, host, username, password, port):dev_info {d…

【2023年度回顾】让我们在新的一年继续努力前行

每当我们在努力的时候都会想&#xff1a;为什么我要努力&#xff1f;躺着不舒服吗&#xff1f; 大家好&#xff01;我是命运之光&#xff0c;一名普普通通的计算机科学与技术专业的大三学生。 &#x1f4d5;回顾一下整个2023年 因为我有每天发朋友圈的习惯&#xff0c;所以这一…

chromedriver 114以后版本下载地址

谷歌浏览器版本经常会升级&#xff0c;chromedriver 也得下载匹配的版本 chromedriver 114以前版本下载地址https://registry.npmmirror.com/binary.html?pathchromedriver/ 找到匹配浏览器版本 查看自己浏览器版本号v120.0 v120.0版本chromedriver下载地址https://google…

Ubuntu 22.04 安装prometheus

服务器监控和报警软件有很多&#xff0c;为什么我们会选择Prometheus而不是其他软件呢&#xff1f; 因为它有以下优点&#xff1a; 自带简易web监控页面&#xff0c;用户可以很方便地查看监控数据和使用仪表盘。能实时收集数据并根据自定义警报规则推送告警&#xff1b;具有丰…

Java SPI在数据库驱动、SpringBoot自动装配中的应用

文章目录 1. 初识SPI1.1 SPI的作用1.2 SPI的工作原理1.3 SPI的三个组件&#xff1a;Service、Service Provider、ServiceLoader1.4 SPI使用场景1.5 具体的SPI 源码分析&#xff08;SPI的核心就是ServiceLoader.load()方法&#xff09;1.6 SPI 的优缺点 2. API、SPI、JNDI释义3.…

uniapp滑动页面切换和下拉刷新,触底加载更多(swiper + scroll-view)

因为官方文档乱七八糟的&#xff0c;所以自己来总结下 需求&#xff1a; 常见的上方tag标签切换&#xff0c;下方是页面&#xff0c;上面点击切换&#xff0c;下面页面也切换&#xff0c;下方列表有下拉刷新&#xff0c;触底加载更多 因为这两个组件都是固定高度的&#xff0c;…

回顾2023 | 职业分析与计算机方向的选择、发展

文章目录 职业分析与计算机方向的选择、发展一&#xff1a;编程学习解读与职业分析1.编程的学习阶段&#xff1a;&#xff08;1&#xff09;入门阶段&#xff08;2&#xff09;熟悉阶段&#xff08;3&#xff09;学到什么程度才叫精通呢&#xff1f; 2.职业分析&#xff08;1&a…

6.2 声音编辑工具GoldWave5简介(6)

3&#xff0e;选择【选项】|【控制器属性】命名或单击“控制器”面板上的“设置控制器属性”按钮&#xff0c;打开“控制器属性”对话框&#xff0c;将“音量”选项卡中的“麦克风”选项打上勾&#xff0c;使GoldWave只能录制来自麦克风的声音。如果要录制电脑内部的声音&#…

ARM动态Trustzone技术简介

目录 动态 TrustZone 典型的安全媒体路径 Arm 安全和架构特性 安全虚拟化 Realm Management Extensio

聊天机器人之接收实时信息实现(二)

准备工作 如果没有准备好环境的请看 前期环境准备 这里默认已经注入成功并且已经登录好了账号。 具体实现 实现原理 通过本地搭建一个web服务&#xff0c;来接收一个POST请求&#xff0c;这个请求中就会涵盖实时的数据&#xff0c;包括昵称、消息内容、消息类型之类的。 p…

边缘计算中的数据安全与隐私保护:挑战与应对策略

边缘计算 一、边缘计算中的数据安全与隐私保护问题二、应对策略三、安全与隐私保护框架四、总结与展望 随着边缘计算的快速发展&#xff0c;数据安全与隐私保护问题已经成为了一个亟待解决的问题。边缘计算将数据处理和分析的任务从中心化的数据中心转移到了设备端&#xff0c;…

Head First Design Patterns -工厂模式

什么是工厂模式 工厂方法模式定义了一个创建对象的接口&#xff0c;但由子类来决定要实例化那个类。工厂方法让类把实例化推迟到了子类。 为什么要有工厂模式 书中以pizza店制作pizza为例子&#xff0c;假设不用工厂模式&#xff0c;在制作pizza阶段我们需要这样去实例化类&am…

ubuntu22.04 安装gazebo遇到的坑(无法打开显示界面)

1.终端输入gazebo&#xff0c;无报错&#xff0c;也无显示界面 解决方法&#xff1a;应用中找到system monitor,找到gzserver&#xff0c;右键kill 2.安装软件包遇到的错误&#xff1a;dpkg: error processing archive /var/cache/apt/archives/libignition-utils1-dev_1.5.1…

回声状态网络(Echo State Networks,ESN)详细原理讲解及Python代码实现

回声状态网络&#xff08;Echo State Networks,ESN&#xff09;详细讲解及Python代码实现 1 基本概念 回声状态网络是一种循环神经网络。ESN 训练方式与传统 RNN 不同。网络结构如下图&#xff1a; &#xff08;1&#xff09;储层&#xff08;Reservoir&#xff09;&#x…

P2383 狗哥玩木棒 约翰玩木棒

P2383 狗哥玩木棒 约翰玩木棒 题目背景 狗哥又趁着语文课干些无聊的事了… 题目描述 现给出一些木棒长度&#xff0c;那么狗哥能否用给出的木棒&#xff08;木棒全用完&#xff09;组成一个正方形呢&#xff1f; 输入格式&#xff1a; 输入文件中的第一行是一个整数n表示测…