




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JSP作为Web组件,为和Web容器和其他Web组件进行通信和协作,提供了内置的与HTTP请求和相应相关的对象,方便与其他Web组件协作和信息共享。这些对象不需要定义和引用,在JSP脚本和表达式脚本中可以直接使用。JSP提供了9种内置对象,分别与Servlet API中的类和接口对应,分别包括: out:输出对象;exception:异常对象; request:请求对象;response:响应对象; session:会话对象; config:配置对象,读取web.xml配置信息 application:应用服务器对象; page:JSP本身页面类对象; pageContext:页面级环境变量作
2、为页面级容器概念:概念:outout是是JSPJSP页面向浏览器发出响应流页面向浏览器发出响应流PrintWriterPrintWriter的实例对象,通过相应方法向浏览器发出文本的实例对象,通过相应方法向浏览器发出文本响应。响应。一、输出信息的方法一、输出信息的方法1 1、print()print()和和println()println():用于打印输出信息,被打印的:用于打印输出信息,被打印的信息可以是基本数据类型信息可以是基本数据类型( (如如intint等等) ),也可以是对,也可以是对象象( (如字符串等如字符串等) )。两者的区别在于输出的信息在返回客户端的源两者的区别在于输出的信
3、息在返回客户端的源代码中是否换行。代码中是否换行。注:思考一下使用浏览器查看两种浏览方式时是否会出现换行。即使使用println()进行输出在浏览器中也不会换行显示信息,要实现这个功能,必须使用换行符,如“”。 % out.print(123); out.print(); out.print(456); %预览后,IE浏览器中显示的内容为:服务器返回的HTML代码为:123456 1234562、newLine()newLine()表示输出一个回车换行符,例如: 服务器返回的HTML代码为: 123456二、 缓冲区相关的方法 1、flush( )方法flush()用于刷新流,在Java中I/
4、O操作被转化为流操作。out.write()输出的信息会被暂存在流对象缓冲区中,刷新操作把缓冲区中的信息传递给目标对象处理。如果目标对象是另外一个字符流或字节流,同样也刷新它。所以,调用flush()方法会导致刷新所有输出流对象链中的缓冲区。如果缓冲区满了,这个方法被自动调用,输出缓冲区中的信息。 注:在流关闭时调用print()或flush()会引发一个IOException异常,例如:在Tomcat命令行窗口中显示“警告: Internal error flushing the buffer in release()”的异常信息。 2 2、clear()clear()方法方法clear()
5、表示清除缓冲区中的信息。如果缓冲区是空的,执行此方法会引发IOException异常。3 3、clearBuffer()clearBuffer()clearBuffer()的功能与clear()相似,它将输出缓冲区清除后返回,与clear()不同的是它不抛出异常。 4 4、getBufferSize()getBufferSize()getBufferSize()返回输出缓冲区的大小,单位字节,如果没有缓冲区,则返回0。5 5、getRemaining()getRemaining()getRemaining()返回缓冲区剩余的空闲空间,单位字节。6 6、isAutoFlush()isAutoFl
6、ush()isAutoFlush()返回一个真假值,用于标示缓冲区是否自动刷新。预览后,显示的信息为:缓冲区总容量=8192缓冲区空闭容量=7883缓冲区是否自动刷新=true% out.print(缓冲区总容量=+out.getBufferSize()+); out.print(缓冲区空闭容量=+out.getRemaining()+); out.print(缓冲区是否自动刷新=+out.isAutoFlush(); %Web工作模式 请求-响应模式。 客户端(浏览器)向服务器发出HTTP请求。 在HTTP请求中包含传递到服务器的数据。 Web服务器接收到请求,对请求进行处理 Web服务器通
7、过HTTP向客户端发送响应。 客户端接收到响应后,进行显示或跳转。HTTP请求中包含的信息: 请求头(Request Header):指示客户端信息和请求体信息。 请求头功能:向服务器指示客户端和请求体的基本信息,便于服务器采用不同的处理。请求头包含的主要信息: - 请求的协议。 - 浏览器使用的语言。 - 浏览器字符编码。 - 请求数据的大小(content-length). - Cookie头标记说明包含的值例子User-Agent客户端的类型,即浏览器名称LII-Cello/1.0 libwww/2.5Accept浏览器可接受的MIME类型各种标准的MIME类型Accept-Charse
8、t浏览器支持的字符编码字符编码,如ISO-8859-1Accept-Encoding浏览器知道如何解码的数据编码类型x-compress; x-zipAccept-Language浏览器指定的语言如en:EnglishConnection是否使用持续连接Keep-Alive:持续连接Content-Length使用POST方法提交时,传递数据的字节数Cookie保存的Cookie对象Host主机和端口)包含具体的向服务器提交的数据,服务器可以取得客户提交的数据。类型: - 文本类型: 1)GET请求 2)不包含文件的POST请求 - 二进制类型: 1)包含文件的POST请求。请求对象的类型:
9、javax.servlet.http.HttpServletRequest请求对象的功能: - 取得客户端请求头信息,即客户端信息 - 取得客户端请求体信息,即客户提交的数据 - 传递不同请求之间的共享信息(只能使用在转发情况)。请求对象的生成: (1)请求对象在Web容器接收到HTTP请求后自动创建。 (2)Web容器将请求头和请求体信息写入到请求对象中。 (3) Web容器将请求对象传递给Servlet对象的doGet()或doPost()方法。 (4) Servlet可以通过请求对象取得客户提交的数据请求对象的销毁: 当Web响应HTTP请求结束后,请求对象自动销毁,被垃圾收集器收集,释
10、放所占的内存。一、一、 用用requestrequest读取客户端传递来的参数读取客户端传递来的参数客户端向服务器传递参数最常见的方法: 表单数据 附在URL中的查询串(query string)参数,也就是URL“?”后面的参数:http:/localhost/exam.jsp?name=tomcat 1 1、用、用requestrequest读取单值参数读取单值参数单值参数:一个变量最多有一个值。读取方法:request对象的getParameter()方法读取指定变量名的参数值,方法的定义:方法的形参是参数的变量名,以String形式返回变量的值。如果request对象中没有指定的变量,
11、则返回null。 public java.lang.String getParameter(java.lang.String name)request.getParameter(“”)缺陷:读取表单传来的参数时,参数变量名是以硬编码形式嵌在代码中,缺乏灵活性。getParameterNames()能返回request对象中的参数变量名,并保存在枚举类型中,定义方法:public java.util.Enumeration getParameterNames()2 2、用、用requestrequest读取多值参数读取多值参数多值参数的典型代表是表单复选框,例如在一般网多值参数的典型代表是表单复
12、选框,例如在一般网站会员注册信息表单中如果有站会员注册信息表单中如果有“爱好爱好”项,那么用项,那么用户是可以选定多个爱好的。户是可以选定多个爱好的。在服务器端读取多值参数,要用到在服务器端读取多值参数,要用到request.getParameterValues()request.getParameterValues(),定义:定义:形参为多值参数的变量名,多个参数值返回后存储在一个字符串数组中。public java.lang.String getParameterValues(java.lang.String name)作用范围变量: 在JSP中包括request、page、session
13、和application等几种作用范围变量, 他们是将由属性名和属性值构成的“name=value”属性值对象与某个有生命周期的JSP隐含对象相绑定, 使属性值对象有一定的生命周期,或者说使属性值对象在一定的作用范围内有效。定义方法:调用隐含对象的setAttribute()方法读取方法:调用隐含对象的getAttribute()方法 二、二、 request request作用范围变量作用范围变量概念:也叫request属性,用来在服务器端的两个JSP/Servlet程序间交换数据。Servlet程序A要把数据对象传递给Servlet程序B时的工作过程为: 程序A调用request.setA
14、ttribute() 把数据写入request作用范围, 再通过request转发跳转到程序B,将A的request对象被转发给B, 在程序B中通过request.getAttribute()读取数据对象。1 1、setAttribute()/getAttribute()setAttribute()/getAttribute()方法方法request.setAttribute()用于把一个属性对象按指定的名字写入request作用范围,语法为:第一个形参是作用范围变量名,名字要唯一,第二个形参是属性值对象。public void setAttribute(java.lang.String na
15、me, java.lang.Object o) request.getAttribute()从request作用范围读出指定名字的属性对象,它的语法为:形参是属性值对象的变量名,方法返回的对象是Object类型,一般要进行强制类型转换,还原属性值对象的原本数据类型。例如: public java.lang.Object getAttribute(java.lang.String name) 2 2、getRequestDispatcher()getRequestDispatcher()转发跳转转发跳转request转发器(RequestDispatcher)的作用:获得目标资源的转发器,通过转
16、发器将当前Servlet程序的request和response对象转发给目标Servlet资源,跳转至目标资源上运行程序,目标资源再通过request对象读取上一资源传递给它的request属性。request. getRequestDispatcher()的作用是返回目标资源的RequestDispatcher对象,语法为: 形参是当前Web应用目标资源的URI,可以使用相对路径或绝对路径。public requestDispatcher getRequestDispatcher(java.lang.String path)RequestDispatcher中主要的方法有:public vo
17、id forward(ServletRequest request, ServletResponse response) throws ServletException,java.io.IOException形参是当前Servlet程序的request和response 隐含对象。该方法能够把当前Servlet程序的request和response隐含对象转发给目标资源,并跳转至目标资源运行代码。public void include(ServletRequest request, ServletResponse response) throws ServletException,java.i
18、o.IOException形参是当前JSP/Servlet程序的request、response对象。该方法用于包含目标资源,如果目标资源是JSP页面,它会被编译成Servlet程序后再运行。进行包含操作前,允许对当前JSP/Servlet程序的response输出缓冲区进行刷新。 3 3、removeAttribute()removeAttribute()作用:从request作用范围中删除指定名字的属性,它的语法为:参数是属性名。例如:public void removeAttribute(String name)request.removeAttribute(“name”);4 4、se
19、tCharacterEncodingsetCharacterEncoding()()作用:定义request对象中的parameter参数的字符编码标准。例如,parameter参数如果有中文,在读取参数前调用此方法,设置参数的编码标准为GB2312,可以解决以POST方式提交参数的中文乱码问题。三、三、 用用requestrequest读取系统信息读取系统信息1、getProtocol()getProtocol()返回request请求使用的协议及版本号,方法的语法为:例如:public java.lang.String getProtocol()2 2、getRemoteAddr()get
20、RemoteAddr()返回客户端或最后一个客户端代理服务器的IP地址,方法的语法为:例如:预览后显示:。 public java.lang.String getRemoteAddr()3 3、getRemoteHost()getRemoteHost()返回客户端主机名或最后一个客户端代理服务器的主机名,如果主机名读取失败,则返回主机的IP地址。方法的语法为:public java.lang.String getRemoteHost()4 4、getScheme()getScheme()返回当前request对象的构造方案,例如http、https和ftp等,不同的构造方案有
21、不同的URL构造规则。例如:预览后显示:http。5、getQueryString()getQueryString()返回URL的查询字串,即URL中“?”后面的“name=value”对。例如,客户端请求的URL为:目标资源untiltled.jsp中有以下代码:预览后显示:dd=22&ff=2。:8080/untitled.jsp?dd=22&ff=26、getReuquestURI()getReuquestURI()返回URL请求中目标资源的URI。例如,有以下的HTTP请求:目标资源untitled.jsp中有如下的代码:预览后显示:/un
22、titled.jsp。:8080/untitled.jsp?dd=22&ff=27 7、getMethod()getMethod()返回request请求的提交方式,如:GET、POST等。8 8、getServletPath()getServletPath()返回调用Servlet程序的URL请求,例如,对于:目标资源untitled.jsp中有如下的代码: out.print(request.getServletPath(); out.print(request.getServletPath();预览后显示:/untitled.jsp。http:/12
23、:8080/untitled.jsp9、getRealPathgetRealPath()()返回虚拟路径在服务器上的真实绝对路径,例如,对于:目标资源untitled.jsp中有如下的代码:预览后显示:C:tomcatwebappsROOTuntitled.jsp。:8080/untitled.jsp四、四、 用用requestrequest读取读取HTTPHTTP请求报头信息请求报头信息客户端浏览器向服务器请求资源的过程一般分为三步来完成:第一步:发出请求。浏览器通过HTTP协议向服务器提交请求,例如::8080/ex
24、am.jsp第二步:HTTP报头信息交换。 JSP服务器接收到客户端的资源请求后,判断请求是否合法,如果请求有效,则进行报头信息交换。 客户机用HTTP协议向服务器传递的报头信息叫HTTP请求报头, 服务器给客户机返回的报头信息叫HTTP响应报头。第三步:信息传输 例如把JSP页面的输出信息从服务器上传回浏览器,或把客户机上的文件上传到服务器。在JSP中要读取HTTP请求报头中的信息,可以使用getHeaderNames()和getHeader()等方法。1、getHeader()getHeader()返回指定的HTTP报头信息,语法为:该方法的形参为报头名字 public java.lang
25、.String getHeader(java.lang.String name)3 3、getHeaderNames()getHeaderNames()返回HTTP报头的名字,名字存储在一个枚举型对象中。以下代码读出HTTP请求报头中的信息:程序段的运行结果类似于: 五、五、 用用requestrequest读取读取cookiecookieCookie,或称Cookies,在Web技术中指Web 服务器暂存在客户端浏览器内存或硬盘文件中的少量数据。作用:Web服务器通过HTTP报头来获得客户端中的cookie信息。Cookie信息的基本结构:类似于“name=value”对,每个数据有一个变量
26、名。Cookie信息的有效期: 有效期短的直接存于IE浏览器内存中,关闭浏览器后,这些cookie信息也就丢失。 有效期长的信息存储在硬盘文件上。保存位置:所有曾经访问过的网站的cookie文件(*.txt) 保存在XP内 “C:Documents and SettingsadminCookies”文件夹中。在JSP中使用cookie的基本过程为: 在服务器端生成cookie对象,把待保存信息写入cookie对象中; 必要时设置cookie对象的生命期; 把cookie对象传给客户端浏览器保存; 服务器端程序需要cookie信息时,用代码读取cookie信息。1 1、CookieCookie类
27、类javax.servlet.http.Cookie类用来生成一个cookie 对象,构造方法: 第一个形参是cookie数据的变量名,第二个形参是待保存的数据,字符串类型。Cookie(java.lang.String name, java.lang.String value)public void setMaxAge(int expiry) 这个方法定义cookie对象的生命期,形参是生命时间数,单位秒,默认值为-1。 如果生命周期为负整数,表示这个cookie对象是临时的,不要保存在硬盘文件中,关闭IE浏览器后cookie数据自动丢失。 如果生命期为零,表示删除这个cookie。 Coo
28、kie的生命期定义要在cookie对象传回客户端前进行。 public int getMaxAge()方法读取生命时间。 public void setSecure(boolean flag) 形参取值true时,表示用https或SSL安全协议将cookie传回服务器; 取false时表示用当前默认的协议传回cookie。public java.lang.String getName() 返回当前cookie对象的变量名。public java.lang.String getValue() 返回当前cookie对象的值。2 2、将、将cookiecookie对象传回客户端对象传回客户端将co
29、okie对象传回客户端,要用到另外一个JSP隐含对象response,用到的方法为:形参是待保存的cookie对象。例如: public void addCookie(Cookie cookie)第1行: 3、读取读取cookiecookie对象对象读取客户端存储的cookie,用request对象的getCookies()方法,它的语法为:返回的是一个cookie对象数组,当前浏览器中所有有效的cookie会通过HTTP请求报头返回给服务器,每个数组分量是一个返回的cookie对象。如果客户端没有有效的cookie,则返回null值。public Cookie getCookies()例:定
30、义一个cookie对象,存储用户的登录名,生命期为30天,在另一个页面中查询这个cookie,如果读取的cookie不为空,则显示用户登录名,否则显示“没有登录”信息。再定义一个cookie对象,记录客户最近浏览过的五本图书的书号:AB001、KC981、DE345、RD332和PC667,如果已经登录,则显示书号,cookie生命期为30天。 您已经登录,用户名=John您最近浏览过的图书书号是:AB001,KC981,DE345, RD332,PC667一、一、 输出缓冲区与响应提交输出缓冲区与响应提交输出缓冲区用于暂存Servlet程序的输出信息,减少服务器与客户端的网络通信次数。传送给
31、客户端的信息称之为响应信息(response),如果输出缓冲区中的响应信息已经传递给客户端,称响应是已经提交的(response committed)。刷新操作强制把输出缓冲区中的内容传送回客户端。responseresponse对象中和输出缓冲区相关的方法有:对象中和输出缓冲区相关的方法有:1 1、public void flushBuffer() throws public void flushBuffer() throws java.io.IOExceptionjava.io.IOException刷新输出缓冲区,把信息传回客户端。2 2、public void setBufferSiz
32、e(int size)public void setBufferSize(int size)定义输出缓冲区的大小,单位字节。3 3、public boolean isCommitted()public boolean isCommitted()返回缓冲区中的响应信息是否已经提交。预览的结果为: 二、二、 HTTP HTTP响应报头设置响应报头设置服务器通过HTTP响应报头向客户端浏览器传送通信信息。默认情况下,响应信息是以字符形式传送。1 1、public void public void setContentTypesetContentType( (java.lang.Stringjava.
33、lang.String type) type) 定义返回客户端的信息类型及编码标准,常用的是“text/html;charset=UTF-8”。JSP: ,JSP页面生成Servlet程序后,在_jspService()方法中产生相应代码:response.setContentType(text/html; charset=gb2312);2 2、public void public void setCharacterEncoding(java.lang.String charset)setCharacterEncoding(java.lang.String charset)定义返回客户端信息
34、的编码标准。如果已经用response.setContentType()定义字符集,则调用此方法将重新设置字符集。注:信息字符集的定义要在缓冲区刷新前进行。3 3、public void sendError(int sc) throws public void sendError(int sc) throws java.io.IOExceptionjava.io.IOException向客户端返回HTTP响应码并清空输出缓冲区。HTTP响应码由三位的十进制数构成:1xx:请求收到,继续处理。2xx:成功,行为被成功地接受、理解和接受。3xx:重定向,为了完成请求,必须进一步执行的动作。4xx:
35、客户端错误。5xx:服务器出错。例如在IE浏览器地址栏中输入::8080/aabb.jsp,企图访问Tomcat服务器中不存在的资源aabb.jsp,则Tomcat会给客户端返回一个HTTP响应码404,在IE浏览器上显示HTTP响应码及错误信息。如果要人为地返回HTTP响应码,则调用sendError(int sc)方法,如: 预览后,在IE浏览器中显示404状态码信息。 如果要自定义响应码的返回信息,则调用方法: public void sendError(int sc,java.lang.String msg) throws java.io.IOExcept
36、ion 第一个形参是响应码,第二个形参是响应码的信息。如: 预览后,在IE浏览器上看到的信息为:如果希望出现某个响应码时,服务器自动转至某页面显示信息,需要在Web应用中的WEB-INFweb.xml部署文件中作出定义。例如,当出现404错误码时,转至错误处理页面显示错误信息,在web.xml的标记内添加一项部署信息如下示: 4 4、public void setHeader(java.lang.String name , public void setHeader(java.lang.String name , java.lang.String value)java.lang.String
37、value)第一个形参为报头名,第二个形参是报头值。关于HTTP报头的定义请参考RFC 2047(/rfc/rfc2047.txt)。HTTP报头中有一个名为“Refresh”的响应报头,它的作用是使IE浏览器在若干秒后自动刷新当前网页或跳转至指定的URL资源。 这个报头的语法为:response.setHeader(“Refresh”,”定时秒数;url=目标资源的URL”)方法的第一个形参是响应报头名“Refresh”,第二个形参由两部分组成: 第一部分定义秒数,即:若干秒后自动刷新, 第二部分为目标资源的URL,缺省时默认刷新当前页面。 例如: 如果要
38、实现若干秒后自动跳转至目标页,代码如:三、三、 用用responseresponse实现实现JSPJSP页面重定向页面重定向作用:重定向是作用:重定向是JSPJSP中实现程序跳转至目标资源的方法中实现程序跳转至目标资源的方法之一。之一。基本思想:服务器将目标资源完整的基本思想:服务器将目标资源完整的URLURL通过通过HTTPHTTP响响应报头发送给客户端浏览器,浏览器接收到应报头发送给客户端浏览器,浏览器接收到URLURL后更后更新至地址栏中,并将目标资源的新至地址栏中,并将目标资源的URLURL提交给服务器。提交给服务器。缺点:会有一定网络时延缺点:会有一定网络时延实现JSP页面跳转的主要
39、方法有: RequestDispatcher.forward() 转发跳转,response.sendRedirect() 重定向跳转。 两种跳转区别:(1)客户端浏览器地址栏变化: 重定向是通过客户端重新发送URL来实现,会导致浏览器地址更新; 而转发跳转是直接在服务器端切换程序,目标资源的URL不出现在浏览器的地址栏中。 (2)request和response资源共享区别 转发能够把当前JSP页面中的request、response对象转发给目标资源; 重定向会导致当前JSP页面的request、response对象生命期结束,在目标资源中无法取得上一个JSP页面的request对象;(3
40、)网络时延 转发跳转直接在服务器端进行,基本上没有网络传输时延, 重定向有网络传输时延。 如果要实现服务器中两个Servlet程序间跳转,并且要使用request作用范围变量交换数据,应该优先使用requestrequest转发跳转转发跳转。用重定向实现程序跳转时,如果要求传递数据给目标资源,一个简单、可行的方法是把数据编码在URL查询串中,例如::8080/exam.jsp?name=tom。 用response实现重定向,调用的方法:public void sendRedirect(java.lang.String location)throws java.i
41、o.IOException形参是目标资源的URL,可以是相对路径或绝对路径。例如: 一、一、 application application作用范围变量作用范围变量application作用范围变量能够被Web应用中的所有程序共享。application对象提供的存储方法有:public java.util.Enumeration getAttributeNames ()返回当前上下文中所有可用的返回当前上下文中所有可用的appliactionappliaction作用范围作用范围变量名,并存储在枚举型对象中。变量名,并存储在枚举型对象中。2 2、public java.lang.Object
42、 public java.lang.Object getAttribute(java.lang.String name)getAttribute(java.lang.String name)从从applicationapplication作用范围中读取指定名字的属性值。作用范围中读取指定名字的属性值。返回的属性值为返回的属性值为ObjectObject类型,类型, 取到的属性值一般要进行强制类型转换,还原其原本数据类型。 如果指定的属性值对象不存在,则返回null。以下代码段是遍历当前Web应用中所有的application 属性: 3 3、public void setAttribute(j
43、ava.lang.String public void setAttribute(java.lang.String name, java.lang.Object object)name, java.lang.Object object)作用:把一个属性写入application作用范围。参数:第一个形参name是属性名,第二个形参object是属性值,它是一个Java对象。如果属性值object为null,则相当于删除一个名为name的属性。如果容器中已存在指定名字的属性,写入操作会用当前的属性值替换原有的属性值。4 4、public void removeAttribute(java.lan
44、g.String public void removeAttribute(java.lang.String name)name)作用:从Servlet容器中删除指定名字的属性。形参是字符串形式的属性名。例:用application实现一个简单的站点计数器,当访问JSP页面时,页面进行访问次数统计,并打印当前计数值。操作步骤如下:(1)新建JSP文件,使其完成application作用范围变量的写入和读取,(2)启动Tomcat,预览该文件,出现访问计数值。当再次打开另一个浏览器窗口预览该页面时,会发现计数器增加。(3)重启Tomcat,再访问jsp,发现计数从1开始计数。原因:applicat
45、ion属性是存储在Servlet容器中,关闭Tomcat会导致application属性丢失,所以计数器重新计数。二、二、 application application的其它应用的其它应用1 1、取得目标资源的、取得目标资源的RequestDispatcherRequestDispatcher对象对象语法为:语法为:public RequestDispatcher public RequestDispatcher getRequestDispatchergetRequestDispatcher (java.lang.String path) (java.lang.String path)形参
46、是目标资源的URI,要以“/”开头,为绝对路径。如果无法取得RequestDispatcher对象则返回null。2 2、public java.lang.String public java.lang.String getMimeType(java.lang.String file)getMimeType(java.lang.String file)返回指定文件的MIME-type,这些MIME-type由Servlet容器定义,如果文件的MIME-type未知,则返回null。例:在ROOT文件夹下分别建立三个名为d.doc、d.xls、d.zip的空文件,用以下代码查询文件的MIME-t
47、ype:预览后运行结果为:3 3、public java.lang.String public java.lang.String getRealPath(java.lang.String path)getRealPath(java.lang.String path)返回虚拟目录对应的真实绝对路径,例如:运行结果为“tomcatwebappsJSP”。session是指一个终端用户与后台某交互式系统进行通信的时间间隔。session通信周期:通常把从登录进入系统到注销退出系统之间所经历的时间。 如何把一个操作步中产生的有用信息保存下来并进行标识后供后续的操作步使用称之为session跟踪(Ses
48、sion Tracking)问题。 一、一、 用用URLURL重写实现重写实现sessionsession跟踪跟踪URL重写(URL Rewriting)就是把session数据编码成“name=value”对,当作URL的查询串附在URL后,用带有查询串的URL访问下一个目标资源时,附在URL查询串中的session数据自然被传送给下一页。 例如,当前的a.jsp页面中程序产生了一个session数据“status=90”,现要重定向至:8080/k.jsp,并且k.jsp要用到“status=90”这个session数据,则新的URL为:http:/127.0
49、.0.1:8080/k.jsp?status=90在a.jsp中产生此URL的代码为:例:写一个简单的登录页面,效果如图示。(1)新建JSP文件(2)设计如上图所示的表单,用户名文本域的名字为“userName”,口令文本域的名字为“pw”,类型取值为“密码”,整个表单提交给自己。(3)在标记前一行录入如下代码,实现登录验证和重定向 (4)再新建一个JSP文件,在标记中录入以下代码,实现session信息的读取与验证,并动态生成十个超链接。(5)启动Tomcat,预览第一个页面,输入几个非法用户名或口令,均无法成功登录,输入合法数据后后,登录成功,并转至第二个页面。在其中,单击10个超链接,发
50、现URL上均带有两个session数据。二、二、 用用cookiecookie实现实现sessionsession跟踪跟踪用cookie实现session跟踪的基本原理是:把一个session数据封装在一个cookie对象中,将cookie对象传回客户端存储,需要用到时用代码从客户端读回。 例:题目同前例,此处要求用cookie保存用户成功登录的session数据“name=tom”。只需要修改两个页面中的代码即可。(1)对第一个jsp页面,只需要修改它的JSP代码(2) 对第二个jsp:三、三、 用隐藏表单域实现用隐藏表单域实现sessionsession跟踪跟踪隐藏表单域在页面上不可视,它
51、相当于一个变量, 如果把一个session数据存储在其中,则提交表单时,隐藏表单域中的数据也会被提交给服务器。例:设计一个JSP页面实现猜数游戏,如下图示,首次启动页面时会产生一个0100间的整数让用户猜。用户在表单中输入数据,提交后页面判断是否正确,如果猜小了或猜大了则给出提示,如果猜中,则显示目标数据和用户输入的数据。页面还显示用户总共猜了多少次。操作步骤如下:(1)新建JSP文件。(2)切换到代码视图,找到标记,在它前面输入如下代码:(3)启动Tomcat,预览本页,出现了前图中的猜数游戏,实现了用隐藏表单域保存session数据。注:隐藏域有一定的安全缺陷,例如运行该页面,通过IE浏览
52、器的菜单【查看】【源文件】,可查看到隐藏表单域的HTML代码及其取值。四、四、 session session作用范围变量与作用范围变量与sessionsession跟踪跟踪session隐含对象由Web服务器创建,并存储在服务器端,功能强大,实现session跟踪最直接的方法。在后续的学习中,提到“session”时,如果不特别说明,就是指session对象。session作用范围变量也叫session属性。 1 1、public public booleanboolean isNewisNew() ()作用:判断session对象是新创建的,还是已经存在。返回true时,表示session
53、对象是刚创建的,也表示本次客户端发出的请求是本次session通信的第一次请求。注:不过并不表示客户端浏览器窗口是新打开的 。例:在前面我们接触过一个站点计数器,但那个计数存在一个缺陷,刷新当前窗口时计数器的值会增加,这是不合理的。现在用session.isNew()来修订这个缺陷,防止刷新窗口时计数值增加。原理是:isNew()方法返回true值时,表示这是一次新的访问,此时允许计数器加1计数。则代码修改:2 2、public java.lang.String getId()public java.lang.String getId()作用:返回当前session对象的ID号例:通过sess
54、ion对象的ID号理解JSP服务器识别session客户端的方法。操作步骤如下:(1)新建JSP文件,在中输入以下代码:(2)启动Tomcat,打开两个IE浏览器窗口,浏览器上显示的一串字符串就是随机生成的session ID号,两个浏览器窗口中显示的ID号均不相同。说明在不同的浏览器窗口表示不同的客户端。3 3、public long getLastAccessedTime()public long getLastAccessedTime()作用:返回客户端最后一次请求的发送时间。返回值是一个long型的整数,单位毫秒,是从格林威治时间1970-1-1 00:00:00到当前所经历的毫秒数。
55、例:以下代码取得session通信中最后一次请求时间:4 4、public void invalidate()public void invalidate()使当前session无效,session作用范围变量也会随之丢失。5 5、public void setMaxInactiveInterval(int interval)public void setMaxInactiveInterval(int interval)形参是一个整数,定义session对象的超时时间,单位秒。作用:如果客户端从最后一次请求开始,在连续的interval秒内一直没有再向服务器发送HTTP请求,则服务器认为ses
56、sion超时,将删除本次的session对象。注:如果超时时间为负数,表示永不超时。6 6、public int getMaxInactiveInterval()public int getMaxInactiveInterval()读取当前的session超时时间,单位秒。7 7、public void setAttribute(java.lang.String public void setAttribute(java.lang.String name,java.lang.Object value)name,java.lang.Object value)定义session作用范围变量,第一个
57、形参name是session作用范围变量名,第二个形参value是session属性。如果value为null,则表示取消session属性和session的绑定关系。 8 8、public java.lang.Object public java.lang.Object getAttribute(java.lang.String name)getAttribute(java.lang.String name)读取一个session作用范围变量,返回一个Object类型的对象,如果找不到指定名字的数据对象,则返回null。返回值需要进行强制类型转换,才能参与数据处理。9 9、public ja
58、va.util.Enumeration getAttributeNames()public java.util.Enumeration getAttributeNames()将当前合法的所有session作用范围变量名读到一个枚举型对象中。1010、public void removeAttribute(java.lang.String public void removeAttribute(java.lang.String name)name)解除指定名字的数据对象与session的绑定关系,即删除一个指定名字的session属性。例:用session保存前例中登录成功时的登陆信息。操作步骤如下:(1)修改第一个页面中的代码,如下: (2)修改第二个页面中的代码如下:1111、sessionsession失效失效 session对象是有生命期的,生命期结束,则session对象被删除,与之绑定的session作用范围变量也随之丢失。影响session对象生命期的主要因素有:用户主动结束session,客户端浏览器窗口关闭。程序调用session.invalidate()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年平凉职业技术学院高职单招高职单招英语2016-2024历年频考点试题含答案解析
- 2025年安徽粮食工程职业学院高职单招(数学)历年真题考点含答案解析
- 2025年安徽中澳科技职业学院高职单招职业适应性测试历年(2019-2024年)真题考点试卷含答案解析
- 2025年天津滨海汽车工程职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- GMP基础知识课件
- 737机型培训课件
- 【名校密卷】人教版数学四年级下册期中测试卷(一)及答案
- 苏州工业职业技术学院《广告与数字营销》2023-2024学年第二学期期末试卷
- 平顶山职业技术学院《消防管理学》2023-2024学年第二学期期末试卷
- 上海电力大学《第二外语(三)(法)》2023-2024学年第二学期期末试卷
- 2025年河北省保定市徐水区中考一模语文试题(原卷版+解析版)
- 贸易术语及应用及试题及答案
- 淘宝网店转让合同范本
- 新疆维吾尔自治区普通高职(专科)单招政策解读与报名课件
- 我译网面试题及答案
- 合伙经营机械合同范本
- 中国急性缺血性卒中诊治指南(2023)解读
- 2025年四川省成都高新区管委会员额制人才招聘80人历年高频重点模拟试卷提升(共500题附带答案详解)
- 2025年湖北华中科技大学招聘实验技术人员52名历年高频重点提升(共500题)附带答案详解
- 2024年郑州工业安全职业学院单招职业技能测试题库标准卷
- 2025年北京市公园管理中心直属事业单位招聘270人历年高频重点提升(共500题)附带答案详解
评论
0/150
提交评论