jsp 四大属性范围

来源:互联网 发布:网上宿迁网络问政来龙 编辑:程序博客网 时间:2024/04/29 18:15

四种属性: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>


页面request_03
<%@ 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。

因为保存的范围越窄,服务器压力越低。