如何让Servlet学会与其他对象合作
内容提示:在一个比较复杂的Web应用中,靠Servlet单干往往是不行的。Servlet其功能毕竟有限。在实际工作中,笔者往往会结合其他技术,让他们相互融合,发挥各自的优势。在这篇文章中,笔者将自己在这方面的经验供大家分享,与各位开发人员共同进步。
一、Serlvet与其他技术合作的前景分析。
在一些中大型的Web应用程序中,一个Servlet往往只完成一项特定的功能。如现在有一个学生成绩管理系统需要完成两项任务,分别为计算平均成绩和统计平均成绩以上的人数。如果这个系统使用的用户比较多,则使用一个Servlet来完成所有的功能显然是不合理的,会降低应用程序的性能。为此往往需要设置多个Servlet来独立的完成相关的功能。随着Web程序的规模越来越大,其内部需要实现的逻辑也越来越复杂。为此将这些功能分散在多个Servlet中就可以使得应用程序更加便于管理与更新。所以Servlet首先需要学会同其他的Servlet进行协作。
其次Web各个构件之间的分工也是不同的。在《Servlet应用程序生命周期分析》文中中笔者谈到过Servlet应用程序的一个缺陷,即将展示层与业务层混合在一起。也就是说,将数据的逻辑运算与展示在同一个层面上体现,这不利于后续应用程序的开发。在实际过程中,往往将Servlet与JSP一起使用。其中Servlet主要负责业务逻辑方面的内容,而JSP则主要负责数据显示界面。因此在Web应用程序中,各个构件只有相互利用和补充,才能够扬长避短,发挥各自的优势。
第三在Web程序之间往往还需要相互调用。而仅仅通过HTML超链接的形式是不够的。如上面讲到的一个成绩管理系统的案例,要统计平均分数以上的人数就需要调用另外一个计算平均成绩的模块。为此Servlet应该和同一Web程序或者不同Web程序之间实现灵活的合作。只有如此才是一个高可扩展性的应用程序。
二、Servlet应用程序和其他技术合作的主要手段分析。
据笔者所知,现在Servlet应用程序与其他技术合作,主要包括三种形式,分别为Servlet链接、饱含响应内容和和转递请求。这三种合作方式各有各的特点,往往适用于不同的场合。作为程序开发人员,需要连接着三种合作方式的差异,并在实际工作中根据需要选择合适的合作方式。
最早的一种合作方式叫做Servlet链接。这个比较好理解,就是一个Servlet调用另外一个Servlet应用程序。利用专业的术语,就叫做多个Servlet依次处理用户的请求并最终将结果返回给客户。Web服务器通过这里合作方式,可以让同一个Servlet链接内的Servlet能够看到前一个输出结果。笔者上面举的一个成绩管理系统的案例,用的就是Servlet链接方法。这里需要注意的是,其调用Serlvet具有一定的顺序。如现在有个用户请求一个Servlet链接SERVLET=1,2。则服务器会依次调用Servlet1、Servlet2,而且后面的Servlet可以调用前面Servlet运算出来的结果。在以前的Web程序中这种方法比较常见。但是随着Web应用程序的复杂程度逐渐增加,其缺陷也不断显现出来。如难以控制、管理复杂等等。为此在一些大型Web应用中,现在已经很难看到其踪影,而是被其他更先进的方式所取代。
第二种合作方式是“在响应中包括其他Web资源”。在打开一个Web应用程序时,用户会发现往往不同的网页会有相同的元素。如公司的图标、导航栏等等。要实现这个功能的话,选择这种合作方式会取得比较不错的效果。也就是说,在某些情况下,开发人员希望在一个Servlet中包含其他的Web资源,此时可以让多个Servlet包含相同的通用信息。如此的话,当需要更改商标或者导航栏等通用信息的时候,只需要更改一个Servlet即可,而不需要到每个Servlet中去改动相关的内容。这个特性其实跟Java语言的继承非常相似,有异曲同工之妙。