第四章 JSP隐含对象_第1页
第四章 JSP隐含对象_第2页
第四章 JSP隐含对象_第3页
第四章 JSP隐含对象_第4页
第四章 JSP隐含对象_第5页
已阅读5页,还剩127页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章JSP隐含对象JSP作为Web组件,为和Web容器和其他Web组件进行通信和协作,提供了内置的与HTTP请求和相应相关的对象,方便与其他Web组件协作和信息共享。这些对象不需要定义和引用,在JSP脚本和表达式脚本中可以直接使用。JSP提供了9种内置对象,分别与ServletAPI中的类和接口对应,分别包括:out:输出对象;exception:异常对象;request:请求对象;response:响应对象;session:会话对象;config:配置对象,读取web.xml配置信息application:应用服务器对象;page:JSP本身页面类对象;pageContext:页面级环境变量作为页面级容器4.1out隐含对象概念:out是JSP页面向浏览器发出响应流PrintWriter的实例对象,通过相应方法向浏览器发出文本响应。一、输出信息的方法1、print()和println():用于打印输出信息,被打印的信息可以是基本数据类型(如int等),也可以是对象(如字符串等)。两者的区别在于输出的信息在返回客户端的源代码中是否换行。注:思考一下使用浏览器查看两种浏览方式时是否会出现换行。4.1out隐含对象即使使用println()进行输出在浏览器中也不会换行显示信息,要实现这个功能,必须使用换行符,如“<br>”。<body><% out.print("123");out.print("<br>"); out.print("456"); %></body>4.1out隐含对象预览后,IE浏览器中显示的内容为:服务器返回的HTML代码为:123

456<body>123<br>456</body>4.1out隐含对象2、newLine()newLine()表示输出一个回车换行符,例如:<body><% out.print("123"); out.newLine(); out.print("456"); %></body>4.1out隐含对象服务器返回的HTML代码为:<body>123456</body>4.1out隐含对象二、

缓冲区相关的方法1、flush()方法flush()用于刷新流,在Java中I/O操作被转化为流操作。out.write()输出的信息会被暂存在流对象缓冲区中,刷新操作把缓冲区中的信息传递给目标对象处理。如果目标对象是另外一个字符流或字节流,同样也刷新它。所以,调用flush()方法会导致刷新所有输出流对象链中的缓冲区。如果缓冲区满了,这个方法被自动调用,输出缓冲区中的信息。4.1out隐含对象注:在流关闭时调用print()或flush()会引发一个IOException异常,例如:在Tomcat命令行窗口中显示“警告:Internalerrorflushingthebufferinrelease()”的异常信息。

<%out.close();out.flush(); %>4.1out隐含对象2、clear()方法clear()表示清除缓冲区中的信息。如果缓冲区是空的,执行此方法会引发IOException异常。3、clearBuffer()clearBuffer()的功能与clear()相似,它将输出缓冲区清除后返回,与clear()不同的是它不抛出异常。4.1out隐含对象4、getBufferSize()getBufferSize()返回输出缓冲区的大小,单位字节,如果没有缓冲区,则返回0。5、getRemaining()getRemaining()返回缓冲区剩余的空闲空间,单位字节。6、isAutoFlush()isAutoFlush()返回一个真假值,用于标示缓冲区是否自动刷新。4.1out隐含对象预览后,显示的信息为:缓冲区总容量=8192

缓冲区空闭容量=7883

缓冲区是否自动刷新=true<%out.print("缓冲区总容量="+out.getBufferSize()+"<br>");out.print("缓冲区空闭容量="+out.getRemaining()+"<br>");out.print("缓冲区是否自动刷新="+out.isAutoFlush());%>Web工作模式请求-响应模式。客户端(浏览器)向服务器发出HTTP请求。在HTTP请求中包含传递到服务器的数据。Web服务器接收到请求,对请求进行处理Web服务器通过HTTP向客户端发送响应。客户端接收到响应后,进行显示或跳转。4.2request隐含对象HTTP请求中包含的信息:请求头(RequestHeader):指示客户端信息和请求体信息。请求头功能:向服务器指示客户端和请求体的基本信息,便于服务器采用不同的处理。请求头包含的主要信息:

-请求的协议。

-浏览器使用的语言。

-浏览器字符编码。

-请求数据的大小(content-length).

-CookieHTTP协议的常见请求头头标记说明包含的值例子User-Agent客户端的类型,即浏览器名称LII-Cello/1.0libwww/2.5Accept浏览器可接受的MIME类型各种标准的MIME类型Accept-Charset浏览器支持的字符编码字符编码,如ISO-8859-1Accept-Encoding浏览器知道如何解码的数据编码类型x-compress;x-zipAccept-Language浏览器指定的语言如en:EnglishConnection是否使用持续连接Keep-Alive:持续连接Content-Length使用POST方法提交时,传递数据的字节数Cookie保存的Cookie对象Host主机和端口)请求体(RequestBody)包含具体的向服务器提交的数据,服务器可以取得客户提交的数据。类型:

-文本类型:

1)GET请求

2)不包含文件的POST请求

-二进制类型:

1)包含文件的POST请求。JSPWeb的请求对象——request请求对象的类型:javax.servlet.http.HttpServletRequest请求对象的功能:

-取得客户端请求头信息,即客户端信息

-取得客户端请求体信息,即客户提交的数据

-传递不同请求之间的共享信息(只能使用在转发情况)。request的生命周期请求对象的生成:

(1)请求对象在Web容器接收到HTTP请求后自动创建。

(2)Web容器将请求头和请求体信息写入到请求对象中。

(3)Web容器将请求对象传递给Servlet对象的doGet()或doPost()方法。

(4)Servlet可以通过请求对象取得客户提交的数据请求对象的销毁:当Web响应HTTP请求结束后,请求对象自动销毁,被垃圾收集器收集,释放所占的内存。4.2request隐含对象一、

用request读取客户端传递来的参数客户端向服务器传递参数最常见的方法:表单数据附在URL中的查询串(querystring)参数,也就是URL“?”后面的参数:http://localhost/exam.jsp?name=tomcat

4.2request隐含对象1、用request读取单值参数单值参数:一个变量最多有一个值。读取方法:request对象的getParameter()方法读取指定变量名的参数值,方法的定义:方法的形参是参数的变量名,以String形式返回变量的值。如果request对象中没有指定的变量,则返回null。publicjava.lang.StringgetParameter(java.lang.Stringname)4.2request隐含对象request.getParameter(“”)缺陷:读取表单传来的参数时,参数变量名是以硬编码形式嵌在代码中,缺乏灵活性。getParameterNames()能返回request对象中的参数变量名,并保存在枚举类型中,定义方法:publicjava.util.EnumerationgetParameterNames()4.2request隐含对象2、用request读取多值参数多值参数的典型代表是表单复选框,例如在一般网站会员注册信息表单中如果有“爱好”项,那么用户是可以选定多个爱好的。在服务器端读取多值参数,要用到request.getParameterValues(),定义:形参为多值参数的变量名,多个参数值返回后存储在一个字符串数组中。publicjava.lang.String[]getParameterValues(java.lang.Stringname)4.2request隐含对象作用范围变量:在JSP中包括request、page、session和application等几种作用范围变量,他们是将由属性名和属性值构成的“name=value”属性值对象与某个有生命周期的JSP隐含对象相绑定,使属性值对象有一定的生命周期,或者说使属性值对象在一定的作用范围内有效。定义方法:调用隐含对象的setAttribute()方法读取方法:调用隐含对象的getAttribute()方法4.2request隐含对象二、request作用范围变量概念:也叫request属性,用来在服务器端的两个JSP/Servlet程序间交换数据。Servlet程序A要把数据对象传递给Servlet程序B时的工作过程为:程序A调用request.setAttribute()把数据写入request作用范围,再通过request转发跳转到程序B,将A的request对象被转发给B,在程序B中通过request.getAttribute()读取数据对象。4.2request隐含对象1、setAttribute()/getAttribute()方法request.setAttribute()用于把一个属性对象按指定的名字写入request作用范围,语法为:第一个形参是作用范围变量名,名字要唯一,第二个形参是属性值对象。publicvoidsetAttribute(java.lang.Stringname,java.lang.Objecto)4.2request隐含对象request.getAttribute()从request作用范围读出指定名字的属性对象,它的语法为:形参是属性值对象的变量名,方法返回的对象是Object类型,一般要进行强制类型转换,还原属性值对象的原本数据类型。例如:publicjava.lang.ObjectgetAttribute(java.lang.Stringname)4.2request隐含对象4.2request隐含对象2、getRequestDispatcher()——转发跳转request转发器(RequestDispatcher)的作用:获得目标资源的转发器,通过转发器将当前Servlet程序的request和response对象转发给目标Servlet资源,跳转至目标资源上运行程序,目标资源再通过request对象读取上一资源传递给它的request属性。4.2request隐含对象request.getRequestDispatcher()的作用是返回目标资源的RequestDispatcher对象,语法为:形参是当前Web应用目标资源的URI,可以使用相对路径或绝对路径。publicrequestDispatchergetRequestDispatcher(java.lang.Stringpath)4.2request隐含对象RequestDispatcher中主要的方法有:publicvoidforward(ServletRequestrequest,ServletResponseresponse)throwsServletException,java.io.IOException形参是当前Servlet程序的request和response隐含对象。该方法能够把当前Servlet程序的request和response隐含对象转发给目标资源,并跳转至目标资源运行代码。4.2request隐含对象publicvoidinclude(ServletRequestrequest,ServletResponseresponse)throwsServletException,java.io.IOException形参是当前JSP/Servlet程序的request、response对象。该方法用于包含目标资源,如果目标资源是JSP页面,它会被编译成Servlet程序后再运行。进行包含操作前,允许对当前JSP/Servlet程序的response输出缓冲区进行刷新。4.2request隐含对象3、removeAttribute()作用:从request作用范围中删除指定名字的属性,它的语法为:参数是属性名。例如:publicvoidremoveAttribute(Stringname)request.removeAttribute(“name”);4.2request隐含对象4、setCharacterEncoding()作用:定义request对象中的parameter参数的字符编码标准。例如,parameter参数如果有中文,在读取参数前调用此方法,设置参数的编码标准为GB2312,可以解决以POST方式提交参数的中文乱码问题。4.2request隐含对象三、

用request读取系统信息1、getProtocol()返回request请求使用的协议及版本号,方法的语法为:例如:publicjava.lang.StringgetProtocol()<%out.print(request.getProtocol());%>4.2request隐含对象2、getRemoteAddr()返回客户端或最后一个客户端代理服务器的IP地址,方法的语法为:例如:预览后显示:。publicjava.lang.StringgetRemoteAddr()<%out.print(request.getRemoteAddr());%>4.2request隐含对象3、getRemoteHost()返回客户端主机名或最后一个客户端代理服务器的主机名,如果主机名读取失败,则返回主机的IP地址。方法的语法为:publicjava.lang.StringgetRemoteHost()4.2request隐含对象4、getScheme()返回当前request对象的构造方案,例如http、https和ftp等,不同的构造方案有不同的URL构造规则。例如:预览后显示:http。<%out.print(request.getScheme());%>4.2request隐含对象5、getQueryString()返回URL的查询字串,即URL中“?”后面的“name=value”对。例如,客户端请求的URL为:目标资源untiltled.jsp中有以下代码:预览后显示:dd=22&ff=2。:8080/untitled.jsp?dd=22&ff=2<%out.print(request.getQueryString());%>4.2request隐含对象6、getReuquestURI()返回URL请求中目标资源的URI。例如,有以下的HTTP请求:目标资源untitled.jsp中有如下的代码:预览后显示:/untitled.jsp。:8080/untitled.jsp?dd=22&ff=2<%out.print(request.getReuquestURI());%>4.2request隐含对象7、getMethod()返回request请求的提交方式,如:GET、POST等。8、getServletPath()返回调用Servlet程序的URL请求,例如,对于:目标资源untitled.jsp中有如下的代码:out.print(request.getServletPath());预览后显示:/untitled.jsp。:8080/untitled.jsp4.2request隐含对象9、getRealPath()返回虚拟路径在服务器上的真实绝对路径,例如,对于:目标资源untitled.jsp中有如下的代码:预览后显示:C:\tomcat\webapps\ROOT\untitled.jsp。:8080/untitled.jsp<%out.print(request.getRealPath(request.getServletPath()));%>4.2request隐含对象四、

用request读取HTTP请求报头信息客户端浏览器向服务器请求资源的过程一般分为三步来完成:第一步:发出请求。浏览器通过HTTP协议向服务器提交请求,例如::8080/exam.jsp4.2request隐含对象第二步:HTTP报头信息交换。JSP服务器接收到客户端的资源请求后,判断请求是否合法,如果请求有效,则进行报头信息交换。客户机用HTTP协议向服务器传递的报头信息叫HTTP请求报头,服务器给客户机返回的报头信息叫HTTP响应报头。第三步:信息传输例如把JSP页面的输出信息从服务器上传回浏览器,或把客户机上的文件上传到服务器。4.2request隐含对象在JSP中要读取HTTP请求报头中的信息,可以使用getHeaderNames()和getHeader()等方法。1、getHeader()返回指定的HTTP报头信息,语法为:该方法的形参为报头名字publicjava.lang.StringgetHeader(java.lang.Stringname)4.2request隐含对象3、getHeaderNames()返回HTTP报头的名字,名字存储在一个枚举型对象中。以下代码读出HTTP请求报头中的信息:4.2request隐含对象程序段的运行结果类似于:4.2request隐含对象五、

用request读取cookieCookie,或称Cookies,在Web技术中指Web服务器暂存在客户端浏览器内存或硬盘文件中的少量数据。作用:Web服务器通过HTTP报头来获得客户端中的cookie信息。Cookie信息的基本结构:类似于“name=value”对,每个数据有一个变量名。4.2request隐含对象Cookie信息的有效期:有效期短的直接存于IE浏览器内存中,关闭浏览器后,这些cookie信息也就丢失。有效期长的信息存储在硬盘文件上。保存位置:所有曾经访问过的网站的cookie文件(*.txt)保存在XP内“C:\DocumentsandSettings\admin\Cookies”文件夹中。4.2request隐含对象在JSP中使用cookie的基本过程为:在服务器端生成cookie对象,把待保存信息写入cookie对象中;必要时设置cookie对象的生命期;把cookie对象传给客户端浏览器保存;服务器端程序需要cookie信息时,用代码读取cookie信息。4.2request隐含对象1、Cookie类javax.servlet.http.Cookie类用来生成一个cookie对象,构造方法:第一个形参是cookie数据的变量名,第二个形参是待保存的数据,字符串类型。Cookie(java.lang.Stringname,java.lang.Stringvalue)4.2request隐含对象publicvoidsetMaxAge(intexpiry)这个方法定义cookie对象的生命期,形参是生命时间数,单位秒,默认值为-1。如果生命周期为负整数,表示这个cookie对象是临时的,不要保存在硬盘文件中,关闭IE浏览器后cookie数据自动丢失。如果生命期为零,表示删除这个cookie。Cookie的生命期定义要在cookie对象传回客户端前进行。publicintgetMaxAge()方法读取生命时间。4.2request隐含对象publicvoidsetSecure(booleanflag)形参取值true时,表示用https或SSL安全协议将cookie传回服务器;取false时表示用当前默认的协议传回cookie。publicjava.lang.StringgetName()返回当前cookie对象的变量名。publicjava.lang.StringgetValue()返回当前cookie对象的值。4.2request隐含对象2、将cookie对象传回客户端将cookie对象传回客户端,要用到另外一个JSP隐含对象response,用到的方法为:形参是待保存的cookie对象。例如:publicvoidaddCookie(Cookiecookie)第1行:<%第2行:Cookiemsg=newCookie("login","tom");第3行: msg.setMaxAge(60*60*60*60);第4行: response.addCookie(msg);第5行:%>4.2request隐含对象3、读取cookie对象读取客户端存储的cookie,用request对象的getCookies()方法,它的语法为:返回的是一个cookie对象数组,当前浏览器中所有有效的cookie会通过HTTP请求报头返回给服务器,每个数组分量是一个返回的cookie对象。如果客户端没有有效的cookie,则返回null值。publicCookie[]getCookies()4.2request隐含对象4.2request隐含对象例:定义一个cookie对象,存储用户的登录名,生命期为30天,在另一个页面中查询这个cookie,如果读取的cookie不为空,则显示用户登录名,否则显示“没有登录”信息。再定义一个cookie对象,记录客户最近浏览过的五本图书的书号:AB001、KC981、DE345、RD332和PC667,如果已经登录,则显示书号,cookie生命期为30天。

您已经登录,用户名=John

您最近浏览过的图书书号是:AB001,KC981,DE345,RD332,PC6674.3response隐含对象一、

输出缓冲区与响应提交输出缓冲区用于暂存Servlet程序的输出信息,减少服务器与客户端的网络通信次数。传送给客户端的信息称之为响应信息(response),如果输出缓冲区中的响应信息已经传递给客户端,称响应是已经提交的(responsecommitted)。刷新操作强制把输出缓冲区中的内容传送回客户端。4.3response隐含对象response对象中和输出缓冲区相关的方法有:1、publicvoidflushBuffer()throwsjava.io.IOException刷新输出缓冲区,把信息传回客户端。2、publicvoidsetBufferSize(intsize)定义输出缓冲区的大小,单位字节。3、publicbooleanisCommitted()返回缓冲区中的响应信息是否已经提交。4.3response隐含对象4.3response隐含对象预览的结果为:4.3response隐含对象二、HTTP响应报头设置服务器通过HTTP响应报头向客户端浏览器传送通信信息。默认情况下,响应信息是以字符形式传送。1、publicvoidsetContentType(java.lang.Stringtype)定义返回客户端的信息类型及编码标准,常用的是“text/html;charset=UTF-8”。JSP:<%@pagecontentType=“text/html;charset=gb2312”%>,JSP页面生成Servlet程序后,在_jspService()方法中产生相应代码:response.setContentType("text/html;charset=gb2312");4.3response隐含对象2、publicvoidsetCharacterEncoding(java.lang.Stringcharset)定义返回客户端信息的编码标准。如果已经用response.setContentType()定义字符集,则调用此方法将重新设置字符集。注:信息字符集的定义要在缓冲区刷新前进行。4.3response隐含对象3、publicvoidsendError(intsc)throwsjava.io.IOException向客户端返回HTTP响应码并清空输出缓冲区。HTTP响应码由三位的十进制数构成:1xx:请求收到,继续处理。2xx:成功,行为被成功地接受、理解和接受。3xx:重定向,为了完成请求,必须进一步执行的动作。4xx:客户端错误。5xx:服务器出错。4.3response隐含对象例如在IE浏览器地址栏中输入::8080/aabb.jsp,企图访问Tomcat服务器中不存在的资源aabb.jsp,则Tomcat会给客户端返回一个HTTP响应码404,在IE浏览器上显示HTTP响应码及错误信息。4.3response隐含对象如果要人为地返回HTTP响应码,则调用sendError(intsc)方法,如:预览后,在IE浏览器中显示404状态码信息。4.3response隐含对象如果要自定义响应码的返回信息,则调用方法:publicvoidsendError(intsc,java.lang.Stringmsg)throwsjava.io.IOException第一个形参是响应码,第二个形参是响应码的信息。如:4.3response隐含对象预览后,在IE浏览器上看到的信息为:4.3response隐含对象如果希望出现某个响应码时,服务器自动转至某页面显示信息,需要在Web应用中的WEB-INF\web.xml部署文件中作出定义。例如,当出现404错误码时,转至错误处理页面显示错误信息,在web.xml的<web-app></web-app>标记内添加一项部署信息如下示:4.3response隐含对象4、publicvoidsetHeader(java.lang.Stringname,java.lang.Stringvalue)第一个形参为报头名,第二个形参是报头值。关于HTTP报头的定义请参考RFC2047(/rfc/rfc2047.txt)。HTTP报头中有一个名为“Refresh”的响应报头,它的作用是使IE浏览器在若干秒后自动刷新当前网页或跳转至指定的URL资源。4.3response隐含对象这个报头的语法为:response.setHeader(“Refresh”,”定时秒数;url=目标资源的URL”)方法的第一个形参是响应报头名“Refresh”,第二个形参由两部分组成:第一部分定义秒数,即:若干秒后自动刷新,第二部分为目标资源的URL,缺省时默认刷新当前页面。4.3response隐含对象例如:4.3response隐含对象如果要实现若干秒后自动跳转至目标页,代码如:4.3response隐含对象三、

用response实现JSP页面重定向作用:重定向是JSP中实现程序跳转至目标资源的方法之一。基本思想:服务器将目标资源完整的URL通过HTTP响应报头发送给客户端浏览器,浏览器接收到URL后更新至地址栏中,并将目标资源的URL提交给服务器。缺点:会有一定网络时延4.3response隐含对象实现JSP页面跳转的主要方法有:RequestDispatcher.forward()转发跳转,response.sendRedirect()重定向跳转。两种跳转区别:(1)客户端浏览器地址栏变化:重定向是通过客户端重新发送URL来实现,会导致浏览器地址更新;而转发跳转是直接在服务器端切换程序,目标资源的URL不出现在浏览器的地址栏中。4.3response隐含对象(2)request和response资源共享区别转发能够把当前JSP页面中的request、response对象转发给目标资源;重定向会导致当前JSP页面的request、response对象生命期结束,在目标资源中无法取得上一个JSP页面的request对象;(3)网络时延转发跳转直接在服务器端进行,基本上没有网络传输时延,重定向有网络传输时延。4.3response隐含对象如果要实现服务器中两个Servlet程序间跳转,并且要使用request作用范围变量交换数据,应该优先使用request转发跳转。用重定向实现程序跳转时,如果要求传递数据给目标资源,一个简单、可行的方法是把数据编码在URL查询串中,例如::8080/exam.jsp?name=tom。4.3response隐含对象用response实现重定向,调用的方法:publicvoidsendRedirect(java.lang.Stringlocation)throwsjava.io.IOException形参是目标资源的URL,可以是相对路径或绝对路径。例如:

<%response.sendRedirect(“exam.jsp”)%>4.4application隐含对象一、application作用范围变量application作用范围变量能够被Web应用中的所有程序共享。application对象提供的存储方法有:publicjava.util.EnumerationgetAttributeNames()返回当前上下文中所有可用的appliaction作用范围变量名,并存储在枚举型对象中。4.4application隐含对象2、publicjava.lang.ObjectgetAttribute(java.lang.Stringname)从application作用范围中读取指定名字的属性值。返回的属性值为Object类型,取到的属性值一般要进行强制类型转换,还原其原本数据类型。如果指定的属性值对象不存在,则返回null。以下代码段是遍历当前Web应用中所有的application属性:4.4application隐含对象3、publicvoidsetAttribute(java.lang.Stringname,java.lang.Objectobject)作用:把一个属性写入application作用范围。参数:第一个形参name是属性名,第二个形参object是属性值,它是一个Java对象。如果属性值object为null,则相当于删除一个名为name的属性。如果容器中已存在指定名字的属性,写入操作会用当前的属性值替换原有的属性值。4.4application隐含对象4、publicvoidremoveAttribute(java.lang.Stringname)作用:从Servlet容器中删除指定名字的属性。形参是字符串形式的属性名。例:用application实现一个简单的站点计数器,当访问JSP页面时,页面进行访问次数统计,并打印当前计数值。操作步骤如下:(1)新建JSP文件,使其完成application作用范围变量的写入和读取,4.4application隐含对象(2)启动Tomcat,预览该文件,出现访问计数值。当再次打开另一个浏览器窗口预览该页面时,会发现计数器增加。(3)重启Tomcat,再访问jsp,发现计数从1开始计数。原因:application属性是存储在Servlet容器中,关闭Tomcat会导致application属性丢失,所以计数器重新计数。4.4application隐含对象二、application的其它应用1、取得目标资源的RequestDispatcher对象语法为:publicRequestDispatchergetRequestDispatcher(java.lang.Stringpath)形参是目标资源的URI,要以“/”开头,为绝对路径。如果无法取得RequestDispatcher对象则返回null。4.4application隐含对象2、publicjava.lang.StringgetMimeType(java.lang.Stringfile)返回指定文件的MIME-type,这些MIME-type由Servlet容器定义,如果文件的MIME-type未知,则返回null。例:在ROOT文件夹下分别建立三个名为d.doc、d.xls、d.zip的空文件,用以下代码查询文件的MIME-type:4.4application隐含对象预览后运行结果为:4.4application隐含对象3、publicjava.lang.StringgetRealPath(java.lang.Stringpath)返回虚拟目录对应的真实绝对路径,例如:<%out.print(application.getRealPath("/"));%>运行结果为“……tomcat\webapps\JSP\”。4.5session隐含对象session是指一个终端用户与后台某交互式系统进行通信的时间间隔。session通信周期:通常把从登录进入系统到注销退出系统之间所经历的时间。如何把一个操作步中产生的有用信息保存下来并进行标识后供后续的操作步使用称之为session跟踪(SessionTracking)问题。4.5session隐含对象一、

用URL重写实现session跟踪URL重写(URLRewriting)就是把session数据编码成“name=value”对,当作URL的查询串附在URL后,用带有查询串的URL访问下一个目标资源时,附在URL查询串中的session数据自然被传送给下一页。4.5session隐含对象例如,当前的a.jsp页面中程序产生了一个session数据“status=90”,现要重定向至:8080/k.jsp,并且k.jsp要用到“status=90”这个session数据,则新的URL为::8080/k.jsp?status=90在a.jsp中产生此URL的代码为:4.5session隐含对象例:写一个简单的登录页面,效果如图示。4.5session隐含对象(1)新建JSP文件(2)设计如上图所示的表单,用户名文本域的名字为“userName”,口令文本域的名字为“pw”,类型取值为“密码”,整个表单提交给自己。(3)在</body>标记前一行录入如下代码,实现登录验证和重定向4.5session隐含对象(4)再新建一个JSP文件,在<body></body>标记中录入以下代码,实现session信息的读取与验证,并动态生成十个超链接。4.5session隐含对象(5)启动Tomcat,预览第一个页面,输入几个非法用户名或口令,均无法成功登录,输入合法数据后后,登录成功,并转至第二个页面。在其中,单击10个超链接,发现URL上均带有两个session数据。4.5session隐含对象二、

用cookie实现session跟踪用cookie实现session跟踪的基本原理是:把一个session数据封装在一个cookie对象中,将cookie对象传回客户端存储,需要用到时用代码从客户端读回。例:题目同前例,此处要求用cookie保存用户成功登录的session数据“name=tom”。只需要修改两个页面中的代码即可。(1)对第一个jsp页面,只需要修改它的JSP代码(2)对第二个jsp:4.5session隐含对象三、

用隐藏表单域实现session跟踪隐藏表单域在页面上不可视,它相当于一个变量,如果把一个session数据存储在其中,则提交表单时,隐藏表单域中的数据也会被提交给服务器。例:设计一个JSP页面实现猜数游戏,如下图示,首次启动页面时会产生一个0~100间的整数让用户猜。用户在表单中输入数据,提交后页面判断是否正确,如果猜小了或猜大了则给出提示,如果猜中,则显示目标数据和用户输入的数据。页面还显示用户总共猜了多少次。4.5session隐含对象操作步骤如下:(1)新建JSP文件。(2)切换到代码视图,找到<form>标记,在它前面输入如下代码:4.5session隐含对象(3)启动Tomcat,预览本页,出现了前图中的猜数游戏,实现了用隐藏表单域保存session数据。注:隐藏域有一定的安全缺陷,例如运行该页面,通过IE浏览器的菜单【查看】→【源文件】,可查看到隐藏表单域的HTML代码及其取值。4.5session隐含对象四、session作用范围变量与session跟踪session隐含对象由Web服务器创建,并存储在服务器端,功能强大,实现session跟踪最直接的方法。在后续的学习中,提到“session”时,如果不特别说明,就是指session对象。session作用范围变量也叫session属性。4.5session隐含对象1、publicbooleanisNew()作用:判断session对象是新创建的,还是已经存在。返回true时,表示session对象是刚创建的,也表示本次客户端发出的请求是本次session通信的第一次请求。注:不过并不表示客户端浏览器窗口是新打开的。例:在前面我们接触过一个站点计数器,但那个计数存在一个缺陷,刷新当前窗口时计数器的值会增加,这是不合理的。现在用session.isNew()来修订这个缺陷,防止刷新窗口时计数值增加。原理是:isNew()方法返回true值时,表示这是一次新的访问,此时允许计数器加1计数。则代码修改:4.5session隐含对象2、publicjava.lang.StringgetId()作用:返回当前session对象的ID号例:通过session对象的ID号理解JSP服务器识别session客户端的方法。操作步骤如下:(1)新建JSP文件,在<body></body>中输入以下代码:(2)启动Tomcat,打开两个IE浏览器窗口,浏览器上显示的一串字符串就是随机生成的sessionID号,两个浏览器窗口中显示的ID号均不相同。说明在不同的浏览器窗口表示不同的客户端。4.5session隐含对象3、publiclonggetLastAccessedTime()作用:返回客户端最后一次请求的发送时间。返回值是一个long型的整数,单位毫秒,是从格林威治时间1970-1-100:00:00到当前所经历的毫秒数。例:以下代码取得session通信中最后一次请求时间:4.5session隐含对象4、publicvoidinvalidate()使当前session无效,session作用范围变量也会随之丢失。5、publicvoidsetMaxInactiveInterval(intinterval)形参是一个整数,定义session对象的超时时间,单位秒。作用:如果客户端从最后一次请求开始,在连续的interval秒内一直没有再向服务器发送HTTP请求,则服务器认为session超时,将删除本次的session对象。注:如果超时时间为负数,表示永不超时。4.5session隐含对象6、publicintgetMaxInactiveInterval()读取当前的session超时时间,单位秒。7、publicvoidsetAttribute(java.lang.Stringname,java.lang.Objectvalue)定义session作用范围变量,第一个形参name是session作用范围变量名,第二个形参value是session属性。如果value为null,则表示取消session属性和session的绑定关系。4.5session隐含对象8、publicjava.lang.ObjectgetAttribute(java.lang.Stringname)读取一个session作用范围变量,返回一个Object类型的对象,如果找不到指定名字的数据对象,则返回null。返回值需要进行强制类型转换,才能参与数据处理。4.5session隐含对象9、publicjava.util.EnumerationgetAttributeNames()将当前合法的所有session作用范围变量名读到一个枚举型对象中。10、publicvoidremoveAttribute(java.lang.Stringname)解除指定名字的数据对象与session的绑定关系,即删除一个指定名字的session属性。4.5session隐含对象例:用session保存前例

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论