原文:JAVAEE之内置对象和属性范围

内置对象和属性范围

  • ​ 四种属性范围
  • ​ 九个内置对象

1.内置对象

如果说想要使用一个对象,必须new 出来,但是在我们的jsp操作中,发现我们使用过的out,request对象没有进行实例化,类似于这样的对象,我们叫做jsp的内置对象,也就是收不需要实例化的对象,总共有9个。

序号 对象 类型
1 pageContext javax.servlet.jsp.PageContext
2 request javax.servlet.http.HttpServletRequest
3 response javax.servlet.http.HttpServletResponse
4 session javax.servlet.http.HttpSession
5 application javax.servlet.ServletContext
6 config javax.servlet.ServletConfig
7 out javax.servlet.jsp.jspWriter
8 page java.lang.Object
9 exception java.lang.Throwable

2.属性范围

在jsp中,有四种属性范围,所谓属性范围,就是指在一个jsp中设置了属性,是否可以在其他页面能够访问。四种属性范围分别指的是以下的四种:

  • ​ ·属性范围在当前页面有效:设置了一个属性,在设置属性的页面可以取得属性,跳转到其他页面则无法取得设置的属性
  • ​ ·属性范围在服务端跳转范围内有效:一个页面设置了属性,然后经过服务端跳转(n次),依然可以取得设置的属性
  • ​ ·属性范围在一次会话中有效:一个页面设置属性,无论是经过服务端还是客户端跳转,只要浏览器不重启,设置的属性都可以取得。
  • ​ ·属性范围在服务器上下文中有效:页面设置的属性,无论是经过客户端还是服务端跳转,无论是哪一个会话,只要服务器不重启,设置的属性都可以访问。
NO 方法 描述
1 public void setAttribute(String name,Object val) 设置属性
2 pulblic Object getAttribute(String name) 取得属性
3 public void removeAttribute(String name) 删除属性

2.1page属性范围

page属性范围也就是我们上面所提到的第一种属性范围,使用的是pageContext这个内置对象设置和取得的,指的是在一个页面使用pageContext设置了属性之后,本页面可以通过pageContext取得设置的属性,跳转到其他页面之后无法取得设置的属性。要注意的一点,所谓的page属性范围使用的是pageContext这个内置对象设置和取得的。

<%@page contentType="text/html; charset=utf-8"%>
<%//设置属性pageContext.setAttribute("company","厦门");pageContext.setAttribute("address","厦门市");pageContext.setAttribute("tel","0592-2565166");
%>
<!-- 取得设置的属性 -->
<h1><%=pageContext.getAttribute("company") %></h1>
<h1><%=pageContext.getAttribute("address") %></h1>
<h1><%=pageContext.getAttribute("tel") %></h1>

如果现在我们通过服务端跳转,看能不能取得设置的属性

<%@page contentType="text/html; charset=utf-8"%>
<!-- 取得设置的属性 -->
<h1><%=pageContext.getAttribute("company") %></h1>
<h1><%=pageContext.getAttribute("address") %></h1>
<h1><%=pageContext.getAttribute("tel") %></h1>
<h1>这是pageAttributeDemo02.jsp</h1>

发现我们通过服务端跳转后取不到之前设置的page范围的属性了,如果说想要通过服务端跳转后也能取得设置的属性,我们必须使用第二种属性范围。

2.2request属性范围

request属性范围,是第二种属性范围,也就是说设置的属性在当前页面可以取得,通过服务端跳转之后也可以取得设置的属性。

<%@page contentType="text/html; charset=utf-8"%>
<%//设置属性request.setAttribute("company","厦门");request.setAttribute("address","厦门市");request.setAttribute("tel","0592-2565166");
%>
<!-- 取得设置的属性 -->
<h1><%=request.getAttribute("company") %></h1>
<h1><%=request.getAttribute("address") %></h1>
<h1><%=request.getAttribute("tel") %></h1>
<jsp:forward page="pageAttributeDemo02.jsp"></jsp:forward>
<%@page contentType="text/html; charset=utf-8"%>
<!-- 取得设置的属性 -->
<h1><%=request.getAttribute("company") %></h1>
<h1><%=request.getAttribute("address") %></h1>
<h1><%=request.getAttribute("tel") %></h1>
<h1>这是pageAttributeDemo02.jsp</h1>

通过

<%@page contentType="text/html; charset=utf-8"%>
<%//设置属性request.setAttribute("company","厦门");request.setAttribute("address","厦门");request.setAttribute("tel","0592-2565166");
%>
<!-- 取得设置的属性 -->
<h1><%=request.getAttribute("company") %></h1>
<h1><%=request.getAttribute("address") %></h1>
<h1><%=request.getAttribute("tel") %></h1>
<jsp:forward page="requestAttributeDemo02.jsp"></jsp:forward>

现在,我们发现,request范围属性经过多次跳转之后,依然可以取得设置的属性,那么现在如果经过客户端跳转呢?

<%@page contentType="text/html; charset=utf-8"%>
<%//设置属性request.setAttribute("company","厦门");request.setAttribute("address","厦门");request.setAttribute("tel","0592-2565166");
%>
<!-- 取得设置的属性 -->
<h1><%=request.getAttribute("company") %></h1>
<h1><%=request.getAttribute("address") %></h1>
<h1><%=request.getAttribute("tel") %></h1>
<a href="requestAttributeDemo03.jsp">客户端跳转</a>
<%@page contentType="text/html; charset=utf-8"%>
<!-- 取得设置的属性 -->
<h1><%=request.getAttribute("company") %></h1>
<h1><%=request.getAttribute("address") %></h1>
<h1><%=request.getAttribute("tel") %></h1>
<h1>这是requestAttributeDemo03.jsp</h1>

通过程序运行结果发现,通过客户端跳转不能够取得设置的request范围的属性,那么如果现在我就想要通过客户端取得设置的属性呢?那么我们可以使用第三种范围属性。

3.session

session属性范围就是我们第三种属性范围,也就是之前提到过的,属性范围在一次会话中有效。是无论经过客户端还是服务端跳转,都可以取得设置的属性,当然前提是浏览器不能重启。

<%@page contentType="text/html; charset=utf-8"%>
<%//设置属性session.setAttribute("company","厦门");session.setAttribute("address","厦门");session.setAttribute("tel","0592-2565166");
%>
<!-- 取得设置的属性 -->
<h1><%=session.getAttribute("company") %></h1>
<h1><%=session.getAttribute("address") %></h1>
<h1><%=session.getAttribute("tel") %></h1><a href="sessionAttributeDemo03.jsp">客户端跳转</a>
<%@page contentType="text/html; charset=utf-8"%>
<!-- 取得设置的属性 -->
<h1><%=session.getAttribute("company") %></h1>
<h1><%=session.getAttribute("address") %></h1>
<h1><%=session.getAttribute("tel") %></h1>
<h1>02</h1>
<%@page contentType="text/html; charset=utf-8"%>
<!-- 取得设置的属性 -->
<h1><%=session.getAttribute("company") %></h1>
<h1><%=session.getAttribute("address") %></h1>
<h1><%=session.getAttribute("tel") %></h1>
<h1>03</h1>

以上的程序说明我们session范围的属性,在经过客户端或者服务端跳转之后,设置的属性依然可以取得。现在我们来重启一下浏览器:通过操作发现,重启浏览器之后,取不到设置的session范围属性了,那么如果现在想要在浏览器重启后取得设置的属性,我们必须使用第四种属性范围。

4.application属性范围

application范围属性就是第四种范围属性,属性是设置在服务器的上下文中,只要服务器不重启,那么设置的属性统统都可以取得。无论是经过客户端你还是服务端还是浏览器重启,都可取得设置的属性。

<%@page contentType="text/html; charset=utf-8"%>
<%//设置属性application.setAttribute("company","厦门");application.setAttribute("address","厦门");application.setAttribute("tel","0592-2565166");
%>
<!-- 取得设置的属性 -->
<h1><%=application.getAttribute("company") %></h1>
<h1><%=application.getAttribute("address") %></h1>
<h1><%=application.getAttribute("tel") %></h1><a href="applicationAttributeDemo03.jsp">客户端跳转</a>
<%@page contentType="text/html; charset=utf-8"%>
<!-- 取得设置的属性 -->
<h1><%=application.getAttribute("company") %></h1>
<h1><%=application.getAttribute("address") %></h1>
<h1><%=application.getAttribute("tel") %></h1>
<h1>03</h1>

设置的application范围的属性,无论是通过客户端还是服务端或者浏览器重启,都可以取得设置的属性。那么现在如果服务器重启呢?通过操作发现,重启服务器后,之前设置的属性取不到了,那么如果想要在重启服务器后取得设置的属性呢?那是没有办法的。

3.属性范围使用说明

在开发中,我们常用的属性范围就是request和session范围,那么在开发中,怎么区分使用二者呢?一般来说,只对于同一个功能的属性的传递,使用request范围属性。那么对于session范围来说,主要还是用于登陆上面。

4.关于pageContext属性的进一步说明

上面我们讲解的是四种属性范围,实际上四种属性范围都是通过pageContext设置的,在pageContext中,setAttribute()方式实际上被重载过:

·设置属性:

public abstract void setAttribute(java.lang.String name,  java.lang.Object value)public abstract void setAttribute(java.lang.String name,java.lang.Object value,int scope)

对于这两个方法,第一个方法是我们之前一直在使用的,对于第二个方法,相比第一个方法多了一个参数(int scope),实际上这个参数就是指定属性范围的参数:

​ ·APPLICATION_SCOPE

​ ·PAGE_SCOPE

​ ·SESSION_SCOPE

​ ·REQUEST_SCOPE

也就是说,通过这个方法,我们可以设置四种属性范围。

<%@page contentType="text/html; charset=utf-8"%>
<%pageContext.setAttribute("j1m","111",PageContext.SESSION_SCOPE);
%>
<a href="pageContextDemo02.jsp">跳转</a>
<%@page contentType="text/html; charset=utf-8"%>
<h1>02</h1>
<h1><%=session.getAttribute("jjm") %></h1>

总结,知道九个内置对象(pageContext,session,request,response,applicatino,config,page,exception),充分掌握四种属性范围(page仅对于自己的页面传值;request应用于服务端传值,但是客户端跳转不能传值;session一般应该于用户的登录注册保存在一次会话中,会话结束,属性值消失;application属性范围应用于整个服务器中,服务器关闭属性值消失。

转载于:https://www.cnblogs.com/tieway59/p/10859225.html

【转载】JAVAEE之内置对象和属性范围相关推荐

  1. java ee 值范围_【转载】JAVAEE之内置对象和属性范围

    内置对象和属性范围 ​ 四种属性范围 ​ 九个内置对象 1.内置对象 如果说想要使用一个对象,必须new 出来,但是在我们的jsp操作中,发现我们使用过的out,request对象没有进行实例化,类似 ...

  2. java ee 值范围_JAVAEE之内置对象和属性范围

    内置对象和属性范围 四种属性范围 九个内置对象 1.内置对象 如果说想要使用一个对象,必须new 出来,但是在我们的jsp操作中,发现我们使用过的out,request对象没有进行实例化,类似于这样的 ...

  3. JS学习笔记之内置对象 4.21

    1 内置对象 JavaScript 中的对象分为3种:自定义对象 .内置对象. 浏览器对象 内置对象就是指 JS 语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或最基本而必要的功能(属性 ...

  4. JSP之内置对象、作用域

    >九大内置对象包括: 四个域:application.session.request.pageContext response:响应 out:输出流 exception:只能在错误页面进行输出 ...

  5. JavaScript系列之内置对象Object

    文章の目录 一.静态方法 1.Object.assign() 1.1.概述 1.2.语法 1.3.参数 1.4.返回值 1.5.描述 1.6.示例 2.Object.create() 2.1.概述 2 ...

  6. JavaScript 常用内置对象(字符串属性、Math对象、Array数组对象)

    1.字符串属性 <script> var test_var = "I Iove you"; console.log(test_var.charAt(3)) //char ...

  7. struts2:在Action中使用Servlet的API,设置、读取各种内置对象的属性

    有两种方式可以实现在Action中使用Servlet的API.一种是使用org.apache.struts2.ServletActionContext类,另一种是使用com.opensymphony. ...

  8. js之内置对象的练习

    我们首先从一个题目说起,故事背景是某班期末考试成绩出来了,要求你统计考试分数,并打印出来,要求格式为: XXXX年XX月XX日 星期X--班级总分为:XX班级平均分为(保留整数):XX 成绩数据为:& ...

  9. [置顶] 深入浅出Javascript(三)创建自定义对象以及属性、方法

    怎么样创建一个对象? 利用Object创建自定义对象 JavaScript能够自定义对象来扩展程序的功能,不仅如此,它还能扩展JavaScript提供的内置对象,新增内置对象的属性或方法 例如下面代码 ...

最新文章

  1. 使用NVIDIA GRID vPC支持视频会议和算力工具
  2. Unsupervised Deep Image Stitching:首个无监督图像拼接框架(TIP2021)
  3. 网站推广——网站推广专员是如何对竞争对手网站进行分析总结的?
  4. 线程队列 线程池 协程
  5. android动画送礼物,Android仿直播类app赠送礼物功能
  6. oracle 9i 手工建库,简单记录Oracle 9i数据库手工建库过程
  7. FTP服务的简介和配置详解
  8. 演示数据块整理(合并)的效果
  9. 深度模型推理在腾讯游戏的应用与实践(王者荣耀、和平精英等均有应用)
  10. AVR 矩阵键盘程序源代码2(有连续按键功能)(原创)
  11. 自动格式化SQL工具推荐
  12. 防止ARP欺骗的方法
  13. rda分析怎么做_科学网—如何用R语言vegan包进行RDA/CCA分析 - 刘宏金的博文
  14. C#-Event事件
  15. 机械转行嵌入式成功上岸!
  16. 【基础机器学习算法原理与实现】使用感知器算法LDA、最小二乘法LSM、Fisher线性判别分析与KNN算法实现鸢尾花数据集的二分类问题
  17. php浮点数取小数点两位小数,用小数点后两位数字打印PHP浮点数? - php
  18. 《庄子》中说到,“一尺之棰,日取其半,万世不竭”。第一天有一根长度为 a的木棍,从第二天开始,每天都要将这根木棍锯掉一半
  19. 罕见、二度闯关IPO,发行人因持续经营能力存疑被否
  20. 气象灾害监测:如何利用大数据及安防AI技术进行预警?

热门文章

  1. 投稿 | “轻量应用服务器”征文活动正式启动
  2. 应用上线前的“体检”,你知道需要检测哪些指标吗?
  3. 连载:阿里巴巴大数据实践—数据建模综述
  4. 机器学习效率正在超越摩尔定律
  5. Java一分钟 || Docker因权限问题无法启动Springboot怎么办
  6. Java面试题 简述jvm内存模型?
  7. ResourceLoader 获取资源
  8. java基础之访问控制符
  9. HDU1848 Fibonacci again and again SG函数
  10. 《PHP求职宝典》--Web设计页面笔记