Web域相关对象
在Web开发中,PageContext、HttpRequest、HttpSession和ServletContext这四个对象之所以可以存储数据,是因为它们内部都定义了一个Map集合,这些Map集合是有一定作用范围的,例如,HttpRequest对象存储的数据只在当前请求中可以获取到。习惯性的,我们把这些Map集合称为域,这些Map集合所在的对象称为域对象。在EL表达式中,为了获取指定域中的数据,提供了pageScope、requestScope、sessionScope和applicationScope四个隐式对象,示例代码如下:
${pageScope.userName}
${requestScope.userName}
${sessionScope.userName}
${applicationScope.userName}
需要注意的是EL表达式只能在这四个作用域中获取数据。为了让初学者更好的学习这四个隐式对象,接下来通过一个案例来演示这四个隐式对象如何访问JSP域对象中的属性,如例1所示。
例1 scopes.jsp
1 <%@ page language="java" contentType="text/html; charset=utf-8"
2 pageEncoding="utf-8"%>
3 <html>
4 <head></head>
5 <body>
6 <% pageContext.setAttribute("userName", "itcast"); %>
7 <% request.setAttribute("bookName", "Java Web"); %>
8 <% session.setAttribute("userName", "itheima"); %>
9 <% application.setAttribute("bookName", "Java 基础"); %>
10 表达式\${pageScope.userName}的值为:${pageScope.userName} <br>
11 表达式\${requestScope.bookName}的值为:${requestScope.bookName} <br>
12 表达式\${sessionScope.userName}的值为:${sessionScope.userName} <br>
13 表达式\${applicationScope.bookName}的值为:${applicationScope.bookName}
14 <br>
15 表达式\${userName}的值为:${userName}
16 </body>
17 </html>
启动Tomcat服务器,在地址栏中输入http://localhost:8080/chapter07/scopes.jsp
访问scopes.jsp页面,此时,浏览器窗口中显示的结果如图1所示。
图1 scopes.jsp
从图1可以看出,使用pageScope、requestScope、sessionScope和applicationScope这四个隐式对象成功的获取到了相应JSP域对象中的属性值。需要注意的是,使用EL表达式获取某个域对象中的属性时,也可以不使用这些隐式对象来指定查找域,而是直接引用域中的属性名称即可,例如表达式${userName}就是在page、request、session、application这四个作用域内按顺序依次查找userName属性。