本文共 5093 字,大约阅读时间需要 16 分钟。
在JSP页面中,有一些对象需要频繁使用,如果每次都重新创建这些对象则会非常麻烦。为了简化Web应用程序的开发,JSP2.0 规范中提供了9个隐式(内置)对象,它们是JSP默认创建的,可以直接在JSP页面中使用。
JSP隐式对象:
名称 | 类型 | 描述 |
---|---|---|
out | javax.servlet.jsp.JspWriter | 用于页面输出 |
request | javax.servlet.http.HttpServletRequest | 得到用户请求信息 |
reponse | javax.servlet.http.HttpServletResponse | 服务器向客户端的回应信息 |
config | javax.servlet.ServletConfig | 服务器配置,可以取得初始化参数 |
session | javax.servlet.HttpSession | 用来保存用户的信息 |
application | javax.servlet.ServletContext | 所有用户的共享信息 |
page | java.lang.Object | 指当前页面转换后的Servlet类的实例 |
pageContext | javax.servlet.jsp.PageContext | JSP页面容器 |
exception | java.lang.Throwable | 表示JSP页面所发生的异常,在错误页中才起作用 |
在JSP页面中,经常需要向客户端发送文本内容,这时,可以使用out对象来实现。out对象是javax.servlet.jsp.JspWriter类的实例对象,它的作用与ServletResponse.getWriter()方法返回的PrintWriter对象非常相似,都是用来向客户端发送文本形式的实体内容。不同的是,out对象的类型是JspWriter,它相当于一种带缓存共嗯那个的PrintWriter。
下图描述了JSP页面的out对象与Servlet引擎提供的缓冲区之间的工作关系:
例子:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>Insert title here <% out.println("first line"); response.getWriter().println("second line"); %>
页面显示:
request 对象是javax.servlet.http.HttpServletRequest类型的对象,代表客户端的请求信息,主要用于获取客户端的参数和流。
主要方法:
response 对象和request是一对相应的内置对象,代表对客户端的响应。
主要方法:
config 对象是javax.servlet.ServletConfig类的实例对象。主要作用是取得服务器的配置信息。
通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。主要方法:
session 对象是由服务器自动创建的与请求相关的对象,服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session内部使用Map来保存数据,即key-value。
主要方法:
application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。
这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。
通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。
这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。
page 对象就是this对象的同义词
pageContext对象是javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。这个对象主要用来访问页面信息,同时过滤掉大部分实现细节。
在JSP页面中,使用pageContext对象可以获取JSP的其它8个隐式对象。
PageContext类定义了一些字段,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE。它也提供了40余种方法,有一半继承自javax.servlet.jsp.JspContext 类。pageContext对象获取隐式对象的方法:
方法名 | 功能描述 |
---|---|
JspWriter getOut() | 用于获取out隐式对象 |
Object getPage() | 用于获取page隐式对象 |
ServletRequest getRequest() | 用于获取request隐式对象 |
ServletResponse getResponse() | 用于获取response隐式对象 |
HttpSession getSession() | 用于获取session隐式对象 |
Exception getExceprion() | 用于获取exception隐式对象 |
ServletConfig getServletConfig() | 用于获取config隐式对象 |
ServletContext getServletContext() | 用于获取application隐式对象 |
pageContext对象不仅提供了获取隐式对象的方法,还提供了存储数据的功能。pageContext对象存储数据是通过操作属性来实现的,具体如下:
方法名称 | 功能描述 |
---|---|
void setAttribute(String name, Object value, int scope) | 用于设置pageContext对象的属性 |
Object getAttribute(String name, int scope) | 用于获取pageContext对象的属性 |
void removeAttribute(String name, int scope) | 删除指定范围内名称为name的属性 |
void removeAttribute(String name) | 删除所有范围内名称为name的属性 |
Object findAttribute(String name) | 从4个域对象中查找名称为name的属性 |
pageContext对象的作用范围有4个值,具体如下:
需要注意的是,当使用findAttribute()方法查找名称为name的属性时,会按照page、request、session和application的顺序依次进行查找,如果找到,则返回属性的名称,否则返回null。
PageContext常量名 | 描述 | 作用域名称 | 域对象类型 |
---|---|---|---|
PageScope | 当前页面中有效 | pageContext | PageContext |
RequestScope | 一次请求范围 | request | HttpServletRequest |
SessionScope | 一次会话范围 | session | HttpSession |
ApplicationScope | Web应用范围 | application | ServletContext |
例子:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here <% //使用pageContext域存数据 pageContext.setAttribute("name", "page", PageContext.PAGE_SCOPE);//等价于:request.setAttribute("name", "request"); pageContext.setAttribute("name", "request", PageContext.REQUEST_SCOPE); pageContext.setAttribute("name", "session", PageContext.SESSION_SCOPE); pageContext.setAttribute("name", "application", PageContext.APPLICATION_SCOPE); %> <%=request.getAttribute("name") %> <%=pageContext.getAttribute("name", PageContext.REQUEST_SCOPE)%> <%=pageContext.findAttribute("name") %>
页面显示:
转载地址:http://pjsqb.baihongyu.com/