第四章:Servlets


(by huihoo.com tonyliu)

工作原理及概述

Servlets是用Java语言实现的独立于协议和平台的服务器端组件,它动态扩展了支持Java的服务器,它可以被插入到支持Java的Web服务器中以提供定制服务,包括:
· 增加新的特性服务
· 页面内容的动态改变(Runtime changes)
· 页面显示的动态改变(Runtime changes)
· 对新的标准协议的支持(例如FTP)
· 对用户定制协议的支持

如图所示,Servlets在服务器内部工作,它们不需要图形用户接口,作为Java程序组件,它们根据需要在服务器内部被部署。而使用Servlets的客户多种多样,既有简单的HTML表单,也有复杂的Java Applets。



Servlets被设计在请求/应答(Request/Response)处理模式下工作,在该模式下,客户向服务器发送请求消息,服务器则通过发送应答消息予以回复。请求消息可以采用如下格式:

· HTTP
· URL
· FTP
· 用户定制协议

在通常情况下,请求和其相关应答可以反映请求时刻客户和服务器的状态,而客户和服务器之间连接的状态无法在多个请求/应答之间保存,而Servlet所提供的会话(Session)机制则可以在多次请求/应答之间保存会话信息。

Servlets有效地扩展了基于请求/应答的服务器(例如Web服务器)的功能,下图显示了一个最简单的应用实例,一个Servlet负责获取来自客户的HTML格式的定单项(order-entity)数据,然后实施商业逻辑(business logic)处理,以便最终更新用户的定单数据库。



Java Servlet API 包括若干Java接口(Java interfaces),全面定义了主机服务器与Servlets之间的连接。Servlet API属于标准Java开发包(JDK)扩展,被包含在如下Java包中:

· javax.servlet
· javax.servlet.http

Servlets API包括了很多有用的特性,如会话跟踪(Session tracking)、表单数据采集(Form data parsing)、共享数据(Shared data)、国际化字符I/O,初始化参数、请求代理(Request delegation)等。

特点及应用

Servlets是对Java环境的一个功能强大的补充,具有快速、安全、可靠和100%纯Java的优点。因为Servlets被插入到已经存在的服务器中运行,可以有效利用大量现成代码和技术,所有有关网络连接、协议协商、类装载等等工作都可以由服务器代劳,极大地减少了重复工作。

Servlets具有灵活多样的应用:

· Servlets可以并发处理多个请求,相互的请求之间能够被同步,支持应用程序间的协作,应用实例之一是在线会议。
· 复杂的工作可以被设计由多个活动代理(active agents)共同承担,每个代理作为Servlet被实现和载入,各个代理之间可以相互传递数据。
· Servlet可以把请求转发给其他服务器或者其他Servlet,这一技术可以有效地在提供同一服务内容的多个服务器间实现负载平衡。 由于其强大功能和灵活性,Servlets对于系统体系结构规划具有重要意义,它们可以实施基于中间层(middle-tier)的应用处理,可以作为客户的Proxy代理,甚至可以通过支持新的协议或特定服务来充实或更新中间层的服务内容。

中间层处理

在通常所说的三层客户/服务器系统(three-tier client/server systems)中,中间层作为应用程序服务器(Application Server),连接了前端客户(如Web浏览器)和后端服务及数据。通过中间层的使用,大量处理工作得以从前、后端分流,使前端客户更轻、更快,使后端服务更加专注其任务。 Servlets非常适合用于中间层处理,一个明显的好处是可以简化连接管理,数据库连接需要较大的系统开销,通过建立和有效管理数据库连接池(pool),一组Servlets可以容易地处理成百上千个客户连接。

Servlets在中间层的作用还包括:

· 商业规则强化(Business rule enforcement)
· 事务管理(Transaction management )
· 建立客户与冗余服务器组的映射
· 支持不同类型客户(例如纯HTML客户和Java兼容客户)

代理服务器

当被用于支持Applets时,Servlets可以作为Applets的代理。这一作用非常重要,因为Java的安全机制只允许Applets建立当地到它们的下载服务器的连接。 如果一个Applet企图建立到位于其他主机的数据库服务的连接,一个Servlet可以代表它完成上述工作。

协议支持 Servlet API提供了服务器和Servlets之间的紧密连接,它们允许为服务器增加新的协议支持。Servlet API包中已经实现了对HTTP的很好支持。从本质上说,任何遵循请求/应答工作模式的协议都可以通过一个Servlet来实现,包括:

· SMTP
· POP
· FTP

目前主要的Web服务器都实现了对Servlets的支持,而越来越多的其他类型的应用程序服务器也开始实现对Servlets的支持。由于HTTP是最为常用的协议之一,Servlets在基于HTTP的系统中得到了最为广泛的应用。相对于其他服务器端技术如CGI、Web服务器API扩展(NSAPI、ISAPI、Apache Modules)等,Servlets有如下优势:

· 由于使用了不同的处理模型和处理机制,Servlets在速度和效率上高于CGI,在功能和实现灵活性上也要强于CGI,有取代CGI的趋势。
· Servlets使用了被许多Web服务器产品支持的标准API,具有较强通用性。
· Servlets具有Java编程语言的所有优点,包括易于开发、平台独立性等。
· Servlets可以访问基于Java平台和Java技术的大量API,能很好地和目前主流体系结构(如J2EE)融合,具有高灵活性和高扩展性,适用于构造大型复杂的应用系统。