第三章Servlet编程.ppt

上传人:本田雅阁 文档编号:3504224 上传时间:2019-09-04 格式:PPT 页数:84 大小:2.83MB
返回 下载 相关 举报
第三章Servlet编程.ppt_第1页
第1页 / 共84页
第三章Servlet编程.ppt_第2页
第2页 / 共84页
第三章Servlet编程.ppt_第3页
第3页 / 共84页
第三章Servlet编程.ppt_第4页
第4页 / 共84页
第三章Servlet编程.ppt_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《第三章Servlet编程.ppt》由会员分享,可在线阅读,更多相关《第三章Servlet编程.ppt(84页珍藏版)》请在三一文库上搜索。

1、第三章 Servlet 编程,华北电力大学控制与计算机工程学院 主 讲:赵 强 Mobile: 13611310168 Email: ,2019年9月4日星期三,第三章 Servlet编程,2,本章主要内容,Servlet 基础知识 Servlet 编程基本技能 Servlet 编程高级技能 Servlet Filter 原理和编程方法,2019年9月4日星期三,第三章 Servlet编程,3,一、Servlet 基础知识,1.1 什么是Servlet Servlet是运行在服务器端,用来响应客户端请求,生成动态Web页面的一个J2EE组件,是能够使用print语句产生动态HTML内容的Jav

2、a类,它符合Java类的一般规则。Servlet在javax.servlet(基本的Servlet框架)和javax.servlet.http(为Servlet响应HTTP请求的Servlet框架的扩展)包中作为Java的标准扩展类使用。 在Servlet API中提供了大量的方法,可以在Servlet中调用。,2019年9月4日星期三,第三章 Servlet编程,4,Servlet是位于Web服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。 Servlet是CG

3、I(Common Gateway Interace,即:公共网关接口)脚本的一种替代技术,由于Servlet在性能、可移植性、代码重用等方面比CGI具有显著的优势,现在已逐步或已经取代了CGI。,2019年9月4日星期三,第三章 Servlet编程,5,在默认情况下,Servlet采用一种无状态的请求-响应处理方式。Servlet代码的主要作用是为了增强Java服务器端功能。当发出客户端请求的时候,调用service()并传递一个请求和响应对象。Servlet首先判断该请求是GET操作还是POST操作。然后它调用下面的一个方法:doGet或doPost。如果请求是GET就调用doGet方法,如

4、果请求是POST就调用doPost方法。doGet和doPost都接受请求(HttpServletRequest)和响应(HttpServletResponse)。,2019年9月4日星期三,第三章 Servlet编程,6,注意:Servlet不是从命令行启动的,而是由包含Java虚拟机的Web服务器进行加载,在一个容器内运行,并且APIs 提供了对会话和对象的生命周期的管理。,2019年9月4日星期三,第三章 Servlet编程,7,1.2 Servlet与Applet相比较: a) 相似之处: (1)它们不是独立的应用程序,没有main()方法。 (2)它们不是由用户调用,而是由另外一个应

5、用程序(容器)调用。 (3)它们都有一个生存周期,包含init()和destroy()方法。 b) 不同之处: (1)Applet运行在客户端,具有丰富的图形界面。 (2)Servlet运行在服务器端,没有图形界面。,2019年9月4日星期三,第三章 Servlet编程,8,1.3 Servlet工作原理 Servlet运行在Web服务器上的Web容器里。Web容器负责管理Servlet。它装入并初始化Servlet,管理Servlet的多个实例,并充当请求调度器,将客户端的请求传递到Servlet,并将Servlet的响应返回给客户端。Web容器在Servlet的使用期限结束时终结该Serv

6、let。服务器关闭时,Web容器会从内存中卸载和除去Servlet。,2019年9月4日星期三,第三章 Servlet编程,9,多个请求的处理 :为每个请求创建一个新的线程来处理客户端的请求 。,必须注意线程的同步问题!,2019年9月4日星期三,第三章 Servlet编程,10,1.4 Servlet基本工作流程 (1)客户机将请求发送到服务器; (2)服务器上的Web容器实例化(装入)Servlet; (3)Web容器将请求信息发送到 Servlet; (4)Servlet创建一个响应,并将其返回到Web容器; (5)Web容器将响应发回客户机; (6)服务器关闭或Servlet空闲时间超

7、过一定限度时,调用destory()方法退出。,2019年9月4日星期三,第三章 Servlet编程,11,注意:Servlet也可以配置为Web应用程序启动时自动装载。,结论: 客户机与Servlet间没有直接的交互。无论客户机对Servlet的请求还是Servlet对客户端的响应,都是通过Web服务器来实现的,这就大大提高了Servlet组件的可移植性。,2019年9月4日星期三,第三章 Servlet编程,12,1.5 Servlet的生命周期,Servlet的生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求、提供服务。Servlet的生命周期如图:,20

8、19年9月4日星期三,第三章 Servlet编程,13,在编程代码的实现中,Servlet生命周期由接口javax.servlet.Servlet定义,所有的Servlet必须直接或间接的实现javax.servlet.Servlet接口,这样才能在Servlet引擎(Engine)上运行。 Servlet引擎提供网络服务,响应MIME请求,运行Servlet容器。 javax.servlet.Servlet接口定义了一些方法,在Servlet生命周期中,这些方法会在特定的时间上,按一定的顺序被调用。 注: MIME:Multipurpose Internet Mail Extensions,

9、多功能Internet 邮件扩充服务。,2019年9月4日星期三,第三章 Servlet编程,14,Servlet的生命周期主要由3个过程组成。 1)Servlet的初始化:init()被调用于初始化,其格式为: public void init(ServletConfig config) throws ServletException super.init(); 在初始化过程中,Servlet应当准备好它要安排的一些资源,以便这个Servlet能够接收请求,做到这些可以不用考虑多线程,因为在Servlet初始化时只能是单进程的。一旦初始化方法完成,Servlet就能接收客户端的请求。,201

10、9年9月4日星期三,第三章 Servlet编程,15,2)Servlet的执行 service()用于实现事务逻辑,是处理请求的地方。在服务器装载和初始化Servlet后,Servlet就能够处理客户端的请求,一般是使用service()来实现。每个客户端请求有它自己service()。这些方法接收客户端请求,并且发回相应的响应。Servlet组件能够同时运行多个service() 。这样在程序中,service()可以按一个thread编写。如:service()要更新Servlet对象中的一个字段field,这个字段是可以同时存取的。假如某个服务器不能同时并发地运行service(),也可

11、以用SingleThreadModel接口,这个接口保证不会有两个以上的线程(threads)并发运行。在Servlet执行期间其最多的应用是处理客户端的请求并产生一个网页。,2019年9月4日星期三,第三章 Servlet编程,16,3)Servlet的结束 当服务器卸载一个Servlet,它将调用Servlet的destroy()。这个destroy()是与初始化方法的作用相反,同时从内存中释放Servlet。Destroy的格式为: public void destroy() 一个Servlet 在运行service() 方法时可能会产生其它的线程,因此请确认在调用 destroy()

12、时,这些线程都已终止或完成。,2019年9月4日星期三,第三章 Servlet编程,17,1.6 Servlet API编程接口,2019年9月4日星期三,第三章 Servlet编程,18,2019年9月4日星期三,第三章 Servlet编程,19,1)通常编写的Servlet类,一般从Javax包中的HttpServlet类继承而来,在HttpServlet中加入了一些附加的方法,这些方法可以协助处理HTTP基本请求,这些基本请求由HttpServlet类中的方法service()自动地调用。这些方法有: doGet 用来处理HTTP的GET、头部HEAD请求; doPost 用来处理HTT

13、P的POST请求; doPut 用来处理HTTP的PUT请求; doDelete 用来处理HTTP的DELETE请求; doHead 用来处理HTTP的HEAD请求; doOptions 用来处理HTTP的OPTIONS请求; doTrace 用来处理HTTP的TRACE请求。,2019年9月4日星期三,第三章 Servlet编程,20,doGet:用来处理HTTP的GET请求。这个GET操作仅仅允许客户从HTTP server上取得GET资源。重载此方法的用户自动允许支持方法HEAD。这个GET操作被认为是安全的,没有任何的负面影响,对用户来说是很可靠的。 doGet方法格式为: prote

14、cted void doGet(HttpServletResquest request,HttpServletResponse response) throws ServletException,IOException;,2019年9月4日星期三,第三章 Servlet编程,21,doPost:用来处理HTTP的POST请求。这个POST操作包含了在必须通过此Servlet执行的请求中的数据。由于它不能立即取得资源,所以对于那些涉及到安全性的用户来说,通过POST请求操作会有一些副作用。 doPost方法格式为: protected void doPost(HttpServletResques

15、t request,HttpServletResponse response) throws ServletException,IOException;,2019年9月4日星期三,第三章 Servlet编程,22,doPut:用来处理HTTP的PUT请求。此PUT操作模拟通过FTP发送一个文件。对于那些涉及到安全性的用户来说,通过PUT请求操作也会有一些副作用。doPut方法格式为: protected void doPut(HttpServletResquest request,HttpServletResponse response) throws ServletException,IOE

16、xception;,2019年9月4日星期三,第三章 Servlet编程,23,doDelete:用来处理HTTP的DELETE请求。此操作允许客户端请求一个从server移出的URL。对于那些涉及到安全性的用户来说,通过DELETE请求操作会有一些副作用。doDelete方法格式为: protected void doDelete(HttpServletResquest request,HttpServletResponse response) throws ServletException,IOException;,2019年9月4日星期三,第三章 Servlet编程,24,doHead:

17、用来处理HTTP的HEAD请求。缺省地,它会在无条件的GET方法执行时运行,但是不返回任何数据到客户端。只返回包含内容信息的长度的header。由于用到GET操作,此方法应该是很安全的(没有副作用)也是可重复使用的。 doHead方法格式为: protected void doHead(HttpServletResquest request,HttpServletResponse response) throws ServletException,IOException;,2019年9月4日星期三,第三章 Servlet编程,25,doOptions:用来处理HTTP的OPTIONS请求。此操

18、作自动地决定支持什么HTTP方法。比如说,如果读者创建HttpServlet的子类并重载方法doGet,然后方法doOptions会返回下面的header:GET、HEAD、TRACE和OPTIONS。doOptions方法格式为: protected void doOptions(HttpServletResquest request,HttpServletResponse response) throws ServletException,IOException;,2019年9月4日星期三,第三章 Servlet编程,26,doTrace:用来处理HTTP的TRACE请求。此方法的缺省实现

19、产生一个包含所有在trace请求中的header的信息的应答(response)。在开发Servlet时,多数情况下需要重载此方法。doTrace方法格式为: protected void doTrace(HttpServletResquest request,HttpServletResponse response) throws ServletException,IOException;,2019年9月4日星期三,第三章 Servlet编程,27,2)HttpServletRequest HttpServerletRequest被传到service()方法用来提供客户的请求信息。 Http

20、ServerletRequest接口可以获取由客户端传送的阐述名称,也可以获取客户端正在使用的通信协议,也可以获取产生请求并且接收请求的远端主机名和IP地址等一些信息。 HttpServerletRequest接口提供获取数据流的Servlet、ServletInputStream方法,这些数据是客户端引用的POST和PUT方法提交的。一个ServerletRequest的子类可以让Servlet获取更多的协议特性数据。,2019年9月4日星期三,第三章 Servlet编程,28,3)HttpServletResponse HttpServerletResponse用来向客户端发送响应信息。

21、HttpServerletResponse接口给出相应客户端的Servlet方法,它允许Servlet设置内容长度和回应的MIME类型,并且提供输出流的ServletOutputStream。 HttpServerletRequest子类可以给出更多的protocal-specific容量的信息。 4)HttpSession HttpSession接口被Servlet用来实现在HTTP客户端和HTTP会话两者之间的关联。这种关联可能在多处连接和请求中持续一段给定的时间。session用来在无状态的HTTP协议下越过多个请求页面来维持状态和识别用户。 一个session可以通过Cookie或重写

22、URL来维持。,2019年9月4日星期三,第三章 Servlet编程,29,1.7 Servlet应用范围及其缺陷 Servlet用来写应用层是很强大的,但是对于写表示层就很不方便。JSP则主要是为了方便写表示层而设计的,当然也可以写应用层。写惯了ASP、PHP、CGI的同学,经常会不自觉地把表示层和应用层混在一起。比如把数据库处理信息放到JSP中,其实,它应该放在应用层中。JSP中应该仅仅存放与表示层有关的部分,也就是说,只放输出HTML网页的部分。而所有的数据计算、数据分析、数据库连接处理,都属于应用层,应该放在JavaBeans中。通过JSP调用JavaBeans,实现两层的整合。 综上

23、所述,Servlet是一个不完善的产品,写应用层很好,写表示层就逊色多了,并且两层混杂。,2019年9月4日星期三,第三章 Servlet编程,30,2.1 编写响应HTTP请求的Servlet程序的步骤: (1)创建一个扩展了 javax.servlet.http.HttpServlet接口的Servlet类。 (2)重写doGet()或doPost()方法实现对HTTP请求信息的动态响应。 2.2 第一个Servlet的例子 此例演示Servet显示静态信息。,二、Servlet 编程基本技能,2019年9月4日星期三,第三章 Servlet编程,31,在Eclipse环境下的开发方法与步

24、骤: 创建一个J2EE项目: 创建一个Web模块: 为这个Web模块设置目标服务器: 生成并编写Servlet类: 在web.xml中添加相关信息: 启动jBoss服务器并发布Web服务: 启动浏览器,访问该Servlet服务。,2019年9月4日星期三,第三章 Servlet编程,32,2019年9月4日星期三,第三章 Servlet编程,33,程序31:FirstServlet.java package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Serv

25、letException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class FirstServlet extends HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOEx

26、ception /TODO Method stub generated by Lomboz response.setContentType(“text/html“); PrintWriter out = response.getWriter(); out.println(“ + “ + “ + “ “ + “First Servlet“ + “ + “ + “ + “ “ + “ “ +“Hello World!“ + “ + “ “ + “ + “); ,2019年9月4日星期三,第三章 Servlet编程,34,利用Eclipse快速修正错误,2019年9月4日星期三,第三章 Servle

27、t编程,35,Web应用SimpleServlet的配置文件,2019年9月4日星期三,第三章 Servlet编程,36,节点指明Servlet名称与Servlet实现类之间的对应关系; 节点指明Servlet名称与请求URL之间的对应关系; 节点指明请求Web应用程序时的默认的首页; 节点指明Web应用程序发生错误时导向的错误页面。,2019年9月4日星期三,第三章 Servlet编程,37,2019年9月4日星期三,第三章 Servlet编程,38,2019年9月4日星期三,第三章 Servlet编程,39,2.3 处理客户端输入 第二个Servlet的例子,此例是要说明Servlet如何

28、处理客户端的输入并进行动态响应。,2019年9月4日星期三,第三章 Servlet编程,40, 提交表单数据 欢迎登录系统 用户名: ,2019年9月4日星期三,第三章 Servlet编程,41, 密 码: ,2019年9月4日星期三,第三章 Servlet编程,42,处理客户端输入,在Web程序设计中,以表单方式向服务器提交数据是最常见的方法。表单数据的提交方法有两种:Post方法和Get方法,当使用Post方法时,数据由标准的输入设备读入。 当使用Get方法时,数据由CGI变量QUERY_STRING传递给表单数据处理程序,即附加在请求地址的后面,在浏览器的地址栏中可以看到。 用户只要简单

29、的调用HttpServletRequest的getParameter()方法,给出变量名称即可取得该变量的值。需要注意的是,变量的名称是大小写敏感的。当请求的变量不存在时,将会返回一个空字符串。,2019年9月4日星期三,第三章 Servlet编程,43,2019年9月4日星期三,第三章 Servlet编程,44,2019年9月4日星期三,第三章 Servlet编程,45,2.4 发送非HTML文档,随着Internet应用的不断扩展,为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。 Servlets 可以使用 MIME(Multipurpos

30、e Internet Mail Extention,多用途internet邮件扩展协议) 类型来向浏览器传送非 HTML 文件,比如 Adobe PDF 和 Micorsoft Word。使用正确的 MIME 类型能够保证这些非 HTML 文件被正确的插件或外部程序处理显示。 解决方案:需要将 response 对象中header 的 content 类型设置成相应的MIME标志 res.setContentType(“application/pdf”),2019年9月4日星期三,第三章 Servlet编程,46,Servlet配置参数由ServletConfig对象表示。在Servlet被实

31、例化后,ServletConfig对象对任何客户端在任何时候访问都有效,但一个Servlet的ServletConfig对象不能被其他Servlet访问。 在Servlet中要得到ServletConfig对象有两种方法: 在init()方法中获取(通过init的重载方法传递); 通过getServletConfig()方法直接获取。,用途:通过配置信息来初始化Servlet可以有效避免硬编码信息,提高Servlet的可移植性。,2.5 获取Servlet配置参数,2019年9月4日星期三,第三章 Servlet编程,47,三、Servlet 编程高级技能,3.1 会话管理技术 HTTP协议是

32、一种无状态的协议,客户端每次打开一个Web页面,它就会与服务器建立一个新的连接,发送一个新的请求到服务器,服务器处理客户端的请求,返回响应到客户端,并关闭与客户端建立的连接。当客户端发起新的请求,那么它重新与服务器建立连接,因此服务器并不记录关于客户的任何信息。但是对于许多Web 应用而言,服务器往往需要记录特定客户端与服务器之间的一系列请求响应之间的特定信息。例如,一个在线网上商店需要记录在线客户的个人信息、添加到购物车中的商品信息等。,2019年9月4日星期三,第三章 Servlet编程,48,常见会话跟踪技术有: Cookie; URL重写; 隐藏表单域; 安全套接字层(Secure S

33、ocket Layer,SSL)的会话。 Java Servlet API提供了用于会话跟踪和管理会话内状态的机制。 在以上四种方法中,前二种是最常用的。,2019年9月4日星期三,第三章 Servlet编程,49,3.1.1 使用Cookie会话的跟踪技术 Cookie 是一小块可以嵌入到HTTP 请求和响应中的数据。典型情况下,Web 服务器将Cookie 值嵌入到响应的头部,而浏览器则在其以后的请求中都将携带同样的Cookie。Cookie的信息中可以有一部分用来存储会话ID,这个ID 被服务器用来将某些HTTP 请求绑定在会话中。Cookie 由浏览器保存在客户端,通常保存为一个文本文

34、件。Cookie 还含有一些其他属性,诸如可选的注释、版本号及最长生存期。,2019年9月4日星期三,第三章 Servlet编程,50,编程步骤: 1)创建Cookie(由Web服务器创建,但是存放在客户端,保存的是一些键值对。) Cookie cookie = new Cookie(“name“,“value“); 2)将Cookie加到客户端浏览器 HttpServletResponse.addCookie(cookie); 3)在服务器端取出客户端传过来的Cookie(返回Cookie ) HttpServletRequest.getCookies(); Cookie.getName()

35、; Cookie.getValue();,会话Cookie:只在当前会话起作用的Cookie; 持久Cookie:保存在客户本地一段时间的Cookie; 设置Cookie的时长:Cookie.setMaxAge(int timeout),单位是秒; 当timeout0)时,意味着cookie将会在客户端被保存n秒; 当timeout=0时,意味着这个cookie将会被删除; 设置Cookie的有效路径:Cookie.setPath(.),2019年9月4日星期三,第三章 Servlet编程,51,程序说明:HttpServletRequest 对象有一个getCookies()方法,它可以返回

36、当前请求中的Cookie 对象的一个数组。程序首先调用getCookies()方法获得request 对象中的所有Cookie,然后寻找是否存在名为“ServletStudy”的Cookie。如果有,则调用Cookie 对象的getValue()、getName()等方法显示其信息;如果没有,则创建一个新的Cookie 对象,并调用response.addCookie()方法将其加入到response 对象并返回到客户端。以后客户端对服务器的任何访问都会在其头部携带此Cookie。当通过刷新页面来查看Cookie 的信息,可以看到显示的Cookie信息是不变的。,2019年9月4日星期三,第三

37、章 Servlet编程,52,2019年9月4日星期三,第三章 Servlet编程,53,由于同一客户端对服务器的请求都会携带Cookie,因此可以通过在Cookie 中添加与会话相关的信息达到会话跟踪的目的。P51例通过编程来演示如何通过Cookie 实现会话跟踪。 程序说明:程序使用Cookie 来实现会话的跟踪,在本示例中跟踪的是会话中页面的访问次数。程序通过将页面访问的次数写入一个名为“VisitTimes”的Cookie 中。由于对页面的请求每次都包含了这个Cookie,因此通过每次将Cookie 的值取出来显示页面的访问次数,同时又将更新的值写回到Cookie 来达到会话跟踪的目的

38、。,2019年9月4日星期三,第三章 Servlet编程,54,Cookie cookie = null; /获取请求相关的Cookie Cookie cookies = request.getCookies( ); /判断Cookie VisitTimes 是否存在 /如果存在,其值加1 if (cookies != null) for (int i = 0; i cookies.length; i+) if (cookiesi.getName( ).equals(“VisitTimes“) String v=cookiesi.getValue(); int value=Integer.pa

39、rseInt(v)+1; cookiesi.setValue(Integer.toString(value); cookie=cookiesi; /end for /end if,2019年9月4日星期三,第三章 Servlet编程,55,/不存在,创建cookie if (cookie = = null) int maxAge=10000; /Create the Cookie object cookie = new Cookie(“VisitTimes“,“1“); cookie.setPath(request.getContextPath( ); cookie.setMaxAge(max

40、Age); response.addCookie(cookie); /end if,2019年9月4日星期三,第三章 Servlet编程,56,2019年9月4日星期三,第三章 Servlet编程,57,3.1.2 使用URL重写会话跟踪 关于是否应当使用Cookie 有很多的争论,因为一些人认为Cookie 可能会造成对隐私权的侵犯。有鉴于此,大部分浏览器允许关闭Cookie 功能,这使得跟踪会话变得更加困难。如果不能依赖Cookie 的支持,那将不得不使用另外一种会话跟踪方法:URL 重写。 URL 重写通过在URL 地址后面增加一个包含会话信息的字符串来记录会话信息。URL地址与会话信息

41、的字符串之间用“?”隔开。如果有多个参数,参数间用“&”隔开。,P53通过编写一个Servlet 来演示如何利用URL 重写来向服务器端传递会话信息。这里假设客户端向服务器端传递的会话信息是用户的身份信息:姓名和年龄。 程序首先调用response.encodeURL()生成URL 字符串。其中request.getContextPath()用来获取请求上下文路径。URL 字符串包含的会话信息为两个参数:name 和age,其值分别为“张三”和27。,2019年9月4日星期三,第三章 Servlet编程,58,对于利用URL 重写技术传递来会话信息,可以调用request.getParamet

42、er()来获取,就像获取表单提取的参数信息一样。实际上,通过表单向服务器端提交数据就是通过URL 重写的方式。 out.println(“name=“+request.getParameter(“name“); out.println(“age=“+request.getParameter(“age“);,2019年9月4日星期三,第三章 Servlet编程,59,新出现的一种会话功能是SSL(Secure Sockets Layer,安全套接字层)会话,它是HTTPS 协议使用的一种加密技术,内建了会话跟踪功能,Servlet 容器可以非常容易的使用这些数据建立会话跟踪。 但是HTTPS 不

43、是J2EE 规范要求Servlet 容器必须支持的协议。,2019年9月4日星期三,第三章 Servlet编程,60,2019年9月4日星期三,第三章 Servlet编程,61,3.1.3 使用HttpSession 对象跟踪会话 HttpSession 接口允许 Servlet查看和管理关于会话的信息,确保信息持续跨越多个用户连接等。 HttpSession高级接口实际上是建立在 Cookie 和 URL重写这两种会话跟踪技术之上的,只不过由Servlet自动实现了关于会话跟踪的一切,不再需要程序员了解具体细节。 Cookie把会话状态信息保存在客户端,而Session把会话状态信息保存在服

44、务器端。,2019年9月4日星期三,第三章 Servlet编程,62,使用 HttpSession 接口进行程序开发的基本步骤是: (1)获取会话对象 HttpServletRequest.getSession(); (2)对会话对象进行读或写 设置属性:HttpSession.setAttribute(“name“,Object); 获取属性:HttpSession.getAttribute(“name“); 删除属性:HttpSession.removeAttribute(“name“); (3)手工终止会话,或者什么也不做,让它自动终止。每个会话对象都有一定的生存周期,超过这个周期,容器

45、将自动将会话对象中止。,2019年9月4日星期三,第三章 Servlet编程,63,Session什么时候失效? 1:程序中调用HttpSession.invalidate()方法; 2:Session过期,在Session的最大有效时间以外; 3:关闭应用服务器。 设置Session的有效时间: 1:HttpSession.setMaxInactiveIntervale(int second) 单位秒 2:在web.xml中进行配置 . ,2019年9月4日星期三,第三章 Servlet编程,64,编程中经常使用的HttpSession 接口方法有以下几种: isNew()。如果客户机还不知

46、道会话,则返回true。如果客户机已经禁用了Cookie,则会话在每个请求上都是新的。 getId()。返回包含分配给这个会话的唯一标识的字符串。在使用URL 改写以标识会话时比较有用。 setAttribute()。使用指定的名称将对象绑定到这个会话 getAttribute()。返回绑定到此会话的对象(带有指定名称)。 setMaxInactiveInterval()。指定在 Servlet 使该会话无效之前客户机请求间的时间。负的时间表示会话永远不会超时。 invalidate()。终止当前会话,并解开与它绑定的对象。,2019年9月4日星期三,第三章 Servlet编程,65,P57

47、:Servlet 中使用HttpServletRequest 对象的getSession()方法来取得当前的用户会话。GetSession()的参数决定了如果会话尚不存在,是否创建一个新会话。(还有一个版本的getSession()没有任何参数,它将默认地创建一个新会话)。一旦获得了会话对象,就可以像操作哈希表(Hashtable)一样使用一个唯一的键,在会话对象中加入或者获取任何对象。通过调用setAttribute()将用户访问次数信息存入会话,通过调用getAttribute()来获取会话中存储的信息。,2019年9月4日星期三,第三章 Servlet编程,66,3.1.4 使用会话实现

48、购物车的例子 P59,2019年9月4日星期三,第三章 Servlet编程,67,3.2 Servlet上下文 服务器上的每个Web应用都会有一个背景环境对象。上下文对象提供了一个同一Web应用内的不同资源间共享信息的场所。 Javax.Servlet.ServletContext接口提供正在运行的Servlet所处的Web应用程序的上下文对象的视图,可以通过ServletConfig实例的getServletContext()方法得到该Servlet运行的上下文对象。,2019年9月4日星期三,第三章 Servlet编程,68,通过Servlet 上下文可以实现以下功能: (1)访问Web应

49、用程序资源; (2)在Servlet上下文属性中保存Web应用程序信息; (3)获取初始化参数信息; (4)提供日志支持。,2019年9月4日星期三,第三章 Servlet编程,69,请求指派:在一个Servlet处理完毕后,将客户端的请求传递到另外一个Servlet来处理。 为了实现请求指派,Servlet规范定义了一个接口:javax.serlet.Requestdispatcher Requestdispatcher封装了到同一Web应用的另外一个资源的应用,可以通过调用Requestdispatcher的forword()方法将请求传递给其他资源。,2019年9月4日星期三,第三章 Servlet编程,70,P67例、P69例,3.3 Servlet间的协作 当Web 容器接收到客户端的请求后,它负责创建request 对象和response 对象,然后将这两个对象以参数的形式传递给与请求URL 地址相关联的Se

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1