9-内置对象
JSP规范定义了9种内置对象,其名称、类型、功能如下表
对象名称 | 类型 | 功能说明 |
---|---|---|
request | javax.servlet.http.HttpServletRequest | 请求对象,提供客户端HTTP请求数据的访问 |
response | javax.servlet.http.HttpServletResponse | 响应对象,用来向客户端输出响应 |
out | javax.servlet.jsp.JspWriter | 输出对象,提供对输出流的访问 |
session | javax.servlet.http.HttpSession | 会话对象,用来保存服务器与每个客户端会话过程中的信息 |
application | javax.servlet.ServletContext | 应用程序对象,用来保存整个应用环境的信息 |
pageContext | javax.servlet.jsp.PageContext | 页面上下文对象,用于存储当前JSP页面的相关信息 |
config | javax.servlet.ServletConfig | 页面配置对象,JSP页面的配置信息对象 |
page | javax.servlet.jsp.HttpJspPage | 当前JSP页面对象,即this |
exception | java.lang.Throwable | 异常对象,用于处理JSP页面中的错误 |
9.1 Out对象
out对象即输出对象,用来控制管理输出的缓冲区(buffer)和输出流(output stream)向客户端页面输出数据。 out对象类型为javax.servlet.jsp.JspWriter,
与HttpServletResponse接口的getWriter()方法获得的PrintWriter对象功能相同,并都由java.io.Writer类继承而来。
out对象的方法可以分为两类: 数据的输出方法:
print/println(基本数据类型) | 输出一个基本数据类型的值 |
---|---|
print/println(Object obj) | 输出一个对象的引用地址 |
print/println(String str) | 输出一个字符串的值 |
newLine() | 输出一个换行符 |
print/println(基本数据类型) | 输出一个基本数据类型的值 |
缓冲区的处理方法:
void clear() | 清除输出缓冲区的内容。若缓冲区为空,则产生IOException异常 |
---|---|
void clearBuffer() | 清除输出缓冲区的内容。若缓冲区为空,不会产生IOException异常 |
void flush() | 直接将目前暂存于缓冲区的数据刷新输出 |
void close() | 关闭输出流。流一旦被关闭,则不能再使用out对象做任何操作。 |
int getBufferSize() | 获取目前缓冲区的大小(KB) |
int getRemaining() | 获取目前使用后还剩下的缓冲区大小(KB) |
boolean isAutoFlush() | 返回true表示缓冲区满时会自动刷新输出;false表示缓冲区满时不会自动清除并产生异常处理 |
向out对象的输出流中写入数据时,数据会先被存储在缓冲区中,在JSP默认配置下,缓冲区满时会被自动刷新输出。 JSP页面通过page指令的autoFlush属性和buffer属性配置缓冲区参数: autoFlush属性表示是否自动刷新,默认值为true; buffer属性表示缓冲区大小,默认值为8kb。在此配置下,out对象在输出缓冲区内容每达到8kb后,会自动刷新输出而不会产生异常处理。 在取消自动刷新功能时,页面输出信息超过缓冲区指定大小的情况和使用out.flush()刷新方法后的情况。
9.2 request、response对象
- request对象
request对象即请求对象,表示客户端对服务器发送的请求,主要用于接受客户端通过HTTP协议传送给服务器端的数据。 request对象的类型为javax.servlet.http.HttpServletRequest,与Servlet中的请求对象为同一对象。
request对象的作用域为一次request请求。
- response对象
response对象即响应对象,表示服务器对客户端的响应。主要用来将JSP处理后的结果传回到客户端。
response对象类型为javax.servlet.http.HttpServletResponse,与Servlet中的响应对象为同一对象
9.3 session对象
即会话对象,表示浏览器与服务器之间的一次会话,类型为javax.servlet.http.HttpSession,session对象具有HttpSession接口的所有方法,具体工作原理与使用方法与Servlet中一致.
通常只应该把与用户会话状态相关的信息放入session范围内;不要仅仅为了两个页面之间传递信息就将信息放入session范围,这样会加大服务器端的开销;如果仅仅是为了两个页面交换信息,应将该信息放入request范围内,然后通过请求转发即可。
9.4 appcaliton对象
利用application记录全局访问量
<%--
Created by IntelliJ IDEA.
User: root
Date: 2020/12/13
Time: 15:01
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//context 单例
ServletContext context = request.getServletContext();
System.out.println(context);
System.out.println(application);
Integer num = (Integer) application.getAttribute("num");
if(num == null){
num = 0;
}
num++;
application.setAttribute("num",num);
%>
访问量 :<%=num%>
</body>
</html>
9.5 pageContext
pageContext即页面上下文对象,表示当前页面运行环境,用以获取当前JSP页面的相关信息。 pageContext对象作用范围为当前JSP页面。 pageContext对象类型为javax.servlet.jsp.PageContext,pageContext对象可以访问当前JSP页面所有的内置对象,访问方法如下表:
方法 | 描述 |
---|---|
ServletRequest getRequest() | 获取当前JSP页面的请求对象 |
ServletResponse getResponse() | 获取当前JSP页面的响应对象 |
HttpSession getSession() | 获取和当前JSP页面有联系的会话对象 |
ServletConfig getServletConfig() | 获取当前JSP页面的ServletConfig对象 |
ServletContext getServletContext() | 获取当前JSP页面的运行环境对象 |
Object getPage() | 获取当前JSP页面的Servlet实体 |
Exception getException() | 获取当前JSP页面的异常对象,不过此页面的page指令的isErrorPage属性要设为true |
JspWriter getOut() | 获取当前JSP页面的输出流 |
pageContext对象存取域属性的方法及描述
方法 | 描述 |
---|---|
Object getAttribute(String name, int scope) | 获取范围为scope,名为name的属性对象 |
void setAttribute(String name, Object value, int scope) | 以名/值对的方式存储scope范围域属性 |
void removeAttribute(String name, int scope) | 从scope范围移除名为name的属性 |
Enumeration getAttributeNamesInScope(int scope) | 从scope范围中获取所有属性的名称: |
存取域属性的方法setAttribute()中scope参数被定义为四个常量,分别代表四种作用域范围:
- PAGE_SCOPE = 1代表page范围;
- REQUEST_SCOPE = 2代表request范围;
- SESSION_SCOPE = 3代表session范围;
- APPLICATION_SCOPE = 4代表application 范围。
pageContext(jsp) < request (请求) < Session (会话) < Application (应用)
<%--
Created by IntelliJ IDEA.
User: root
Date: 2020/12/13
Time: 15:27
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
pageContext.setAttribute("name", "sj");
pageContext.setAttribute("key","pageContext-value");
request.setAttribute("key", "request-value");
session.setAttribute("key", "session-value");
application.setAttribute("key", "application-value");
%>
<%--从Page作用域取得key--%>
<%=pageContext.getAttribute("key")%> <br/>
<%--从指定作用域中取得数据
public static final int PAGE_SCOPE = 1;
public static final int REQUEST_SCOPE = 2;
public static final int SESSION_SCOPE = 3;
public static final int APPLICATION_SCOPE = 4;--%>
<%=pageContext.getAttribute("key", PageContext.SESSION_SCOPE)%> <br/>
<%--从作用域中取得数据 优先级page>request>session>application--%>
<%=pageContext.findAttribute("key")%> <br/>
</body>
</html>
9.6.作用域
对象的生命周期和可访问性称为作用域(scope),在JSP中有四种作用域: pageContext page域 request request域 session session域 application context域
四种作用域的生命周期和可访问性介绍如下:
页面域(page scope),存储在页面域的对象只对于它所在页面是可访问的。
请求域(request scope),请求域的生命周期是指一次请求过程,包括请求被转发(forward)或者被包含(include)的情况。存储在请求域中的对象只有在此次请求过程中才可以被访问。
会话域(session scope),会话域的生命周期是指某个客户端与服务器所连接的时间,存储在会话域中的对象在整个会话期间(可能包含多次请求)都可以被访问。
应用域(application scope),应用域的生命周期是指从服务器开始执行服务到服务器关闭为止,是四个作用域中时间最长的。存储在应用域中的对象在整个应用程序运行期间可以被所有JSP和Servlet共享访问,在使用时要特别注意存储数据的大小和安全性,否则可能会造成服务器负载过重和线程安全性问题。
9.7. config对象
config获取 应用上下文的配置
在web。xml中配置参数
<context-param>
<param-name>name</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</context-param>
在config.jsp中获取
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--// 取得上下文的参数--%>
<%=config.getInitParameter("name")
%>
</body>
</html>
9.8 Page 对象
即this,代表JSP本身,更准确地说它代表JSP被翻译后的Servlet,因此它可以调用Servlet类所定义的方法。page对象的类型为javax.servlet.jsp.HttpJspPage,在实际应用中,page对象很少在JSP中使用(了解即可)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%=this%> <br/>
<%=page%>
</body>
</html>
9.9 exception对象
- 即异常对象,表示JSP页面产生的异常。
- 如果一个JSP页面要应用此对象,必须将此页面中page指令的isErrorPage属性值设为true,否则无法编译。
- exception对象是java.lang.Throwable的对象。
入口为error,当error产生异常,通过errorPage="exception.jsp"
指向到exception.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="exception.jsp" %>
<html>
<head>
<title>aaa</title>
</head>
<body>
<%
String str = null;
System.out.println(str.length());
%>
</body>
</html>
exception.jsp 需要声明 isErrorPage="true"
属性,可以在页面中获取exception对象并操作
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
<title>Title</title>
</head>
<body>
产生的异常:<%=exception%>
</body>
</html>
