第四讲JSP主要内置对象管理学院李长仪2010.4.27主要内容request对象response对象session对象out对象pageContext对象application对象config对象exception对象5.1Request对象1、Request对象的方法Request内置对象代表了客户端的请求信息,主要用于接受客户端通过HTTP协议传送给服务器端的数据。在客户端的请求中如果有参数,则该对象就有一个参数列表。它通常是HttpServletRequest的子类,其作用域就是一次Request请求。Request对象包括很多方法,主要有:getCookies():返回客户端的cookie对象,结果是一个cookie数组。getSession(booleancreate):返回和当前客户端请求相关联的HttpSession对象,如果当前客户端请求没有和任何HttpSession对象关联,那么如果create变量为true,则创建一个HttpSession对象并返回;反之,返回null。getHeader(Stringname):获得http协议定义的传送文件头信息。getAttribute(Stringname):返回name指定的属性值,若不存在指定的属性,就返回null。getattributeNames():返回request对象所有属性的名字,结果集是一个Enumeration(枚举)类的实例。getHeaderNames():返回所有requestheader的名字,结果集是一个Enumeration(枚举)类的实例。getHeaders(Stringname):返回指定名字的requestheader的所有值,结果集是一个Enumeration(枚举)类的实例。getMethod():返回客户端向服务器端传送数据的方法,一般方法有GET、POST、PUT等类型。getParameter(Stringname):以字符串的形式返回客户端传来的某一个请求参数的值,该参数名由name指定。当传递给此方法的参数名没有实际参数与之对应时,返回null。另外,当一个参数含有多个值时最好不要使用这个方法。getparameterNames():返回客户端传送给服务器端的所有的参数名,结果集是一个Enumeration(枚举)类的实例。当传递给此方法的参数名没有实际参数与之对应时,返回null。getParameterValues(Stringname):以字符串数组的形式返回指定参数所有值。getQueryString():返回查询字符串,该字符串由客户端以GET方法向服务器端传送。getRequestURI():获得发出请求字符串的客户端地址。getServletPath():获得客户端所请求的脚本文件的文件路径。setAttribute(Stringname,Java.lang.Objecto):设定名字为name的request参数值,该值由Object类型的o指定。getServerName():获得服务器的名字,如果没有设定服务器名,则返回服务器IP地址。getServerPort():获得服务器的端口号。getRemoteAddr():获得客户端的IP地址。getRemoteHost():获得客户端主机的名字,若失败,则返回客户端电脑的IP地址。getProtocol():获取客户端向服务器端传送数据所依据的协议名称,如http/1.1。getContentLength():以字节为单位返回客户端请求的大小。如果无法得到该请求的大小,则返回-1。getContentType():获取客户端请求的MIME类型。如果无法得到该请求的MIME类型,那么返回-1。getInputStream():以二进制的形式将客户端的请求以一个ServletInputStream的形式返回。使用此方法可以获得客户端的multipart/form-data数据,可以实现文件上传。isSecure():如果客户机是通过一个安全的访问方式访问的,就返回true;反之,返回false.getDateHeader():返回一个long类型的数据,表示客户端发送到服务器的头信息中的时间信息。getInitHeader():获取客户端发送到服务器端的头信息中的某一个特定的信息,并转换为int类型。getContextPath():返回环境路径。对于JSP来说,一般是当前Web应用程序的根目录。isRequestedSessionIdValid():返回一个指示客户端请求发送SessionID是否仍然有效的布尔值。isRequestedSessionIdFromCookie():返回一个指示客户端请求发送SessionID是否存在于Cookie中的布尔值。isRequestedSessionIdFromURL():返回一个指示客户端请求发送SessionID是否存在于URL中的布尔值。2、Request对象的示例(1)获取客户端属性实例该实例是在一个页面request01.jsp中,通过setAttribute()方法设置属性admin和password的值,然后使用jsp:forward重定向到request02.jsp中,在request02.jsp,命名用getAttribute()方法获取相关的值,并显示在页面上。1%2request.setAttribute(user,admin);3request.setAttribute(password,888888);4%5jsp:forwardpage=request02.jsp/jsp:forward程序request02.jsp清单如下:1%@pagelanguage=javacontentType=text/html;charset=gb23122pageEncoding=gb2312%3html4head5title新闻管理系统/title6/head7body8h29当前登录的用户名为:10%=request.getAttribute(user)%11/h212br13h214当前登录的密码为:15%=request.getAttribute(password)%16/h217/body18/html(2)有一个用户登录的页面request03.jsp,其action值为request04.jsp,在request04.jsp中,获取登录的用户名和密码。程序request03.jsp清单如下:1%@pagelanguage=javacontentType=text/html;charset=gb23122pageEncoding=gb2312%3html4head5title新闻发布系统/title6/head7body8center9formaction=request04.jspmethod=post10tableborder=111trtd用户名:/tdtdinputtype=textname=user/td/tr12trtd密码/tdtdinputtype=passowrdname=password/td/tr13trtdinputtype=submitvalue=登录/tdtdinputtype=resetvalue=重置/td/tr14/table15/form16/center17/body18/html程序request04.jsp清单如下:1%@pagelanguage=javacontentType=text/html;charset=gb23122pageEncoding=gb2312%3html4head5title新闻发布系统/title6/head7body8h2当前登录的用户名为:%=request.getParameter(user)%/h2br9h2当前登录的密码为:%=request.getParameter(password)%/h210/body11/htmlAttribute是属性get前必须先setparameter是参数由地址栏或表单控件提供getParameter是获取页面元素的值和url中的值,只能取到字符串,getAttribute是获取保存在相应范围内的值,可以是对象集合等,包括request,session等。HttpServletRequest类有setAttribute()方法,而没有setParameter()方法3.客户端信息获取实例(实例20、21)这是一个综合应用getProtocol()、getServletPath()、getContentLength()、getMethod()、getRemoteAddr()、getRemoteHost()、getServerName()、getParameterName()等Request对象方法的例子,实现了对一些系统信息的简单的输出显示。5.2Response对象Response对象实现HttpServletResponse接口,可对客户的请求做出动态的响应,向客户端发送数据,如Cookie、HTTP文件头信息等,一般是HttpServletResponse类或其子类的一个对象。1、Response对象的方法addCookie(Cookiecookie):添加一个Cookie对象,用来保存客户端的用户信息,用request的getCookies()方法可以获得这个Cookie。addHeader(Stringname,Stringvalue):添加HTTP文件头,该header将会传到客户端去,如果有同名的header存在,那么原来的header将会被覆盖掉。containsHeader(Stringname):判断指定名字的HTTP文件头是否存在,并返回布尔值。sendError(intsc):向客户端发送错误信息,例如,505指示服务器内部错误;404指示网页找不到的错误。setHeader(Stringname,Stringvalue):设定指定名字的HTTP文件头的值,如果该值存在,那么它会被新的值覆盖。setContenType(Stringtype):响应设置内容类型头。sendRedirect(URL):可以将用户重定向到一个不同的页面(URL)。(实例22)用response.sendRedirect做转向的原理,它其实是向浏览器发送一个特殊的Header,然后由浏览器来做转向,转到指定的页面,所以用sendRedirect时,浏览器的地址栏上可以看到地址的变化。用jsp:forward则不同,它是直接在server做的,浏览器并不知道,也不和浏览器打交道,这从浏览器的地址并不变化可以看出。关于CookieCookie是服务器发送给客户端浏览器的体积较小的纯文本信息,以后当用户访问同一个Web服务器时,浏览器会把它们发送给服务器。通过让服务器读取原先保存在客户端的信息,为浏览者提供一系列的方便。例如在线交易过程中标识用户身份,在安全要求不高的场合可避免用户重复输入名字和密码、门户网站的主页定制、有针对性地投放广告等。Cookie存放在客户端,首先要新建一个Cookie,然后设置其属性,再通过response对象的addCookie()方法将其放入客户端,获取Cookie对象可调用request对象的getcookies()方法。2、Response对象程序应用示例(1)定时页面刷新实例(实例23)这是一个定时刷新页面的例子,例子中指定页