javaweb之jsp的属性范围
1.什么是jsp的属性范围?
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以保存并继续使用。jsp提供了四种属性范围,如下:
- 当前页,对应的jsp对象为pageContext,属性的作用范围仅限于当前JSP页面,跳转到其他页面无法取得。
- 一次服务请求,对应的jsp对象为request,属性的作用范围仅限于同一个请求。
- 一次会话(浏览器打开到关闭为一次会话),对应的jsp对象为session,一个用户设置的内容,只要是与此用户相关的页面都可以访问。
- 上下文,对应的jsp对象为application,属性的作用范围限于当前web应用,是范围最大的属性作用范围,只要在一处设置属性,在其他各处的JSP或Servlet中都可以获取到。
2.属性的操作方法
public void setAttribute(String name,Object value) 设置属性
public object getAttribute(String name) 取得属性
public void removeAttribute(String name) 删除属性
示例代码如下:
<%@ 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>
<base href="<%=basePath%>">
<title>My JSP 'attrTest1.jsp' starting page</title>
<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">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
pageContext.setAttribute("pageContextAttr", "pageContextValue");
request.setAttribute("requestAttr", "requestValue");
session.setAttribute("sessionAttr", "sessionValue");
application.setAttribute("applicationAttr", "applicationValue");
%>
<br><br>
pageContextAttr: <%=pageContext.getAttribute("pageContextAttr") %>
<br><br>
request: <%=request.getAttribute("requestAttr") %>
<br><br>
session: <%=session.getAttribute("sessionAttr") %>
<br><br>
application: <%=application.getAttribute("applicationAttr") %>
</body>
</html>
运行后输出结果如下:

3.四种属性范围的具体介绍
示例代码如下:
attrTest1.jsp
<%@ 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>
<base href="<%=basePath%>">
<title>My JSP 'attrTest1.jsp' starting page</title>
<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">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
pageContext.setAttribute("pageContextAttr", "pageContextValue");
request.setAttribute("requestAttr", "requestValue");
session.setAttribute("sessionAttr", "sessionValue");
application.setAttribute("applicationAttr", "applicationValue");
%>
<h2>attrTest1 page</h2>
<br>
pageContextAttr: <%=pageContext.getAttribute("pageContextAttr") %>
<br><br>
request: <%=request.getAttribute("requestAttr") %>
<br><br>
session: <%=session.getAttribute("sessionAttr") %>
<br><br>
application: <%=application.getAttribute("applicationAttr") %>
<br><br>
<a href="jspTest/attrTest2.jsp">To attrTest2 Page</a>
</body>
</html>
attrTest2.jsp
<%@ 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>
<base href="<%=basePath%>">
<title>My JSP 'attrTest2.jsp' starting page</title>
<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">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h2>attrTest2 page</h2>
<br>
pageContextAttr: <%=pageContext.getAttribute("pageContextAttr") %>
<br><br>
request: <%=request.getAttribute("requestAttr") %>
<br><br>
session: <%=session.getAttribute("sessionAttr") %>
<br><br>
application: <%=application.getAttribute("applicationAttr") %>
<br><br>
</body>
</html>
运行后跳转页面显示结果如下:

从上面的运行结果来看,pageContext属性的作用范围仅限于当前JSP页面,从attrTest1页面跳转到attrTest2页面之后,pageContext对象获得的属性值为null。
修改上面的代码:
attrTest1.jsp中,做如下修改:
<h2>attrTest1 page: <%=new Date() %></h2>
attrTest2.jsp中,做如下修改:
<h2>attrTest2 page:<%=new Date() %></h2>
运行attrTest1.jsp后:

跳转到attrTest2页面:

从上面的运行结果可以看出,request的属性作用范围仅限于同一个请求,对于不同页面的不同请求的Date函数的调用,输出的时间是不同的。
运行attrTest1.jsp:

跳转到attrTest2 页面时:

关闭浏览器,直接运行attrTest2.jsp,看到session的属性值为null,运行结果显示如下:

从上面的运行结果可以看出,在一次会话(session)过程中,在第一个页面上设置的属性,跳转(服务器跳转/客户端跳转)到其他页面之后,其他的页面依然可以取得第一个页面上设置的属性。会话结束后,属性值丢失(体现为session值为null)。
javaweb之jsp的属性范围的更多相关文章
- javaweb 与jsp页面的交互流程 (初次接触时写)
javaweb 与jsp页面的交互流程 javaweb项目目录 1. javaweb项目的一般目录: 2. jsp 页面一般情况下放在 top(前台页面) back(后台页面) 3. 后台代码 放在s ...
- JavaWeb之JSP & EL & JSTL
JSP & EL & JSTL JSP Java Server Page 什么是JSP 从用户角度看,就是一个网页.从程序员角度看,就是一个Java类,它继承Servlet,所以可以说 ...
- Intellij idea创建javaWeb:实现JSP/Servlet(转)
转自:https://www.jianshu.com/p/9684e90cf7b5 Intellij idea创建javaWeb:实现JSP/Servlet by_love唯念 关注 2016.12. ...
- JavaWeb后端jsp之增删改查
今日主题:JavaWeb后端jsp之增删改查 实体类: Student.java: package cn.itcast.model.entity; public class Student { pri ...
- MyEclipse配置Tomcat开发JavaWeb程序JSP以及Servlet
1.安装准备 1).下载安装MyEclipse2014,这已经是最新版本. 2).下载Tomcat 官网:http://tomcat.apache.org/ 我们选择8.0: http://tomca ...
- JavaWeb学习----JSP内置对象详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- JavaWeb学习----JSP脚本元素、指令元素、动作元素
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- javaweb学习--jsp
阅读电子书<Java Web从入门到精通>密码:461c,学习JavaWeb基础知识.由于本人已有html基础,所以直接略过前面部分,进入jsp学习 jsp页面添加库引用,引入项目文件 引 ...
- Java匹马行天下之JavaWeb核心技术——JSP
JSP动态网页技术 一.JavaWeb简介 一.什么是JavaWeb? JavaWeb是用Java技术来解决相关web互联网领域的技术总称. 需要在特定的web服务器上运行,分为web服务器和web客 ...
随机推荐
- [bzoj2816][ZJOI2012]网络(LCT,splay)
传送门 题解 话说以前还真没见过用LCT只维护一条链的……好像除了树点涂色那题…… 先看一下题目规定的两个性质 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环,同色的环指相同颜 ...
- 面向对象中的__slots__
类中的__slots__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性. 而要限制class的属性就需要用到__sl ...
- WordPress翻译更新失败解决方法
编辑php的配置文件:php.ini,搜索并找到disable_functions: 删除disable_functions后面的scandir字符串,保存php.ini: 重载或重启php-fpm服 ...
- 如何在Linux下禁用IPv6
如何在Linux下禁用IPv6 echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 禁用IP ...
- inception_web
1) wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py 2) python ez_setup.py --insecur ...
- C#-WinForm-★★★★★跨窗体 构造函数传值 及应用—登录式窗口传值、如何关闭主页面时关闭应用程序、如何打开唯一窗口★★★★★
构造函数可以传任意类型的值,并可以同时传多个值 结构函数传值的初步应用——简单的登陆式界面 现在我有两个窗体Form3和Form4,如下,如何点击Form3中的按钮后,打开Form4并将Form3中的 ...
- wordcloud词云--可视化
import jieba import wordcloud f = open("新时代中国特色社会主义.txt", "r", encoding="gb ...
- JAVA数据结构--哈希表的实现(分离链接法)
哈希表(散列)的定义 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度 ...
- AMPQ 0-9-1学习笔记
AMQP 0-9-1学习笔记 AMQP(Advanced Message Queuing Protocol)高级消息队列协议:是一个进程间传递异步消息的网络协议 2. AMQP的基本模型: Publi ...
- 高并发和多线程——Java内存模型
个人理解: 1.并发编程分为三个核心:分工.同步.互斥 2.CPU.内存.I/O存在速度差异问题. 3.线程切换导致原子性问题.编译优化导致有序性问题.缓存导致可见性问题. 4.Java内存模型规范了 ...