分享

Servlet学习

 后飞的鸟 2010-11-08
Servlet是是JAVA 2.0中新增的一个全新功能。他是与Applet相对应的,Applet是运

行在客户端的浏览器,而Servlet是运行在服务器端的。 JAVA Servlets 是运行在请

求/面向请求服务器上的模块,一个servlet可以从一个HTML订单表中获取数据然后用一

些商业上的算法来更新公司相应的订单数据库。

也就是说:servlet能够象CGI脚本一样扩展WEB服务器功能,但是servlet占用很少

密集资源,当一个服务器装载servlet时, 它运行servlet的 init 方法. 这个方法不能

反复调用,一旦调用就是再装载servlet. 直到服务器调用 destroy 方法卸载 servlet

后才能再调用.每个新的CGI要求在服务器上新增一个进程。如果多个用户并发地访问该

程序,这些进程将消耗该Web服务器所有的可用资源,并且系统性能降低到极其低下的地

步。有很多用CGI脚本编制的一些站点由于访问量剧增,性能迅速下降,这是CGI脚本一个

缺点。 同时由于servlet 是用java编写的,因此是跨平台的。实际servlet是电子商务

真正的开始。
 

Servlet是用Java编写的Server端程序,它与协议和平台无关。Servlet运行于Java-enabled Web

Server中。Java Servlet可以动态地扩展Server的能力,并采用请求-响应模式提供Web服务。   

最早支持Servlet技术的是JavaSoft的Java Web Server。此后,一些其它的基于Java的Web Server开

始支持标准的Servlet API。Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容。
这个过程为:  
 客户端发送请求至服务器端;  
 服务器将请求信息发送至Servlet  
 Servlet生成响应内容并将其传给Server。
响应内容动态生成,通常取决于客户端的请求  
服务器将响应返回给客户端  

  Servlet看起来像是通常的Java程序。Servlet导入特定的属于Java Servlet API的包。因为是对象

字节码,可动态地从网络加载,可以说Servlet对Server就如同Applet对Client一样,但是,由于Servlet

运行于Server中,它们并不需要一个图形用户界面。从这个角度讲,Servlet也被称为Faceless Object。   

JAVA Servlet的优势:
  
Servlet可以和其他资源(文件、数据库、Applet、Java应用程序等)交互,以生成返回给客户端的响

应内容。如果需要,还可以保存请求-响应过程中的信息。

  采用Servlet,服务器可以完全授权对本地资源的访问(如数据库),并且Servlet自身将会控制外部用

户的访问数量及访问性质

  Servlet可以是其它服务的客户端程序,例如,它们可以用于分布式的应用系统中,可以从本地硬

盘,或者通过网络从远端硬盘激活Servlet。

  Servlet可被链接(chain)。一个Servlet可以调用另一个或一系列Servlet,即成为它的客户端。   

采用Servlet Tag技术,可以在HTML页面中动态调用Servlet。

  Servlet API与协议无关。它并不对传递它的协议有任何假设。

像所有的Java程序一样,Servlet拥有面向对象Java语言的所有优势   

Servlet提供了Java应用程序的所有优势——可移植、稳健、易开发。使用Servlet 的Tag技术,

Servlet能够生成嵌于静态HTML页面中的动态内容。   

一个Servlet被客户端发送的第一个请求激活,然后它将继续运行于后台,等待以后的请求。每个请

求将生成一个新的线程,而不是一个完整的进程。多个客户能够在同一个进程中同时得到服务。一般来

说,Servlet进程只是在Web Server卸载时被卸载。

  Servlet生命周期:   装载Servlet。这项操作一般是动态执行的。然而,Server通常会提供一个

管理的选项,用于在Server启动时强制装载和初始化特定的Servlet。

  Server创建一个Servlet的实例

  Server调用Servlet的init()方法

  一个客户端的请求到达Server

  Server创建一个请求对象

  Server创建一个响应对象

  Server激活Servlet的service()方法,传递请求和响应对象作为参数

  service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息

  service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活

其它方法以处理请求,如doGet()或doPost()或程序员自己开发的新的方法   

对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将

这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。一般Servlet只初始

化一次 ,当Server不再需要Servlet时(一般当Server关闭时),Server调用Servlet的Destroy()方法。  

什么是Java Servlet

Java Servlet是J S P技术的基础,而且大型的We b应用程序的开发需要Java Servlet

和J S P配合才能完成,这里简单介绍S e r v l e t的相关知识,S e r v l e t的开

发将在第二部分讲述。

S e r v l e t这个名称大概源于A p p l e t,现在国内的翻译方式很多,本书为

了避免误会,决定直接采用S e r v l e t而不做任何翻译,读者如果愿意,可以称之为

"小服务程序"。S e r v l e t其实和传统的C G I程序和I S A P I、N S A P I等

We b程序开发工具的作用是相同的,在使用Java Servlet以后,用户不必再使用效率低

下的C G I方式,也不必使用只能在某个固定We b服务器平台运行的A P I方式来动态生

成We b页面。许多We b服务器都支持S e r v l e t,即使不直接支持S e r v l e t的

We b服务器也可以通过附加的应用服务器和模块来支持S e r v l e t。得益于J a v a

的跨平台的特性, S e r v l e t也是平台无关的,实际上,只要符合Java Servlet规

范, S e r v l e t是完全平台无关且是We b服务器无关的。由于Java Servlet内部是

以线程方式提供服务,不必对于每个请求都启动一个进程,并且利用多线程机制可以同时

为多个请求服务,因此Java Servlet效率非常高。

但Java Servlet也不是没有缺点,和传统的C G I、I S A P I、N S A P I方

式相同,Java Servlet是利用输出H T M L语句来实现动态网页的,如果用Java Servlet
来开发整个网站,动态部分和静态页面的整合过程简直就是一场恶梦。这就是为什么

S U N还要推出Java Server Pages的原因。

1.2 JSP技术

前面说过, Java Servlet的最大缺点就在于没有把网站的逻辑和页面的输出分开,导

致整个S e r v l e t代码混乱不堪。为了解决Java Servlet的这种缺点,S U N推出了

Java Server Pages—J S P。

1.2.1 JSP技术概述

按照脚本语言是服务于某一个子系统的语言这种论述, J S P应当被看作是一

种脚本语言,然而,作为一种脚本语言, J S P又显得过于强大了,在J S P中几乎可以

使用全部的J a v a类作为一种基于文本的、以显示为中心的开发技术,J S P提供了

Java Servlet 的所有好处,并且,当与一个JavaBeans 类结合在一起时,提供了一种

使内容和显示逻辑分开的简单方式。分开内容和显示逻辑的好处是,更新页面外观的人员

不必懂得Java 代码,而更新J a v a B e a n s类的人员也不必是设计网页的行家里

手,就可以用带JavaBeans 类的JSP 页面来定义Web 模板,以建立一个由具有相似的外

观的页面组成的网站。JavaBeans 类完成数据提供,这样在模板中就没有Java 代码,这

意味着这些模板可以由一个HTML 编写人员来维护。当然,也可以利用Java Servlet来控

制网站的逻辑,通过Java Servlet调用J S P文件的方式来将网站的逻辑和内容分离。本

章我们后面将对这种分离网站的逻辑和内容的设计方法做一些更深入的描述。

在选择使用一个Java Servlet,还是一个JSP 页面时,要记住的是, Java Servlet
是一个程序设计工具,它最适用于不需要频繁修改的低级应用功能; 而J S P页面则通过

以显示为中心的描述性的方法将动态内容和逻辑结合在一起。对于使用一个JSP 页面

的简单的基于Web 的应用程序,可以使用定制标记或者S c r i p t l e t,而不是使

用JavaBeans 类来将内容与应用逻辑结合起来。定制标记被打包到一个标记库中,并被

引入到一个JSP 页面中。S c r i p t l e t是直接嵌入在JSP 页面中的很小的J a v a

代码段。

一般来说,在实际的J S P引擎中, J S P页面在执行时是编译式,而不是解释式

的。解释式的动态网页开发工具如A S P、P H P 3等由于速度等原因已经满足不了当前

大型电子商务应用的需要了,传统的开发技术都在向编译执行的方式改变,如A S P

→A S P +;P H P 3→P H P 4。而尽管J S P的规范书中并没有要求实际的J S P引

擎要使用编译式的执行方式,但估计一般是不会使用解释的方式来执行J S P页面的。通

常说来, J S P页面一般是翻译为S e r v l e t的J a v a源文件,再经过J a v a编

译器编译为S e r v l e t的c l a s s文件。为什么要编译为S e r v l e t呢?据说

是为了让原先的S e r v l e t引擎可以直接服务于J S P,而J S P引擎就仅仅需要将

J S P转译为S e r v l e t就可以了。这里要注意的是: J S P规范书中并没有规定如

何将J S P页面转译为S e r v l e t,因此,不同的J S P引擎转译的结果也是不一样的。


在J S P文件转译为S e r v l e t以后,每次客户机(通常是用户的We b浏览器)

向服务器请求这一个J S P文件的时候,服务器将检查自上次编译后J S P文件是否有改

变,如果没有改变,就直接执行S e r v l e t,而不用再重新编译,其效率是相当高

的。一般来说, J S P文件的编译是在第一个用户访问到这个J S P页面时发生,而这第

一个用户通常是开发人员自己,这样,正式放在服务器上让用

户访问的J S P文件一般都已经有了对应的编译好的S e r v l e t了。许多服务器都有

设置,可以使J S P文件在第一个用户访问之前就预先编译好,这样看来,效率就更高

了。后面在第4章中,将展示一个简单的J S P文件对应的S e r v l e t。

在J S P规范书中,并没有明确要求J S P中的程序代码部分

(称为S c r i p t l e t)一定要用J a v a来写,实际上,有一些J S P引擎就是采

用的其他脚本语言,如:E M A C - S c r i p t、We b L等等,但实际上这几种脚本

语言也是构建在J a v a上面,编译为S e r v l e t来实现的。按照J S P规范书,完

全和J a v a没有任何关系的S c r i p t l e t也是可以的,不过,由于J S P的强大

功能主要在于能和J a v a B e a n s、Enterprise JavaBeans一起工作,所以即使是S

criptlet部分不使用Java,编译成的执行代码也应该是与Java相关的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多