JSP 隐式对象

1、概述
2、JSP 所支持的九大隐式对象
3、九大隐式对象详述
---3.1 request 对象
---3.2 response 对象
---3.3 out 对象
---3.4 session 对象
---3.5 application 对象
---3.6 config 对象
---3.7 pageContext 对象
---3.8 page 对象
---3.9 exception 对象

概述

JSP 隐式对象(内置对象)是 JSP 容器为每个页面提供的 Java 对象,开发者可以直接使用它们而不用显式声明。JSP 隐式对象也被称为预定义变量。

JSP 所支持的九大隐式对象

对象 描述
request HttpServletRequest 接口的实例
response HttpServletResponse 接口的实例
out JspWriter 类的实例,用于把结果输出至网页上
session HttpSession 类的实例
application ServletContext 类的实例,与应用上下文有关
config ServletConfig 类的实例
pageContext PageContext 类的实例,提供对 JSP 页面所有对象以及命名空间的访问
page 类似于Java 类中的 this 关键字
Exception Exception 类的对象,代表发生错误的 JSP 页面中对应的异常对象

九大隐式对象详述

request 对象
  • 概述
    1、request 对象是 javax.servlet.http.HttpServletRequest 类的实例。每当客户端请求一个 JSP 页面时,JSP 引擎就会制造一个新的 request 对象来代表这个请求。
    2、request 对象提供了一系列方法来获取 HTTP 头信息,cookies,HTTP 方法等等。
response 对象
  • 概述
    1、response 对象是 javax.servlet.http.HttpServletResponse 类的实例。当服务器创建 request 对象时会同时创建用于响应这个客户端的 response 对象。
    2、response 对象也定义了处理 HTTP 头模块的接口。通过这个对象,开发者们可以添加新的 cookies,时间戳,HTTP 状态码等等。
out 对象
  • 概述
    1、out 对象是 javax.servlet.jsp.JspWriter 类的实例,用来在 response 对象中写入内容。最初的 JspWriter 类对象根据页面是否有缓存来进行不同的实例化操作。可以在 page 指令中使用buffered='false' 属性来轻松关闭缓存。
    2、JspWriter 类包含了大部分 java.io.PrintWriter 类中的方法。不过,JspWriter 新增了一些专为处理缓存而设计的方法。还有就是,JspWriter 类会抛出 IOExceptions 异常,而 PrintWriter 不会。
    3、下表为 out 对象提供的主要方法:
方法 描述
public abstract void newLine() throws IOException 输出一个换行字符,换一行
public abstract void print(Type var1) throws IOException 输出 Type 类型的值
public abstract void println(Type var1) throws IOException 输出 Type 类型的值,然后换行
public abstract void clear() throws IOException 清除缓存区中的内容,不将数据发送至客户端
public abstract void clearBuffer() throws IOException 将数据发送至客户端后,清除缓存区中的内容
public abstract void flush() throws IOException 刷新输出流(输出缓冲区的数据)
public abstract void close() throws IOException 关闭输出流
public int getBufferSize() 获取缓冲区的大小(可用<%@ page buffer = "size" %>设置)
public abstract int getRemaining() 获取缓冲区剩余空间的大小
public boolean isAutoFlush() 获取用<%@ page autoFlush="false/true" %>设置的 autoFlush 的值
  • 关于 out 对象和 response.getWrite() 对象
    1、out 对象是 JspWriter 类的实例,和 response.getWrite() 返回的 PrintWriter 对象类似,都继承自 java.io.Writer 类。
    2、在 jsp 页面上同时使用两个对象进行输出,不管哪个对象在前面调用 write() 方法,都是 response.getWrite() 对象先输出数据。
    代码示例:
<%
    out.print("111");
    response.getWriter().print("222");
%>

在这里插入图片描述

  • 原因
    PrintWriter 对象输出的数据直接到 Response 响应对象的缓冲区。
    1、由于通过 PrintWriter 对象输出的数据直接到 Response 响应对象的缓冲区中,而 JspWriter 通过 out 对象输出由于不满足某些条件(例如未使 buffer满或者未到 JSP 页面结束),都无法幕后创建一个 Print Writer 对象再将 out 对象缓冲区中的数据送到 Response 响应对象的缓冲区中。
    2、只有当 JSP 页面执行结束或者使 out 对象的 buffer 满时,才将数据再通过调用 response, get Writer() 获得的 PrintWriter 对象将数据送到 Response 响应对象的缓冲区中。但此时,Response 响应对象中早已经有了通过直接调用 Response.getWriter().write() 方法所写入的内容。
    3、因此在 JSP 的代码编写中,应该尽量采用 out 对象这个隐式对象来输出数据,而不要混合使用这两种方式。
session 对象
  • 概述
    1、session 对象是 javax.servlet.http.HttpSession 类的实例。和 Java Servlets 中的 session 对象有一样的行为。
    2、session 对象用来跟踪在各个客户端请求间的会话。
application 对象
  • 概述
    1、application 对象直接包装了 servlet 的 ServletContext 类的对象,是 javax.servlet.ServletContext 类的实例。
    2、这个对象在 JSP 页面的整个生命周期中都代表着这个 JSP 页面。这个对象在 JSP 页面初始化时被创建,随着 jspDestroy() 方法的调用而被移除。
    3、通过向 application 中添加属性,则所有组成 web 应用的 JSP 文件都能访问到这些属性。
    4、
    application 代表全局作用域;(在当前应用程序中有效,生命周期最长)
    session 代表会话作用域;(在当前会话中有效)
    request 代表请求作用域;(在当前请求中有效)
    page 代表当前页面;(在当前页面中有效,生命周期最短)

以下较少使用

config 对象
  • 概述
    1、config 对象是 javax.servlet.ServletConfig 类的实例,直接包装了 servlet 的 ServletConfig 类的对象。
    2、这个对象允许开发者访问 Servlet 或者 JSP 引擎的初始化参数,比如文件路径等。
    3、以下是 config 对象的使用方法,不是很重要,所以不常用:
    config.getServletName();
    它返回包含在<servlet-name>元素中的 servlet 名字,注意,<servlet-name>元素在 WEB-INFweb.xml 文件中定义。
pageContext 对象
  • 概述
    1、pageContext 对象是 JSP 中很重要的一个内置对象,用来代表整个 JSP 页面。它是 javax,servlet,jsp,PageContext 类的实例对象。
    2、pageContext 对象提供了对 JSP 页面所有的对象及命名空间的访问,使用 pageContext 对象可以访问 application 对象、exception 对象,还有 session 对象等。
    3、pageContext 对象的方法可以访问除本身以外的8个 JSP 内部对象,还可以直接访问绑定在 application 对象、page 对象、request 对象、session 对象上的 Java 对象。pageContext 对象相当于 JSP 程序中所有对象功能的集成者。
    4、通过 pageContext 获取的 jsp 内置对象和直接获取的 jsp 内置对象是同一个,使用效果上无差别。
    5、PageContext 类定义了一些字段,包括 PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE 。它也提供了40余种方法,有一半继承自 javax.servlet.jsp.JspContext 类。
    6、其中一个重要的方法就是 removeAttribute(),它可接受一个或两个参数。比如:
    pageContext.removeAttribute("attrName")移除 "attrName" 中四个 scope 中相关属性;
    但是下面这种方法只移除特定 scope 中的相关属性:
    pageContext.removeAttribute("attrName", pageContext.PAGE_SCOPE);
  • pageContext 对象的部分方法
方法名 返回类型
getSession(); HttpSession
getPage(); Object
getRequest(); ServletRequest
getResponse(); ServletResponse
getException(); Exception
getServletConfig(); ServletConfig
getServletContext(); ServletContext
getOut(); JspWriter
page 对象
  • 概述
    1、这个对象就是页面实例的引用。它可以被看做是整个 JSP 页面的代表。
    2、page 对象就是 this 对象的同义词,是当前页面转换后的 servlet 的实例,有点像类中的 this 指针,它是 java.lang.Object 类的实例。
    3、page 对象的常用方法就是 java.lang.Object 类中的方法。
    4、在 jsp 页面中很少用到 page 对象。
exception 对象
  • 概述
    1、exception 对象包装了从先前页面中抛出的异常信息。它通常被用来产生对出错条件的适当响应。
    2、JSP 引擎在执行过程中,可能会抛出种种的异常。exception 对象表示的就是 JSP 引擎在执行代码过程中抛出的种种异常。
  • exception 对象常用方法
方法 描述
getMessage(); 返回错误信息
printStateTrace(); 该方法以标准形式输出一个错误和错误的堆栈
ToString(); 以字符串的形式返回一个对异常的描述
  • 代码示例
    error.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
    <head>
        <title>error.jsp</title>
    </head>
    <body>
    <%--isErrorPage="true"
    表示这是一个错误处理页面--%>
        <h1>错误信息</h1>
        <h3><%=exception.toString()%></h3>
    </body>
</html>

exception.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" %>
<html>
    <head>
        <title>exception.jsp</title>
    </head>
    <body>
    <%--errorPage="error.jsp"
    表示当前页面发生错误到 error.jsp 页面进行处理--%>
        <%
            int a = 1/0;
        %>
    </body>
</html>

在这里插入图片描述

原文地址:https://www.cnblogs.com/yu011/p/14682413.html