Servlets:服务器端处理的极好选择

作者:网络 来源:佚名 更新时间:2008-11-17 15:22:53 点击:
注册会员,创建你的web开发资料库, 您是否了解您对下一代平台产品有多渴望?可以说您将全部未来都寄托在它上面了。这一产品中厂商所承诺的附加特性必须让您跟上行业竞争的步伐,它的故障修复程序可解决您的日常碰到的问题, 它的功能早在您提出要求之前就已经是发展成熟。 您是否想过只需将现有的应用程序原封不动, 移到另外一个具备您所期望一切的平台上,而一切还运转如初? 这正是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服务器中,尽管它们使用的是不同的处理器体系结构。而且您可使用一个基本的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,我们知道我们已找到了所要的东西。这是我们不悔的选择。