第三章Servlet编程.ppt
《第三章Servlet编程.ppt》由会员分享,可在线阅读,更多相关《第三章Servlet编程.ppt(84页珍藏版)》请在三一办公上搜索。
1、第三章 Servlet 编程,华北电力大学控制与计算机工程学院主 讲:赵 强Mobile:13611310168Email:,2023年9月25日星期一,第三章 Servlet编程,2,本章主要内容,Servlet 基础知识Servlet 编程基本技能Servlet 编程高级技能Servlet Filter 原理和编程方法,2023年9月25日星期一,第三章 Servlet编程,3,一、Servlet 基础知识,1.1 什么是ServletServlet是运行在服务器端,用来响应客户端请求,生成动态Web页面的一个J2EE组件,是能够使用print语句产生动态HTML内容的Java类,它符合J
2、ava类的一般规则。Servlet在javax.servlet(基本的Servlet框架)和javax.servlet.http(为Servlet响应HTTP请求的Servlet框架的扩展)包中作为Java的标准扩展类使用。在Servlet API中提供了大量的方法,可以在Servlet中调用。,2023年9月25日星期一,第三章 Servlet编程,4,Servlet是位于Web服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。Servlet是CGI(Common
3、 Gateway Interace,即:公共网关接口)脚本的一种替代技术,由于Servlet在性能、可移植性、代码重用等方面比CGI具有显著的优势,现在已逐步或已经取代了CGI。,2023年9月25日星期一,第三章 Servlet编程,5,在默认情况下,Servlet采用一种无状态的请求-响应处理方式。Servlet代码的主要作用是为了增强Java服务器端功能。当发出客户端请求的时候,调用service()并传递一个请求和响应对象。Servlet首先判断该请求是GET操作还是POST操作。然后它调用下面的一个方法:doGet或doPost。如果请求是GET就调用doGet方法,如果请求是POS
4、T就调用doPost方法。doGet和doPost都接受请求(HttpServletRequest)和响应(HttpServletResponse)。,2023年9月25日星期一,第三章 Servlet编程,6,注意:Servlet不是从命令行启动的,而是由包含Java虚拟机的Web服务器进行加载,在一个容器内运行,并且APIs 提供了对会话和对象的生命周期的管理。,2023年9月25日星期一,第三章 Servlet编程,7,1.2 Servlet与Applet相比较:a)相似之处:(1)它们不是独立的应用程序,没有main()方法。(2)它们不是由用户调用,而是由另外一个应用程序(容器)调用
5、。(3)它们都有一个生存周期,包含init()和destroy()方法。b)不同之处:(1)Applet运行在客户端,具有丰富的图形界面。(2)Servlet运行在服务器端,没有图形界面。,2023年9月25日星期一,第三章 Servlet编程,8,1.3 Servlet工作原理 Servlet运行在Web服务器上的Web容器里。Web容器负责管理Servlet。它装入并初始化Servlet,管理Servlet的多个实例,并充当请求调度器,将客户端的请求传递到Servlet,并将Servlet的响应返回给客户端。Web容器在Servlet的使用期限结束时终结该Servlet。服务器关闭时,We
6、b容器会从内存中卸载和除去Servlet。,2023年9月25日星期一,第三章 Servlet编程,9,多个请求的处理:为每个请求创建一个新的线程来处理客户端的请求。,必须注意线程的同步问题!,2023年9月25日星期一,第三章 Servlet编程,10,1.4 Servlet基本工作流程(1)客户机将请求发送到服务器;(2)服务器上的Web容器实例化(装入)Servlet;(3)Web容器将请求信息发送到 Servlet;(4)Servlet创建一个响应,并将其返回到Web容器;(5)Web容器将响应发回客户机;(6)服务器关闭或Servlet空闲时间超过一定限度时,调用destory()方
7、法退出。,2023年9月25日星期一,第三章 Servlet编程,11,注意:Servlet也可以配置为Web应用程序启动时自动装载。,结论:客户机与Servlet间没有直接的交互。无论客户机对Servlet的请求还是Servlet对客户端的响应,都是通过Web服务器来实现的,这就大大提高了Servlet组件的可移植性。,2023年9月25日星期一,第三章 Servlet编程,12,1.5 Servlet的生命周期,Servlet的生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求、提供服务。Servlet的生命周期如图:,2023年9月25日星期一,第三章 Se
8、rvlet编程,13,在编程代码的实现中,Servlet生命周期由接口javax.servlet.Servlet定义,所有的Servlet必须直接或间接的实现javax.servlet.Servlet接口,这样才能在Servlet引擎(Engine)上运行。Servlet引擎提供网络服务,响应MIME请求,运行Servlet容器。javax.servlet.Servlet接口定义了一些方法,在Servlet生命周期中,这些方法会在特定的时间上,按一定的顺序被调用。注:MIME:Multipurpose Internet Mail Extensions,多功能Internet 邮件扩充服务。,2
9、023年9月25日星期一,第三章 Servlet编程,14,Servlet的生命周期主要由3个过程组成。1)Servlet的初始化:init()被调用于初始化,其格式为:public void init(ServletConfig config)throws ServletException super.init();在初始化过程中,Servlet应当准备好它要安排的一些资源,以便这个Servlet能够接收请求,做到这些可以不用考虑多线程,因为在Servlet初始化时只能是单进程的。一旦初始化方法完成,Servlet就能接收客户端的请求。,2023年9月25日星期一,第三章 Servlet编程
10、,15,2)Servlet的执行service()用于实现事务逻辑,是处理请求的地方。在服务器装载和初始化Servlet后,Servlet就能够处理客户端的请求,一般是使用service()来实现。每个客户端请求有它自己service()。这些方法接收客户端请求,并且发回相应的响应。Servlet组件能够同时运行多个service()。这样在程序中,service()可以按一个thread编写。如:service()要更新Servlet对象中的一个字段field,这个字段是可以同时存取的。假如某个服务器不能同时并发地运行service(),也可以用SingleThreadModel接口,这个接
11、口保证不会有两个以上的线程(threads)并发运行。在Servlet执行期间其最多的应用是处理客户端的请求并产生一个网页。,2023年9月25日星期一,第三章 Servlet编程,16,3)Servlet的结束当服务器卸载一个Servlet,它将调用Servlet的destroy()。这个destroy()是与初始化方法的作用相反,同时从内存中释放Servlet。Destroy的格式为:public void destroy()一个Servlet 在运行service()方法时可能会产生其它的线程,因此请确认在调用 destroy()时,这些线程都已终止或完成。,2023年9月25日星期一,
12、第三章 Servlet编程,17,1.6 Servlet API编程接口,2023年9月25日星期一,第三章 Servlet编程,18,2023年9月25日星期一,第三章 Servlet编程,19,1)通常编写的Servlet类,一般从Javax包中的HttpServlet类继承而来,在HttpServlet中加入了一些附加的方法,这些方法可以协助处理HTTP基本请求,这些基本请求由HttpServlet类中的方法service()自动地调用。这些方法有:doGet 用来处理HTTP的GET、头部HEAD请求;doPost 用来处理HTTP的POST请求;doPut 用来处理HTTP的PUT请
13、求;doDelete 用来处理HTTP的DELETE请求;doHead 用来处理HTTP的HEAD请求;doOptions 用来处理HTTP的OPTIONS请求;doTrace 用来处理HTTP的TRACE请求。,2023年9月25日星期一,第三章 Servlet编程,20,doGet:用来处理HTTP的GET请求。这个GET操作仅仅允许客户从HTTP server上取得GET资源。重载此方法的用户自动允许支持方法HEAD。这个GET操作被认为是安全的,没有任何的负面影响,对用户来说是很可靠的。doGet方法格式为:protected void doGet(HttpServletResques
14、t request,HttpServletResponse response)throws ServletException,IOException;,2023年9月25日星期一,第三章 Servlet编程,21,doPost:用来处理HTTP的POST请求。这个POST操作包含了在必须通过此Servlet执行的请求中的数据。由于它不能立即取得资源,所以对于那些涉及到安全性的用户来说,通过POST请求操作会有一些副作用。doPost方法格式为:protected void doPost(HttpServletResquest request,HttpServletResponse respon
15、se)throws ServletException,IOException;,2023年9月25日星期一,第三章 Servlet编程,22,doPut:用来处理HTTP的PUT请求。此PUT操作模拟通过FTP发送一个文件。对于那些涉及到安全性的用户来说,通过PUT请求操作也会有一些副作用。doPut方法格式为:protected void doPut(HttpServletResquest request,HttpServletResponse response)throws ServletException,IOException;,2023年9月25日星期一,第三章 Servlet编程,
16、23,doDelete:用来处理HTTP的DELETE请求。此操作允许客户端请求一个从server移出的URL。对于那些涉及到安全性的用户来说,通过DELETE请求操作会有一些副作用。doDelete方法格式为:protected void doDelete(HttpServletResquest request,HttpServletResponse response)throws ServletException,IOException;,2023年9月25日星期一,第三章 Servlet编程,24,doHead:用来处理HTTP的HEAD请求。缺省地,它会在无条件的GET方法执行时运行,
17、但是不返回任何数据到客户端。只返回包含内容信息的长度的header。由于用到GET操作,此方法应该是很安全的(没有副作用)也是可重复使用的。doHead方法格式为:protected void doHead(HttpServletResquest request,HttpServletResponse response)throws ServletException,IOException;,2023年9月25日星期一,第三章 Servlet编程,25,doOptions:用来处理HTTP的OPTIONS请求。此操作自动地决定支持什么HTTP方法。比如说,如果读者创建HttpServlet的子
18、类并重载方法doGet,然后方法doOptions会返回下面的header:GET、HEAD、TRACE和OPTIONS。doOptions方法格式为:protected void doOptions(HttpServletResquest request,HttpServletResponse response)throws ServletException,IOException;,2023年9月25日星期一,第三章 Servlet编程,26,doTrace:用来处理HTTP的TRACE请求。此方法的缺省实现产生一个包含所有在trace请求中的header的信息的应答(response)。
19、在开发Servlet时,多数情况下需要重载此方法。doTrace方法格式为:protected void doTrace(HttpServletResquest request,HttpServletResponse response)throws ServletException,IOException;,2023年9月25日星期一,第三章 Servlet编程,27,2)HttpServletRequestHttpServerletRequest被传到service()方法用来提供客户的请求信息。HttpServerletRequest接口可以获取由客户端传送的阐述名称,也可以获取客户端正在
20、使用的通信协议,也可以获取产生请求并且接收请求的远端主机名和IP地址等一些信息。HttpServerletRequest接口提供获取数据流的Servlet、ServletInputStream方法,这些数据是客户端引用的POST和PUT方法提交的。一个ServerletRequest的子类可以让Servlet获取更多的协议特性数据。,2023年9月25日星期一,第三章 Servlet编程,28,3)HttpServletResponse HttpServerletResponse用来向客户端发送响应信息。HttpServerletResponse接口给出相应客户端的Servlet方法,它允许S
21、ervlet设置内容长度和回应的MIME类型,并且提供输出流的ServletOutputStream。HttpServerletRequest子类可以给出更多的protocal-specific容量的信息。4)HttpSessionHttpSession接口被Servlet用来实现在HTTP客户端和HTTP会话两者之间的关联。这种关联可能在多处连接和请求中持续一段给定的时间。session用来在无状态的HTTP协议下越过多个请求页面来维持状态和识别用户。一个session可以通过Cookie或重写URL来维持。,2023年9月25日星期一,第三章 Servlet编程,29,1.7 Servle
22、t应用范围及其缺陷 Servlet用来写应用层是很强大的,但是对于写表示层就很不方便。JSP则主要是为了方便写表示层而设计的,当然也可以写应用层。写惯了ASP、PHP、CGI的同学,经常会不自觉地把表示层和应用层混在一起。比如把数据库处理信息放到JSP中,其实,它应该放在应用层中。JSP中应该仅仅存放与表示层有关的部分,也就是说,只放输出HTML网页的部分。而所有的数据计算、数据分析、数据库连接处理,都属于应用层,应该放在JavaBeans中。通过JSP调用JavaBeans,实现两层的整合。综上所述,Servlet是一个不完善的产品,写应用层很好,写表示层就逊色多了,并且两层混杂。,2023
23、年9月25日星期一,第三章 Servlet编程,30,2.1 编写响应HTTP请求的Servlet程序的步骤:(1)创建一个扩展了 javax.servlet.http.HttpServlet接口的Servlet类。(2)重写doGet()或doPost()方法实现对HTTP请求信息的动态响应。2.2 第一个Servlet的例子 此例演示Servet显示静态信息。,二、Servlet 编程基本技能,2023年9月25日星期一,第三章 Servlet编程,31,在Eclipse环境下的开发方法与步骤:创建一个J2EE项目:创建一个Web模块:为这个Web模块设置目标服务器:生成并编写Servle
24、t类:在web.xml中添加相关信息:启动jBoss服务器并发布Web服务:启动浏览器,访问该Servlet服务。,2023年9月25日星期一,第三章 Servlet编程,32,2023年9月25日星期一,第三章 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 j
25、avax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class FirstServlet extends HttpServlet protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException/TODO Method stub generated by Lomboz response.setContentTy
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 Servlet 编程

链接地址:https://www.31ppt.com/p-6113660.html