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 编码,他们也必须能够在这种环境下工作。
|