JAVA 四大作用域名

2023-10-29

JavaWeb有ServletContext、ServletRequest、HttpSession、PageContext四大域对象,下面主要从域对象的生命周期、作用、作用范围进行介绍。
Servlet中只有前三个域对象,JSP中多了一个pageContext对象。

一、ServletContext

1.生命周期

当web应用被加进容器时,创建代表整个web应用的ServletContext对象,当服务器关闭,或web应用被移除时,ServletContext对象跟着被销毁。

2.作用范围

整个web应用。

3.作用

由于一个web应用中的所有Servlet共享同一个ServletContext对象:因此Servlet对象之间可以通过ServletContext来是实现通讯。ServletContext对象通常也被称为context域对象。

应用

  • 多个Servlet通过ServletContext对象实现数据共享。
  • 获取web应用的初始化参数(getInitParameter)。
  • 用ServletContext实现请求转发(this.getServletContext().getRequestDispatcher().forward())。
  • 利用ServletContext对象读取资源文件。
    servletContext.getRealPath("/xx.properties"),servletContext.getResourceAsStream()。
    另外,顺便说一下,如果要在非servlet中获取资源文件,无法取得servletContext对象,这时候就得通过类加载器ClassLoader来getResourceAsStream(),此方法通过类加载器将资源文件直接加载到内存中,有更新延迟的问题,适合小文件的读取,对于大资源文件,将会占用较大的内存。还有,通过classLoader也可以获取资源文件路径,具体通过ClassLoader.getResource("/xx.properties").getPath(),没有更新延迟问题。

二、ServletRequest

1.生命周期

在service方法调用前由服务器创建,传入service()方法,整个请求结束,ServletRequest生命周期结束。

2.作用范围

整个请求链。(请求转发也存在,请求转发属于一次请求。)

3.作用

  • 在整个请求链中共享数据,主要可通过getAttribute、setAttribute将数据带到jsp页面中进行显示。
  • 获得客户端信息,可通过getRequestURL()、getRequestURI()、getQueryString()、getPathInfo()、getRemoteAddr()、getRemoteHost()、getRemotePort()、getLocalAddr()、getLocalName()。
  • 获得客户机请求头,getHeader(String s)、getHeaders(String s)、getHeaderNames()。
  • 获得客户机请求参数(客户端提交的数据):getParameter()等。

三、Session

1.生命周期

服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个并返回。
当一段时间内,session没有被使用(默认是30分钟),服务器会销毁该session。如果服务器非正常关闭(强行关闭),还未到期的session也会被销毁。
另外,调用session的invalidate()方法可以立即销毁session。

2.作用范围

一次回话。

四、PageContext

PageContext对象是JSP页面中才有的对象。

1.生命周期

当对JSP的请求开始时创建,当响应结束时销毁。

2.作用范围

整个JSP页面,是四大域中最小的一个。

3.作用

pageContext对象封装了8大隐式对象,通过它可以获得其它的8个对象。

  • getException()返回Exception。
  • getPage()返回Page。
  • getRequest()返回request。
  • getResponse()返回response。
  • getServletConfig()返回config。
  • getServletContext()返回application。
  • getSession()返回session。
  • getOut()返回out。

另外,通过pageContext还能获取其所有域中的数据。

4.getAttribute()和findAttribute()的区别

getAttribute()只能获取自己域中保存的属性,而findAttribute()则会按照pageContext->request->session->servletContext的顺序查找有无对应的属性。

四大域中,HttpRequest和HttpResponse,session和cookie有很多联系,后面会补上response和cookie的总结。



作者:Zhuang_ET
链接:https://www.jianshu.com/p/6c02951267d8
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA 四大作用域名 的相关文章

  • 如何使用 UnboundID LDAP SDK 获取 LDAP 中的 DN 和用户 ID

    当我唯一的参数是用户 ID 时 我试图获取用户的 DN 可能不止一个 我还使用 UnboundID LDap SDK 如您所见 public String getCustomerAdminDN String uid String resul
  • 使用 Java 编辑 jpeg EXIF 数据

    我想编辑 jpg 文件的属性 例如 评论 标题 拍摄日期 相机制造商等 我找到了读取这些数据的库 但我需要一个free带有示例的库edit them 我知道 apache 的成像 sanselan 但我无法用它编辑数据 如果您以前自己使用过
  • 模拟函数指针

    以下类包含一个应使用回调技术计算积分的方法 package integrals import java lang public class Integrals public static double f1 double x return
  • 如何重定向到WEB-INF文件夹中的JSP

    我有一个带有 NAV 的 jsp 其中还包含 UL 和以下元素 如下面的代码所示
  • 文件写入器覆盖文件而不是附加到末尾时出现问题

    好的 我在将多行写入文本文件时遇到一些问题 程序运行 但不会每次都使用新行 当我希望它运行 4 次时 文本文件应如下所示 a b c d 相反 它看起来像 d 谁知道如何解决这个问题 所有导入均正确导入 来源 已稍加编辑 假设一切都已正确定
  • @Nullable 和 SonarQube “有条件执行的块应该可达”警告

    包有以下package info java ParametersAreNonnullByDefault package foo import javax annotation ParametersAreNonnullByDefault 类有
  • Java 扫描仪问题 (JFrame)

    我正在尝试使用扫描仪来编辑塔防游戏的级别 但是 它不会将级别 图块图像 更新为自定义文件的级别 0 是草 1 是石头 1 是什么都没有 等等 我发现了错误 但如何修复它 我需要添加 更改什么才能消除这个错误 java lang NullPo
  • Android - 检测电容式触摸屏上的触摸压力?

    我听说过 MotionEvent e float press e getPressure 但这只会在没有触摸时返回 0 当我的手指触摸屏幕时返回 1 是否可以找到手指在触摸电容屏上施加的压力值 或者我的预感是否正确 即这只适用于电阻屏幕 M
  • 通过蓝牙将字符串从作为客户端的 PC 发送到作为服务器的移动设备

    我需要通过蓝牙将字符串从 PC 传输到 Android 移动设备的帮助 Android 移动设备应充当服务器并在设备屏幕上显示字符串消息 作为客户端的 PC 应该将字符串发送到移动设备 我希望服务器对提取的字符串 通过蓝牙传输 做出反应 这
  • 在 Spring 中使用事务时创建提交后

    由于某些原因 我使用 Spring PlatformTransactionManager 手动执行事务提交和回滚 我需要做的是设置一个钩子 以便在提交事务后发生提交后操作 通过查看 void commit TransactionStatus
  • 可以使用注解进行代码注入吗?

    我意识到这可能是一个已经被提出和回答的问题 但请耐心等待 我想知道是否可以使用注释将代码注入到类编译时 典型的示例是为对象的成员生成 getter 和 setter 这并不完全是我所需要的 但它可以说明基本思想 现在在互联网上我得到的基本答
  • 请放心,如何在 POST 请求后从响应正文中提取生成的令牌并将其设置到标头

    执行任何请求 我需要执行身份验证POST请求正文 username somename password somepass 标头Content Type application json这给了我一个带有生成令牌的响应 我需要将其粘贴为第二个标
  • 在Java中打印时差最惯用的方法是什么?

    我熟悉以毫秒为单位的打印时间差 long time System currentTimeMillis do something that takes some time long completedIn System currentTime
  • 在 Tomcat 中触发内部 ServletRequest

    我正在使用 Quartz 来安排 Web 应用程序的后台任务 其中一些任务只是针对同一 Web 应用程序发出请求 我想避免依赖于任何类型的网络设置 例如 如果从数据中心内发出带有我自己域名的请求 则可能无法正确路由 是否有一个 Java A
  • 为什么对象可以改变类变量的值?

    由甲骨文提供定义 http docs oracle com javase tutorial java javaOO classvars html 有时 您希望拥有所有对象共有的变量 这是通过 static 修饰符来完成的 声明中带有 sta
  • Java 堆分析因 SIGABRT 崩溃

    我正在尝试分析由 C 编写的方法分配并插入的本机内存JVM通过JNI 我安装了 valgrind version valgrind 3 13 0 并尝试使用以下选项运行 JVM valgrind tool massif massif out
  • 用 Java 编写“漂亮”代码的标准? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从java小程序获取正确的本地IP地址

    我想从我的 java 小程序确定本地 IP 地址 问题是当同一台机器上有多个 IP 地址时 该机器具有 LAN 和互联网连接 掌上电脑 VMWare 这是我的测试 public static void main String args tr
  • 将菜单添加到空活动

    我在 Android Studio 中制作了一个 Android 应用程序 并想在其上创建一个选项菜单 我将其创建为一个空活动 现在意识到我最好创建一个空白活动来获取选项菜单 无论如何 是否可以在空活动中创建选项菜单 如果有人能给我指出一个
  • 寻找基于循环固定大小数组的双端队列

    我正在寻找一个Deque其具有以下特点 它有固定的大小 如果我在头 尾添加元素 则另一端的元素会丢失 它是基于数组的 所以我可以在恒定时间内访问随机元素 我可以在前面或末尾添加元素 双端队列 我检查了Deque的实施JCF但我没有找到任何合

随机推荐

  • OpenGL ES几个概念-顶点着色器、片元着色器、EGL

    一 OpenGL ES OpenGL ES是使用在手机端和嵌入式里的3D图形应用程序编程接口 是跨平台的API OpenGL ES是OpenGL的简化版本 OpenGL2 x 版本相比 1 x 版本有较大差异 1 x 版本为 fixed f
  • Kylin Flink Cube 引擎的前世今生

    Apache Kylin 是一个开源的 分布式的分析型数据仓库 提供Hadoop Spark 之上的 SQL 查询接口及多维分析 OLAP 能力以支持超大规模数据 它能在亚秒内查询巨大的表 Kylin 的核心思想是 预计算 将数据按照指定的
  • C++11之智能指针(unique_ptr、shared_ptr、weak_ptr、auto_ptr)浅谈内存管理

    目录 前言 智能指针 使用方法 unique ptr 实现unique ptr类 使用uniquePtr shared ptr 实现SharedPtr 使用shared ptr weak ptr 使用weak ptr 前言 下面这段代码看起
  • Windows下同时安装python 2 和 3 详细教程 ——为了GitHack工具 同时安装python2和3的过程记录

    搜了半天发现 GitHack竟然真的只能在python2中运行 心痛 不得不去下python2 我之前下的是python3 文章目录 1 下载 安装 python2和3 2 配置python 2 x 的环境变量 3 将python 2 x
  • 投票==公平???

    前言 我们在团队中遇到意见分歧时 通常会通过投票机制以期来得到一个公平 公正的让所有人都能信服的解决方案 但是 这样的方案是否真的绝对公平 只有道德上的相对民主 没有制度上的绝对公平 求同存异才能长治久安 关于投票的经典场景 古雅典陶片放逐
  • TP-LINK交换机登录Web页面的操作方法

    TP LINK交换机登录Web页面的操作方法 之前小编介绍了TP LINK路由器登录Web管理页面的操作步骤 以及路由器无法登录的解决方法 详见文章 Tp link路由器管理界面无法登陆原因解析 下面栏目小编具体说说TP LINK交换机登录
  • Matlab设计数字滤波器入门

    一个3阶低通滤波器由下面差分方程描述 y n 0 0181 x n 0 0543 x n 1 0 0543 x n 2 0 0181 x n 3 1 76 y n 1 1 1829 y n 2 0 2781 y n 3 画出这个滤波器的幅度
  • VUE的基本使用(上)

    一 开发环境配置 VSCode 插件安装 jshint js代码规范检查 Beautify 一键美化代码的插件 Vetur vue文件识别插件 Javascript ES6 code snippets ES6语法提示 Auto Rename
  • 计算机ip保留地址,ip地址显示为保留地址怎么解决

    ip地址显示为保留地址怎么解决 2016 09 05 10 28 标签 dhcp ip地址 ip是保留地址怎么解决 ip作为计算机网络相互连接进行通信的协议 当dhcp超出系统规定的时间后 便会自动分配一个保留地址作为ip 如果主机ip地址
  • 涂鸦WIFI模组方案(MCU SDK)

    摘自涂鸦官方视频教程 https www bilibili com video BV1pb41117LD spm id from 333 999 0 0等 摘自 涂鸦IoT开发平台MCU开发接入 Wi Fi App面板 地址 https w
  • window.close()无效,原因剖析

    官方解释 https developer mozilla org en US docs Web API Window close 简单的说就是 window close 方法只能关闭由window open 或者浏览器直接输入url打开的页
  • 【敬伟ps教程】图层进阶知识

    文章目录 图层过滤和锁定 图层链接 图层编组 图层合并 图层盖印 图层复合 图层剪贴蒙版 图层过滤和锁定 图层过滤可以根据图层不同的性质进行查看管理 图层锁定即是对图层或图层某部分进行操作保护 按钮分别为 锁定透明像素 禁止对透明区域进行操
  • 使用JavaScript实现一个简单的计时器

    简介 计时器是前端开发中常见的功能之一 它可以帮助我们记录时间并进行倒计时等操作 在本篇博客中 我将向大家介绍如何使用JavaScript实现一个简单的计时器 实现步骤 第一步 创建HTML结构 首先 我们需要在HTML中创建一个用于显示计
  • 大语言模型参数说明(Temperature,Top p,Top k)

    如下是一些模型的运行界面 在使用OpenAI的接口 常常遇见一些参数 搞清它们的含义促使我们更进一步理解输出的结果 学习传送带 1 Temperature 用于调整随机从生成模型中抽样的程度 因此每次点击 生成 时 相同的提示可能会产生不同
  • app性能

    性能获取办法 appium webview context execute script perfmance api appium selenium的ExecuteScript Api 注入js return JSON stringify
  • muduo网络库学习(九)日志类Logger和LogStream,将日志信息打印到屏幕

    每一个成熟的项目都有大大小小的日志系统 在关键的地方打印日志信息 常用来跟踪程序运行 查找错误原因等 可以节省大量的debug时间 muduo的日志信息有5个级别 TRACE 细粒度最高的日志信息 打印的最详细 DEBUG 细粒度级别上对调
  • 程序中的耦合与解耦学习(三)——解耦学习1

    以下内容来源于网友内容 引用网友链接 简要 一 解耦都是需要代理的 本质上并不存在没有代理就发生两个部件之间解耦的情况 二 耦合 指的是两个可以协作的部件的关系 A和B可以协作 则A和B的关系是耦合 三 如果A可以和O P Q S 简称集合
  • API接口签名验证

    系统从外部获取数据时 通常采用API接口调用的方式来实现 请求方和接口提供方之间的通信过程 有这几个问题需要考虑 1 请求参数是否被篡改 2 请求来源是否合法 3 请求是否具有唯一性 今天跟大家探讨一下主流的通信安全解决方案 参数签名方式
  • java使用策略模式实现统一接口的不同效果返回

    首先说下什么是策略模式以及策略模式的优缺点 策略模式 是指定义了算法家族 分别封装起来 让他们之间可以相互替换 此模式让算法的变化不会影响到其他使用算法的用户 可以避免多重的if else 判断语句 1 加入系统中有很多类 而他们的区别仅仅
  • JAVA 四大作用域名

    JavaWeb有ServletContext ServletRequest HttpSession PageContext四大域对象 下面主要从域对象的生命周期 作用 作用范围进行介绍 Servlet中只有前三个域对象 JSP中多了一个pa