1 / 38

互联网软件开发与应用

互联网软件开发与应用. 任课教师:陆 铭 联系电话: 66134267 QQ: 22839978 PoPo:richard.du@163.com 教学网站: mingler.ccshu.org. 第八章 Java Servlet 技术介绍. 8.1 Servlet 简介 8.1.1 什么是 Servlet 8.1.2 为什么要使用 Servlet 8.1.3 编写 Servlet 需要什么 8.1.4 运行 Servlet 要做些什么 8.1.5 Java Servlet 与现有网络技术的差别 8.2 Servlet API

eytan
Télécharger la présentation

互联网软件开发与应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 互联网软件开发与应用 任课教师:陆 铭 联系电话:66134267 QQ: 22839978 PoPo:richard.du@163.com 教学网站:mingler.ccshu.org

  2. 第八章 Java Servlet技术介绍 • 8.1 Servlet简介 • 8.1.1 什么是Servlet • 8.1.2 为什么要使用Servlet • 8.1.3 编写Servlet需要什么 • 8.1.4 运行Servlet要做些什么 • 8.1.5 Java Servlet与现有网络技术的差别 • 8.2 Servlet API • 8.3 Servlet的生命周期 • 8.4 一个Servlet实例 • 8.4.1 基本流程 • 8.4.2 编写一个简单的实例

  3. 8.1 Servlet简介

  4. Servlet简介 • Java 是 Internet 发展中在 客户机/服务器 计算方面最为瞩目的新技术之一 • Java 不仅定义了一种计算机语言,而且提供了一整套 客户机/服务器 解决方案,在这个解决方案中,程序可以自动地下载到客户端,并予以执行 • 过去大家的主要注意力是如何在客户端开发Applet和图形用户界面(GUI—Graphical User Interface) • Applet是客户机/服务器计算环境的重要组成部分 • Applet仅仅是问题的一个方面,Servlet是问题的另外一面 应用小程序 服务器端小程序

  5. 8.1.1 什么是Servlet

  6. 什么是Servlet • Servlet可以被认为是服务器端的Applet,Servlet被Web服务器加载和执行,就如同Applet被浏览器加载和执行一样。Servlet从客户端(通过Web服务器)接受请求,执行某种作业,然后返回结果。 • 由于Servlet是在服务器上执行,通常与Applet相关的安全性的问题并不需要实现 • Servlet使相当数量的不可能或者至少是很难由Applet实现的功能得以实现 • Web浏览器并不直接同Servlet通信,Servlet是由Web服务器加载和执行的。如果用户的Web服务器有防火墙保护,则Servlet也将得到防火墙的保护

  7. 使用Servlet的基本流程 • 客户端(一般为Web浏览器)通过HTTP提出请求 • Web服务器接受该请求并将其发送给Servlet,如果这个Servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它 • Servlet将接受该HTTP请求并执行某种处理 • Servlet将向Web服务器返回应答 • Web服务器将从Servlet收到的应答返回给客户端

  8. Servlet可完成的功能 • 创建并返回基于客户请求的动态HTML页面 • 创建并嵌入到现有的HTML页面中的部分HTML页面(HTML片段) • 与其他服务器资源(如数据库或基于Java的应用程序)进行通信 • 接受多个客户机的输入并将结果传播到多个客户机上 • Servlet可以实现支持多个参与者的游戏服务器等 • 根据客户请求采用特定的MIME类型对数据过滤 • 进行图象格式转换等

  9. 8.1.2 为什么要使用Servlet

  10. Servlet的作用 • Servlet可以很好地替代通用网关接口(CGI)脚本 • 通常CGI脚本是用Perl或者C语言编写的,它们总是与特定的服务器平台紧密相关 • Servlet是用Java编写的,因此是与平台无关的 • Java的“编写一次就可以在任何平台上运行”(Write Once,Run Anywhere)的承诺同样可以在服务器上实现

  11. Servlet的独特优点 (1) • Servlet是持久的 • Servlet只需Web服务器加载一次,而且可以在不同请求之间保持服务(如一次数据库的连接) • CGI脚本是短暂的、瞬态的。每一次对CGI脚本的请求都会使Web服务器加载并执行该脚本。一旦这个CGI脚本运行结束,它就会被从内存中清除,然后将结果返回客户端 • CGI脚本的每一次使用,都会造成程序初始化过程的重复执行 • Servlet是可扩展的 • 由于Servlet是用Java编写的,它就具备了Java所能带来的所有的优点 • Java是健壮的、面向对象的编程语言,它很容易扩展以适应需求,Servlet自然也具备了这些特征

  12. Servlet的独特优点 (2) • Servlet是安全的 • 从外界调用一个Servlet的唯一方法就是通过Web服务器,这就提供了高水平的安全保障,尤其是在用户的Web服务器具有防火墙保护的时候显得尤为突出 • Servlet可以在多种多样的客户机上使用 • 由于Servlet是用Java编写的,所以可以很方便地在HTML中使用它们,就象使用Applet一样 • 使用Servlet的方式多得超出想象,如果考虑到在服务器上所能访问到的所有服务,使用Servlet的方式实际可能是无限的

  13. 8.1.3 编写Servlet需要什么

  14. Servlet开发环境 • Sun Microsystem的Java软件部称为JavaSoft,提出的目标:尽量使Servlet的开发能够既方便又快捷 • 开发Servlet需要的软件工具包括 • JSDK,Java Servlet开发工具包 • 可以从JavaSoft的主页(http://java.sun.com)上下载 • JDK,Java开发工具包 • 1.2版以后JSDK成为JDK的组成部分,但使用JDK 1.1版的用户需要另外下载JSDK • Java核心框架是所有使用Java的产品必须包含的 • JSDK中包含了Java Servlet API(标准的Java扩展API) • JSDK不是Java核心框架的组成部分,可以由供应商将其作为附加包来提供 • Javax.Servlet包中提供了Servlet API

  15. 8.1.4 运行Servlet要做些什么

  16. Servlet的运行环境 • 运行Servlet的全部需求就是一个支持Servlet API的Web服务器 • JavaSoft提供的Java Web服务器 • 第三方厂商提供的Java Web服务器

  17. 8.1.5 Java Servlet与现有网络技术的差别

  18. Servlet与Applet的差别 • Servlet与Applet是截然相反的,Servlet可以被视为服务器端的Applet • Servlet在网络服务器内运行,Applet在网络浏览器内运行 • 浏览器提交一个请求执行Servlet的命令,浏览器可直接命令Applet,所以它可以在运行时单机运行

  19. Servlet与CGI的差别 • 与传统的CGI和其他许多类似CGI的技术相比,Java Serlet具有更高的效率,更容易使用,功能更强大,具有更好的可移值性,更节省投资 • 在传统的CGI中,每个请求都要启动一个新的进程,如果CGI本身的执行时间较短,启动进程所需要的开销很可能超过实际执行时间 • 使用Servlet时,服务器上仅有一个Java虚拟机在运行,只有当Servlet被调用时,它才会被加载,直到Servlet更改时,它才会被再次加载。 • 在传统的CGI中,如果有N个并发的对同一CGI程序的请求,则该CGI程序的代码在内存中将重复被装载N次;而对于Servlet,处理请求的是N个线程,只需要一份Servlet类代码 • 在性能优化方面,Servlet也比CGI有着更多的选择,比如缓冲以前的计算结果,保持数据库连接的活动,等等

  20. 8.2 Servlet API

  21. Servlet的框架 • Servlet的框架是由两个Java包组成 • javax.servlet • 定义了所有的Servlet类都必须实现或扩展的通用接口和类 • javax.servlet.http • 定义了采用HTTP协议通信的HttpServlet类 • Servlet的框架的核心是javax.servlet.Servlet接口 • 所有的Servlet都必须实现这一接口 • 在Servlet接口中定义了 5 个方法,其中 3 个方法代表了Servlet的生命周期 • Init方法,负责初始化Servlet对象 • Service方法,负责响应客户的请求 • Destroy方法,当Servlet对象退出生命周期时,负责释放占用的资源

  22. GenericServlet实现Servlet接口HttpServlet扩展GenericServletGenericServlet实现Servlet接口HttpServlet扩展GenericServlet ServletAPI 类图 《Interface》 javax.servlet.ServletConfig 《Interface》 javax.servlet.Servlet java.io.Seializable getInitParameter( ) getServletContext( ) getInitParameterNames( ) init( ) getServletConfig( ) service( ) getServletInfo( ) destroy( ) javax.servlet.GenericServlet javax.servlet.http.HttpServlet getServletContext( ) getInitParameter( ) getInitParameterNames( ) log( ) getServletInfo( ) init( ) getServletConfig( ) service( ) destroy( ) doGet( ) doPost( ) doPut( ) doDelete( ) doTrace( ) doOptions( ) getLastModified( ) service( )

  23. 用户扩展类 • 用户开发自己的Servlet时,必须扩展下列类中的一个 • 扩展GenericServlet类 • 如果扩展本类,则必须实现service方法,因为本类中的该方法是个抽象方法 • service方法的声明形式 public abstract void service(ServletRequest request, ServletResponse response) throws ServletException, IOException ; • 扩展HttpServlet类 • 如果扩展本类,通常不需要实现service方法,因为该方法在HttpServlet类中已经实现了 • service方法的声明形式 • protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException ; 参数2:service方法将响应的客户结果通过对象ServletResponse传给客户 参数1:servlet容器将客户请求信息封装在ServletRequest对象中传给service方法 首先从HttpServletRequest对象中获取HTTP请求方式的信息,然后根据请求方式调用相应的方法,如doGet或doPost。Servlet中的两个参数则分别扩展了ServletRequest和ServletResponse类

  24. 8.3 Servlet的生命周期

  25. 基本概念 • Servlet的生命周期定义了一个Servlet如何被加载、初始化,以及怎样接受请求、响应请求、提供服务 • 代码中,Servlet生命周期由接口javax.servlet.Servlet定义 • 所有的Java Servlet必须直接或间接地实现javax.servlet.Servlet接口才能在Servlet Engine上运行 • Servlet Engine提供network service,响应MIME request,运行Servlet Container • javax.servlet.Servlet接口定义了一些方法,在Servlet生命周期中,这些方法会在特定时间按照一定的顺序被调用

  26. Servlet生命周期图 (状态图) 不存在Servlet实例 结束Servlet 对应Servlet的destroy方法 Servlet生命周期 容器装载Servlet 创建Servlet实例 初始化Servlet 对应Servlet的init方法 调用Service方法 对应Servlet的service方法

  27. Servlet生命周期的四项重要活动 (1) • Servlet的装载(Load)和实例化(Instantiated) • Servlet Engine负责装载和实例化Servlet,这个过程可以在Servlet Engine加载时执行,可以在Servlet响应请求时执行,也可以在两者之间的任何时候执行 • Servlet的初始化(Initialized) • Servlet Engine加载好Servlet后必须要初始化,初始化时Servlet可以从数据库里读出初始数据,建立JDBC Connection,或者建立对其他有价值的资源的引用 • 初始化阶段init( )方法被调用,这个方法在javax.servlet.Servlet接口中定义 • init()方法以一个Servlet配置文件(ServletConfig型)为参数Servlet configuration对象由Servlet Engine实现,可以让Servlet从中读取一些name-value对的参数值 • ServletConfig对象还可以让Servlet接受一个Servlet Context对象

  28. Servlet生命周期的四项重要活动 (2) • Servlet处理请求 • Servlet初始化后九处于响应请求的就绪状态 • 每个对Servlet的请求由一个Servlet Request对象代表,Servlet给客户端的响应由一个Servlet Response对象代表 • 当客户端有一个请求时,ServletRequest和ServletResponse对象将由Servlet Engine转发给Servlet,这两个对象以参数的形式传给service方法.这个方法是由javax.servlet.Servlet定义并由具体的Servlet实现的 • Servlet还可以实现ServletRequest和ServletResponse接口 • ServletRequest接口可以让Servlet获得客户端请求中的参数,如form data、request信息等 • Servlet可以从ServletInputStream流中读取request数据 • ServletResponse接口允许Servlet设置response headers和status codes.实现这个接口可以使Servlet能访问ServletOutputStream流,用来向客户端返回数据

  29. Servlet生命周期的四项重要活动 (3) • Servlet被释放 • Servlet Engine没必要在Servlet生命周期的每一段时间内都保持Servlet的状态, Servlet Engine可以随时随意使用或释放Servlet,因此,不能依赖Servlet class或其他成员存储信息 • 当Servlet Engine判断一个Servlet应当被释放 (如Engine准备shutdown或需要回收资源)时,Engine必须让Servlet能释放其正在使用的任何资源,并保持其持续性的状态信息。这可以通过调用Servlet的destroy方法实现 • 在Servlet Engine释放一个Servlet以前,必须让其完成当前实例的service方法或是等到timeout(如果Engine定义了timeout) • 当Engine释放了一个Servlet后,Engine将不能再将请求转发给他,Engine必须彻底释放该Servlet,并将其标明为可回收的(garbage collextion)

  30. 8.4 一个Servlet实例

  31. Servlet实例说明 编写一个简单的Servlet,要求可以接受一个HTML POST请求,处理参数,并形成HTML结果发送给客户(也可以是浏览器)

  32. 8.4.1 基本流程

  33. 基本流程说明 • 客户(浏览器)向服务器发送一个请求以加载一个HTML网页 • 服务器上HTTP Web服务将会接受到该请求,识别出这是一个读HTML文件的请求。 • 然后调用文件Servlet实现实际的文件输入/输出,该HTML网页将会被返回给客户并在浏览器中显示 • 若web浏览器发出了HTML POST请求,则web服务会再次收到该请求,若POST请求要求加载一个Servlet,则该请求将会发送给调用者Servlet,并由调用者Servlet调用请求打开的Servlet • 该Servlet进行某种处理并将返回的数据通过HTTP发送回客户

  34. 服务器如何知道要调用Servlet • HTTP Web服务器如何知道要调用Servlet? • 客户首先要指定一个URL,它能命名要调用的那个Servlet http://some.server.com/servlet/my_servlet?arguments • 上述URL使用了HTTP协议所以HTTP Web服务器将接受到这个请求,在web服务种有一个配置文件,为每个Servlet起了个别名,可以将Servlet与请求它的URL联系起来。通过该页面管理的Servlet别名使得别名“/Servlet”被分配给Servlet调用者,一旦web服务从URL中找到“/Servlet”,调用者Servlet会被调用以响应该请求 • Servlet的基本流程 • 加载Servlet、初始化Servlet、调用doPost( )、执行某种处理并通过输出流返回应答、响应最初由HTTP Web服务接受 • Servlet容器响应客户请求流程的UML时序图 (如P212 图8-3)

  35. Servlet Container HttpServletResponse Web Client HttpServlet HttpServletRequest 1: send HTTP request 2: parse HTTP request 3: new Instance) 4: new Instance 5. call service method 6. get request information 7. output request information 8. send HTTP response Servlet 容器响应客户请求的时序图

  36. 8.4.2 编写一个简单的实例

  37. 一个简单的实例编写 • 编写响应HTML请求的Servlet只需要两步 • 创建一个扩展了javax.servlet.http.Httpservlet接口的Servlet类 • javax.servlet.http.Httpservlet这个接口是javax.Servlet.GenericServlet的扩展接口,它包含了分析HTML首部和将客户端信息打包到javax.servlet.httpHttpServlet Request类中的那些代码 • 重写doGet和doPost方法之一或全部 • 重写init和destroy的典型例子就是在init方法中建立数据库连接,并在destroy方法中断开它 • 实例的操作内容 • 把一个含有客户信息、所有提交的参数以及所有服务器系统属性的HTML网页返回给客户 • 实例的程序代码 • 见P.213起

  38. 关于复习练习 • 在全面通读教材的基础上练习各项练习题 • 练习时先按实战要求自己完成,做完后再看答案 • 看答案时不要只是背答案,而要认真分析答案给出的解题思路,并能举一反三,真正弄懂弄通,达到融会贯通的效果 • 在反复练习的基础上,逐步练习完整的试卷 • 试卷练习同样要以实战为基点,按时按量进行联系,时间到了立即停止,然后按照答案进行评分 • 对做错的题进行认真分析,找到错误的原因。同样不是背答案,掌握解题思路,及时总结每套试卷练习中的得失。 • 模拟试卷是综合练习,也是按照考试的要求命题的,因此练习时也要按照考试的要求进行,以便调整做题心态,养成良好的临场状态

More Related