一、内置对象(九个)
request、response、session、application、config已有详细介绍,这里重点介绍pageContext、out、page对象。
二、page对象
page对象表示当前JSP页面,可以理解为一个对象本身,即把JSP当作一个对象,page对象在开发中几乎不用,了解下即可。
三、out对象
out对象用于向客户端发送文本数据。其作用和用法和PrintWriter非常相似。JSP中的out对象类型为JSPWriter,相当于带缓存功能的PrintWriter,我们可以通过设置page指令的buffer属性来调整混存大小,甚至关闭缓存。
要向将out对象缓冲区中的内容写入Servlet提供的缓存,需要符合以下条件:
- 设置page指令的buffer属性关闭out对象的缓存功能。
- out对象的缓存区已满
- 整个JSP页面结束
工作原理:
四、pageContext对象
pageContext对象是JSP中最重要的对象,它代表JSP的运行环境,它不仅封装了其他8个隐式对象的引用(在自定义标签中很有用),自身还是一个域对象,可以用来保存数据。
pageContext获取其他对象的方法:
- getException返回exception对象
- getPage返回page对象
- getRequest返回request对象
- getResponse返回reponse对象
- getServletConfig返回config对象
- getServletContent返回application对象
- getSession返回session对象
- getOut返货out对象
1.pageContext作为域对象
pageContext对象可以作为容器来使用,因此可以将一些数据存储在pageContext对象中。
常用方法:
- setAttribute(String name,String value)
- getAttribute(String name)
- removeAttribute(String name)
- findAttribute(String name)
这里findAttribute方法将按照page、request、session、application顺序查找属性,如果都没有返回null
示例
2.pageContext访问其他对象
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<title>test</title>
</head>
<body>
<%
//此时相当于往session对象中存放了一个name属性,等价于 session.setAttribute("name","东皇太一");
pageContext.setAttribute("name","东皇太一",PageContext.SESSION_SCOPE);
%>
<%
//取得session对象的属性,使用pageContext对象获取
String refName1 = (String)pageContext.getAttribute("name",PageContext.SESSION_SCOPE);
//由于取得的值为Object类型,因此必须使用String强制向下转型,转换成String类型
String refName2 = (String)session.getAttribute("name");
%>
<h1>取出存放在session对象中的属性值:</h1>
<p>第一种做法:使用pageContext.getAttribute("attributeName",PageContext.SESSION_SCOPE);去取出session对象中值</p>
<h3>姓名:<%=refName1%></h3>
<p>第二种做法:使用session.getAttribute("attributeName");去取出session对象中值</p>
<h3>姓名:<%=refName2%></h3>
</body>
</html>
3.pageContext引入和跳转到其他资源
PageContext类中定义了forward(跳转页面)和include(引入页面)来分别简化和代替RequestDispatcher.forward和include方法
示例1:forward方法(不常用)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<title>test</title>
</head>
<body>
<%
//使用pageContext的forward方法跳转到test01.jsp页面,/代表了当前的web应用
pageContext.forward("/test01.jsp");
//使用pageContext.forward(relativeUrlPath)替代RequestDispatcher.forward(relativeUrlPath)
//使用RequestDispatcher的forward方法实现的跳转方式
//pageContext.getRequest().getRequestDispatcher("/test01.jsp").forward(request, response);
%>
</body>
</html>
示例2:include(不常用)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<title>test</title>
</head>
<body>
<%
pageContext.include("/head.jsp");
%>
使用pageContext的include方法引入资源
<%
pageContext.include("/foot.jsp");
%>
<hr/>
<%--
<jsp:include page="/head.jsp"/>
使用jsp:include标签引入资源
<jsp:include page="/foot.jsp"/>
--%>
</body>
</html>
访问结果