一、JSP脚本中包含9个内置对象,这9个内置对象都是 Servlet API 接口的实例,只是JSP 规范对它们进行了默认初始化(由JSP页面对象Servlet的 _jspService() 方法来创建这些事例)。也就是说,它们已经是对象,可以直接使用。9个内置对象一次如下:
1、application: javax.servlet.ServletContext 的实例,该实例代表 JSP 所属的Web 应用本身,可 用于JSP页面,或者在Servlet 之间交换信息。常用的方法有 getAttribute(String attName)、setAttribute(String attName, String attValue) 和 getInitParameter(String paramName) 等。
2、config : javax.servlet.ServletConfig 的实例,该实例代表该Jsp 的配置信息。常用的方法有 getInitParameter(String paramName) 和getInitParameternames() 等方法。事实上,Jsp 页面通常无需配置,也就不存在配置信息。因此,该对象更多地在Servlet 中有效。
3、exception : java.lang.Throwable 的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令 page 的 isErrorPage 属性为true时,该对象才可以使用。通常的方法有 getMessage() 和 printStackTrance() 等。
4、out : javax.servlet.jsp.JspWriter 的实例,该实例代表 JSP 页面的输出流,用于输出内容,形成 HTML 页面。
5、page:代表该页面本身,通常没有太大用处。也就是 Servlet 中的 this,其类型就是生成的 Servlet 类,能用 page 的地方就可用 this。
6、pageContext : javax.servlet.jsp.PageContext 的实例,该对象代表该JSP 页面上下文使用该对戏那个可以访问页面中的共享数据。常用的方法有 getServletContext() 和 getServletConfig() 等。
7、request: javax.servlet.http.HttpServletRequest 的实例,该对象封装了一次请求,客户端的请求都被封装在该对象里。这是一个常用的对象,获取客户端请求参数必须使用该对象。 常用的方法有: getParameter(String paramName) 、 getParameterValues(String paramName) 、setAttribute(String attrName, Object attrValue) 、getAttribute(String attrName) 和 setCharacterEncoding(String env) 等。
8、response : javax.servlet.http.HttpServletResponse 的实例,代表服务器对客户端响应。通常很少使用该对象直接响应,而是使用out 对象,除非需要生成非字符相应。而 response 对象常用语重定向。常用的方法有 getOutputStream() 、sendRedirect(java.lang.String location ) 等。
9、session : javax.servlet.http.HttpSession 的实例,该对象代表一次会话。当客户端浏览器与站点建立连接时,会话开始: 当客户端关闭浏览器时,会话结束。常用的方法有:getAttribute(String attrName) 、setAttribute(String attrName, Object attrValue) 等。
二、Web 应用里的JSP 页面、Servlet 等程序都将由Web服务器来调用,JSP、Servlet 之间通常不会相互调用,这就产生一个问题:JSP、Servlet之间如何交换数据?
为了解决这个问题,几乎所有WEB 服务器(包括 Java 、ASP、PHP、Ruby等)都会提供4个类似Map的结构,分别是application 、session、request、page,并允许JSP、Servlet 将数据放入这4个类似Map 的结构中,并允许从这4个Map 结构中取出数据。这4个Map 结构的区别是范围不同。
1、application :对于整个Web 应用有效,一旦JSP、Servlet将数据放入application 中,该数据将可以被该应用下其他所有的Jsp 、 Servlet 访问。
2、session : 仅对一次会话有效,一旦 JSP 、 Servlet 将数据放入到session 中,该数据将可以被 本次会话的其他所有的JSP 、 Servlet 访问。
3、request : 仅对本次请求,一旦JSP 、Servlet 将数据放入request 中,该数据将可以被该次请求的其他JSP 、Servlet 访问。
4、page: 仅对当前页面有效:一旦JSP 、Servlet 将数据放入 page 中,该数据只可以被当前页面的JSP脚本、声明部分访问。
JSP中的application 、session、request 和 pagecontext 4个内置对象分别用于操作 application 、session、request和page 范围中的数据。