····························································
第5 章 chapter5
JSP常用对象
本章要点
本章重点介绍了JSP编程时常见的8种内部对象,它们分别是request、response、
session、application、out、pageContext、config和exception,通过本章学习,读者可以掌握
JSP常见内部对象的语法、原理及使用方法,并结合案例加以练习,最终掌握基于JSP常
见内部对象的编程技术。
表5-1列出了JSP中常见的8种内部对象。
表5-1 JSP中常见的8种内部对象
内部对象名主要功能
request 封装用户提交的请求信息
response 封装响应用户请求的信息
session 在用户请求时期保存对象属性
application 提供存取servletclass环境信息的方法
out 向客户端输出信息
pageContext 存取JSP执行过程中需要用到的属性和方法
config 提供存取servletclass初始参数及Server环境信息
exception 在页面出错时产生无法控制的Throwable
5.1 request
request对象的类型是一个执行javax.servlet.http.HttpServletRequest界面的类。
当客户端请求一个JSP网页时,客户端的请求信息将被JSP引擎封装在这个request对
象中。该对象调用相应的方法便可以获取用户提交的信息。下面介绍request对象中的
常用方法。
(1)getCookies():返回客户端的cookie对象,结果是一个cookie数组。
(2)getHeader(Stringname):获得HTTP协议定义的传送文件头信息,如request.
getHeader("User-agent")返回客户端浏览器的版本号、类型等信息。
第◆5 章 JSP 常用对象9 7
(3)getAttribute(Stringname):返回name指定的属性值,若不存在指定的属性,就
返回空值(null)。
(4)getattributeNames():返回request对象所有属性的名字,结果集是一个Enumeration
类的实例。
(5)getHeaderNames():返回所有请求标头(requestheader)的名字,结果集是一个
Enumeration类的实例。
(6)getHeaders(Stringname):返回指定名字的请求标头的所有值,结果集是一个
Enumeration类的实例。
(7)getMethod():获得客户端向服务器端传送数据的方法(如GET、POST和PUT
等类型)。
(8)getParameter(Stringname):获得客户端传送给服务器端的参数值,该参数由
name指定。
(9)getparameterNames():获得客户端传送给服务器端的所有参数名,结果集是
一个Enumeration类的实例。
(10)getParameterValues(Stringname):获得参数name所包含的值(一个或多个)。
(11)getQueryString():获得由客户端以GET方式向服务器端传送的字符串。
(12)getRequestURI():获得发出请求字符串的客户端地址。
(13)getServletPath():获得客户端所请求的脚本文件的文件路径。
(14)setAttribute(Stringstrname,Java.lang.Objectobj):设定名字为strname的
request参数值,该值由Object类型的obj指定。
(15)getServerName():获得服务器的名字。
(16)getServerPort():获得服务器的端口号。
(17)getRemoteAddr():获得客户端的IP地址。
(18)getRemoteHost():获得客户端电脑的名字,若失败,则返回客户端电脑的IP
地址。
(19)getProtocol():获取客户端向服务器端传送数据所使用的协议名称(如http/1.1)。
通常用户向JSP页面提交信息是借助于表单来实现的。我们知道表单中包含文本
框、列表、按钮等输入标记。当用户在表单中输入完信息后,单击Submit按钮这些信息
将被提交。客户端可以使用post以及get两种方法实现提交。它们的区别是get方法提
交的信息会显示在IE浏览器的地址栏中,而post方法不会显示,提交后的信息就被封装
在request对象中。通常request对象调用getParameter()方法获取用户提交的信息。
下面我们给出利用request对象获取客户提交页面信息的例程ex5-1.jsp,其源程序如下。
ex5-1.jsp 源程序
<%@ page contentType="text/html;charset=GB2312"%>
示例5-1
9 8 ◆W eb 编程技术(第2 版)
程序ex5-1.jsp通过表单向do51.jsp提交信息。do51.jsp通过request对象获取用户
提交页面的信息。do51.jsp的源程序如下。
do51.jsp 源程序
<%@ page contentType="text/html;charset=GB2312"%>
<%@ page import="java.util.*"%>
<%
out.println("客户协议: " + request.getProtocol());
out.println("
");
out.println("服务器名: " + request.getServerName());
out.println("
");
out.println("服务器端口号: " + request.getServerPort());
out.println("
");
out.println("客户端IP 地址: " + request.getRemoteAddr());
out.println("
");
out.println("客户机名: " + request.getRemoteHost());
out.println("
");
out.println("客户提交信息长度: " + request.getContentLength());
out.println("
");
out.println("客户提交信息类型: "+ request.getContentType());
out.println("
");
out.println("客户提交信息方式: " + request.getMethod());
out.println("
");
out.println("Path Info: " + request.getPathInfo());
out.println("
");
out.println("Query String: " + request.getQueryString());
out.println("
");
out.println("客户提交信息页面位置: " + request.getServletPath());
out.println("
");
第◆5 章 JSP 常用对象9 9
out.println("HTTP 头文件中accept-encoding 的值: " + request.getHeader
("Accept-Encoding"));
out.println("
");
out.println("HTTP 头文件中User-Agent 的值: " + request.getHeader("User-
Agent"));
out.println("
");
%>
您的名字是:
<% String username=request.getParameter("user"); %>
<%=username%>
将ex5-1.jsp和do51.jsp保存到D:\Tomcat\webapps\ROOT 下面,然后在IE浏览
器的地址栏中输入“http://localhost:8080/ex5-1.jsp”,按Enter键后屏幕显示如图5-1
所示。
图5-1 ex5-1.jsp的运行结果
在文本框中输入名字后单击“我要提交”按钮,效果如图5-2所示。
1 00 ◆W eb 编程技术(第2 版)
图5-2 提交后ex5-1.jsp的运行结果
5.2 response
response对象的类型为javax.servlet.http.HttpServletResponse类。当用户向服务
器端提交了HTTP请求后,服务器将会根据用户的请求建立一个默认的response对象,
然后传入JspService()函数中,给客户端提供响应的信息。下面介绍response对象中所
包含的方法。
(1)setContentType(Strings):该方法可以改变ContentType的属性值。当用户访
问一个ContentType属性值是“text/html”的JPS页面时,JPS引擎将按照ContentType
属性的值来响应客户的请求信息。response对象可以调用该方法来设置ContentType
的值,其中参数s可取“text/html”“application/x-msexcel”和“application/msword”等。
(2)sendRedirect(URL):该方法将实现客户的重定向。即在处理客户请求的过程
中,可能会根据不同事件将客户重新引导至另一个页面。其中参数URL的值为重定向
页面所在的相对路径。
(3)addCookie(Cookiecookie):该方法将实现添加1个Cookie对象。Cookie可以
保存客户端的用户信息。通过request对象调用getCookies()方法可获得这个Cookie。
(4)addHeader(Stringname,Stringvalue):该方法将实现添加HTTP文件头。该
Header将会传到客户端,若同名的Header存在,原来的Header会被覆盖。其中参数
name指定HTTP头的名字,参数value指定HTTP头的值。
第◆5 章 JSP 常用对象1 01
(5)containsHeader(Stringname):该方法判断参数name所指名字的HTTP文件
头是否存在,如果存在返回true,否则返回false。
(6)sendError(internum):该方法实现向客户端发送错误信息。其中参数ernum
表示错误代码。例如当ernum 为404时,表示网页找不到。
(7)setHeader(Stringname,Stringvalue):该方法将根据HTTP文件头的名字来
设定它的值。如果HTTP头原来有值,则它将会被新值覆盖。其中参数name表示HTTP
头的名字,参数value指定HTTP头的值。
下面我们给出利用response对象实现客户重定向的例程ex5-2.jsp和do52.jsp,源程
序如下。
ex5-2.jsp 源程序
<%@ page contentType="text/html;charset=GB2312"%>
示例5-2
do52.jsp 源程序
<%@ page contentType="text/html;charset=GB2312"%>
<%@ page import="java.util.*"%>
<%
String username=request.getParameter("user");
if(username==null)
{
username="";
}
byte userbyte[]=username.getBytes("ISO-8859-1");
username=new String(userbyte);
if(username.equals(""))
{
response.sendRedirect("ex5-2.jsp");
}
else
{
out.println("
");
out.print("欢迎");
out.println(username);
out.print("进入音乐前沿网站!");
out.println("
");
}
%>
将ex5-2.jsp和do52.jsp保存到D:\Tomcat\webapps\ROOT 下面,然后在IE浏览
器的地址栏中输入“http://localhost:8080/ex5-2.jsp”,按Enter键后屏幕显示如图5-3
所示。
◆
第
5
章 JSP
常用对象103
图5-
3
ex5-2.sp的运行结果
j
当输入完信息(注意要输入用户名)单击“提交”按钮后,效果如图5-4所示。
图5-
4
提交后ex5-2.sp的运行结果
j
1 04 ◆W eb 编程技术(第2 版)
下面我们给出利用response对象实现自动刷新客户页面的例程ex5-3.jsp,源程序如下。
ex5-3.jsp 源程序
<%@ page language="java" %>
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
示例5-3
本例将给大家演示该页面每隔1 秒的自动刷新过程
现在的时间是:
<%
response.setHeader("refresh","1");
out.println(new Date().toLocaleString());
%>
ex5-3.jsp的运行结果如图5-5所示。
图5-5 ex5-3.jsp的运行结果
第◆5 章 JSP 常用对象1 05
5.3 session
session是会话的意思。其实它指的是当一个用户从在客户端打开IE浏览器并连接
到服务器端开始,一直到该用户关闭IE浏览器为止的这段时期。在这段时期内,该用户
会在这个服务器的不同页面之间跳转(按照经验,没有哪个用户登录网站后只锁定一个
页面),甚至会反复刷新服务器上的某一个页面。那么服务器用什么办法才能知道和当
前页面连接的用户是不是同一个用户呢? 服务器又是怎样获取用户在访问各个页面期
间所提交的信息的呢(连接一旦关闭,服务器是不会保留先前连接的信息的)? 要解决这
些问题就需要session对象。
session对象在第一个JSP页面被装载时自动创建,完成会话期管理。当用户第一次
登录网站时,服务器端的JSP引擎将为该用户生成一个独一无二的session对象,用以记
录该用户的个人信息,一旦该用户退出网站,那么属于他的session 对象将会注销。
session对象可以绑定若干人的信息或者Java对象。如果不同session对象内部定义了
相同的变量名,那么这些同名变量是不会相互干扰的。需要说明的是,session对象中所
保存和检索的信息不能是基本数据类型,必须是Java语言中相应的Object对象。下面
我们给大家介绍session对象中所包含的方法。
(1)setAttribute(Stringkey,Objectobj):该方法实现将参数obj所指定的对象添
加到session对象中,并为添加的对象指定一个索引关键字。索引关键字的值由参数key
确定。
(2)getAttribute(Stringname):该方法实现从session对象中提取由参数name指
定的对象。若该对象不存在,将返回null。
(3)getattributeNames():该方法返回session对象中存储的第一个对象,结果集是
一个Enumeration类的对象。我们可以使用nextElements()来遍历session中的全部
对象。
(4)getCreationTime():该方法将返回创建session对象的时间,以毫秒为单位,从
1970年1月1日起计数。
(5)getId():每生成一个session对象,服务器都会给其分配一个独一无二的编号,
该方法将返回当前session对象的编号。
(6)getLastAccessedTime():该方法将实现返回当前session对象最后一次被操作
的时间,即1970年1月1日起至今的毫秒数。
(7)getMaxInactiveInterval():该方法将获得session对象的生存时间,单位为秒。
(8)removeAttribute(Stringname):该方法将实现从session中删除由参数name
所指定的对象。
(9)isNew():该方法判断是不是一个新的用户。如果是返回true,否则返回false。
为了说明session对象的具体应用,下面我们用三个页面模拟一个多页面的Web应
用。用户访问ex5-4.jsp时所输入的姓名在do54.jsp中被保存在session对象中,它对其
后继的页面newdo54.jsp一样有效。它们的源程序如下。