iLeichun

当前位置: 首页 > J2EE

Servlets在网站中的应用前景分析

分类:J2EE   来源:网络   时间:2010-08-13 23:26:53

CGI(通用网关接口)脚本编程在网络管理员的心目中一直牢牢地占据着重要的位置。目前, CGI脚本在很多网站上得到了应用,这种情况是否会一直持续下去?

我们现在将了解一下另一种在服务器端进行程序设计的方法,即采用Java语言。Java servletsSun Microsystems公司关于Java无处不在的战略的下一步的重大目标。

CGI FYI

获取从网页传送到客户的数据,用CGI实现很简单。通过解析服务器上的环境变量,CGI 脚本通过使用在HTTP协议中定义的标准事件(类似于POST事件),可以读取客户传送来的数据。

CGI的原理很简单,但在网络开发应用中,CGI程序设计需要专门的技巧,因为脚本语言,尤其是用于CGIPerl语言,掌握起来相当有难度。不少网络浏览器的客户端,有界面友好的工具和脚本语言,但在服务器端的开发难度较大。微软的Active Server Pages,简称 ASP,可以简化服务器端的开发,它的语法是基于Visual BasicVBScript.

缺省情况下,当每个用户查看一个网址时,就会调用一个CGI脚本,于是就会在服务器上启动一个新的进程或者程序。这样做,代价太昂贵,所以Netscape和微软分别推出NSAPIISAPI模块,这样就可以克服性能限制。使用这些模块,服务器端的功能可以包含在DLL格式的文件,多个客户可以使用同一可执行文件。同样,开发这样的程序需要高级的技能。

Java可以来解救
同单一的开发语言相结合,且又容易管理,还可以有效地使用服务器端的资源,这就是Java servlets所带来的好处。只要你熟悉Java,就可以很容易地写出容易扩充且富有效率的Java servlets代码,(在Java Servlet Developer´s Kit 中,Sun提供了一系列的类,为你做了大部分的工作,你可以从其网址http://www.javasoft.com/ 中下载

Servlets在服务器上很容易配置。你可以得到一个方便的图形接口,来控制运行哪个servlets, 也可以容易地配置其它选项。这比管理CGI 脚本更容易,除此之外,你在更新servlets时,无需关闭服务器。

Servlets有其独特的优点,因为它们是用Java语言编写的,所以可以工作于流行的网络服务器上,包括:Netscape, Microsoft, Apache Sun公司自己开发的WebServer等服务器软件。 (现在,还有第三方的插件,可以让servlets运行在绝大部分平台上。你可以到Sun公司网站上去查询相关信息。这种跨平台的能力,对于那些在同一时间内,需要在不止一种平台上运行的网站来说,特别有用。你可以很容易地改变硬件平台,或者升级服务器,而无需改动服务器端的代码。

当然,在服务器上,你需要有Java虚拟机(JVM)Java虚拟机可以带来另外的好处,因为Java具有内在的垃圾搜集机制,你不会因出现servlet出错或者发生例外,而泄漏你的资源。从理论上讲,因为Java具有内在的安全机制,Java servlets比其竞争对手的同类产品更具健壮性。

另外一个依赖Java的原因是:Java可以访问数据库 (通过JDBC) 和进行分布式处理 (通过Java的远程方法调用,即RMI)。当然,你也可以不采用Java,可以在网站上的不同部分,采用多种语言和技术(用于创建动态HTML ,访问数据库,连接到不同的服务器)。而一旦使用Java,就可以完成上述的全部工作,这样Servlet模型就赋予Java一个崭新的,功能强大的角色,并且能够适应各种服务器。

创建一个Servlet 
前面把Java servlet讲得这么动听,你也许会迫不急待地想试试servlet的用法。在这之前,你需要下载Sun公司的Servlet Developer´s Kit,之后再安装网络服务器,最后用Symantec的 Visual Cafe用来编译Java源代码,本文中,我们创建了一个典型的Java servlet样本. (你可下载JServlet.zip文件)

servlet例子可以在支持servlet的网络服务器上运行,向假想的客户发布销售信息,为了便于管理,SalesInfoServlet自己记录数据,当然它也可以不这样做,通过JDBC 连接到活动的数据源上,但这就需要额外的部件,使得发布一个演示用的应用程序步骤更加复杂。

一旦把例子网页在网络服务器上安装完毕,用浏览器打开ProdUCtSalesDemo.html网页作为开始 (我们使用的是Netscape浏览器)。当客户调用一个servlet (HTTP 中使用了标准的GETPOST事件),我们的ProductInfoServlet就根据客户的信息生成新的HTML 页面。这里的基本思想模仿的是一个简单的CGI-bin脚本的做法。事实上,为了保证向后的兼容性,Java servlets也可以运行CGI脚本,尽管它在Java中工作得更好。

让我们再来看一下ProductInfoServlet.java文件,以便了解Java servlets的一些细节。有人警告称:Sun公司已经推出JDK 1.2,所以servlets的一些细节,可能会随之而改变。回顾Java语言的简短历史,Java 开发者们一直具有开放性的思想,在新版本中,servlets的基本的工作原理不会改变。用户创建的servlet都需要通过Java关键字“extends”HttpServlet 类中派生出来。HttpServer类及其相关类放在javax.servlet包中,该包中包含了额外的可以使用的服务器端的类。

你的servlet可具有很多有意义的功能,诸如具有内在的多任务机制,能够同网络服务器协同工作,配置灵活容易。对同一个Java小程序发生多次请求时,服务器的运行将更有效率。Servlet是由服务器负责加载和配置的。

创建网页
为了定制HTTP网页,我们需要重载或者定义doGet() 和 doPost() 方法,即裁剪这些方法。在这里,我们根据客户的选择,创建了一个新的网页,数据自身存储在Java小程序中的数组中,并且用定制的方法getSalesInfo()发送, clientArray 存储了一个客户记录的数组(实际上是个Java 向量容器),该数组存储基本的客户信息。在这里,我们使用clientID域,在salesArray容器(也是个向量)中进行“join”的编程操作,该容器存储单个的销售记录。把客户的数据同销售记录中的项目进行匹配,就可以构造出我们所要的数据。

在实际场合中,数据可以通过JDBC从数据库中获得。当客户端发送过来一个请求时,你可以使用Java的内在的String和 StringTokenizer类对经过servlet来回传输的数据,进行解析。通过使用String StringBuffer类,你可以创建新的HTML页。这里,我们构造了一个客户的基本信息的表单以及单个的货物销售记录清单。

采用server includes的方式,可以很容易地创建网页,我们可以在这些server includes填入客户数据,server includes所担任的角色是HTML的模板代码。(本例中使用的是SalesInfo.shtml)。一旦把定制的信息写到HTML模板文件中,我们可以立即创建客户数据,形成纯粹HTML语言格式文件,加上一些javascript脚本语言,没有在客户端使用Java语言。当然,如果在网络浏览器中使用Java部件,你可以完成功能更强的工作。

值得一提的是: servlets 并不仅仅适用于HTTP。 GenericServer类是个基本的servlet,可在页面中显示任何内容。Sun 的目标是让所有种类的网络服务,从标准的互联网协议,到特殊的协议,都可以采用servlets进行通信。但是,首先要让网络开发人员广泛接受servlets。我们的例子表明servlets的前景也许会很好,但是很难说开发者会放弃对CGI的喜爱。

有了servlets之后,Java的能力大大增强。作为在服务器端实现的技术,servlets速度快,功能强,适用于多种场合下的任务。一旦Java应用到服务器上,你会发现你的网站或者企业网中的程序的运行速度更快,也更容易维护。

更多