为了演示将 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 编写应用程序之前,仔细研究它的优点和 缺点。让我们看看其中一些缺点。
可移植性和语言锁定
jsp技术将您锁定到某种特定的语言。这一点不应该给予太多的关注。至少在我看来,java 技术是企业应用程序的惟一 选择。在这个领域,根本不存在可以独立于语言的解决方案。当然,在这个时候,我没有把 Microsoft.net平台牵涉进来。只有时间可以告诉我们这个平台是否可以真正独立于语言(我很怀疑这一点)。
然而,选择 JSP 技术将强制您使用 Java 语言,至少对于内容和表示是这样的。尽管 CORBA 可以用于业务逻辑,JSP 编码要求必须熟悉 servlet 和核心 Java 语言。因为很多开发人员通过 J2EE平台接触 JSP 编码,因此这通常算不成问题。
混合和独立
在本篇文章中,我始终围绕分离内容和表示这一概念。您可能对此已经感到不耐烦,那么现在让我们看看 JSP 究竟能不能实现这个目标。正如我们之前讨论的一样,JSP 宣称 一直致力于实现内容和表示分离,那么我们可以因此认为它实现了目标,是吗?未必如此。
内容和表示之间的界限变得模糊
JSP 允许将 Java 代码插入到标记语言页面中,这个非常危险的特性允许将内容混合到表示中。更糟糕的是,业务逻辑通常会进入到 JSP 页面中,如清单 5 所示。
﹤%@ page import="com.ibm.display.PageUtils" %﹥
﹤%@ page import="com.ibm.display.PageInfo" %﹥
﹤%@ page import="com.ibm.logic.AdminUtils" %﹥
﹤%@ page import="com.ibm.people.Actor" %﹥
﹤%@ page import="java.util.Iterator" %﹥
﹤%@ page import="java.util.Vector" %﹥
﹤%
PageInfo pageInfo = (PageInfo)session.getAttribute("PAGE_DATA")
%﹥
﹤html﹥
[1] [2] 下一页