第三章Servlet编程

上传人:人*** 文档编号:590511313 上传时间:2024-09-14 格式:PPT 页数:84 大小:2.83MB
返回 下载 相关 举报
第三章Servlet编程_第1页
第1页 / 共84页
第三章Servlet编程_第2页
第2页 / 共84页
第三章Servlet编程_第3页
第3页 / 共84页
第三章Servlet编程_第4页
第4页 / 共84页
第三章Servlet编程_第5页
第5页 / 共84页
点击查看更多>>
资源描述

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

1、第三章Servlet编程华北电力大学控制与计算机工程学院主 讲:赵赵 强强Mobile: 13611310168Email: 14九月2024第三章Servlet编程2本章主要内容1Servlet基础知识2Servlet编程基本技能3Servlet编程高级技能4ServletFilter原理和编程方法14九月2024第三章Servlet编程3 一、Servlet 基础知识 1.1 什么是ServletServlet是运行在服务器端,用来响应客户端请求,生成动态Web页面的一个J2EE组件,是能够使用print语句产生动态HTML内容的Java类,它符合Java类的一般规则。Servlet在ja

2、vax.servlet(基本的Servlet框架)和javax.servlet.http(为Servlet响应HTTP请求的Servlet框架的扩展)包中作为Java的标准扩展类使用。在Servlet API中提供了大量的方法,可以在Servlet中调用。14九月2024第三章Servlet编程4Servlet是位于Web服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。Servlet是CGI(Common Gateway Interace,即:公共网关接口)脚本的

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

4、etRequest)和响应(HttpServletResponse)。 14九月2024第三章Servlet编程6注意:Servlet不是从命令行启动的,而是由包含Java虚拟机的Web服务器进行加载,在一个容器内运行,并且APIs提供了对会话和对象的生命周期的管理。14九月2024第三章Servlet编程71.2 Servlet与Applet相比较:a) a) 相似之处:相似之处:(1)它们不是独立的应用程序,没有main()方法。(2)它们不是由用户调用,而是由另外一个应用程序(容器)调用。(3)它们都有一个生存周期,包含init()和destroy()方法。b) b) 不同之处:不同之处

5、:(1)Applet运行在客户端,具有丰富的图形界面。(2)Servlet运行在服务器端,没有图形界面。14九月2024第三章Servlet编程81.3 Servlet工作原理 Servlet运行在Web服务器上的Web容器里。Web容器负责管理Servlet。它装入并初始化Servlet,管理Servlet的多个实例,并充当请求调度器,将客户端的请求传递到Servlet,并将Servlet的响应返回给客户端。Web容器在Servlet的使用期限结束时终结该Servlet。服务器关闭时,Web容器会从内存中卸载和除去Servlet。14九月2024第三章Servlet编程9多个请求的处理多个请

6、求的处理 :为每个请求创建一个新的线程来处理客户端的请求 。必须注意线程的同步问题!14九月2024第三章Servlet编程101.4 Servlet基本工作流程(1)客户机将请求发送到服务器; (2)服务器上的Web容器实例化(装入)Servlet;(3)Web容器将请求信息发送到 Servlet; (4)Servlet创建一个响应,并将其返回到Web容器;(5)Web容器将响应发回客户机;(6)服务器关闭或Servlet空闲时间超过一定限度时,调用destory()方法退出。14九月2024第三章Servlet编程11注意:Servlet也可以配置为Web应用程序启动时自动装载。结论:结论

7、: 客户机与Servlet间没有直接的交互。无论客户机对Servlet的请求还是Servlet对客户端的响应,都是通过Web服务器来实现的,这就大大提高了Servlet组件的可移植性。 14九月2024第三章Servlet编程121.5 Servlet的生命周期Servlet的生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求、提供服务。Servlet的生命周期如图:14九月2024第三章Servlet编程13在编程代码的实现中,Servlet生命周期由接口javax.servlet.Servlet定义,所有的Servlet必须直接或间接的实现javax.serv

8、let.Servlet接口,这样才能在Servlet引擎(Engine)上运行。Servlet引擎提供网络服务,响应MIME请求,运行Servlet容器。javax.servlet.Servlet接口定义了一些方法,在Servlet生命周期中,这些方法会在特定的时间上,按一定的顺序被调用。注:注:MIME:MultipurposeInternetMailExtensions,多功能Internet邮件扩充服务。14九月2024第三章Servlet编程14ServletServlet的生命周期主要由的生命周期主要由3 3个过程组成。个过程组成。 1)Servlet的初始化:init()被调用于初

9、始化,其格式为:public void init(ServletConfig config) throws public void init(ServletConfig config) throws ServletExceptionServletException super.init(); super.init(); 在初始化过程中,Servlet应当准备好它要安排的一些资源,以便这个Servlet能够接收请求,做到这些可以不用考虑多线程,因为在Servlet初始化时只能是单进程的。一旦初始化方法完成,Servlet就能接收客户端的请求。14九月2024第三章Servlet编程15 2)Se

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

11、个以上的线程(threads)并发运行。在Servlet执行期间其最多的应用是处理客户端的请求并产生一个网页。14九月2024第三章Servlet编程16 3)Servlet的结束当服务器卸载一个Servlet,它将调用Servlet的destroy()。这个destroy()是与初始化方法的作用相反,同时从内存中释放Servlet。Destroy的格式为:public void destroy() 一个Servlet 在运行service() 方法时可能会产生其它的线程,因此请确认在调用 destroy() 时,这些线程都已终止或完成。14九月2024第三章Servlet编程171.6 Se

12、rvlet API编程接口 14九月2024第三章Servlet编程18目的类、接口Servlet实现javax.servlet.Servlet,javax.servlet.SingleThreadModel javax.servlet.GenericServlet,javax.servlet.http.HttpServletServlet配置javax.servlet.ServletConfigServlet异常javax.servlet.ServletException,javax.servlet.UnavailableException请求和应答javax.servlet.Servlet

13、Request,javax.servlet.ServletResponsejavax.servlet.ServletInputStream,javax.servlet.ServletOutputStreamjavax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse会话跟踪javax.servlet.http.HttpSession,javax.servlet.http.HttpSessionBindingListenerjavax.servlet.http.HttpSessionBindingEven

14、tServlet上下文javax.servlet.ServletContextServlet协作javax.servlet.RequestDispatcher其他javax.servlet.http.Cookie,javax.servlet.http.HttpUtils14九月2024第三章Servlet编程19 1 1)通常编写的Servlet类,一般从Javax包中的HttpServlet类继承而来,在HttpServlet中加入了一些附加的方法,这些方法可以协助处理HTTP基本请求,这些基本请求由HttpServlet类中的方法service()自动地调用。这些方法有: doGet 用来

15、处理HTTP的GET、头部HEAD请求; doPost 用来处理HTTP的POST请求; doPut 用来处理HTTP的PUT请求; doDelete 用来处理HTTP的DELETE请求; doHead 用来处理HTTP的HEAD请求; doOptions 用来处理HTTP的OPTIONS请求; doTrace 用来处理HTTP的TRACE请求。14九月2024第三章Servlet编程20doGet:用来处理HTTP的GET请求。这个GET操作仅仅允许客户从HTTPserver上取得GET资源。重载此方法的用户自动允许支持方法HEAD。这个GET操作被认为是安全的,没有任何的负面影响,对用户来

16、说是很可靠的。doGet方法格式为:protectedvoiddoGet(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;14九月2024第三章Servlet编程21doPost:用来处理HTTP的POST请求。这个POST操作包含了在必须通过此Servlet执行的请求中的数据。由于它不能立即取得资源,所以对于那些涉及到安全性的用户来说,通过POST请求操作会有一些副作用。doPost方法格式为:protectedvoiddoPost(HttpServletRes

17、questrequest,HttpServletResponseresponse)throwsServletException,IOException;14九月2024第三章Servlet编程22doPut:用来处理HTTP的PUT请求。此PUT操作模拟通过FTP发送一个文件。对于那些涉及到安全性的用户来说,通过PUT请求操作也会有一些副作用。doPut方法格式为:protectedvoiddoPut(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;14九月202

18、4第三章Servlet编程23doDelete:用来处理HTTP的DELETE请求。此操作允许客户端请求一个从server移出的URL。对于那些涉及到安全性的用户来说,通过DELETE请求操作会有一些副作用。doDelete方法格式为:protectedvoiddoDelete(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;14九月2024第三章Servlet编程24doHead:用来处理HTTP的HEAD请求。缺省地,它会在无条件的GET方法执行时运行,但是不

19、返回任何数据到客户端。只返回包含内容信息的长度的header。由于用到GET操作,此方法应该是很安全的(没有副作用)也是可重复使用的。doHead方法格式为:protectedvoiddoHead(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;14九月2024第三章Servlet编程25doOptions:用来处理HTTP的OPTIONS请求。此操作自动地决定支持什么HTTP方法。比如说,如果读者创建HttpServlet的子类并重载方法doGet,然后方法do

20、Options会返回下面的header:GET、HEAD、TRACE和OPTIONS。doOptions方法格式为:protectedvoiddoOptions(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;14九月2024第三章Servlet编程26doTrace:用来处理HTTP的TRACE请求。此方法的缺省实现产生一个包含所有在trace请求中的header的信息的应答(response)。在开发Servlet时,多数情况下需要重载此方法。doTrace方

21、法格式为:protectedvoiddoTrace(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;14九月2024第三章Servlet编程272 2)HttpServletRequestHttpServerletRequest被传到service()方法用来提供客户的请求信息。HttpServerletRequest接口可以获取由客户端传送的阐述名称,也可以获取客户端正在使用的通信协议,也可以获取产生请求并且接收请求的远端主机名和IP地址等一些信息。HttpSe

22、rverletRequest接口提供获取数据流的Servlet、ServletInputStream方法,这些数据是客户端引用的POST和PUT方法提交的。一个ServerletRequest的子类可以让Servlet获取更多的协议特性数据。 14九月2024第三章Servlet编程283 3)HttpServletResponse HttpServerletResponse用来向客户端发送响应信息。HttpServerletResponse接口给出相应客户端的Servlet方法,它允许Servlet设置内容长度和回应的MIME类型,并且提供输出流的ServletOutputStream。Ht

23、tpServerletRequest子类可以给出更多的protocal-specific容量的信息。 4)HttpSessionHttpSession接口被Servlet用来实现在HTTP客户端和HTTP会话两者之间的关联。这种关联可能在多处连接和请求中持续一段给定的时间。session用来在无状态的HTTP协议下越过多个请求页面来维持状态和识别用户。一个session可以通过Cookie或重写URL来维持。14九月2024第三章Servlet编程291.7 Servlet应用范围及其缺陷 Servlet用来写应用层是很强大的,但是对于写表示层就很不方便。JSP则主要是为了方便写表示层而设计的

24、,当然也可以写应用层。写惯了ASP、PHP、CGI的同学,经常会不自觉地把表示层和应用层混在一起。比如把数据库处理信息放到JSP中,其实,它应该放在应用层中。JSP中应该仅仅存放与表示层有关的部分,也就是说,只放输出HTML网页的部分。而所有的数据计算、数据分析、数据库连接处理,都属于应用层,应该放在JavaBeans中。通过JSP调用JavaBeans,实现两层的整合。综上所述,Servlet是一个不完善的产品,写应用层很好,写表示层就逊色多了,并且两层混杂。14九月2024第三章Servlet编程302.1 编写响应HTTP请求的Servlet程序的步骤: (1)创建一个扩展了 javax

25、.servlet.http.HttpServlet接口的Servlet类。(2)重写doGet()或doPost()方法实现对HTTP请求信息的动态响应。2.2 第一个Servlet的例子 此例演示Servet显示静态信息。二、Servlet 编程基本技能14九月2024第三章Servlet编程31在Eclipse环境下的开发方法与步骤:创建一个J2EE项目:创建一个Web模块:为这个Web模块设置目标服务器:生成并编写Servlet类:在web.xml中添加相关信息:启动jBoss服务器并发布Web服务:启动浏览器,访问该Servlet服务。14九月2024第三章Servlet编程3214九

26、月2024第三章Servlet编程33程序31:FirstServlet.javapackage com.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class First

27、Servlet extends HttpServlet protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException /TODO Method stub generated by Lomboz response.setContentType(text/html); PrintWriter out = response.getWriter(); out.println( + + + + First Servlet + + + +

28、+ +Hello World! + + + + );14九月2024第三章Servlet编程34利用Eclipse快速修正错误 14九月2024第三章Servlet编程35Web应用SimpleServlet的配置文件14九月2024第三章Servlet编程36节点指明Servlet名称与Servlet实现类之间的对应关系;节点指明Servlet名称与请求URL之间的对应关系;节点指明请求Web应用程序时的默认的首页;节点指明Web应用程序发生错误时导向的错误页面。14九月2024第三章Servlet编程3714九月2024第三章Servlet编程3814九月2024第三章Servlet编程3

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

30、。 用户只要简单的调用HttpServletRequest的getParameter()方法,给出变量名称即可取得该变量的值。需要注意的是,变量的名称是大小写敏感的。当请求的变量不存在时,将会返回一个空字符串。 14九月2024第三章Servlet编程4314九月2024第三章Servlet编程4414九月2024第三章Servlet编程452.4 发送非HTML文档 随着Internet应用的不断扩展,为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。 Servlets 可以使用 MIME(Multipurpose Internet Mail

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

32、在任何时候访问都有效,但一个Servlet的ServletConfig对象不能被其他Servlet访问。在Servlet中要得到ServletConfig对象有两种方法: 在init()方法中获取(通过init的重载方法传递); 通过getServletConfig()方法直接获取。 用途:通过配置信息来初始化Servlet可以有效避免硬编码信息,提高Servlet的可移植性。2.5 获取Servlet配置参数14九月2024第三章Servlet编程47三、Servlet 编程高级技能3.1 会话管理技术HTTP协议是一种无状态的协议,客户端每次打开一个Web页面,它就会与服务器建立一个新的连

33、接,发送一个新的请求到服务器,服务器处理客户端的请求,返回响应到客户端,并关闭与客户端建立的连接。当客户端发起新的请求,那么它重新与服务器建立连接,因此服务器并不记录关于客户的任何信息。但是对于许多Web应用而言,服务器往往需要记录特定客户端与服务器之间的一系列请求响应之间的特定信息。例如,一个在线网上商店需要记录在线客户的个人信息、添加到购物车中的商品信息等。14九月2024第三章Servlet编程48常见会话跟踪技术有:Cookie;URL重写;隐藏表单域;安全套接字层(Secure Socket Layer,SSL)的会话。u Java Servlet API提供了用于会话跟踪和管理会话

34、内状态的机制。u在以上四种方法中,前二种是最常用的。14九月2024第三章Servlet编程493.1.1使用Cookie会话的跟踪技术Cookie是一小块可以嵌入到HTTP请求和响应中的数据。典型情况下,Web服务器将Cookie值嵌入到响应的头部,而浏览器则在其以后的请求中都将携带同样的Cookie。Cookie的信息中可以有一部分用来存储会话ID,这个ID被服务器用来将某些HTTP请求绑定在会话中。Cookie由浏览器保存在客户端,通常保存为一个文本文件。Cookie还含有一些其他属性,诸如可选的注释、版本号及最长生存期。14九月2024第三章Servlet编程50编程步骤:编程步骤:1

35、)创建Cookie(由Web服务器创建,但是存放在客户端,保存的是一些键值对。)Cookiecookie=newCookie(name,value);2)将Cookie加到客户端浏览器HttpServletResponse.addCookie(cookie);3)在服务器端取出客户端传过来的Cookie(返回Cookie)HttpServletRequest.getCookies();Cookie.getName();Cookie.getValue();1.会话Cookie:只在当前会话起作用的Cookie;2.持久Cookie:保存在客户本地一段时间的Cookie;u设置Cookie的时长:

36、Cookie.setMaxAge(inttimeout),单位是秒;当timeout0)时,意味着cookie将会在客户端被保存n秒;当timeout=0时,意味着这个cookie将会被删除;u设置Cookie的有效路径:Cookie.setPath(.)14九月2024第三章Servlet编程51程序说明:HttpServletRequest对象有一个getCookies()方法,它可以返回当前请求中的Cookie对象的一个数组。程序首先调用getCookies()方法获得request对象中的所有Cookie,然后寻找是否存在名为“ServletStudy”的Cookie。如果有,则调用C

37、ookie对象的getValue()、getName()等方法显示其信息;如果没有,则创建一个新的Cookie对象,并调用response.addCookie()方法将其加入到response对象并返回到客户端。以后客户端对服务器的任何访问都会在其头部携带此Cookie。当通过刷新页面来查看Cookie的信息,可以看到显示的Cookie信息是不变的。14九月2024第三章Servlet编程5214九月2024第三章Servlet编程53由于同一客户端对服务器的请求都会携带Cookie,因此可以通过在Cookie中添加与会话相关的信息达到会话跟踪的目的。P51例通过编程来演示如何通过Cookie

38、实现会话跟踪。程序说明:程序使用Cookie来实现会话的跟踪,在本示例中跟踪的是会话中页面的访问次数。程序通过将页面访问的次数写入一个名为“VisitTimes”的Cookie中。由于对页面的请求每次都包含了这个Cookie,因此通过每次将Cookie的值取出来显示页面的访问次数,同时又将更新的值写回到Cookie来达到会话跟踪的目的。14九月2024第三章Servlet编程54Cookiecookie=null;/获取请求相关的CookieCookiecookies=request.getCookies();/判断CookieVisitTimes是否存在/如果存在,其值加1if(cookie

39、s!=null)for(inti=0;icookies.length;i+)if(cookiesi.getName().equals(VisitTimes)Stringv=cookiesi.getValue();intvalue=Integer.parseInt(v)+1;cookiesi.setValue(Integer.toString(value);cookie=cookiesi;/endfor/endif14九月2024第三章Servlet编程55/不存在,创建cookieif(cookie=null)intmaxAge=10000;/CreatetheCookieobjectcook

40、ie=newCookie(VisitTimes,1);cookie.setPath(request.getContextPath();cookie.setMaxAge(maxAge);response.addCookie(cookie);/endif14九月2024第三章Servlet编程5614九月2024第三章Servlet编程573.1.2使用URL重写会话跟踪关于是否应当使用Cookie有很多的争论,因为一些人认为Cookie可能会造成对隐私权的侵犯。有鉴于此,大部分浏览器允许关闭Cookie功能,这使得跟踪会话变得更加困难。如果不能依赖Cookie的支持,那将不得不使用另外一种会话跟

41、踪方法:URL重写。URL重写通过在URL地址后面增加一个包含会话信息的字符串来记录会话信息。URL地址与会话信息的字符串之间用“?”隔开。如果有多个参数,参数间用“&”隔开。P53通过编写一个Servlet来演示如何利用URL重写来向服务器端传递会话信息。这里假设客户端向服务器端传递的会话信息是用户的身份信息:姓名和年龄。程序首先调用response.encodeURL()生成URL字符串。其中request.getContextPath()用来获取请求上下文路径。URL字符串包含的会话信息为两个参数:name和age,其值分别为“张三”和27。14九月2024第三章Servlet编程58对

42、于利用URL重写技术传递来会话信息,可以调用request.getParameter()来获取,就像获取表单提取的参数信息一样。实际上,通过表单向服务器端提交数据就是通过URL重写的方式。out.println(name=+request.getParameter(name);out.println(age=+request.getParameter(age);14九月2024第三章Servlet编程59新出现的一种会话功能是SSL(SecureSocketsLayer,安全套接字层)会话,它是HTTPS协议使用的一种加密技术,内建了会话跟踪功能,Servlet容器可以非常容易的使用这些数据建

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

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

45、63Session什么时候失效?1:程序中调用HttpSession.invalidate()方法;2:Session过期,在Session的最大有效时间以外;3:关闭应用服务器。设置Session的有效时间:1:HttpSession.setMaxInactiveIntervale(intsecond)单位秒2:在web.xml中进行配置.14九月2024第三章Servlet编程64编程中经常使用的HttpSession接口方法有以下几种:isNew()。如果客户机还不知道会话,则返回true。如果客户机已经禁用了Cookie,则会话在每个请求上都是新的。getId()。返回包含分配给这个会

46、话的唯一标识的字符串。在使用URL改写以标识会话时比较有用。setAttribute()。使用指定的名称将对象绑定到这个会话getAttribute()。返回绑定到此会话的对象(带有指定名称)。setMaxInactiveInterval()。指定在Servlet使该会话无效之前客户机请求间的时间。负的时间表示会话永远不会超时。invalidate()。终止当前会话,并解开与它绑定的对象。14九月2024第三章Servlet编程65P57:Servlet中使用HttpServletRequest对象的getSession()方法来取得当前的用户会话。GetSession()的参数决定了如果会话

47、尚不存在,是否创建一个新会话。(还有一个版本的getSession()没有任何参数,它将默认地创建一个新会话)。一旦获得了会话对象,就可以像操作哈希表(Hashtable)一样使用一个唯一的键,在会话对象中加入或者获取任何对象。通过调用setAttribute()将用户访问次数信息存入会话,通过调用getAttribute()来获取会话中存储的信息。14九月2024第三章Servlet编程663.1.4使用会话实现购物车的例子P5914九月2024第三章Servlet编程673.2 Servlet上下文服务器上的每个Web应用都会有一个背景环境对象。上下文对象提供了一个同一Web应用内的不同资

48、源间共享信息的场所。Javax.Servlet.ServletContext接口提供正在运行的Servlet所处的Web应用程序的上下文对象的视图,可以通过ServletConfig实例的getServletContext()方法得到该Servlet运行的上下文对象。 14九月2024第三章Servlet编程68通过Servlet 上下文可以实现以下功能:(1)访问Web应用程序资源;(2)在Servlet上下文属性中保存Web应用程序信息;(3)获取初始化参数信息;(4)提供日志支持。14九月2024第三章Servlet编程69请求指派:在一个Servlet处理完毕后,将客户端的请求传递到另

49、外一个Servlet来处理。为了实现请求指派,Servlet规范定义了一个接口:javax.serlet.Requestdispatcher Requestdispatcher封装了到同一Web应用的另外一个资源的应用,可以通过调用Requestdispatcher的forword()方法将请求传递给其他资源。14九月2024第三章Servlet编程70P67例、P69例3.3 Servlet间的协作当Web容器接收到客户端的请求后,它负责创建request对象和response对象,然后将这两个对象以参数的形式传递给与请求URL地址相关联的Servlet的service()方法进行处理。但对

50、于复杂的处理过程,仅仅通过一个Servlet来实现对于请求的处理往往比较困难,这时经常需要几个Servlet间共同协作完成对于请求的处理,也就是说,在一个Servlet处理完毕后,将客户端的请求传递到另外一个Servlet来处理,这种像接力赛似的过程称为请求指派。为实现请求指派,Servlet规范定义了一个接口:javax.servlet.requestdispatcher。14九月2024第三章Servlet编程7114九月2024第三章Servlet编程72注意:Filter不是Servlet,它只是Servlet接收请求前的预处理器。Java Servlet 2.3规范加入的新特性。4

51、Servlet Filter 编程过滤器对服务器上的特定资源采取措施,进行限制。Filter主要用在以下几个方面:(1)访问特定资源(Web页、JSP页、Servlet)时的身份验证。(2)访问资源的记录跟踪。(3)访问资源的转换。一个Filter必须实现javax.Servlet.Filter接口,即实现下面的三个方法:(1)doFilter(ServletRequest,ServletResponse,FilterChain)。用来实现过滤行为的方法。引入的FilterChain对象提供了后续Filter所要调用的信息。(2)init(FilterConfig)(3)destroy()14

52、九月2024第三章Servlet编程74Filter的使用步骤:1)写Filter类implementsjavax.servlet.Filter接口重写Filter接口中的方法init(FilterConfig),doFilter(ServletRequest,ServletResponse,FilterChain),destroy()2)在web.xml中进行配置自己取,但要和中的对应Filter类的全限定名.在程序中通过FilterConfig.getInitParameter(name)取和中的对应Filter所限制访问的资源路径比如我们将设为/ch5/*,那么我们在浏览器中访问/ch5

53、下的资源时Filter就会自动被调用Filter的生命周期:1)init(FilterConfig)由容器调用,并且只调用一次2)doFilter(ServletRequest,ServletResponse,FilterChain)访问限定资源时,被调用,会被调用多次,注意考虑多线程问题,处理方式和Servlet中的一样3)destroy()由容器调用,并且只调用一次FilterChain.doFilter(ServletRequest,ServletResponse):可以认为是处理请求和响应的分界限,在chain.doFilter(.)之前处理请求,在chain.doFilter(.)之

54、后处理响应注意:一旦写了Filter一定要在Filter.doFilter(.)中调用FilterChain.doFilter()方法,将请求交由其他资源继续处理编码转换:request.setCharacterEncoding(UTF-8);chain.doFilter(request,response);response.setCharacterEncoding(UTF-8);过滤的url:/*相同的资源可以被多个Filter过滤,Filter的执行顺序取决于web.xml中配置的的顺序14九月2024第三章Servlet编程80 Filter关联URL设置 使用Filter关联URL设置的例子P72 14九月2024第三章Servlet编程81程序324: Web.xml(片段) IPfilter com.Servlet.IPFilter IPfilter /pdfshow 14九月2024第三章Servlet编程82课后练习P7514九月2024第三章Servlet编程8314九月2024第三章Servlet编程84END

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号