您的位置:首页 > Web前端 > JavaScript

Hello JSP!——JSP内置对象分类及属性保存范围

2015-09-09 21:03 706 查看
一.JSP内置对象分类

在JSP2.0规范中一共定义了9种内置对象。这些对象可以不用进行显式的声明,而可以直接引用,不需要使用代码来创建其实例,而可以在程序中直接使用。JSP包含的9个内置对象及其对象类型、作用域如下表所示。


内置对象

类型
作用域
requestjavax.servelt.HttpServletRequestrequest
responsejavax.servelt.HttpServletResponseresponse
pageContextjavax.servelt.jsp.PageContextpage
sessionjavax.servlet.http.HttpSessionsession
applicationjavax.servlet.jsp.ServletContextapplication
outjavax.servlet.jsp.JspWriterpage
configjavax.servlet.ServletConfigpage
pagejava.lang.Objectpage
exceptionjava.lang.Throwablepage
根据各对象的作用不同,可以将这9个对象分为如下4类。

第一类:与Servlet有关的内置对象。

包括page和config两个对象。

第二类:与Input/Output有关的内置对象。

包括out、request和response三个对象。

第三类:与Context有关的内置对象。

包括sesion、application、和pageContext三个对象。

第四类:与Error有关的内置对象。

仅包括exception这一个对象。



二.属性保存范围

在JSP中可以通过setAttribute()和getAttribute()这两个方法来设置和取得属性,从而实现数据的共享。同样,JSP中提供了4种属性保存范围,分别为page、request、session及application。

1.page范围

所谓page范围,就是指设置的属性只在当前页面有效。通过使用pageContext的setAttribute()方法来设置属性,并通过pageContext的getAttribute()方法来取得属性。

示例:PageScopeDemo.jsp

<%@ page language="java" contentType="text/html; charset=gb2312"%>
<html>
	<head>
		<title>page范围</title>
	</head>
	<body>
		<%-- 在page范围设置属性  --%>
		<%
			pageContext.setAttribute("name","James");  //设置属性name,其值为James
		 %>
		<%-- 取得page范围属性  --%>
		<%
			String strName = (String)pageContext.getAttribute("name");  //取值属性name的值
			
			out.println("page范围:name属性值为"+strName);    //输出字符串strName的值
		
		 %>
	</body>
</html>


运行结果:



如果设置属性的范围为page,其他页面是无法取得page范围的属性的。



示例:PageScopeDemo2.jsp

<%@ page language="java" contentType="text/html;charset=gb2312" %>
<html>
	<head>
		<title>page范围</title>
	</head>
	<body>
		<%-- 取得page范围属性  --%>
		<%
			String strName = (String)pageContext.getAttribute("name");
			out.println("page范围:name属性值为" + strName);
		 %>
	</body>
</html>






运行结果:





2.request范围

所谓request范围,就是指属性在一次请求范围内有效。如果页面从一个页面跳转到另一个页面,那么该属性就失效了,这里所指的跳转是指客户端跳转,比如客户单机超链接跳转到其他页面,或者通过浏览器地址栏浏览其他网页。如果使用服务器端跳转<jsp:forward>,则该属性仍然有效。通过使用request的setAttribute()方法来设置属性,并通过request的getAttribute方法来取得属性。

下面是一个在跳转页面获得request范围属性的示例。

示例RequestScopeDemo.jsp

<%@ page language="java" contentType="text/html; charset=gb2312"%>
<html>
	<head>
		<title>request范围</title>
	</head>
	<body>
		<%-- 在request范围设置属性 --%>
		<%
			request.setAttribute("name","James"); //设置属性name,其值为James
		%>
		<a href="RequestScopeDemo2.jsp">跳转到RequestScopeDemo2.jsp
		</a>
	
	</body>
</html>


RequestScopeDemo2.jsp

<%@ page language="java" contentType="text/html; charset=gb2312"%>
<html>
	<head>
		<title>request范围</title>
	</head>
	<body>
		<%-- 在request范围设置属性 --%>
		<%
			String strName = (String) request.getAttribute("name"); //设置属性name,其值为James
			out.println("request范围:name属性值为" + strName);     //s输出name属性值
		%>
		
	
	</body>
</html>



运行结果:







如果使用客户端跳转,则无法获得request范围的属性,但是如果使用的是服务器端跳转,则仍然可以获得request范围属性。

示例:RequestScopeDemo.jsp

<%@ page language="java" contentType="text/html; charset=gb2312"%>
<html>
	<head>
		<title>request范围</title>
	</head>
	<body>
		<%-- 在request范围设置属性 --%>
		<%
			request.setAttribute("name","James"); //设置属性name,其值为James
		%>
		<%-- 使用forward动作指令执行跳转 --%>
		<jsp:forward page="RequestScopeDemo2.jsp"></jsp:forward>
	</body>
</html>


运行结果:





3.session范围

所谓session范围,也就是指客户浏览器与服务器一次会话范围内,如果和服务器断开链接,那么这个属性也就失效了。通过使用session的setAttribute()方法来设置属性,并通过session的getAttribute()方法来取得属性。

示例:SessionScopeDemo.jsp

<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
	<head>
		<title>session范围</title>
	</head>
	<body>
		<%-- 在session范围设置属性 --%>
		<%
			session.setAttribute("name","James");
		 %>
		 <%-- 添加页面链接,用来跳转到SessionScopeDemo2.jsp --%>
		 <a href="SessionScopeDemo2.jsp">SessionScopeDemo2.jsp</a>
	</body>
</html>


SessionScopeDemo2.jsp

<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
	<head>
		<title>session范围</title>
	</head>
	<body>
		<%-- 在session范围设置属性 --%>
		<%
			String strName = (String) session.getAttribute("name");
			out.println("session范围:name属性值为" + strName);
		 %>
	</body>
</html>


运行结果:









无论是客户端跳转还是服务器端跳转,都能够获得session范围的属性。但是如果重新打开浏览器,就不能获得session范围属性了,因为会话已经结束。



4.application范围

所谓application范围,也就是指在整个服务器范围,直到服务器停止以后才会失效。通过使用application的setAttribute()方法来设置属性,并通过application的getAttribute()方法来取得属性。

示例:ApplicationScopeDemo.jsp

<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
	<head>
		<title>application范围</title>
	</head>
	<body>
		<%-- 在Application范围设置属性 --%>
		<%
			application.setAttribute("name","James");
		 %>
		 <%-- 添加页面链接,用来跳转到ApplicationScopeDemo2.jsp --%>
		 <a href="ApplicationScopeDemo2.jsp">ApplicationScopeDemo2.jsp</a>
	</body>
</html>

ApplicationScopeDemo2.jsp

<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
	<head>
		<title>application范围</title>
	</head>
	<body>
		<%-- 在application范围设置属性 --%>
		<%
			String strName = (String) application.getAttribute("name");
			out.println("application范围:name属性值为" + strName);
		 %>
	</body>
</html>


运行结果:







application范围保存的属性只要服务器不重启,就能够在任意页面中获得,就算是重新打开浏览器也是可以的。



5.移除属性

只需调用相应对象的removeAttribute()方法就可以移除指定属性。

示例:RemoveAttributeDemo.jsp

<%@ page language ="java" contentType="text/html;charset=gb2312"%>
<html>
	<head>
		<title>移除属性</title>
	</head>
	<body>
		<%-- 在page范围设置属性  --%>
			<% 
				pageContext.setAttribute("name","James"); //设置属性name,其值为James
				pageContext.setAttribute("age","12");     //设置属性age,其值为12
				pageContext.setAttribute("sex","男");      //设置属性sex,其值为男
			%>
			<%-- 移除属性 --%>
			<%
				pageContext.removeAttribute("sex");
			 %>	
			 <%-- 取得page范围属性  --%>
			 <%
			 	String strName = (String)pageContext.getAttribute("name"); //取得属性name的值
			 
			 	String strAge = (String)pageContext.getAttribute("age"); //取得属性age的值
			 	
			 	String strSex = (String)pageContext.getAttribute("sex"); //取得属性sex的值
			 	
			 	out.println("page范围:name属性值为" + strName+ "<br>"); //输出字符串strName的值
			 	
			 	out.println("page范围:age属性值为" + strAge + "<br>"); //输出字符串strAge的值
			 		
				out.println("page范围:sex属性值为" + strSex+ "<br>"); //输出字符串strSex的值
			  %>
	</body>
</html>


运行结果:



因为sex属性值被移除了,所以显示属性值为null,其他属性的属性值都能够正常显示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: