为了简化Web应用程序的开发,在JSP中定义了一些由JSP容器实现和管理的内置对象,这些对象可以直接在JSP页面中使用,不需要页面编写者对它们进行实例化。
JSP2.0规范中定义了9种内置对象,这9个内置对象都是由Servlet API接口实现的,由JSP规范对他们进行了默认初始化,因此,在JSP中他们已经是对象了,可以直接拿来用。这9中内置对象的名称、相对应的类和作用域如下表所示。
JSP中4种属性的作用范围说明如下:
- page范围:指所设置的属性仅在当前页面内有效。使用pageContext的SetAttribute()方法可以设置属性值,使用pageContext的getAttribute()方法可以获得属性值。
- request范围:指属性仅在一次请求的范围内有效。使用request的setAttribute()方法可以设置属性值,使用request的getAttribute()方法可以获得属性值。
- session范围:指的是属性仅在浏览器与服务器进行一次会话的范围内有效,当和服务器断开连接后,属性就会失效。使用session的setAttribute()方法可以设置属性值,使用session的getAttribute()方法可以获得属性的值。
- application范围:指属性在整个Web应用中都有效,直到服务器停止以后才失效。使用application的setAttribute()方法可以设置属性值,使用application的getAttribute()方法可以获得属性的值。
request对象
request对象用于获取客户端信息,例如我们在表单中填写的信息等。实际上,JSP容器会将客户端请求信息封装在request对象中。在客户端发出请求时会创建reqnest对象,在请求结束后,则会销毁request对象。
request对象中包含的主要方法如下:
- Object getAttribute(String name):获取指定的属性值。
- void setAttribute(String name, Object value):将指定的属性的值设置为value。
- String getParameter(String name):获取请求参数名为name的参数值。
- Enumeration getParameterName():获取所有请求参数的名字集合。
- String[] getParameterValues(String name):获得name请求参数的参数值。
- Map getParameterMap():获取所有请求参数名和请求参数值所组成的Map对象。
- void setCharacterEncoding(String encoding):设定编码格式。
通常在应用中设置最多的就是客户端请求的参数名称和参数值。在request对象中提供了一系列的方法用来获取客户端的请求参数,这些方法包括getParameter、getParameterNames、getParameterValues和getParameterMap。
还有一点需要说明,如果request对象的getParameter()方法接收的参数值为中文,则页面不能正常显示,因为默认情况下其字符编码为ISO-8859-1,有时候这种编码不能正确的显示汉字。要解决这个问题,需要使用request对象的setCharacterEncoding()方法来设置编码格式。
response对象
response对象包含了从JSP页面返回客户端的所有信息,其作用与是它所在的页面。response对象是javax.servlet.ServletResponse类的一个实例,他封装由JSP产生的响应,并返回客户端以响应请求。它被作为_jspService()方法的一个参数而由引擎传递给JSP,在这里JSP要改动它。response对象经常用于设置HTTP标题、添加cookie、 设置响应内容的类型和状态、发送HTTP重定向和编码URL。
response对象的常用方法如下:
- void addCookie(Cookie cookie):添加一个Cookie对象,用于在客户端保存特定的信息。
- void addHeader(String name, String value):用于判断指定名字的HTTP文件头是否存在。
- void containsHeader(String name):向客户端发送错误的状态码。
- void sendRedirect(String url):重定向JSP文件。
- void setContentType(String contentType):设置MIME类型与编码方式。
response的一个主要应用就是重定向。可以通过response的setRedirect(String url)方法来实现重定向。
需要说明的是response对象实现的重定向和<jsp:forward>动作元素的最大区别在于<jsp:forward>只能在本网站内跳转,而response.sendRedirect则可以跳转到任何一个地址的页面。
out对象
out内置对象是一个缓冲的输出流,用来向客户端返回信息。它是javax.servlet.jsp.JspWriter的一个实例。用于向客户端输出时要先进行连接,所以总是采用缓冲输出方式,因此out是缓冲输出流。
ouit对象的常用方法如下:
- public abstract void clear() throws java.io.IOException:清除缓冲区中的内容,但是不把数据输出到客户端。
- public abstract void clearBuffer() throws java.io.IOException:清除缓冲区中的内容,同时把数据输出到客户端。
- public abstract void close() throws java.io.IOException:关闭缓冲区并输出缓冲区中的数据。
- public abstract void flush() throws java.io.IOException:输出缓冲区里的数据。
- public int getBufferSize():获取缓冲区的大小。
- public abstract int getRemaining():获取剩余缓冲区的大小。
- public boolean isAutoFlush():缓冲区是否进行自动清除。
- public abstract void newLine() throws java.io.IOException:输出一个换行符。
- public abstract void print(String str) throws java.io.IOException:向客户端输出数据。
- public abstract void println(String str) throws java.io.IOException:向客户端输出数据并换行。
out对象的典型应用就是向客户端输出数据。
session对象
session对象是会话对象,用来记录每个客户端的访问状态。
我们已经知道HTTP协议是一种无状态协议。一个客户端像服务器发出请求(request),然后服务器返回响应(response),此后连接就被关闭了,在服务器中不会保留与本次链接有关的信息。因此,当下一次客户端再与服务器建立连接时,服务器中已经没有了之前的链接信息了,因而无法判断本次连接与以前的连接是否属于同一客户,在这种情况下,便可以采用会话(session)来记录连接的信息。所谓的会话指的是从一个客户端打开浏览器与服务器建立连接,到这个客户端关闭浏览器与服务器断开连接的过程。当一个客户访问服务器时,可能会在这个服务器的多个页面之间反复连接、不断刷新一个页面或者想一个页面提交信息等,有了session对象,服务器就可以知道这是同一个客户完成的动作。
session对象的常用方法如下:
- Objest getAttribute(String name):获取session范围内name属性的值。
- void setAttribute(String name,Object value):设置session范围内name属性的属性值为value,并存储在session对象中。
- void removeAttribute(String name):删除session范围内name属性的值。
- Enumeration getAttributeNames():获取所有session对象中存放的属性名称。
- long getCreationTime():返回session被创建的时间。
- String getId():返回session创建时由JSP容器所设定的唯一标识。
- long getLastAccessedTime():返回用户最后一次通过session发送请求的时间,单位为毫秒。
- int getMaxInactiveInterval():返回session的失效时间,即两次清气时间间隔多长时间该session就被取消,单位为秒。
- boolean isNew():判断是否为新的session。
- void invaliate():清空session的内容。
session对象的结构类似于散列表,通过调用setAttribute方法,可以将参数Object指定的对象obj添加到session对象中,并为添加的对象指定一个索引关键字,如果添加的两个对象关键字相同,则先添加的对象被清除。与session对象相关的操作中最重要的就是关于属性的操作,与属性操作相关的方法主要有:setAttribute()、getAttribute()、removeAttribute()。
application对象
application对象用于获取和设置Servlet的相关信息,它的生命周期是从服务器启动直到服务器关闭为止,即一旦创建一个application对象,该对象将会一直存在,直到服务器关闭。application中封装了JSP所在的Web应用中的信息。
application对象的常用方法如下:
- void setAttribute(String name,Object value):以键值对的方式,将一个对象的值存放到application中。
- Object getAttribute(String name):根据属性名获取application中存放的值。
pageContext对象
pageContext对象是一个比较特殊的对象,使用它不仅可以设置page范围内的属性,还可以设置其他范围内的属性。通过pageContext还可以访问本页面中的所有其他对象,如前面介绍的request、response、out等对象。由于request、response等对象本身已经提供给我们一些方法,可以直接调用这些方法来完成特定的操作,因此在实际JSP开发过程中pageContext对象使用得并不多。
pageContext对象的常用方法如下:
- ServletRequest getRequest():获得当前页面中的request对象。
- ServletRequest getResponse():获得当前页面中的response对象。
- HttpSession getSession():获得当前页面中的session对象。
- ServletContext getServletContext():获得当前页面中的application对象。
- ServletConfig getServletConfig():获得当前页面中的config对象。
- Object getPage():返回当前页面中的page对象。
- JspWriter getOut():返回当前页面中的out对象。
- Exception getException():返回当前页面中的Exception对象。
- Object getAttribute(String name):获取page范围内的name属性值。
- Object getAttribute(String name,int scope):
- Enumeration getAttributeNamesInScope(int scope):获得指定范围内的所有属性名。
- int getAttributeScope(String name):返回属性name的作用范围。
- void setAttribute(String name,Object obj):设置page范围内的name属性。
- void setAttribute(String name,Object obj,int scope):设置指定范围内的name属性。
- Object findAttribute(String name,int scope):寻找name属性并返回该属性,如果找不到则返回null。
- void removeAttribute(String name):删除属性名为name的属相。
- void removeAttribute(String name,int scope):删除指定的某个作用范围内名称为name的属性。
page对象
page对象指的是当前的JSP页面本身,它是java.lang.Object类的对象,通过page对象可以方便的调用Servlet类中定义的方法。page对象在实际开发过程中并不常用。
page对象的常用方法如下:
- class getClass():返回当前Object的类。
- int hashCode():返回当前Object的哈希码。
- String toString():将此Object对象转换成字符串。
- boolean equals(Object ob):比较此Object对象是否与指定的Object对象相等。
- void copy(Object ob):将此Object对象复制到指定的Object对象中。
config对象
config对象是ServletConfig类的一个实例,在Servlet初始化时,可以通过config向Servlet传递信息。所传递的信息可以是属性名和属性值构成的名值对,也可以是通过ServletContext对象传递的服务器的相关信息。在JSP开发中config对象用得不多,只有在编写Servlet时,当需要覆盖Servlet的init()方法是才会用到config对象。
config对象的常用方法如下:
- String getServletName():获得Servlet名称。
- ServletContext getServletContext():获得一个包含服务器相关信息的ServletContext对象。
- String getInitParameter(String name):获得Servlet初始化参数的值。
- Enumeration getInitParameterNames():获得Servlet初始化所需要的所有参数名,返回类型时枚举型。
exception对象
exception对象是java.lang.Throwable类的对象,用来处理页面的错误和异常。在使用JSP进行开发室,习惯的做法是在一个页面中使用JSP指令的errorPage属性,让该属性执行一个专门用于异常处理的页面。如果在JSP页面中有未捕获的异常,则会生成exception对象,然后将该exception对象传递到page指令中设置的异常处理页面中,在异常处理页面中对exception对象进行处理。在异常处理页面中需要将其page指令的isErrorPage属性设置为true才可以使用exception对象。
exception对象的常用方法如下:
- String getMessage():返回exception对象的异常信息。
- String getLocalizedMessage():返回本地化语言的异常错误。
- void printStackTrace():打印异常的栈反向跟踪轨迹。
- String toString():返回关于异常的简单描述。