您的位置:首页 > 产品设计 > UI/UE

JSP中四种属性范围(pageContext,request)

2016-02-20 00:00 726 查看
摘要: pageContext,request,session,application

在JSP中提供了四种属性的保存范围,所谓的属性的保存范围,指的是一个设置的对象,可以在多少个页面中保存,并可以使用。

四种属性范围:

①pageContext:只在一个页面中保存属性,跳转后无效;

②request:只在一次请求中保存属性,服务器跳转后依然有效;

③session:在一次会话范围中,无论如何跳转都有效,但新开浏览器则无效;

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

属性操作方法

NO方法
类型
描述
1
public void setAttribute(String name,Object value)
普通设置属性的名称和内容
2public Object getAttribute(String name)
普通根据属性名称取得内容
3public removeAttribute(String name)普通删除指定的属性
四个内置对象都存在以上三个方法。

设置属性的时候,属性的名称是String,内容是Object。Object可以设置任意内容

一,page范围(pageContext范围)---->表示将一个属性设置在页面上,跳转后无法取得

<body>
<%
//设置page属性范围,此范围只能在本页面起作用
pageContext.setAttribute("name","IronMan") ;
pageContext.setAttribute("birthday",new Date()) ;
%>
<%
//从page属性中取得内容,并执行向下转型,因为取得后返回的类型是Object,所以必须向下转型操作
String username = (String) pageContext.getAttribute("name") ;	//向下转型,把父类对象当做子类对象,子类有而父类不一定有
Date userbirthday = (Date) pageContext.getAttribute("birthday") ;
%>
<h2>姓名:<%=username %></h2>
<h2>年龄:<%=userbirthday %></h2>
</body>

通过<jsp:forward>跳转,则跳转之后属性无法取得

<body>
<%
//设置page范围,此属性只能在JSP页面中起作用
pageContext.setAttribute("name","IronMan") ;
pageContext.setAttribute("birthday",new Date()) ;
%>
<jsp:forward page="page_scope_03"></jsp:forward>			<%--服务器端跳转--%>
</body>

<body>
<%
//从page范围中取得属性,因为返回的类型是Object,所以要执行向下转型
String username = (String)pageContext.getAttribute("name") ;
Date userbirthday = (Date)pageContext.getAttribute("birtyday") ;
%>
<h2><%=username %></h2>
<h2><%=userbirthday %></h2>
</body>

现在发现服务器跳转之后,发现内容取得,则一个page范围中的内容只能在一个页面内保存。

如果希望服务器跳转之后可以继续取得属性,则使用更大范围的跳转---->request跳转

二,request属性范围

如果要在服务器跳转之后,属性还可以保存下来,则使用request属性范围操作。request属性范围表示,在服务器跳转之后,所有设置的内容依然可以保存下来。

request_scope_01.jsp

<body>
<%
request.setAttribute("name","IronMan") ;
request.setAttribute("birthday",new Date()) ;
%>
<jsp:forward page="request_scope_02.jsp"></jsp:forward>
</body>

request_scope_02.jsp

<body>
<%
String username = (String) request.getAttribute("name") ;
Date userbirthday = (Date) request.getAttribute("birthday") ;
%>
<h2>姓名:<%=username %></h2>
<h2>生日:<%=userbirthday %></h2>
</body>

如果跳转换成超链接跳转,则无法取得属性,因为超链接跳转后,地址栏信息改变,属于客户端跳转而不是服务器跳转。是无法取得属性的。

<body>
<%	// 设置request的属性范围,此属性只能在服务器跳转中有作用
request.setAttribute("name","SuperMan") ;
request.setAttribute("birthday",new Date()) ;
%>
<!-- 使用超链接跳转,地址栏改变,属于客户端跳转,而不是服务器跳转,所以不能取得属性 -->
<a href = "request_scope_02.jsp">通过超链接取得属性</a>
</body>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: