JSP内置对象--4种属性范围 (pageContext,request,session,application)

pageContext: javax.servlet.jsp.JspContext抽象类的父类JspContext 中有以下方法。
request:javax.servlet.http.的接口HttpServletRequest
session:javax.servlet.http的接口HttpSession
application:javax.servlet 的接口:ServletContext
以上4个对象都存在以下3个方法:
设置属性名称是string,内容是object。

- page范围:

例子: page属性只能当前页面取得:
page_scope_01.jsp:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<% // 设置属性
pageContext.setAttribute("name","李兴华") ;
pageContext.setAttribute("birthday",new Date()) ;
%>
<%
String username = (String) pageContext.getAttribute("name") ;
Date userbirthday = (Date)pageContext.getAttribute("birthday") ;
%>
<h2>姓名:<%=username%></h2>
<h2>生日:<%=userbirthday%></h2>
</body>
</html>
服务器跳转后属性内容无法取得,测试:
page_scope_02.jsp:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<% // 设置属性
pageContext.setAttribute("name","李兴华") ;
pageContext.setAttribute("birthday",new Date()) ;
%>
<jsp:forward page="page_scope_03.jsp"/>
</body>
</html>
服务器跳转到page_scope_03.jsp:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
String username = (String) pageContext.getAttribute("name") ;
Date userbirthday = (Date)pageContext.getAttribute("birthday") ;
%>
<h2>姓名:<%=username%></h2>
<h2>生日:<%=userbirthday%></h2>
</body>
</html>
结果:

如果想服务器端跳转后属性可以保存下来的话,那就用request属性:

request_scope_01.jsp设置request属性:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<% // 设置属性
request.setAttribute("name","李兴华") ;
request.setAttribute("birthday",new Date()) ;
%>
<jsp:forward page="request_scope_02.jsp"/>
</body>
</html>
获取request属性:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
String username = (String) request.getAttribute("name") ;
Date userbirthday = (Date)request.getAttribute("birthday") ;
%>
<h2>姓名:<%=username%></h2>
<h2>生日:<%=userbirthday%></h2>
</body>
</html>
如果一直有服务器跳转,则一直可以传递过去.
如果现在换一种形式,使用超链接进行页面的跳转的话;
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<% // 设置属性
request.setAttribute("name","李兴华") ;
request.setAttribute("birthday",new Date()) ;
%>
<a href="request_scope_02.jsp">通过链接取得属性</a>
</body>
</html>
属性值将不被保存,无法传递request属性,因为地址改变了,不属于服务器跳转,而是客户端跳转。

所以,客户端跳转,相当于发生了两次请求,那么第一次请求不复存在。
如果现在希望不管是服务器端还是客户端跳转,都可以保存的话,可以扩大范围到session属性。

session设置属性:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<% // 设置属性
session.setAttribute("name","李兴华") ;
session.setAttribute("birthday",new Date()) ;
%>
<a href="session_scope_02.jsp">通过链接取得属性</a>
</body>
</html>
session读取属性:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
String username = (String) session.getAttribute("name") ;
Date userbirthday = (Date)session.getAttribute("birthday") ;
%>
<h2>姓名:<%=username%></h2>
<h2>生日:<%=userbirthday%></h2>
</body>
</html>
可以成功读取,但是如果打开新的浏览器的话,无法取得属性,所以session值保存在当前的浏览器中。
对于服务器而言,每一个连接到它的客户端都是一个session。
如果想让属性设置一次后,不管是否是新的浏览器打开都可以访问的话,就可以扩大到application属性“:
所有application属性都保存在服务器上,所有的用户(每一个session)都可以访问:

application设置属性:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<% // 设置属性
application.setAttribute("name","李兴华") ;
application.setAttribute("birthday",new Date()) ;
%>
<a href="application_scope_02.jsp">通过链接取得属性</a>
</body>
</html>
application获取属性:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
String username = (String) application.getAttribute("name") ;
Date userbirthday = (Date)application.getAttribute("birthday") ;
%>
<h2>姓名:<%=username%></h2>
<h2>生日:<%=userbirthday%></h2>
</body>
</html>
只要是application设置的属性,所有的用户都可以访问,表示公共的内容。
但是如果服务器启动了,则无法取得。因为关闭后属性消失,要想再次访问,重新设置。
既然application属性范围都保存在服务器上,如果同时设置很多个application的话,服务器的性能会降低,而4种属性范围都是保存在服务器上的,这时给出一个车原则,能使用page的,不使用request,能适用request的,不使用session,能使用session的,不用application。因为保存范围越窄,对服务器的压力越低。
深入研究page范围:
page范围通过pageContext对象设置。但是在pageContext里有如下设置属性的方法:
public void setAttribute(String name, Object value, int scope)
scope有4个表示属性范围的常量可以设置:
1. PAGE_SCOPE
2. REQUEST_SCOPE
3. SESSION_SCOPE
4. APPLICATION_SCOPE
测试例子:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<% // 设置属性
pageContext.setAttribute("name","李兴华",PageContext.REQUEST_SCOPE) ;
pageContext.setAttribute("birthday",new Date(),PageContext.REQUEST_SCOPE) ;
%>
<jsp:forward page="request_scope_02.jsp"/>
</body>
</html>
以上通过pageContext将一个属性设置成request范围,所以服务器跳转时属性可以保存。
所以注意:::pageContext可以操作4种范围,这一点直接决定以后的开发问题。
以上4种范围是整个web开发的核心。
JSP内置对象--4种属性范围 (pageContext,request,session,application)的更多相关文章
- [原创]java WEB学习笔记15:域对象的属性操作(pageContext,request,session,application) 及 请求的重定向和转发
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 咸鱼入门到放弃8--jsp<三>jsp内置对象
NO. 内置对象 类型 1 pageContext javax.servlet.jsp.PageContext 2 request javax.servlet.http.HttpServletRequ ...
- JavaWeb——JSP内置对象application,JSP属性范围
application application语法 application对象 JSP属性范围 范围的分类 page request session application pagecontext延伸 ...
- JSP内置对象和属性
JSP内置对象和属性列举如下: 1.request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是HttpServletRequest类的 ...
- jsp内置对象浅谈
jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...
- JSP内置对象-request
JSP内置对象即无需声明就可以直接使用的对象实例,在实际的开发过程中,比较常用的JSP对象有request,response,session,out和application等,笔者在本文章中将简单介绍 ...
- Jsp内置对象及EL表达式的使用
一.JSP的内置对象(9个JSP内置对象) JSP的内置对象引用名称 对应的类型 request HttpServletRequest response HttpServletResponse ses ...
- JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础
JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次 ...
- JSP内置对象详解
jsp中内置对象:request.response.session.applecation.out.pagecontesx.config.page.exception.cookie 1.request ...
随机推荐
- C# 泛型 Func<object, string, bool> filter
Func<object, string, bool>是泛型,你可以先把他看成一个普通类型,比如stringpublic class Func{ } // 自定义个普通类. Func fil ...
- 老司机的奇怪noip模拟T2-huangyueying
2. 黄月英(huangyueying.cpp/c/pas )[问题描述]xpp 每天研究天文学研究哲学,对于人生又有一些我们完全无法理解的思考.在某天无聊学术之后, xpp 打开了 http://w ...
- win32api大全
win32api大全 http://files.cnblogs.com/files/landv/Win32API%E5%A4%A7%E5%85%A8.zip
- Git回退到服务器某个版本正确姿势
背景: Git协作中,成员不可避免地会提交一些错误的版本,由于Git相比SVN引入了本地仓库,操作会相对复杂,以下为姿势分解 找一个源文件RspUtils.java,加上一行注释 //测试回退git服 ...
- POJ 2368 Buttons(巴什博弈变形)
题目链接 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; ...
- HDU_1245_Saving James Bond_最短路
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1245 题意:给一个已知直径的圆形岛,然后岛的附近是湖,湖里有一些点,以坐标的形式给出,最外层是矩形的终 ...
- 监控自定义信息 —— ESFramework 4.0 快速上手(10)
在ESFramework 4.0 进阶(02)-- 核心:消息处理的骨架流程一文中,我们介绍了通过挂接IMessageSpy到骨架流程,我们就可以监控到所有收发的消息.由于Rapid引擎已经为我们组装 ...
- 判定生死的心跳机制 --ESFramework 4.0 快速上手(07)
在Internet上采用TCP进行通信的系统,都会遇到一个令人头疼的问题,就是"掉线".而"TCP掉线"这个问题远比我们通常所能想象的要复杂的多 -- 网络拓扑 ...
- ESFramework 4.0 性能测试
本实验用于测试ESFramework服务端引擎的性能,测试程序使用ESFramework 4.0版本. 一.准备工作 测试的机器总共有3台,都是普通的PC,一台作为服务器,两台作为客户端. 作为服务器 ...
- Rational Rose 2003 逆向工程转换C++ / VC++ 6.0源代码成UML类图
目录 1.安装&破解Rational Rose 2003 1.1 安装Rose 2003 1.2 破解Rose 2003 1.3运行出错“没有找到suite objects.dl” 2. Ra ...