四种属性:pageContext、request、session、application
四种属性都有的三种方法:
public void setAttribute(String name,Object o ),设置属性的名称及内容
public Object getAttribute(String name) 根据属性名称取得属性
public void removeAttribute(String name),删除指定的属性
1、pageContext
pageContext简称page,该属性只在本页有效,跳转后无法取得。下面用代码来看一下
页面page_01代码
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>page</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_02代码
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>page</title></head>
<body>
<% // 设置属性
pageContext.setAttribute("name","页面") ;
pageContext.setAttribute("birthday",new Date()) ;
%>
<jsp:forward page="page_03.jsp"/>
</body>
</html>
该页面中有forward跳转到page_03
输出为 姓名:null
时间:null
说明:服务器发生跳转之后,内容无法取得了。因为一个page范围中的内容只能保存在一个页面
页面page_03代码
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>page</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 对象
request属性范围表示在服务器跳转之后,所有的设置内容依然被保留下来。
页面request_01
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>page</title></head>
<body>
<% // 设置属性
request.setAttribute("name","页面") ;
request.setAttribute("birthday",new Date()) ;
%>
<jsp:forward page="request_02.jsp"/>
</body>
</html>
页面request_02
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>page</title></head>
<body>
<%
String username = (String) request.getAttribute("name") ;
Date userbirthday = (Date)request.getAttribute("birthday") ;
%>
<h2>姓名:<%=username%></h2>
<h2>生日:<%=userbirthday%></h2>
</body>
</html>
现在修改语句
<jsp:forward page="request_02.jsp"/>
修改为通过超链接取得属性
<a href="request_02.jsp">通过链接取得属性</a>
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>page</title></head>
<body>
<% // 设置属性
request.setAttribute("name","页面") ;
request.setAttribute("birthday",new Date()) ;
%>
<a href="request_02.jsp">通过链接取得属性</a>
</body>
</html>
执行request_03跳转到request_02
输出为 姓名:null
生日:null
设置了超链接之后,首先地址栏会发生改变,所以一旦地址栏发生改变的跳转,成为客户端跳转,客户端跳转无法彻底request属性。地址栏改变了,就相当于发生了第二次请求,则第一次请求的内容肯定就消失了,所以无法取得。一次跳转称为服务器跳转。
3、session对象
无论是服务器还是客户端跳转,都可以保存属性。但是再打开一个新的浏览器的话,就无法取得session了,因为每一个session只保存了当前的浏览器之中,并且可以从相关的页面中取得。
4、application对象
若想让属性设置一次后,不管是否是新的浏览器,打开都可以访问的话,则就可以使用application范围了。
所有的application属性直接保存在服务器上了,每一个session都可以直接访问了。若关闭了服务器重新启动了,则无法取得了。
四大属性使用原则,优先使用page,其次request,再次是session,最后是application。
因为保存的范围越窄,服务器压力越低。