互联网软件开发与应用

38
互互互互互互互互互互 任任任任 任任任任66134267 QQ 22839978 PoPo [email protected] 任任任任mingler.ccshu.org

Upload: eytan

Post on 09-Jan-2016

59 views

Category:

Documents


3 download

DESCRIPTION

互联网软件开发与应用. 任课教师:陆 铭 联系电话: 66134267 QQ: 22839978 PoPo:[email protected] 教学网站: 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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 互联网软件开发与应用

互联网软件开发与应用

任课教师:陆 铭联系电话: 66134267

QQ : 22839978

PoPo : [email protected]

教学网站: mingler.ccshu.org

Page 2: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 2

第八章 Java Servlet 技术介绍8.1 Servlet 简介8.1.1 什么是 Servlet8.1.2 为什么要使用 Servlet8.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 编写一个简单的实例

Page 3: 互联网软件开发与应用

8.1 Servlet 简介

Page 4: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 4

Servlet 简介Java 是 Internet 发展中在 客户机 / 服务器 计算方面

最为瞩目的新技术之一Java 不仅定义了一种计算机语言,而且提供了一整

套 客户机 / 服务器 解决方案,在这个解决方案中,程序可以自动地下载到客户端,并予以执行

过去大家的主要注意力是如何在客户端开发 Applet 和图形用户界面 (GUI—Graphical User Interface)

Applet 是客户机 / 服务器计算环境的重要组成部分Applet 仅仅是问题的一个方面, Servlet 是问题的另

外一面

应用小程序

服务器端小程序

Page 5: 互联网软件开发与应用

8.1.1 什么是 Servlet

Page 6: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 6

什么是 ServletServlet 可以被认为是服务器端的 Applet , Servlet 被

Web 服务器加载和执行,就如同 Applet 被浏览器加载和执行一样。 Servlet 从客户端(通过 Web 服务器)接受请求,执行某种作业,然后返回结果。

由于 Servlet 是在服务器上执行,通常与 Applet 相关的安全性的问题并不需要实现

Servlet 使相当数量的不可能或者至少是很难由Applet 实现的功能得以实现

Web 浏览器并不直接同 Servlet 通信, Servlet 是由 Web 服务器加载和执行的。如果用户的 Web 服务器有防火墙保护,则 Servlet 也将得到防火墙的保护

Page 7: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 7

使用 Servlet 的基本流程客户端(一般为 Web 浏览器)通过 HTTP 提出请求Web 服务器接受该请求并将其发送给 Servlet ,如果

这个 Servlet 尚未被加载, Web 服务器将把它加载到Java 虚拟机并且执行它

Servlet 将接受该 HTTP 请求并执行某种处理Servlet 将向 Web 服务器返回应答Web 服务器将从 Servlet 收到的应答返回给客户端

Page 8: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 8

Servlet 可完成的功能创建并返回基于客户请求的动态 HTML 页面创建并嵌入到现有的 HTML 页面中的部分 HTML 页

面 (HTML 片段 )

与其他服务器资源 ( 如数据库或基于 Java 的应用程序 ) 进行通信

接受多个客户机的输入并将结果传播到多个客户机上Servlet 可以实现支持多个参与者的游戏服务器等根据客户请求采用特定的 MIME类型对数据过滤进行图象格式转换等

Page 9: 互联网软件开发与应用

8.1.2 为什么要使用 Servlet

Page 10: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 10

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

Page 11: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 11

Servlet 的独特优点 (1)

Servlet 是持久的Servlet只需 Web 服务器加载一次,而且可以在不同请求之间保持服务(如一次数据库的连接)

CGI脚本是短暂的、瞬态的。每一次对 CGI脚本的请求都会使 Web 服务器加载并执行该脚本。一旦这个 CGI脚本运行结束,它就会被从内存中清除,然后将结果返回客户端CGI脚本的每一次使用,都会造成程序初始化过程的重复执行

Servlet 是可扩展的由于 Servlet 是用 Java 编写的,它就具备了 Java所能带来的所有的优点Java 是健壮的、面向对象的编程语言,它很容易扩展以适应需求, Servlet 自然也具备了这些特征

Page 12: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 12

Servlet 的独特优点 (2)

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

Page 13: 互联网软件开发与应用

8.1.3 编写 Servlet 需要什么

Page 14: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 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

Page 15: 互联网软件开发与应用

8.1.4 运行 Servlet 要做些什么

Page 16: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 16

Servlet 的运行环境运行 Servlet 的全部需求就是一个支持 Servlet API 的

Web 服务器JavaSoft 提供的 Java Web 服务器第三方厂商提供的 Java Web 服务器厂商 产品

Apache

ATC

Cybotics

IBM

KonaSoft

Lotus

Novocode

O'Reilly

Tandem

W3C

Weblogic

Apache JServ

Dynamo Application Server

Cybotics Search Engine

Internet Connection Server

KonaSoft Enterprise Server

Domino Go Webserver

NetForge Web Server

WebSite Professional

iTP WebServer

Jigsaw HTTP Server

Tengah Application Server

支持 Java Servlet 的第三方附件产品厂商 产品IBM

Live Software

New Atlanta

Unicom

Servlet Express

JRun

ServletExec

Servlet CGI Development Kit

Page 17: 互联网软件开发与应用

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

Page 18: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 18

Servlet 与 Applet 的差别Servlet 与 Applet 是截然相反的, Servlet 可以被视为

服务器端的 Applet

Servlet 在网络服务器内运行, Applet 在网络浏览器内运行

浏览器提交一个请求执行 Servlet 的命令,浏览器可直接命令 Applet ,所以它可以在运行时单机运行

Page 19: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 19

Servlet 与 CGI 的差别与传统的 CGI 和其他许多类似 CGI 的技术相比, Java

Serlet具有更高的效率,更容易使用,功能更强大,具有更好的可移值性,更节省投资

在传统的 CGI 中,每个请求都要启动一个新的进程,如果 CGI 本身的执行时间较短,启动进程所需要的开销很可能超过实际执行时间使用 Servlet时,服务器上仅有一个 Java 虚拟机在运行,只有当Servlet 被调用时,它才会被加载,直到 Servlet更改时,它才会被再次加载。在传统的 CGI 中,如果有 N 个并发的对同一 CGI 程序的请求,

则该 CGI 程序的代码在内存中将重复被装载 N次;而对于Servlet ,处理请求的是 N 个线程,只需要一份 Servlet类代码

在性能优化方面, Servlet 也比 CGI 有着更多的选择,比如缓冲以前的计算结果,保持数据库连接的活动,等等

Page 20: 互联网软件开发与应用

8.2 Servlet API

Page 21: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 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对象退出生命周期时,负责释放占用的资源

Page 22: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 22

Servlet API 类图《 Interface 》

javax.servlet.Servlet

init( ) getServletConfig( ) service( ) getServletInfo( ) destroy( )

《 Interface 》javax.servlet.ServletConfig

getInitParameter( ) getServletContext( ) getInitParameterNames( )

javax.servlet.http.HttpServlet

doGet( ) doPost( ) doPut( ) doDelete( ) doTrace( ) doOptions( ) getLastModified( ) service( )

javax.servlet.GenericServlet

getServletContext( ) getInitParameter( ) getInitParameterNames( ) log( ) getServletInfo( ) init( ) getServletConfig( ) service( ) destroy( )

java.io.Seializable

GenericServlet 实现Servlet 接口

HttpServlet扩展GenericServlet

Page 23: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 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 ;

参数 1 : servlet容器将客户请求信息封装在ServletRequest对象中传给service 方法

参数 2 : service 方法将响应的客户结果通过对象ServletResponse 传给客户

首先从 HttpServletRequest对象中获取 HTTP 请求方式的信息,然后根据请求方式调用相应的方法,如 doGet 或 doPost 。 Servlet 中的两个参数则分别扩展了 ServletRequest 和 ServletResponse类

Page 24: 互联网软件开发与应用

8.3 Servlet 的生命周期

Page 25: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 25

基本概念Servlet 的生命周期定义了一个 Servlet 如何被加载、初始化,以及怎样接受请求、响应请求、提供服务代码中, Servlet 生命周期由接口

javax.servlet.Servlet 定义所有的 Java Servlet必须直接或间接地实现

javax.servlet.Servlet 接口才能在 Servlet Engine 上运行

Servlet Engine 提供 network service ,响应 MIME request ,运行 Servlet Containerjavax.servlet.Servlet 接口定义了一些方法,在 Servlet 生命周期中,这些方法会在特定时间按照一定的顺序被调用

Page 26: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 26

Servlet 生命周期图 (状态图 )

不存在 Servlet 实例不存在 Servlet 实例

容器装载 Servlet容器装载 Servlet

创建 Servlet 实例创建 Servlet 实例 初始化 Servlet对应 Servlet 的 init 方法初始化 Servlet

对应 Servlet 的 init 方法调用 Service 方法

对应 Servlet 的 service 方法调用 Service 方法

对应 Servlet 的 service 方法

结束 Servlet对应 Servlet 的 destroy 方法

结束 Servlet对应 Servlet 的 destroy 方法

Servlet 生命周期Servlet 生命周期

Page 27: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 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对象

Page 28: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 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 流,用来向客户端返回数据

Page 29: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 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)

Page 30: 互联网软件开发与应用

8.4 一个 Servlet 实例

Page 31: 互联网软件开发与应用

Servlet 实例说明

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

Page 32: 互联网软件开发与应用

8.4.1 基本流程

Page 33: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 33

基本流程说明客户 ( 浏览器 ) 向服务器发送一个请求以加载一个

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

Page 34: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 34

服务器如何知道要调用 ServletHTTP 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)

Page 35: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 35

Servlet 容器响应客户请求的时序图Web Client Servlet Container HttpServletRequest HttpServletResponse

1: send HTTP request

2: parse HTTP request

5. call service method

3: new Instance)

4: new Instance

7. output request information

6. get request information

8. send HTTP response

HttpServlet

Page 36: 互联网软件开发与应用

8.4.2 编写一个简单的实例

Page 37: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 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起

Page 38: 互联网软件开发与应用

任课教师:陆 铭 网站:http://mingler.ccshu.org/ 38

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