javaweb:域对象的属性操作setAttribute(),getAttribute()及其作用范围
和属性相关的方法
方法介绍
- Object getAttribute(String name)
获取指定的属性 - Enumeration getAttributeNames();
获取所有名字属性组成的Enumeration对象。 - removeAttribute(String name)
移除指定的属性 - void setAttribute(String name,Object o);
设置属性
- 有这些方法的对象
pageContext,request,session,application对象都有这些方法,也称之为域对象``
举例
jsp页面attr1的body写成如下部分:
<body>
<%
pageContext.setAttribute("pageContextAttr", "pageContextValue");
request.setAttribute("requestAttr", "requestValue");
session.setAttribute("sessionAttr", "sessionValue");
application.setAttribute("applicationAttr", "applicationValue");
%>
<br> <br>
pageContextAttr:<%= pageContext.getAttribute("pageContextAttr") %>
<br> <br>
requestAttr:<%= request.getAttribute("requestAttr") %>
<br> <br>
sessionAttr:<%= session.getAttribute("sessionAttr") %>
<br> <br>
applicationAttr:<%= pageContext.getAttribute("pageContextAttr") %>
</body>
从运行结果我们可以得到结论,这几个域对象都可以设置属性值,并且可以获取属性值,不仅可以获取到自己设置的属性,也可以获取到其他人设置的属性。
- 举例2:
我们在attr1.jsp中加入以下一个链接
在attr2.jsp中的body部分写入和attr1.jsp类似的部分。
我们运行attr2.jsp,可以得到以下结果
为什么pageContext和requestAttr获得的值是空的呢?(applicationAttr那里是application获取的pagecontext的值,因此为空,实际application的属性值是可以跨越jsp传输的)
我们得到了结论: pagecontext的作用范围当前jsp页面,request的作用范围是同一个请求,session的作用范围仅限于一次会话(浏览器打开到关闭为一次会话,在此期间会话不失效),application的作用范围限于当前WEB应用,是范围最大的属性作用范围,只要在一处设置属性,在其他各处的JSP和servlet都可以获取到