JSP 页面中包含9 个内置对象:
• application: javax.servlet.ServletContext 的实例,该实例代表JSP 所属的Web 应用本身,可用于JSP 页面,或者Servlet 之间交换信息。常用的方法有getAttribute(String attName) , setAttribute(String attName , String attValue) 和
getInitParameter(String paramName)等。
• config: javax.servlet.ServletConfig 的实例,该实例代表该JSP 的配置信息。常用的方法有getInitParameter(String paramName) 及getInitParameternames() 等方法。事实上, JSP 页面通常无须配置,也就不存在配置信息。因此,该对象更多地在Servlet 中有效。
• exception: java.lang.Throwable 的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page 的isErrorPage 属性为true 时,该对象才可以使用。常用的方法有getMessage()和printStackTrace()等。
• out: javax.servlet.jsp.JspWriter 的实例,该实例代表JSP 页面的输出流,用于输出内容,形成HTML 页面。
• page: 代表该页面本身,通常没有太大用处。也就是Servlet 中的this ,其类型就是生成的Servlet 。
• pageContext: javax.servlet.jsp.PageContext 的实例,该对象代表该JSP 页面上下文,使用该对象可以访问页面中的共享数据。常用的方法有getServletContext()和getServletConfig()等。
• request: javax.servlet.http.HttpServletRequest 的实例,该对象封装了一次请求,客户端的请求参数都被封装在该对象里。这是一个常用的对象,获取客户端请求参数必须使用该对象。常用的方法有getParameter(String paramNarne), getParameterValues(String paramName), setAttribute(String atttibuteName,Object attributeValue),getAttribute(String attributeName)和setCharacterEncoding(String env)等。
• response: javax.servlet.http.HttpServletResponse 的实例,代表服务器对客户端的响应。通常,也很少使用该对象直接响应,输出响应使用out 对象,而response 对象常用于重定向。常用的方法有sendRedirect(java.lang.String location)等。
• session: javax.servlet.http.HttpSession 的实例,该对象代表一次会话。从客户端浏览器与站点建立连接起,开始会话,直到关闭浏览器时结束会话。常用的方法有:getAttribute(String attName), setAttribute(String attName, String attValue)等。
一、application 对象
该对象代表Web 应用本身,整个Web 应用共享同一个application 对象,该对象主要用于在多个JSP 页面或Servlet 之间共享变量。application 通过setAttribute 方法将一个值放入某个属性,该属性的值对整个Web 应用有效,因此Web 应用的每个JSP 页面或
Servlet 都可以访问该属性,访问属性的方法为getAttribute 。
application 不仅可用于两个JSP 页面之间共享数据,还可以用于Servlet 和JSP 之间共享数据。
application 还有一个重要用处:可用于加载Web 应用的配置参数。
application 使用context-param 元素配置,并从web.xml 文件中获取参数
<context-param>
<param-name>param</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
在JSP页面中可以采用如下形式调用到:
application.getInitParameter("param") ;
二、config 对象
config 对象代表当前JSP 配置信息,但JSP 页面通常无须配置,因此也就不存在配置信息。该对象在JSP 页面中非常少用,但在Servlet 则用处相对较大。因为Servlet 需要配置在web.xml 文件中,可以指定配置参数。
三、exception 对象
在JSP 页面中,普通的JSP 页面只执行try里面的代码处理段。而出错的页面负责执行cath里面的异常处理段。在异常处理段中,
可以看到有个异常对象,该对象就是内置对象exception 。exception 对象仅在错误处理页面中才有效。
四、out对象
out 对象代表一个页面输出流,通常用于在页面上输出变量值及常量。一般在使用输出表达式值的地方,都可以使用out 对象来达到同样效果。
五、pageContext 对象
这个对象代表页面上下文,该对象主要用于访问页面共享数据。使用pageContext可以直接访问request , session, application 范围的属性。pageContext 对象在设置属性时,如果没有指定属性存在的范围,则属性默认在page 范围内;如果指定了属性所在的范围,则属性可以被存放在application, session, request 等范围中。
<%
// 使用pageContext 设置属性,该属性默认在page 范围内
pageContext.setAttribute("page", "hello");
// 使用request 设置属性,该属性默认在request 范围内
request.setAttribute("request", "hello");
// 使用pageContext将属性设置在request 范围中
pageContext.setAttribute("request2", "hello",pageContext.REQUEST_SCOPE);
// 使用sess~on将属性设置在session 范围中
session.setAttribute("session", "hello");
// 使用pageContext将属性设置在session范围中
pageContext.setAttribute("session2", "hello",pageContext.SESSION_SCOPE);
// 使用application将属性设置在application范围中
application.setAttribute("app", "hello");
// 使用pageContext 将属性设置在application 范围中
pageContext.setAttribute("app2", "hello",pageContext.APPLICATION_SCOPE);
// 以此获取各属性所在的范围
out.println("page 变量所在范围: "+ pageContext.getAttributesScope("page") + "<br>");
out.println("request 变量所在范围: "+ pageContext.getAttributesScope("request") + "<br>");
out.println("request2变量所在范围: "+ pageContext.getAttributesScope("request2") + "<br>");
out.println("session 变量所在范围: "+ pageContext.getAttributesScope("session") + "<br>");
out.println("session2 变量所在范围: "+ pageContext.getAttributesScope("session2") + "<br>");
out.println("app 变量所在范围: " + pageContext.getAttributesScope("app")+ "<br>");
out.println("app2 变量所在范围: "+ pageContext.getAttributesScope("app2") + "<br>");
%>
以上输出结果为:
page 变量所在范围: 1
request 变量所在范围: 2
request2变量所在范围: 2
session 变量所在范围: 3
session2 变量所在范围: 3
app 变量所在范围: 4
app2 变量所在范围: 4
其中,1 :对应page 生存范围。2: 对应request 生存范围。3: 对应session 生存范围。4: 对应application 生存范围。
六、request 对象
request 对象是JSP 中重要的对象,每个request 对象封装着一次用户请求,并且所有的请求参数都被封装在request 对象中。因此request 对象也是获取客户端请求参数的方法。
request 对象不仅封装了表单域值,还可以封装地址栏传递的参数。因此用户也可在request 对象中增加请求属性。
(1)封装表单域值
获取表单域的值有如下两个方法。
• String getParameter(String paramName): 获取表单域的值。
• String getParameterValues(String paramName): 获取表单域的数组值。
• setCharacterEncoding("GBK"): 设置解码方式。
request.setCharacterEncoding("GBK");
(2)封装地址栏参数
地址栏传递参数的格式是urI?paraml=value1¶m2=value2&…
(3)封装请求属性
HttpServletRequest 还包含用于设置和获取请求属性的两个方法:
• void setAttribute(String attName , Object attValue) 。
• Object getAttribute(String attName) 。
七、response 对象
response 代表服务器对客户端的响应。
out只能输出字符流,无法输出字节流。
可以使用response 来重定向请求,以及用于向客户端增加Cookie
(1)response 响应生成图片
response.getOutputStream()
(2)重定向
重定向是response 的另外一个用处,与forward 不同的是,重定向会丢失所有的请求参数及请求属性。
response.sendRedirect("forward-result.jsp")
注意:重定向会丢失所有的请求参数,使用重定向的效果,与在地址栏里重新输入新地址再回车的效果完全一样。
(3)增加Cookie
Cookie 与session 的不同之处在于: session 关闭浏览器后就失效,但Cookie 会一直存放在客户端机器上,除非超出Cookie 的生命期限。增加Cookie 也是使用response 内置对象完成的, response 对象提供了一个方法。
• void addCookie(Cookie cookie): 增加Cookie。
正如在上面方法中见到的,在增加Cookie之前,必须先创建Cookie对象,增加Cookie
请按如下步骤进行:
a.创建Cookie 实例:
b.设置Cookie 的生命期限:
c.向客户端写Cookie。
看如下JSP 页面,该页面可以用于向客户端写一个usemame 的Cookie。
<%@ page contentType="text/html; charset=gb23l2" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> 增加Cookie</TITLE>
</HEAD>
<BODY>
<%
// 获取请求参数
String name = request.getParameter("name") ;
// 以获取到的请求参数为值,创建一个Cookie 对象
Cookie c = new Cookie("username" , name);
// 设置Cookie 对象的生存期限
c.setMaxAge(24 * 3600);
// 向客户端增加Cookie 对象
response.addCookie(c);
%>
</BODY>
</HTML>
通过request 对象的getCookiesO方法来访问Cookie ,该方法将返回Cookie 的数组,遍历该数组的每个元素,找出希望访问的Cookie 即可。
下面是访问Cookie 的JSP 页面的代码:
<%@ page contentType="text/html; charset=gb23l2" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> 增加Cookie</TITLE>
</HEAD>
<BODY>
<%
// 获取本站在客户端上保留的所有Cookie
Cookie[] cookies = request.getCookies();
// 遍历客户端上的每个Cookie
for (Cookie c : cookies)
{
//如果Cookie 的名为username. 表明该Cookie 是我们需要访问的Cookie
if(c.getName() .equals("username"))out.println(c.getValue());
}
%>
</BODY>
</HTML>
使用该页面将可读出刚才写在客户端的Cookie。
注意:使用Cookie 对象必须设直其生存期限,否则Cookie 将会随浏览器的关闭而自动消失。
八、session对象
session 对象也是一个非常常用的对象,这个对象代表一次用户会话。一次用户会话的含义是:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开为止,这个过程就是一次会话。session 里的属性可以在多个页面的跳转之间共享。一旦关闭浏览器,即session 结束, session 里的属性将全部清空。
session 对象的两个常用方法如下。
• setAttribute(String attName , Object attValue): 设置一个session 属性。
• getAttribute(String attName): 返回一个session 属性的值。