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客 ...
随机推荐
- “全栈2019”Java第十五章:Unicode与转义字符
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 使用git提交代码简单说明
一. 图形化git 1.首先下载msysgit,和 tortoisegit, 先装msysgit再装小乌龟 2.运行git按照github上说明生成秘钥对 ssh-keygen -t rsa ...
- tableView header Refresh 下拉刷新/上拉加载
一. UIScrollView 的分类 //作为入口 #import <UIKit/UIKit.h> #import "RefreshHeader.h" #import ...
- 基础篇:4.2)规范化:3d软件工程图纸用模板
本章目的:分享一些国标标准模板,方便作图时使用 这篇博文的内容作者会定时的更新 1.工程图模板 drawing template 定义 三维机械设计软件中的一种文件类型.通过标准化定制和使用该文件,可 ...
- Q806 写字符串需要的行数
我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行.我们给定了一个数组 width ...
- centos7安装串口终端kermit
1. 将usb转串口连接到PC上.通过dmesg命令可以查看USB转串口是否被PC识别.显示 ……attachec to ttyUSB0即被识别. 2. 安装kermit. [seif@cen ...
- D-Link DIR-645 信息泄露漏洞
D-Link DIR-645 getcfg.php 文件由于过滤不严格导致信息泄露漏洞. $SERVICE_COUNT = cut_count($_POST["SERVICES"] ...
- cordova build android 环境的坑
毕业设计的选题为一个app,native app学起来在时间上有些不足,因此选择了hybird app ;cordova就不介绍了,本文主要是写在cordova bulid android时所遇到的问 ...
- easygui.py的安装和下载地址
easygui下载地址:http://nchc.dl.sourceforge.net/project/easygui/0.97/easygui-0.97.zip 安装:解压后将easygui.py拷贝 ...
- ISE报警:关键字 unsigned不可用于verilog
问题:关键字 unsigned不可用于verilog 解决方案:去掉unsigned