《JSP2.0 技术手册》读书笔记五-隐含对象
何为隐含对象呢?就是指在jsp网页中,不需要做任何的声明和实例化,就可以直接使用的对象。它们有9个:request(HttpServletRequest), response(HttpServletResponse), pageContext, session, application(ServletContext),out(JspWriter), config(当前jsp页面的servletconfig),page(Object,如同java的this), exception(java.lang.Throwable)。其中request, session, application和pageContext均有方法setAttribute()/getAttribute()来设定和取得属性,以此达到数据传递。
在了解隐含对象的具体作用前,我们先了解JSP的作用域 ,为正确使用隐含对象做准备。
Page: 指的是单单一页jsp网页的范围。若数据设为page范围,则数据只能在同一个jsp网页上取得,其他网页无法获得该数据。
Request:指在从一jsp网页发出请求到另一个jsp网页之间,随后属性失效。
Session:作用范围为用户持续与服务器连接的时间,与服务器断开后,属性失效。
Application:作用范围在服务器一开始执行到关闭为止。
下面我们来了解各隐含对象的使用 。
与servlet有关的隐含对象:
page代表JSP网页本身,准确说是代表jsp转译后的servlet,因此可以使用servlet接口的方法。很少使用。
config存放servlet初始化的数据,实现了javax.servlet.servletconfig,因此可以使用getInitParameter(name)等方法。很少使用。
与Input/output有关的隐含对象:
request 包含请求的信息,除了存取属性的方法外,还可以使用javax.servlet.http.HttpServletRequest接口的其他方法如下:
获得jsp页面传来的参数(jsp标签定义的参数,如<input type="text" name="user"/>):String getParameter(name)/Enumeration getParameterNames()/String[] getParameterValues(String name)。其他方法不常用了,如获得http标头,请求的url/ip/session ID等。
response主要将jsp处理后的数据传回客户端。是javax.servlet.http.HttpServletResponse接口的对象。常用方法有:
设定响应状态-sendError(int 状态码)、sendError(int 状态码, string msg)、setStatus(int 状态码);
重写URL-String encodeRedirectURL(string url)、String encodeURL(String url)。
举下response的有意思的用法如下:
out对象能把结果输出到网页,主要有out.println(string)/out.print(string)。
与Context有关的隐含对象
session对象可以让服务器辨别用户。方法可以参考笔记HttpSession。需要注意的是,如果在jsp网页中指定:<%@page session="false" %>则该页面不能使用session对象。
application提供服务端的上下文,说明哪些资源可用,哪些信息可取,具有Application范围作用域,即从服务器启动到服务器关闭均有效。具体方法可以参考api,参考笔记中的ServletContext介绍。
pageContext能存取其他隐含对象,如果隐含对象支持存取属性(如session等),pageContext可以直接操作它们中的属性。
获取各隐含对象的方法有:getException()/getOut()/getRequest()等。
与Error有关的隐含对象
当jsp网页有错误时会产生异常,exception就针对这个异常做处理。若要在该页面使用exception对象必须指定
<%@ page isErrorPage="true" %>,一般这个页面就专门作为错误页面使用。方法有getMessage(),printStackTrace(Print
Writer)等。