jsp四大作用域

page作用域:在一个页面范围内有效,通过pageContext对象访问
page作用域指本jsp页面的范围
pageContext.setAttribute
pageContext.getAttribute
作用域仅限于当前页面对象,可以近似于理解为java的this对象,离开当前JSP页面(无论是redirect还是forward),则pageContext中的所有属性值就会丢失。

testOne.jsp

<body>
<!-- 
	在testOne.jsp页面中,调用pageContext对象的setAttribute()方法、
	将一个String对象保存到page作用域,然后在本页面中调用pageContext对象的
	getAttribute()方法可以访问到这个String对象,而在testTwo.jsp
	页面中,也就是另一个page作用域中,则无法访问到该String对象,
	显示是:testTwo:null,当然,这个结果是通过pageContext对象的include()
	方法将testTwo.jsp的响应结果包含到testOne.jsp页面中的。

 -->
	<%
	String name="page";
	pageContext.setAttribute("name", name);
	%>
	<strong>
		testOne:<%=pageContext.getAttribute("name")%>
	</strong>
	<%@ include file="testTwo.jsp" %>
	<%
	 	pageContext.include("testTwo.jsp");
	%>
</body>

testTwo.jsp

	<strong>
		testTwo:<%=pageContext.getAttribute("name")%>
	
	</strong>
request作用域:在一个服务器请求范围内有效,对应的作用域访问对象为request
request作用域内的对象则是与客户端的请求绑定在一起

作用域是同一个请求之内,在页面跳转时,如果通过forward方式跳转,则forward目标页面仍然可以拿到request中的属性值。如果通过redirect方式进行页面跳转,由于redirect相当于重新发出的请求,此种场景下,request中的属性值会丢失。

testOne.jsp

<body>
	
	<!-- 
		在testOne.jsp页面中,通过RequestDispatcher对象的forward()方法转发至testTow.jsp,
		属于一次请求,在同一个request作用域内,所有在testTwo.jsp 页面中可以访问到这个String对象
	 -->
	
	<%
		String name ="requset";
		request.setAttribute("name", name);
		request.getRequestDispatcher("testTwo.jsp").forward(request, response);
	
	%>
	
</body>
testTwo.jsp
	<strong>
		testTwo:<%= request.getAttribute("name") %>
		<!--结果显示: testTwo:requset -->
	</strong>

session作用域:在一次会话范围内容有效,对应的作用域访问对象为session
session的作用域是在一个会话的生命周期内,会话失效,则session中的数据也随之丢失。

testOne.jsp

<body>
	<!-- 使用response对象将页面重定向至testTwo.jsp,在testTwo.jsp中能够读取到sessionName变量
		,由此可见session作用域内的数据在会话有效期内都可以访问。使用response.sendRedirect()
		重定向到另外一个页面时,相当于重新发起了一次请求,所以上一次请求中的reqName变量则随之失效
	 -->
	<%
		String req = "request";
		String ses = "session";
		request.setAttribute("reqName", req);
		session.setAttribute("sessionName", ses);
		response.sendRedirect("testTwo.jsp");
		
	%>


</body>

testTwo.jsp
	<strong>
		request:<%= request.getAttribute("reqName") %>
		session:<%= session.getAttribute("sessionName") %>
		<!--结果是: request:null session:session -->
	</strong>

application作用域:在一个应用服务器范围内有效,对应的作用域访问对象为application
作用域是最大的,只要服务器不停止,则application对象就一直存在,并且为所有会话所共享。

testOne.jsp

<body>

<!--	运行testOne.jsp 
	结果显示:
			session:session
			application:application
		这时以一个新的会话开启另一个浏览器窗口,直接访问testTwo.jsp页面
	结果显示:
		session:null
		application:application
		
	session作用域针对当前会话,多个会话之间不能共享,所以无法读取sesName变量
	。而application作用域针对整个应用,因而appName变量可以被再次读取到
	(注:若重启Web应用,现有的application作用域失效)
	
	 -->
	
	<%
		String app="application";
		String ses="session";
		session.setAttribute("sesName", ses);
		application.setAttribute("appName", app);
		response.sendRedirect("testTwo.jsp");
	
	%>

</body>
testTwo.jsp
	<strong>
		session:<%=session.getAttribute("sesName")%><br/>
		application:<%= application.getAttribute("appName") %>
	</strong>



testTwo.jsp
阅读更多

没有更多推荐了,返回首页