欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

JSP技术优缺点深入分析(1)(2)

来源: javaer 分享于  点击 16172 次 点评:82

这个基本的区别,即分离表示和内容而不是集成它们至少在用户需要使用信息时),是任何表示技术前提,包括 JSP 技术。此外,任何无法实现这个基本目标的表示技术都不能真正体现创建的初衷。

工作和重复工作

除了分离表示和内容外,另一个衡量表示技术的可用性的指标是:能够消除多少重复的工作。表示和内容的分离也促使内容开发人员之间的角色分离。程序员可以关注上例所示的原始内容,而图形设计师或网络管理员则关注表示。然而,在获得图形设计师设计的表示或标记)并将它应用到程序员代码提供的内容中时,角色之间仍然有一定重复。

在最简单的情况下,设计师提供标记,而开发人员提供代码并把标记插入到表示技术中。应用程序被 “启动”,内容魔术般地变成了用户界面。当然,我们都知道,开发远远没有结束。接下来要重新修订版本、修改界面,还必须添加新的业务规则。这能真正考验表示技术的灵活性。虽然很容易更新插入到表示层的原始内容,但是图形设计师很少能够轻松地编辑他们的初始工作。经常要修改表示层我们常常按照销售部门的 “指使” 进行修改)。因此,问题产生了:设计师要修改哪些内容来调整他们的工作?是他们提供给开发人员的原始标记语言页面吗?也许不是,因为这个页面很可能插入了自定义标记或代码JSP 页面、模板引擎),被转换为一个 Java servlet,或修改为完全无法识别的内容。

设计师通常需要重新设计页面并重新将其提交给开发人员。然后再由开发人员将页面重新转换为特定的格式,以供表示技术使用。或者,设计师必须学习一种脚本编制语言,或至少知道开发人员提供的页面源代码中哪部分是违规的。当然,这种方法容易出错,并且使用起来不安全。当您了解到某种表示技术允许清晰地分离内容和表示后,您应该确保将修改表示层所需的重复工作减至最小。

JSP 技术的承诺

现在,让我们具体看一下 JSP 编码。JSP 技术承诺为设计师和开发人员提供他们所需的惟一表示技术。JSP 技术是 J2EE 平台的一部分,这充分展示了 Sun 为其 Java 产品提供的强大支持。为了使您了解这个解决方案的流行程度,请尝试在 amazon.com 中搜索一下 ‘JSP’;您将发现大量与 JSP 技术有关的书籍,它会远远超过任何单独一种 Java API.在详细探讨 JSP 技术引发的具体问题之前,您应该清楚地了解这种技术的承诺。

内容和表示

首先,JSP 技术与内容和表示的分离有关,是 Sun 发布的有关 JSP 页面的最主要目标。实际上,一些代码开发人员抱怨将 out.println"﹤HTML﹥﹤HEAD﹥﹤TITLE﹥" + pageInfo.getTitle) + "﹤/TITLE﹥﹤/HEAD﹥"); 键入到 servlet,这直接导致了 JSP 的设计。在硬编码内容中混入运行时变量加重了 servlet 开发人员的负担,并且使开发人员更加难对表示层进行修改,即使非常小的修改也是如此。

JSP 技术解决了这个问题,它允许在运行时将普通的 HTML 页面后来还包括 WHM 或其他标记语言)编译到 Java servlet 中,实际上效仿了 out.println) 范例,而不需要开发人员编写代码。它允许您将变量插入到在运行时才进行解释的页面。

在一个 JSP 页面中,清单 2 所示的 HTML 片段应该类似清单 3 中的示例。

﹤%@ page import="com.ibm.display.PageUtils" %﹥
﹤%@ page import="com.ibm.display.PageInfo" %﹥
﹤%
PageInfo pageInfo = (PageInfo)session.getAttribute("PAGE_DATA")
%﹥
﹤HTML﹥
﹤HEAD﹥
﹤TITLE﹥
﹤%=pageInfo.getTitle()%﹥
﹤/TITLE﹥
﹤/HEAD﹥
﹤BODY﹥
﹤!-- Other HTML content --﹥
﹤/BODY﹥
﹤/HTML﹥

根据最初的原则判断,JSP 技术至少在其说明的设计中)可以满足表示技术的基本原则,正如上面概况的一样:内容与表示分离。

代码和标记

JSP 技术特性列表上的第二项可能会出现一些问题。JSP 代码可以让您将 Java 代码直接插入到标记页面。在开发 JSP 规范时,Microsoft Active Server Pages ASP) 大获成功,因此 Sun 与 Microsoft 之间的竞争空前激烈。这导致了这个决策的产生。JavaServer Pages 的名称与 Active Server Pages 类似并非偶然。并且对众多 API 特性的模仿也是蓄意而为。因此 JSP 创建者需要能够将 Java 代码添加到他们的标记中。

为了演示将 Java 代码加入到标记中,清单 4 中的 JSP 代码片段根据需要动态地添加行,以表示 actors 的 Vector 中的每一项。

﹤%@ page import="com.ibm.display.PageUtils" %﹥
﹤%@ page import="com.ibm.display.PageInfo" %﹥
﹤%@ page import="com.ibm.people.Actor" %﹥
﹤%@ page import="java.util.Iterator" %﹥
﹤%@ page import="java.util.Vector" %﹥
﹤%
PageInfo pageInfo = (PageInfo)session.getAttribute("PAGE_DATA")
Vector actors = pageInfo.getActors()
%﹥
﹤HTML﹥
﹤HEAD﹥
﹤TITLE﹥
﹤%=pageInfo.getTitle()%﹥
﹤/TITLE﹥
﹤/HEAD﹥
﹤BODY﹥
﹤H2 ALIGN="center"﹥Search Results: Actors﹤/H2﹥
﹤CENTER﹥
﹤HR width="85%"﹥
﹤TABLE width="50%" CELLPADDING="3" CELLSPACING="3" border="1"
         bgcolor="#FFFFCC"﹥
﹤%
for (Iterator i = actors.iterator(); i.hasNext()) {
Actor actor = (Actor)i.next();
%﹥
    ﹤TR BGCOLOR="#FFCCCC"﹥
      ﹤TH width="50%" ALIGN="center"﹥
       ﹤%=actor.getLastName()%﹥
      ﹤/TH﹥
      ﹤TH width="50%" ALIGN="center"﹥
       ﹤%=actor.getFirstName()%﹥
      ﹤/TH﹥
    ﹤/TR﹥
﹤%
}
%﹥
﹤/TABLE﹥
﹤/CENTER﹥
﹤/BODY﹥
﹤/HTML﹥

注意,目前为止,我仅仅介绍了 JSP 技术的最初设计目标;在下一节介绍 JSP 技术存在的问题之后,我将对这个目标作出自己的论断。不过,您可能已经开始有点好奇,因为将代码嵌入到 JSP 页面中似乎与 JSP 技术的首要目标分离内容和表示)有所冲突。实际上,我还没有就此展开论述。

设计师和开发人员

JSP 技术的最终也是值得称赞)的目标是,它尝试在应用程序开发过程中形成清晰定义的角色。通过在表面上分离内容和表示,JSP 技术能够更加清晰地区分设计师和开发人员角色。设计师使用标准的 HTML、WML 或其他合适的语言创建标记,而开发人员编写代码。当然,如今很多设计师学习了 JavaScript 语言,因此,这些设计师开始学习 JSP 编码也不是什么令人吃惊的事情。通常,设计师并不会单纯地创建纯标记,他们会编写一个完整的 JSP 页面并将其交给开发人员。然后经过频繁的修改,开发人员再将 JSP 页面作为完整应用程序的前端使用。但是,这里的关键问题是仍然有很多设计师没有 学习 JSP 编码,他们也必须能够在这种环境下工作。

出现的问题

我刚刚介绍了一种良好的表示技术应该提供的功能,以及 JSP 技术尝试解决的具体问题。现在,我将转入正题:JSP 技术虽然建立在良好理念的基础之上,但是却出现了一些问题。在选择 JSP 编写您的应用程序之前您可能仍然会这样做),至少应该注意一些容易出现的问题。

您还需要注意经常被忽略的 J2EE 编程平台:仅仅因为平台附带了 API 并不意味着一定要使用它。和这种想法同样可笑的是,很多开发人员在使用 JSP、EJB 或 JMS API 时,都在想如果不使用这些 API 的话,他们的应用程序就不是真正的 “J2EE 应用程序” 了。实际上,平台提供的 API 远远超过大多数应用程序的需要。如果您不能使用或对 JSP 技术还持有怀疑态度,那么可以不使用它!在选择 JSP 编写应用程序之前,仔细研究它的优点和 缺点。让我们看看其中一些缺点。


相关栏目:

用户点评