JSP的九大内置对象
JSP中有九个内置对象,我们在JSP页面中编写Java脚本语言时可以直接用这些内置对象。
我们已经明确知道了JSP的实质还是一个Servlet,至于它的编写是自动生成的,我们查看它的java文件可以发现_jspService方法中有六个已经定义好的变量和两个方法中的形参。
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
//...
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;
//...
try{
session = pageContext.getSession();
out = pageContext.getOut();
//...
我们也明确的知道我们编写的JSP中的脚本语言最终会被存放到jspService方法中,所以我们可以直接使用这些内置的对象
- pageContext:页面上下文
- request:请求对象
- response:响应对象
- session:一次会话
- application(ServletContext):代表这个Web应用的上下文
- config(ServletConfig):Servlet的配置对象
- out:页面输出的对象
- page:就是本类的对象,代表当前这个页面
- exception:异常对象,这个对象只有当JSP声明为错误页面时才能直接使用
pageContext
方法 | 作用 |
---|---|
public HttpSession getSession(); | 获取该页面的本次会话Session对象(session) |
public Object getPage(); | 返回当前页面的对象值(page) |
public ServletRequest getRequest(); | 获取该页面的Request对象(request) |
public ServletResponse getResponse(); | 获取该页面的相应对象(response) |
public Exception getException(); | 获取该页面的错误异常对象(exception) |
public ServletContext getServletContext(); | 获取该web应用的实例化对象(application) |
public ServletConfig getServletConfig(); | 获取配置对象(config) |
public void forward(String relativeUrlPath) throws ServletException, IOException; | 用于请求转发到指定路径 |
request和response
可以参考博主的另一篇文章,request和response。
Session
可以参考博主的另一篇文章,session。
application(ServletContext)
可以参考博主的另一篇文章,ServletContext。
config(ServletConfig)
方法 | 作用 |
---|---|
public String getServletName(); | 返回此servlet实例的名称。 名称可以通过服务器管理来提供,可以在 Web应用程序部署描述符中分配,或者对于未注册(因此未命名)的Servlet实例,它将是Servlet的类名 |
public ServletContext getServletContext(); | 返回该web应用的ServletContext对象 |
public String getInitParameter(String name); | 返回包含命名初始化参数值的String,如果该参数不存在,则返回 null |
public Enumeration getInitParameterNames(); | 返回servlet的初始化参数的名称作为String 对象的 Enumeration,或如果servlet没有没有初始化参数,则返回一个空的Enumeration |
out
该对象是javax.servlet.jsp.JspWriter
,它继承了java.io.Writer
,它是向客户端页面输出数据的一个类。
方法 | 作用 |
---|---|
public void newLine() throws IOException; | 页面换行 |
public void print(var b) throws IOException; | 向页面输出指定的数据,这里的数据类型可以是boolean,char,int,long,float,double,char[],String,Object |
public void println() throws IOException; | 换行,和public void newLine() throws IOException;效果一致 |
public void println(var x) throws IOException; | 和public void print(var b) throws IOException;效果一致,唯一不同的是,该方法输出后会自动换行 |
public void clear() throws IOException; | 清除缓冲区的内容。如果已经清除了缓冲区,则清除操作将抛出IOException 来表示某些数据已经不可撤销地写入客户端响应流的事实 |
public void clearBuffer() throws IOException; | 清除缓冲区的当前内容。与clear()不同,如果缓冲区已经被刷新,则此方法不会引发IOException。它仅清除缓冲区的当前内容并返回。 |
public void flush() throws IOException; | 刷新流。如果流已将各种write()方法中的任何字符保存在缓冲区中,请立即将它们写入其预期的目标。然后,如果该目标是另一个字符或*字节流,则将其刷新。因此,一次flush()调用将刷新Writer和OutputStreams链中的所有缓冲区。 |
public int getBufferSize(); | 此方法返回JspWriter使用的缓冲区的大小。 |
public int getRemaining(); | 此方法返回缓冲区中未使用的字节数。 |
public boolean isAutoFlush() | 此方法返回值表示JspWriter是否正在自动刷新。 |
page
page就表示本类的对象,可以用于调用本类中存在的方法或者成员。
exception
只有当JSP页面被声明为错误页面时<%@ page isErrorPage="true" %>
,才能直接使用该异常对象,我们还是直接看一个声明错误JSP页面的java代码,发现其中与未声明为错误页面的JSP的java文件的主要区别就是多了:
java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
if (exception != null) {
response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
一般来说,这个是用于自定义错误页面时使用,该对象用于记录错误信息,然后在页面中以友好的形式提示客户端出现错误。