JSP的隐含对象/隐藏对象/内置对象介绍

文章目录

  • out
    • JspWriter 和 PrintWriter 的区别
  • request
  • response
  • session
  • application
  • exception
  • config
  • pageContext
    • pageContext 的作用
      • 绑订数据
      • 获得其它几个隐含对象
  • page
  • 四个 JSP 域对象
    • 访问范围比较

out

out 对象是 javax.servlet.jsp.JspWriter 类的实例,用来在 response 对象中写入内容。
最初的 JspWriter 类对象根据页面是否有缓存来进行不同的实例化操作。可以在 page 指令中使用 buffered='false' 属性来轻松关闭缓存。
JspWriter 类包含了大部分 java.io.PrintWriter 类中的方法。不过,JspWriter 新增了一些专为处理缓存而设计的方法。还有就是,JspWriter 类会抛出 IOExceptions 异常,而 PrintWriter 不会。

功能:out 对象是一个字符输出流对象,用于将数据写入到 Response 对象中。

JspWriter 和 PrintWriter 的区别

PrintWriter 对象中的数据会先于 JspWriter 对象中的数据输出到 Response 对象中,无论 response.getWriter() 的代码是在前面还是在后面,服务器都会先将 PrintWriter 对象中的数据,写入到 Response 对象中,最后才会将 JspWriter 对象中的数据写入到 Response 对象中。

request

request 对象是 javax.servlet.http.HttpServletRequest 类的实例。每当客户端请求服务端时,Web 容器就会创建一个新的 request 对象来代表这个请求,即 request 对象会封装请求消息数据。

生命周期:服务器接收到请求时,服务器就会自动创建一个 request 对象来封装请求消息的数据;当请求处理完毕即服务器把响应数据包发送给客户端后,request 对象会被容器销毁。

response

response对象是 javax.servlet.http.HttpServletResponse 类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。response对象用于把取得的数据返回到客户端。
response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等。

生命周期:Request 对象创建后,容器就会自动创建对应的 Response 对象,当服务器将响应数据发送给客户端后,Request 对象和 Response 对象一起被销毁。

session

session 对象是 javax.servlet.http.HttpSession 类的实例。和 Java Servlets 中的 session 对象有一样的行为。session 对象用来跟踪各个客户端的访问会话。

生命周期:

application

javax.servlet.ServletContext 类的实例。一个 web 应用中只有一个 ServletContext,整个应用内部所有组件都能访问。

ServletContext 的实例还可以读取初始化参数值。

生命周期:
web 服务器在启动时,会为每一个已经部署的应用创建唯一的一个 ServletContext 实例,除非服务器关闭或者应用被删除,否则 ServletContext 实例对象一直存在。

另说:当某个应用的首个请求到达服务器的时候,服务器才启动该应用,并为其创建一个 ServletContext 对象。

exception

exception对象是Throwable的实例,当一个页面设置了<%@page isErrorPage=“true”%>,则可以在该页面当中,使用该隐含对象读取错误信息。

config

config 对象是 javax.servlet.ServletConfig 类的实例,它包含了当前 JSP/Servlet 所在的 WEB 应用的配置信息。
通常开发者会通过这个对象访问 Servlet 或者 JSP 引擎的初始化参数,比如文件路径等。

生命周期:web 服务器在启动时,会为每一个已经部署的应用创建唯一的一个 ServletConfig 实例,除非服务器关闭或者应用被删除,否则一直存在。

pageContext

pageContext 对象是 javax.servlet.jsp.PageContext 类的实例,用来代表整个 jsp 页面。这个对象主要用来访问页面信息,同时过滤掉大部分实现细节。服务器会为每一个 JSP 实例(指的是 JSP 对应的那个 Servlet 类的实例对象,该实例对象可以使用变量 page 引用)创建唯一的一个 PageContext 实例。只有 JSP 实例才能访问 pageContext 对象。

pageContext 对象也包含了传给 jsp 页面的指令信息,包括缓存信息,ErrorPage URL,页面 scope 等。

PageContext 类定义了一些字段,包括 PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE。它也提供了40 余种方法,有一半继承自 javax.servlet.jsp.JspContext 类。

生命周期:随着 JSP 实例的创建而创建,随着 JSP 实例的销毁而销毁。

pageContext 的作用

作用主要有两个。

绑订数据

读写属性值和移除属性。

setAttribute()
getAttribute()
removeArribute():它可接受一个或两个参数。

pageContext.removeArribute("attrName"); // 移除四个scope中相关属性
pageContext.removeAttribute("attrName", PAGE_SCOPE); // 这种方法只移除特定scope中的相关属性

获得其它几个隐含对象

即在获得了 pageContext 实例后,可以通过该实例,获得其它 8 个隐含对象。

page

表示 JSP 实例本身,实际就是 JSP 对应的那个 Servlet 类的实例对象,在 service 方法中有这样的代码 Object page = this

生命周期:

在 web.xml 文件中的 <servlet> 标签下通过 <load-on-startup> 标签配置自然数值可以在服务器启动时创建 Servlet 实例,值越小优先级越高,服务器会按从小到大的顺序创建 Servlet 实例。负数则表示第一次访问 Servlet 时创建实例,默认值是 -1

服务器会根据一定算法查找没有使用的 Servlet 实例,并将其销毁,当然服务器关闭或者应用删除了,Servlet 实例也会被销毁。

四个 JSP 域对象

pageContext
只有对应的 JSP 实例自己可以访问,生命周期从对应的 JSP 实例的创建到 JSP 对象的消亡。JSP 实例创建,容器会自动创建相关联的 PageContex 对象,JSP 实例消亡,相关联的 PageContex 对象也会被销毁。

request
一次请求能访问,生命周期在一起请求和响应期间。

session
一次会话期间能访问,多次请求和响应期间都存在。

ServletContext
整个应用内部所有组件都能访问,除非服务器关闭,否则一直存在。

访问范围比较

pageContext < request < session < application

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

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

相关文章

hystrix应用 博客_使用Hystrix DSL创建弹性骆驼应用程序

hystrix应用 博客Apache Camel是一个成熟的集成库&#xff08;到现在已有9年的历史了&#xff09;&#xff0c;它实现了Enterprise Integration Patterns一书中的所有模式。 但是Camel不仅是EIP实现库&#xff0c;它还是一个不断发展&#xff0c;添加新模式并适应行业变化的现代…

notebook打开外部文件_CAD外部参照真是个好东西!

好课推荐&#xff1a;零基础CAD&#xff1a;点我CAD室内&#xff1a;点我 周站长CAD&#xff1a;点我CAD机械&#xff1a;点我 Bim教程&#xff1a;点我CAD建筑&#xff1a;点我CAD三维&#xff1a;点我全屋定制&#xff1a;点我 ps教程&#xff1a;点我苹果版CAD:点我 3dmax教…

JSP动作元素/活动元素

文章目录jsp:forwardjsp:includejsp:paramjsp:useBeanjsp:setPropertyjsp:setProperty name"" property"" value""jsp:setProperty name"" property"" param""jsp:setProperty name"" property"*&…

【数论系列】任意角的三角函数

角度转为弧度 import math math.radians(x) 弧度转为角度 import math math.degrees(x) 正弦函数 import math math.sin(弧度) 余弦函数 import math math.cos(弧度) 正切函数 import math math.tan(弧度)

gradle groovy_适用于Java开发人员的Groovy吗? 认识Gradle,Grails和Spock

gradle groovyJava开发人员最感兴趣的Groovy用例有哪些&#xff1f; 尽管已经有一段时间了&#xff0c;但似乎只有Groovy最近才开始使用Groove。 对于某些人来说&#xff0c;它基本上只是另一种深奥的JVM语言&#xff0c;但是由于一些流行的工具可以帮助您使用Java&#xff0c…

JSP 指令元素

文章目录page 指令import 属性pageEncoding 属性contentType 属性session 属性isELIgnored 属性errorPage 属性isErrorPage 属性include 指令file 属性taglib 指令uri 属性prefix 属性jsp 源文件转换成对应的 .java 文件时&#xff0c;jsp 的指令会影响 Java 源代码的生成&…

Python日常工具 ----- 读取Excel表格下载MP3

import xlrd import os import requestsdef GetList():worksheet xlrd.open_workbook(01.xlsx)sheet_names worksheet.sheet_names()print(sheet_names)for sheet_name in sheet_names:sheet worksheet.sheet_by_name(sheet_name)rows sheet.nrows # 获取行数cols sheet.…

indesign中调出字符样式快捷键_Word中十大黄金快捷键,你会用几个?

在使用Word文档时&#xff0c;熟练使用快捷键能够有效的提升我们的工作效率&#xff0c;但是&#xff0c;Word中快捷键也比较多&#xff0c;要想全部掌握&#xff0c;那不太现实&#xff0c;这里&#xff0c;易老师给大家挑选了10组黄金快捷键&#xff0c;非常实用。01 快速移动…

couchbase集群_使用CLI扩展和重新平衡Couchbase集群

couchbase集群Couchbase通过多种方式提供高可用性和灾难恢复 &#xff1a; 同质簇 复写 集群内复制 备份还原 机架区意识 该博客将展示如何使用Couchbase命令行界面&#xff08;CLI&#xff09;创建Couchbase集群。 此外&#xff0c;还可以使用Couchbase REST API和Couchba…

【音视频安卓开发 (十)】jni开发中将java中的buffer映射到native c++中

首先在java层定义一个buffer,并且开辟相应的内存空间 private ByteBuffer byteBuffer; byteBuffer ByteBuffer.allocateDirect(bytesPerFrame * framesPerBuffer ); 然后调用本地的方法来设置内存地址到native层&#xff0c;该方法在jni初始化时就已经被动态的注册了方法,注…

maya室内模型_C4d和3dmax、maya相比有什么优势?

C4D和3dmax、maya都是三维软件&#xff0c;功能都是非常的nice&#xff0c;很多新手小伙伴就在好奇它们有什么区别&#xff0c;对比之下&#xff0c;c4d有哪些优势&#xff1f;c4d和3dmax的主要应用领域就是区分它们的地方。C4D一般用于栏目包装&#xff0c;影视后期&#xff0…

HH SaaS电商系统的标签系统设计

文章目录打标规则公式打标公式变量修改标签删除标签标签实体标签与对象的关系标签和商品&#xff1a;标签和商城会员&#xff1a;标签和租户会员&#xff1a;打标规则公式 公式名称&#xff1a;近日销量创历史新高 规则公式&#xff1a;近$ {days}销量创历史新高 公式名称&a…

jvm高并发_在JVM上对高并发HTTP服务器进行基准测试

jvm高并发在第一篇关于HTTP客户端的文章 &#xff08;我将您重定向到JVM上的高效HTTP的介绍&#xff09;之后&#xff0c;现在让我们来谈谈HTTP 服务器 。 有一些关于HTTP服务器的基准测试&#xff0c;但通常受到诸如以下缺点的阻碍&#xff1a; 没有有效地执行高并发方案&am…

【WebRTC---源码篇】(十)WEBRTC/RTCP SR持续更新中)

关于WebRTC/SR(发送者报告)的内容可以通过阅读以下链接来查看,本文重点研究WebRTC源码中RTCP报文构造和发送,以及相关的数据从何而来。在发送端,RTCP以周期性发送为基准,辅以RTP报文发送时的及时发送和REMB报文的立即发送。发送过程主要包括Feedback信息获取、RTCP报文构…

excel未完全加载怎么办_你知道如何改变Excel的打开姿势吗?

你是否曾经想过在启动Excel时自动打开某些特定的文档&#xff1f;当然&#xff0c;你永远都可以手动去打开任何一个文档&#xff0c;但是如果有那么一种可能&#xff0c;去每次省下那么几秒来自动完成这一操作&#xff0c;你会愿意尝试吗&#xff1f;今天&#xff0c;火箭君就和…

电商系统的售后模块设计

文章目录售后单实体方案一方案二服务类型可选售后服务判断规则退款类型售后截止时间金币和优惠券如何返还买家端订单列表的“售后按钮”逻辑说明服务端处理逻辑买家端操作“售后按钮”页面跳转逻辑商家管理后台订单列表的“售后处理”逻辑说明服务端处理逻辑商家端操作“售后处…

Gradle技巧–显示buildscript依赖性

在Gradle中如何显示和分析buildscript依赖项&#xff08;例如插件&#xff09;的简单方法 介绍 这是我的Gradle技巧迷你系列的第三部分&#xff0c;该系列与可视化和依赖性分析有关。 在第一篇文章中&#xff0c;我介绍了如何显示多项目构建中所有子项目的依赖关系的方法。 在…

任意采样率转16K采样率

import osdef OtherTo16bit(Path, data):InPath Path \\ dataOutPath os.getcwd() \\16home\\ data.split(".")[0] ".wav"os.system(ffmpeg -i InPath -acodec pcm_s16le OutPath)# path定义要获取的文件名称的目录&#xff08;C盘除外&#…

python中元组和列表转化_4.Python列表/元组/集合/字典

4.1 Python列表• 列表用 [ ] 标识&#xff0c;是Python 最通用的复合数据类型。• 列表用 [ ] 表示&#xff0c;列表具有可嵌套性4.1.1 Python列表截取• 列表可以使用 [头下标:尾下标] 截取相应的子列表&#xff0c; 从左到右索引默认 0 开始&#xff0c;从右到左索引默认-1开…

JavaBean中的属性

让我们一步一步了解&#xff1a; 成员变量 public class Test { //成员变量 private String n; }属性 属性是 getXxx()方法去掉 get 后&#xff0c;将首字母小写的那个单词&#xff0c;此处属性名与成员变量名相同&#xff0c;都是“n” 注&#xff1a;属性名和成员变量名通…