JavaWeb-014-域对象的属性操作
2017-11-23 本文已影响18人
53b3f4658edc
-
在application、session、request、pageContext对象中都可以调用setAttribute方法和getAttribute方法来设置和检索各自域范围内的属性。
-
存储在application对象中的属性可以被同一个WEB应用程序中的所有Servlet和JSP页面访问。
-
存储在session对象中的属性可以被属于同一个会话的所有Servlet和JSP页面访问。
-
存储在request对象中的属性可以被属于同一个请求的所有Servlet和JSP页面访问,例如使用PageContext.forward和PageContext.include方法连接起来的多个Servlet和JSP页面。
-
存储在pageContext对象中的属性仅可以被当前JSP页面的当前响应过程中调用的各个组件访问,例如,正在响应当前请求的JSP页面和它调用的各个自定义标签类。
-
PageContext类中还提供了对各个域范围的属性进行统一管理的方法,以简化对各个域范围内的属性的访问。
-
setAttribute方法
- public void setAttribute(java.lang.String name,java.lang.Object value)
- public void setAttribute(java.lang.String name, java.lang.Object value,int scope)
-
常量
- PageContext.APPLICATION_SCOPE
- PageContext.SESSION_SCOPE
- PageContext.REQUEST_SCOPE
- PageContext.PAGE_SCOPE
-
getAttribute方法
- public java.lang.Object getAttribute(java.lang.String name)
- public java.lang.Object getAttribute(java.lang.String name,int scope)
-
removeAttribute方法
- public void removeAttribute(java.lang.String name)
- public void removeAttribute(java.lang.String name,int scope)
-
getAttributeNamesInScope方法
-
findAttribute方法 (*)
测试代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%--
和属性相关的方法:
1.方法:
1.1public Object getAttribute(String name):获取相关属性
1.2.public java.util.Enumeration<E> getAttributeNames():获取属性名的Enumeration对象
1.3.public void setAttribute(String name, Object o):设置相关属性
1.4.public void removeAttribute(String name):移除相关属性
2.可以使用这些方法的对象(域对象):
2.1.pageContext:属性的作用范围仅限在当前的jsp页面
2.2.request:属性的作用范围仅限在同一个请求(一次刷新)
2.3.session:属性的作用范围仅限在一次会话(一次浏览器的打开到关闭,当然会话不失效 )
2.4.application:属性的作用范围是当前的web应用(范围最大,一次设置,在多处JSP或者Servlet中都能访问)
--%>
<%
/*
public void setAttribute(String name, Object o)
存储此请求中的属性。在请求之间重置属性。此方法常常与 RequestDispatcher 一起使用。
属性名称应遵守与包名称相同的命名约定。以 java.*、javax.* 和 com.sun.* 开头的名称保
留给 Sun Microsystems 使用。
如果传入的对象为 null,则效果将与调用 #removeAttribute 相同。
警告,当通过 RequestDispatcher 从驻留在另一个 Web 应用程序中的 servlet 分发请求时,
可能无法在调用者 servlet 中正确获取通过此方法设置的对象。
name 指定属性名称的 String
o 要存储的 Object
*/
//1.设置属性(通过对应的隐含对象)
//PageContext pageContext
//可以从这里获取当前页面的几乎一切信息,包括另外8个对象
pageContext.setAttribute("pageContextAttr", "pageContextValue");
//HttpServletRequest request
//这个request就是前面学习的doXxx方法里面的request
request.setAttribute("requestAttr", "requestValue");
//HttpSession session
//代表浏览器和服务器的一次会话
session.setAttribute("sessionAttr", "sessionValue");
//ServletContext application
//代表了当前web应用。
application.setAttribute("applicationAttr", "applicationValue");
// 设置属性,通过pageContext统一管理(放到application)
pageContext.setAttribute("test", "test", PageContext.APPLICATION_SCOPE);
%>
<%--
public Object getAttribute(String name)
以 Object 形式返回指定属性的值,如果不存在给定名称的属性,则返回 null。
可以以两种方式设置属性。servlet 容器可设置属性,使有关请求的自定义信息可用。
例如,对于使用 HTTPS 发出的请求,可使用属性 javax.servlet.request.X509Certificate
获取有关客户端证书的信息。还可以使用 ServletRequest#setAttribute 以编程方式设置属性。
这允许在调用 RequestDispatcher 之前将信息嵌入请求。
属性名称应遵守与包名称相同的命名约定。此规范保留匹配 java.*、javax.* 和 sun.* 的名称。
name 指定属性名称的 String
return 包含属性值的 Object,如果属性不存在,则返回 null
--%>
<p1>jSP页面1</p1>
<br />
pageContextAttr:<%= pageContext.getAttribute("pageContextAttr") %> <!-- pageContext:只能访问当前的属性-->
<br />
requestAttr:<%= request.getAttribute("requestAttr") %>
<br />
sessionAttr:<%= session.getAttribute("sessionAttr") %>
<br />
applicationAttr:<%=application.getAttribute("applicationAttr") %>
<br />
<!-- 通过PageContext统一取属性 -->
test:<%= pageContext.getAttribute("test", PageContext.APPLICATION_SCOPE) %>
<br />
<a href="test1.jsp">去页面2</a>
<br />
<a href="testServlet">去Servlet</a>
</body>
</html>
微信公众号:JavaWeb架构师
其它
- 源码下载
关注下方公众号,回复:javaweb_course.code
-
欢迎加入交流群:451826376
-
更多信息:www.itcourse.top