Welcome

首页 / 网页编程 / JSP / Servlets:服务器端处理的极好选择

Servlets:服务器端处理的极好选择2008-05-05您是否了解您对下一代平台产品有多渴望?可以说您将全部未来都寄托在它上面了。这一产品中厂商所承诺的附加特性必须让您跟上行业竞争的步伐,它的故障修复程序可解决您的日常碰到的问题, 它的功能早在您提出要求之前就已经是发展成熟。 您是否想过只需将现有的应用程序原封不动, 移到另外一个具备您所期望一切的平台上,而一切还运转如初? 这正是Servlets要为您做的。

Servlets API之所以重要,最主要的原因就是只有API才具有广泛的厂商支持,同时又可使您建立起高效的、成熟的网上应用程序。它主要是由一些Web服务器,如Java Soft公司的JavaWeb服务器(JWS)及O"Reilly & Associates公司的WebSite Pro服务器支持的。对于其它大受欢迎的服务器,如Netscape公司的 Enterprise and Fast Track服务器,微软公司的Internet Information服务器(IIS),StarNine公司的WebSTAR 以及Apache,已通过一些公司如Gefion软件公司,Live软件公司,新亚特兰大公司及IBM公司添加了Servlet引擎。在高端领域,应用服务器如ATG的Dynamo及Sun Microsystems的Net Dynamics都有Servlet支持,这些服务器都具有负载均衡及成熟管理的功能。您可以将基于Servlet的应用程序从一个操作系统的服务器移到另一个操作系统的另一个Web服务器中,尽管它们使用的是不同的处理器体系结构。而且您可使用一个基本的Web服务器,在自己Mac或PC上开发应用程序,并用高端应用服务器将其部署在功能最强大的服务器池上。平台是依您的要求而定的!

除非有其它原因促使人们一定要使用Servlets,否则在此谈论它的广泛的支持性只能是无用的和无意义的。它的最重要的一些特点包括多线程、持久性、易于访问其它网络资源及灵活性等。

对Servlet的并行请求是用同一个Servlet范例在单独的线程中进行的。与对于每个请求都启动一个新的处理过程,装载一个Perl解释程序和Perl脚本并加以执行,直至请求完成后再释放所有系统资源的方式相比,它更为有效。Java的线程支持也令Servlets的开发更为容易,Servlets使用一个工作员线程不停地收集信息,监示资源,或承担其它持续时间长的任务。这个工作员线程可以在启动Servlet时就启动并且可以用规则的Servlet请求收集有关任务的状态报告。

持久性从某方面来说是与多线程特性相关的。并行请求可以用线程而不必启用新处理过程来处理的原因是,一旦Servlet装上Java VM处理过程,它将 北A粼诶锩嬷敝练衿鞅还乇铡R虼薙ervlet可以在请求之间保留住信息。持久性可大大提高处理性能并简化任务,而这些任务在基于CGI的解决方案中是非常复杂的。例如,一个访问数据库的Servlet可以保留住一组开放的数据库连接,用于所有的请求。另外一种更好的方式就是用一个连接池管理器来为多数据库Servlets管理一组数据库连接。另外一个有关持久性的例子就是对话跟踪。对话是当客户第一次请求Servlet时由服务器产生的目标。从那时起被同一客户请求的所有Servlets将访问同一个对话目标。这样,一个Servlet可以将信息放入对话目标而另一个Servlet可以读取它。通过一个对话目标共享某个客户的信息,一组Servlets就可被结合起来形成一个应用程序,比如像利用对话目标来跟踪货车货物的在线存储应用程序一样。对话跟踪是Servlet API的一部分并由所有兼容的Servlet引擎实现。大部分公司都有需要不断访问的遗留系统。用Servlets建立的Web应用程序可以使用整套的Java APIs访问遗留系统或其它网络资源。通过JDBC对所有主要的数据库进行存取,通过JNDI进行目录服务,以及通过RMI及Java IDL进行高级分布式服务都是可以实现的。上述未尽之工作几乎全部可由Sockets或JNI来处理。

Servlets还可以有很多不同的使用方法。Servlet API定义了Servlet接口及寿命周期,但留给开发者很大的创造空间以开发出有效的、灵活多样的Servlet引擎。通常所支持的Servlet应用方式有三种:作为CGI的替代产品,作为服务器端脚本的替代产品以及SSI Servlets。它们都有其应用的原因并可适用于不同的环境。

做为CGI的替代产品,Servlet模仿了大多数CGI脚本的设计和使用。Servlet在Java中实施后,可执行一项任务并产生一整页HTML,显示出结果。通常这种Servlet被直接与像http://www.ourcompany.com/servlet//DoSomethingNice的 URL一起调用。这是当前应用最普遍的一种Servlet,并且特别适用于所生成的HTML相当简单而又不需经常改变的情况。

用Servlet替代服务器端脚本,意味着用静态HTML和Java代码编写网页,以执行某项任务并为网页的动态部分产生HTML。这种网页使用特殊的文件扩展名,如jhtml,并由一种网页编译功能加以处理,将网页转换成Java Servlet源文件、编译并执行。当下一次该网页收到请求时,就可直接调用编译的代码。最近出现了经大量修订的网页编译版本,叫做Java Servlet Pages或JSP。如果您的网页开发人员同时懂得HTML和Java的基本知识,而您又只想加入一点动态内容,这种方法是很好用的。有一个例子叫作SSI Servlet或Servlet Bean,它是从数据库中读取并嵌入Java代码的,用来显示结果或显示“抱歉未找到记录”信息。也可以在网页上使用(SERVLET)标记为Servlet嵌入某个呼叫, 从而激活Servlet。用这种方法激活的Servlet,这里叫做服务器端包含(Server Side Include)或SSS Servlet,与替代CGI的Servlet相似。不同之处是如果SSI Servlet能产生HTML输出的话,它产生的只是一小部分HTML生成页。带有(SERVLET)标记的网页通常被赋予shtml文件扩展名并且除了(SERVLET)标记外,它还包括规则的HTML标记,用来定义网页布局和静态内容。当网页收到请求时,服务器端包含(Server Side Include)功能解析文件并将所有规则的HTML原封不动退还给客户。它用Servlet(如果有)产生的HTML替换了(SERVLET)标记。如果网页开发人员只懂得HTML而不会编程,使用这种方法最为理想;网页中没有代码,只有规则的HTML及类似HTML的标记可以调用Servlets来产生动态内容。SSI Servlets可以由内部编程员购买或开发。

当我们开始设计我们的“即时在线”(InstantOnline)型产品时,我们寻求一种平台独立的技术,这种技术将使我们可以利用Web服务器和应用程序服务器提供的基础设施,而不必去争抢另一种专有的服务器端引擎。现在我们有了Servlets,我们知道我们已找到了所要的东西。这是我们不悔的选择。