02_02 JSP内置对象之四种属性范围

四种属性范围

属性范围概述

Page只在一个页面中保存属性,跳转之后无效。

Request只在一次请求中保存属性,服务器跳转后依然有效。

Session在一次会话范围中保存,无论何种跳转都有效。但是在新开浏览器无法使用。

Applictation在整个服务器上保存,所有用户都可以使用。

4个内置对象都支持以下三种操作方法:


NO


方法名称


类型


描述


1


Public  void setAttribute(String name, Object o)


普通


设置属性的名称及内容


2


Public  Object getAttribute(String name)


普通


取得属性内容


3


Public  void removeAttribute(String name)


普通


删除属性

1.page属性范围(pageContext)

在当前页面设置属性有效,进行页面跳转则无效

例1 在页面内设置属性并取得属性

<%--page属性:设置当前页面才有效,进行跳转则无效--%>

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>    <%--导java.util包--%>
<html>
<head>
	<title>page_scope</title>
</head>
<body>
<%
	//设置page属性范围,此属性只在JSP当前页面有效
	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>

例2 在页面内设置属性但跳转页面取得属性(不成功)

<%--page属性:设置当前页面才有效,进行跳转则无效--%>

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>    <%--导java.util包--%>
<html>
<head>
	<title>page_scope</title>
</head>
<body>
<%
	//设置page属性范围,此属性只在JSP当前页面有效
	pageContext.setAttribute("name", "郑廉晨");
	pageContext.setAttribute("birthday", new Date());
%>

<jsp:forward page="page_scope_03.jsp" />		<%--进行服务器跳转--%>

</body>
</html>
<%--page属性:设置当前页面才有效,进行跳转则无效--%>

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>    <%--导java.util包--%>
<html>
<head>
	<title>page_scope</title>
</head>
<body>

<%
	//从当前页面取出属性,并执行向下转型操作
	String username = (String) pageContext.getAttribute("name");
	Date userbirthday = (Date) pageContext.getAttribute("birthday");
%>

<h2>姓名:<%=username%></h2>
<h2>生日:<%=userbirthday%></h2>

</body>
</html>

2.request属性

服务器跳转属性有效,但客户端跳转属性无效。

例1 服务器跳转属性有效

<%--request属性: 服务器跳转属性有效--%>

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>    <%--导java.util包--%>
<html>
<head>
	<title>request_scope</title>
</head>
<body>
<%
	//设置request属性范围,此属性服务器跳转属性有效
	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.*"%>    <%--导java.util包--%>
<html>
<head>
	<title>request_scope</title>
</head>
<body>

<%
	//从当前页面取出属性,并执行向下转型操作
	String username = (String) request.getAttribute("name");
	Date userbirthday = (Date) request.getAttribute("birthday");
%>

<h2>姓名:<%=username%></h2>
<h2>生日:<%=userbirthday%></h2>

</body>
</html>

例2 客户端跳转属性无效

<%
	//设置request属性范围,此属性服务器跳转属性有效
	request.setAttribute("name", "郑廉晨");
	request.setAttribute("birthday", new Date());
%>

<!--通过超链接跳转,属于客户端跳转,地址栏有变化哦-->
<a href="request_scope_02.jsp">通过超链接取得属性</a>

</body>
</html>

<!--通过超链接跳转,属于客户端跳转,地址栏有变化哦-->
<a href="request_scope_02.jsp">通过超链接取得属性</a>

</body>
</html>
<%--request属性: 服务器跳转属性有效--%>

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>    <%--导java.util包--%>
<html>
<head>
	<title>request_scope</title>
</head>
<body>

<%
	//从当前页面取出属性,并执行向下转型操作
	String username = (String) request.getAttribute("name");
	Date userbirthday = (Date) request.getAttribute("birthday");
%>

<h2>姓名:<%=username%></h2>
<h2>生日:<%=userbirthday%></h2>

</body>
</html>

3.session属性

session属性在一个浏览器中属性都有效,无论是服务器跳转还是客户端跳转都有效。

<%--session属性: 在一个浏览器中属性都有效--%>

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>    <%--导java.util包--%>
<html>
<head>
	<title>request_scope</title>
</head>
<body>
<%
	//设置request属性范围,此属性服务器跳转属性有效
	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.*"%>    <%--导java.util包--%>
<html>
<head>
	<title>request_scope</title>
</head>
<body>

<%
	//从当前页面取出属性,并执行向下转型操作
	String username = (String) session.getAttribute("name");
	Date userbirthday = (Date) session.getAttribute("birthday");
%>

<h2>姓名:<%=username%></h2>
<h2>生日:<%=userbirthday%></h2>

</body>
</html>

但是新开浏览器则属性无法获得(要关了原来开的浏览器哦)

4.application属性

application属性范围,此属性保存在服务器上

<%--application属性范围,此属性保存在服务器上--%>

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>    <%--导java.util包--%>
<html>
<head>
	<title>application_scope</title>
</head>
<body>

<%
	//从当前页面取出属性,并执行向下转型操作
	String username = (String) application.getAttribute("name");
	Date userbirthday = (Date) application.getAttribute("birthday");
%>

<h2>姓名:<%=username%></h2>
<h2>生日:<%=userbirthday%></h2>

</body>
</html>
<%--application属性范围,此属性保存在服务器上--%>

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>    <%--导java.util包--%>
<html>
<head>
	<title>application_scope</title>
</head>
<body>
<%
	//设置request属性范围,此属性服务器跳转属性有效
	application.setAttribute("name", "郑廉晨");
	application.setAttribute("birthday", new Date());
%>

<!--通过超链接跳转,属于客户端跳转,地址栏有变化哦-->
<a href="application_scope_02.jsp">通过超链接取得属性</a>

</body>
</html>

只要服务器没有重启则属性都有效,若服务器重启则无效。

Applictaion属性过多会影响服务器性能,慎用之。

所以使用属性原则

能用page则用page; 能request则用request;能session则用session;慎用application。

以上内容参考JAVAWEB开发实战经典(名师讲坛)

时间: 2024-10-05 12:19:43

02_02 JSP内置对象之四种属性范围的相关文章

JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式

最近在学习JSP相关基础知识,我们都知道JSP当中存在一组不使用new关键字就可以在脚本和表达式中使用的对象,在Web开发中经常使用.为了能更好的理解这些对象,在此对JSP内置对象作一些归纳. 目录: JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式 JSP内置对象——out(待更新) JSP内置对象——request/response(待更新) JSP内置对象——session(待更新) JSP内置对象——application(待更新) JSP内置对象——其他

JSP内置对象和属性

JSP内置对象和属性列举如下: 1.request对象     客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是HttpServletRequest类的实例.2.response对象     response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它.它是HttpServletResponse类的实例.3.session对象     session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开

jsp 内置对象(五)

1.Request对象 该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以 获取用户提交的信息. 当Request对象获取客户提交的汉字字符时,会出现乱码问题,必须进行特殊处理.首先,将获取的 字符串用ISO-8859-1进行编码,并将编码存发岛一个字节数组中,然后再将这个数组转化为字符串对象 即可.如下: String textContent=request.getParameter("boy") byte b[]=textContent.get

JSP内置对象详解

jsp中内置对象:request.response.session.applecation.out.pagecontesx.config.page.exception.cookie 1.request:是javax.servlet.httpservletRequest类型的对象,该对象是用户客户端的请求信息,主要用户接受客户端通过http协议传送到服务器的数据! (包括头部信息.系统信息.请求方式以及请求信息参数),jsp内置对象Web容器所创建的一组对象! 生命周期:jsp发出请求一个requ

JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础

JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次都要先创建这些对象,然后再去使用它们,这样就显得十分繁琐了,为了方便使用者,Sun公司在开发JSP的时候,把一些对象设置为内置对象,开发者在JSP页面编程的时候不必声明这些对象就能直接使用,这就是JSP的内置对象. 那么JSP对象有哪些呢? JSP内置对象          对应的类型   备注 R

Jsp内置对象及EL表达式的使用

一.JSP的内置对象(9个JSP内置对象) JSP的内置对象引用名称 对应的类型 request HttpServletRequest response  HttpServletResponse session HttpSession(有开关的:page指令的session属性的取值) application  ServletContext config  ServletConfig page this(当前Servlet对象) exception java.lang.Throwable(有开关

【转】JSP内置对象详细介绍(下)

第四个问题:Servlet的生命周期是什么呢? Servlet的生命周期,简单的概括分为四步:servlet类加载->实例化->服务->销毁.Servlet实例化的步骤: 1.Servlet容器启动时:读取Web.xml配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,同时将ServletConfig对象作为参数来调用Servlet对象的init方法. 2.在Servlet容器启动后:客户首次向Servlet发出请求,Servlet容器会 判断内存中是否

JSP内置对象与servlet对应关系

隐式对象 说明 out 转译后对应JspWriter对象,其内部关联一个PringWriter对象 request 转译后对应HttpServletRequest/ServletRequest对象 response 转译后对应HttpServletRespons/ServletResponse对象 config 转译后对应ServletConfig对象 application 转译后对应ServletContext对象 session 转译后对应HttpSession对象 pageContext

jsp内置对象之-session对象

session对象 session对象是一个JSP内置对象. session对象在第一个JSP页面被装载时自动创建,完成回话期管理. session生命周期从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束被称为一个会话. 当一个客户访问一个服务器时,可能在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象. session对象时HttpSession类的实例. session的工作原理如下: 客户首次访问服务器的一个页面时,服务器