在JSP容器生成的Servlet类的_jspServlet()方法中,定义了几个对象,而这些对象就是我们在编写JSP页面时,可以使用的隐含对象。
注意:只能在脚本段和表达式中使用这些对象。
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
在JSP页面中,总共有9个隐含对象,与它们各自的类型如下表:
1、pageContext对象
该对象提供了访问其他隐含对象的方法。
<%
pageContext.getRequest();
pageContext.getResponse();
pageContext.getServletConfig();
pageContext.getSession();
pageContext.getOut();
pageContext.getServletContext();
%>
在pageContext对象中,可以使用下面两个方法来保存和获取属性:(在pageContext对象中保存的属性,只能在当前页面中去获取)
pageContext.setAttribute(String,Object);
pageContext.getAttribute(String);
可以以得到其他范围对象中保存的属性:
pageContext.setAttribute(String,Object,int scope);
pageContext.getAttribute(String,int scope);
pageConext对象提供了请求转发的两个方法forward()和include()方法,其内部实现是调用RequestDispatcher对象的forward和include()方法:
pageContext.include("");
pageContext.forward("");
2、out对象
out对象的类型是JspWriter,该类是从Writer类派生的,以字符流的形式输出数据。out对象实际上是PrintWriter对象的带缓冲的版本,内部使用PrintWriter对象来输出数据。可以通过page指令的buffer属性来调整缓冲区的大小,默认是8kb。
out.print("");
out.println();
out.clear();
out.clearBuffer();
//不需要显式去调用close()方法,JSP容器所生成的代码中会自动包含对close()方法的调用
out.close();
3、exception对象
该对象表示了JSP页面运行时产生的异常,该对象只有在错误页面(page指令中指定属性isErrorPage=true的页面)中才可以使用。
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<%
exception.toString();
exception.printStackTrace();
exception.getMessage();
%>
对象和范围
在JSP页面中的对象,包括用户创建的对象和JSP隐含对象都有一个属性范围。
1、page范围
在这个范围内的对象,只能在创建对象的页面中访问。pageContext对象本身属于page范围。可以利用该对象的setAttribute()方法将其他范围内的对象保存为page范围。也可以使用getAttribute()方法来访问具有这种范围类型的对象。
当Servlet类的_jspService()方法执行完毕,属于page范围的对象的引用将被丢弃。page范围内的对象,在客户端每次请求JSP页面时创建,在页面向客户端发送回响应或请求被转发(forward)到其他的资源后被删除。
2、request范围
可以调用request隐含对象的getAttribute()方法来访问具有这种范围类型的对象,可以调用setAttribute()方法将对象保存到request范围中。
在调用forward()方法转向的页面或调用include()方法包含的页面中,都可以访问这个范围内的对象。对于每一个新的请求,都要重新创建和删除这个范围内的对象。
3、session范围
调用session隐含对象的getAttribute()方法来访问具有这种范围类型的对象,也可以调用setAttribute()方法将对象保存到session范围中。
JSP容器为每一次会话,创建一个HttpSession对象,在会话期间,可以访问session范围内的对象。
4、application范围
调用application隐含对象的getAttribute()方法来访问具有这种范围类型的对象,也可以调用setAttribute()方法将对象保存到application范围中。
在Wbe应用程序运行期间,所有的页面都可以访问在这个范围内的对象。