近年来,Jsp 技术现在已经成为一种卓越的动态网站开发技术。Java 开发者出于各种理由喜
爱使用 jsp。有人喜爱其“一次开发,处处使用”的性能,另外的人觉得 jsp 使 java 成为一种
易学的服务器端 scripting 语言。但是,jsp 最大的长处在它将页面的表现和页面的商业逻辑
分开了。本章中,我们将深入地讨论如何使用 jsp 模式 2 体系结构来开发网站。这一模式可
以被看作是通用模式浏览控制模式(popular Model-View-Controller,MVC)模式的服务器端
实现。
Servlets 有何缺陷?
当 jsp 成为开发动态网站的主要技术时,可能有人会问为何在 jsp 技术中我们不强调
servlets。Servlets 的应用是没有问题的。它们非常适于服务器端的处理和编程,并且它们会
长期驻留在他们现在的位置。但是,从结构上说,我们可以将 jsp 看作是 servlet 的一个高
层的抽象实现,特别是在 servlet 2.2 API 下。但是,你仍然不能无拘束地使用 servlet;它们
并不适合每一个人。例如,页面设计者可以方便地使用 html 或者 xml 工具开发 jsp 页面,
但 servlet 却更适合于后端开发者使用,他们的工具是 ide——一个需要更多编程训练的开发
领域。当发布 servlet 时,每个开发者必须小心地确定在页面表现和页面逻辑之间没有紧密
的关联出现。你可以使用第三方 html 包装工具,如 htmlkona 来混合 html 和 servlet 代码。
即使如此,这点灵活性还不足以让你自由地改变风格本身。例如,你希望从 html 改变到
dhtml,则包装本身需要被小心地测试,以确保新的格式可以正确使用。在最坏的情况下,
包装不可用,你就需要应变马来表现动态内容。所以,需要一种新的解决方案。你将会看
到,一种方案就是混合 jsp 和 servlet 的使用。
不同的方式
早期的 jsp 标准给出了两种使用 jsp 的方式。这些方式,都可以归纳为 jsp 模式 1 和 jsp 模式
2,主要的差别在于处理大量请求的位置不同。在模式 1 中(图 1), jsp 页面独自响应请
求并将处理结果返回客户。这里仍然有表现和内容的分离,因为所有的数据依靠 bean 来处
理。尽管模式 1 可以很好的满足小型应用的需要,但却不能满足大型应用的要求。大量使
用模式 1,常常会导致页面被嵌入大量的 script 或者 java 代码。特别是当需要处理的商业逻
辑很复杂时,情况会变得严重。也许对于 java 程序员来说,这不算大的问题。但如果开发
者是前端界面设计人员——在大型项目中,这非常常见,——则代码的开发和维护将出现
困难。在任何项目中,这样的模式多少总会导致定义不清的响应和项目管理的困难。
在图 2 中显示的模式 2 结构,是一种面向动态内容的实现,结合了 servlet 和 jsp 技术。它利
用了两种技术原有的优点,采用 jsp 来表现页面,采用 servlets 来完成大量的处理。这里,
servlet 扮演一个控制者的角色,并负责响应客户请求。接着, servlet 创建 jsp 需要的 bean
和对象,再根据用户的行为,决定将那个 jsp 页面发送给用户。特别要注意,jsp 页面中没