利用Java开发Web应用(二)服务器端的实现

在服务器端,如果用 Java 语言实现的话,直接与浏览器打交道的要算JavaServer Pages(JSPs)和Servlets了。在它们的后面还有通过Java实现的Data Beans、DB Beans和Commands。

1.Java Server Pages(JSPs)

JavaServer Pages(JSPs)是对HTML的另一种扩展,它可以通过一些特殊的标签向页面中插入动态的信息。如可以利用标签添加Java 代码段,用将表达式的值写入页面,用标签在某一范围内(request、session或 context)引用Java Bean。

除此之外,JSP的标准标签扩展机制还允许开发人员编写自己的标签和相应的实现方法。这样,便可以将某些商业逻辑封装成JSP的标签,使JSP文件中出现更少的Java代码,更加象一个HTML文件。

当一个浏览器向服务器请求一个JSP文件时,这个JSP文件首先被Web应用服务器编译成servlet并执行,然后将所产生的结果作为一个HTML文件传给浏览器。只要在JSP文件中加入一些控制,便可轻易的实现对数据的动态显示。以后,如果再有对这个JSP文件的请求,如果该文件没有作任何修改,它将不会再被编译,而是直接执行已编译好的servlet。然而,在Web应用服务器上的这些处理都是需要时间和资源的,必然会加大Web应用服务器的负荷和相应的延长响应时间。特别是整个系统刚刚启动或是有大量JSP文件作了改动以后。有关JSP调用和生命周期的具体细节,请参阅sun公司的JSP的规范文章。

JSP的功能是相当强大的,有的人说它甚至能够完成几乎所有的功能。这确实没有错误,但是当我们考虑到代码的复用性和实现的难易程度时,恐怕所有的功能都通过JSP文件来实现就不是什么好的选择了。更多的,我们还是用JSP文件作为一个response,来动态的显示某一状态下的数据。JSP的另一个特点就是它很象HTML文件,也是由许多的标签所组成的,所以我们也可以利用所见即所得的编辑器(如WebSphere Studio中的PageDesinger)来编辑它。而且,它还更加有利于不同开发人员之间的协作。JSP文件就像一个模板一样,等待着不同的数据去填充,而实现这个动态机制的正是那些嵌入HTML标签的JSP标签。基于这个思路,首先,网页的编辑人员可以将大致的模板(网页的静态部分)先设计出来,然后再由开发人员向模板中添加动态的控制代码。当全部完成后,就可以利用JSP的某种调试工具进行调试。JSP文件的调试分为两个阶段,编译阶段和运行态阶段。应该说,JSP文件在编译阶段的调试是比较困难的,因为任何的语法错误都会导致JSP文件的编译不通过,但是却没有任何信息说明到底是什么地方有错。有的时候会因为少了一个括号花上很长的时间。一旦编译通过,运行态的问题就有方法得以解决了。我认为,最好的运行态调试工具要数VisualAge for Java的WebSphere Test Environment中的JSP执行监视器了,它可以单步执行JSP文件中的代码段,非常便于错误的定位和修改。

2. Servlets

Servlet对多数人来说已经不是个陌生的名词了。它在网站的架构中常作为CGI的替代品,用来收集HTTP请求中的数据,并依据这些数据进行某种操作。通常,我们还可以利用Chained Servlet和Filtered Serlvet来简化和模块化Servlet。虽然它也可以用输出流动态的产生HTTP响应作为HTML页面传送给浏览器,但是这种做法会导致Servlet的程序很长,而且适应性不强,所以我们还是应该尽量将显示的工作交给JSP去做。与Perl、shell script等CGI相比,Servlet的优势在于它只驻留一次,可以处理多个HTTP请求,而其他的CGI程序则要对每个请求都创建一个进程。所以,Servlet可以在一定程度上节省对资源的消耗。

很容易得出,Servlet和JSP一样,都面临这同一个问题,那就是它的加载需要时间。当一个Web应用启动后,对某个Servlet的第一次调用往往很慢,而以后的调用就会好多了。这个问题是由Servlet在引擎中的调用方式和生命周期决定的(有关的具体内容请参阅sun公司的Servlet规范文章)。如果一个站点对Web应用的性能十分看重的化,不妨编写一个简单的程序,模拟对所有Servlet和JSP文件的HTTP请求来初始化整个Web应用,使其在真正被应用之前就已经加载好了所有的功能。

Servlet也是一种Java程序,所以它也继承了Java语言的所有特点。如果某个Web应用的所有Servlet都具有一个共同的功能,例如对后端数据库的连接,我们便可以先编写一个通用的Servlet来完成这些功能,而其他的Servlet都从这个通用的Servlet继承下来。当然,这只是 Servlet的优势的一个例子,如果仔细研究一下,你可以发现许多。而且,目前Java的IDE有很多,如IBM的VisualAge for Java、Borland的Jbuilder和Semantic的VisualCafe,它们都可以用来开发Servlet。它的调试相对来说也是容易的。

3. Java Commands

Java Command是另外一种Java程序,它的目的是被Servlet调用,完成一个相对独立的功能,例如对某种数据的插入、修改或者删除。一个交易往往涉及多个功能。我们拿转帐来说,这个交易就至少包括了两个操作:把钱从一个帐户上扣除和把钱添加到另外一个帐户上。每一个Command都能完成一种功能,通过对Command的不同组合,便可以完成所有的交易。Command与Servlet相比,受到的限制更少,更接近于一般的Java程序。同样,它也可以用上面提到的开发工具开发和调试。然而所不同的是,由于它需要由Servlet来调用,所以如果要对它进行调试,其上面的Servlet必须要同时完成。或者,也要创建其他的Java应用程序来构造出通过Servlet传入的参数,然后再调用它。

4. Data Bean

Data Bean,顾名思义,是与数据打交道的。更严格的说,它是对数据的一种封装。虽然也有Bean,但是却与JavaBeans不同,它并没有JavaBeans所具有的事件处理。可以说,Data Bean是整个编程模型中最简短的部分了,因为它除了数据域以外,就是对这些数据域进行操作的get和set方法了。Data Bean实际上是对数据结构的一种映射。一般的,如果一个Web应用的数据库schema确定以后,Data Bean的数目和接口也就基本上决定了。而Data Bean的开发,就更加简单了。在许多的Java开发环境中,都可以通过wizard来生成Data Bean,开发人员需要做的,只不过是告诉wizard这个Data Bean到底有多少个属性,每个属性的类型是什么。其实,如果自己手工编写Data Bean的话,也不是什么费力的事情。

5.DB Object

在服务器端,我们要谈的最后一个元素就是DB Object。它的目的就是构造对数据库操作所需要的SQL语句,并且在执行后得到结果集。之所以需要它,是因为我们每次对数据库的操作都是不同的,如查找功能,会因不同的查询条件产生许多种情况。这需要依据不同的情况来构造不同的SQL语句。只有这样,我们的程序才能达到更高的利用率,减少开发的工作量。

成功是奋斗的结果,而奋斗是成功的必经之路。

利用Java开发Web应用(二)服务器端的实现

相关文章:

你感兴趣的文章:

标签云: