ITEEDU

第1章 servlet概论

  随着Internet的发展,客户机/服务器计算方面的许多新技术应运而生,其中最为瞩目的就是Java。Java不单定义了一种计算机语言,而且提供了一整套客户机/服务器解决方案,在这个方案中,程序可以自动地下载到客户端并执行。过去,大家更多的是关注在客户端上开发applet和图形用户界面(Graphical User Interface,GUI)组件。applet的确是客户机/服务器计算环境的重要组成部分,但是它仅仅是问题的一半。现在,我们就要深入地了解问题的另外一面——servlet。

1.1 什么是servlet

  servlet可以被认为是服务器端的applet。servlet被Web服务器加载和执行,就如同applet被浏览器加载和执行一样。servlet从客户端(通过Web服务器)接收请求,执行某种作业,然后返回结果。

使用servlet的基本流程如下:

·客户端(很可能是Web浏览器)通过HTTP提出请求。

·Web服务器接收该请求并将其发给servlet。如果这个servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它。 ·servlet将接收该HTTP请求并执行某种处理。

·servlet将向Web服务器返回应答。

·Web服务器将从servlet收到的应答发送给客户端。

由于servlet是在服务器上执行,通常与applet相关的安全性的问题并不需实现。servlet使相当数量的不可能或者至少是很难由applet实现的功能的实现成为可能。与现有系统通过CORBA,RMI,socket和本地(native)调用的通信就是其中的一些例子。另外,一定要注意:Web浏览器并不直接和servlet通信,servlet是由Web服务器加载和执行的。这意味着如果你的Web服务器有防火墙保护,那么你的servlet也将得到防火墙的保护。

1.2 为什么要使用servlet

  最起码,servlet可以很好地替代公共网关接口(Common Gateway Interface,CGI)脚本。通常CGI脚本是用Perl或者C语言编写的,它们总是和特定的服务器平台紧密相关。而servlet是用Java编写的,所以它们一开始就是平台无关的。这样,Java编写一次就可以在任何平台运行(write once,run anywhere)的承诺就同样可以在服务器上实现了。servlet还有一些CGI脚本所不具备的独特优点:

■servlet是持久的。servlet只需Web服务器加载一次,而且可以在不同请求之间保持服务(例如一次数据库连接)。与之相反,CGI脚本是短暂的、瞬态的。每一次对CGI脚本的请求,都会使Web服务器加载并执行该脚本。一旦这个CGI脚本运行结束,它就会被从内存中清除,然后将结果返回到客户端。CGI脚本的每一次使用,都会造成程序初始化过程(例如连接数据库)的重复执行。

■servlet是与平台无关的。如前所述,servlet是用Java编写的,它自然也继承了Java的平台无关性。

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

■servlet是安全的。从外界调用一个servlet的惟一方法就是通过Web服务器。这提供了高水平的安全性保障,尤其是在你的Web服务器有防火墙保护的时候。

■setvlet可以在多种多样的客户机上使用。由于servlet是用Java编写的,所以你可以很方便地在HTML中使用它们,就像你使用applet一样。在本书中您将看到这一点。 使用servlet的方式多得超出你的想象。如果考虑到你在服务器上所能访问到的所有服务(诸如数据库服务器和老的系统),使用servlet的方式实际上可能是无限的。

1.3 编写servlet需要些什么

  JavaSoft(Sun Microsystem的Java软件部)尽量地使servlet开发能够既方便又快捷。Java Servlets开发工具包(JSDK)就是他们努力的结晶。你可以从JavaSoft的主页(http://java.sun.com)上下载该软件。

从1.2版以后,JSDK将成为Java开发工具包(JDK)的组成部分。如果你仍然在使用JDK1.1,你就不得不另外再下载JSDK。

在JSDK中包含了Java Servlet API,Java Servlet API是标准的Java扩展API。

这意味着,JSDK不是Java核心框架的组成部分,因而可以由提供商将其作为附加包来提供。而Java核心框架是所有使用Java的产品所必须包含的。在Javax.servlet包中提供了Servlet API。

1.4 运行servlet要做些什么

 如前所述,运行servlet的全部需求就是一个支持Servlet API的Web服务器。最初的产品就是JavaSoft提供的Java Web服务器。第2章专门介绍Java Web服务器的配置和特征。

表1.1和1.2给出了第三方厂商提供的Java Web服务器的实现以及支持Servlet API的附件。我自己喜欢使用Live Software的JRun。 表1.1 支持Java Servlet的第三方服务器产品
━━━━━━━━━━━━━━━━━━━━━━━━━
厂商       产品
─────────────────────────
Apache    Apache JServ
ATG      Dynamo Application Server
Cybotics   Cybotics Search Engine
IBM      Internet Connection Server
KonaSoft   KonaSoft Enterprise Server
Lotus     Domino Go Webserver
Novocode   NetForge Web Server
O'Reilly   WebSite Professional
Tandem    iTP WebServer
W3C      Jigsaw HTTP Server
Weblogic   Tengah Application Server
━━━━━━━━━━━━━━━━━━━━━━━━━

   表1.2 支持Java Servlet的第三方附件产品
━━━━━━━━━━━━━━━━━━━━━━━━━
厂商       产品
─────────────────────────
IBM      Servlet Express
Live Software JRun
New Atlanta  ServletExec
Unicom     Servlet CGI Development Kit
━━━━━━━━━━━━━━━━━━━━━━━━━

同时你还要记住,为了使用servlet,你还必须具备某种能够调用servlet的客户端应用程序。我们将会看到,最基本的客户端应用程序就是HTML。HTML是一种轻量级的应用程序,而且它得到了所有的Web浏览器的广泛支持。如果你使用了支持Java的Web浏览器(注意所支持的Java版本),对applet的使用将会给你带来巨大好处。使用applet,不但帮助您解决了软件的发布和可移植性问题,而且还是一种开发交互式的客户机/服务器系统的很好的方法。

1.5 小结

  上面我们对Java Servlet有了大致的了解——servlet是什么、如何使用以及如何编写和运行servlet。 在下一章中,我们将了解JavaSoft的Java Web服务器是第一种支持servlet的服务器,同时它也是industrial-strength Java应用程序的一个很好的实例。