本文作者强烈建议开发人员在选择 Web 应用程序编程语言时,使用其他可以替代 JavaServer Pages (JSP) servlets 的技术。本文将深入查看JSP代码并介绍一些有吸引力的替代选择。

作为一名资深的 Java 技能专家和 Enhydra 支撑者,本文作者强烈建议开发人员在挑选 Web 运用程序编程言语时,运用其他能够替代 JavaServer Pages (JSP) servlets 的技能。JSP 技能是Sun 的J2EE 渠道和编程模型的一部分,用于处理将单调的内容转换为外观美丽的表明层时遇到的困难。事实上,并非一切的Web开发人员都对JSP 技能很满意。由于 Sun 技能呈现了许多不同的版别,您能够从许多表明技能中挑选一种替代技能。本文将深化检查JSP代码并介绍一些有吸引力的替代挑选。

表明技能专门用于将单调粗糙的Web 内容转换成带有美丽的表明层的内容。JavaServer Pages (JSP) 技能是 Sun 的表明模型,而且是 J2EE 渠道的一部分,它取得了极大的注重。运用 JSP 技能有长处也有缺点。Web 开发人员应该了解这些优缺点,而且知道还有其他替代技能。实践上,现在有许多可供挑选的表明技能。本文先介绍表明技能要处理哪些问题,然后调查 JSP 模型特有的优缺点。终究,将介绍一些其他表明技能,它们能够替代 Sun 表明技能。

JSP技能优缺点深入分析(jsp技术的优缺点)  JSP Web 标签 标记 第1张

历史背景

在深化介绍表明技能之前,有必要了解一下该技能发生的年代背景。就在10 年前,瘦客户机仍是个新鲜事物。咱们依然处于桌面运用程序的年代,运用功用有限的 286 微处理器和现在看来嗤之以鼻的 14 寸显示器。年代变了!现在我的台式机只需求运转一个 Web 浏览器,服务器由 Sun、IBM、HP、Compaq 供给,核算、事务逻辑和内容则又由其他公司供给。那么显示器呢?现在咱们运用的是 21 寸到 25 寸不等、等离子宽屏显示器。这样咱们就能够看到杂乱的 HTML 表明,它们充任这些强壮的运用程序的前端。曾经的单调界面现已无法满意需求;咱们现在需求运用富丽的图形、能够移动的图画、颜色和谐的表明,而且要求它能够加速呈现速度。

条件条件

现在,在茸毛渐丰的 Windows 运用程序经过十年的开展之后,咱们还处在表明方式的巨大转型之中。Visual Basic 和 C 程序员发现他们依然在运用后端体系或单调的 Windows 运用程序,或是在东西箱中加入了一种具有 Web 才干的言语,例如 Java 言语。假如一个运用程序无法支撑至少 3 到 4 种 ML 式言语(例如 HTML、XML 和 WML),即便不是彻底失利,也会被以为是很糟糕的。当然,这就表明咱们十分注重能轻松开发 Web 表明层的才干。

事实证明,运用新的 Internet 以及一切可用的言语(Java、C、Perl、Pascal 和 Ada 等)并不像咱们期望的那样简略。在后端体系运用编程言语并运用它们生成适宜客户机的符号言语时,呈现了许多问题。跟着浏览器端的挑选越来越多(例如 DHTML 和 JavaScript 编码),Web 范畴迫切需求图形规划常识,以及能够运用规范 HTML 创立杂乱界面的东西。但开发运用程序前端的才干无法跟上这些需求的脚步。此刻,表明技能 应运而生。

表明技能的专门使命是:将内容(即没有包括表明细节的数据)转换为表明,也便是您在手机、PalmPilot 或 Web 浏览器看到的各种用户界面。这些表明技能要处理哪些问题?让咱们来了解一下。

别离和集成

表明技能的首要意图是答应别离内容和表明。换而言之,事务逻辑单元(假定 C 或 Java 等编程言语)不需求运用特定于表明的办法生成数据。数据或内容,依照原始格局回来,没有进行格局化。表明技能随后对内容运用格局化或进行表明。终究的成果是各种数据被图形、格局、颜色和徽标所围住。

检查清单 1 和清单 2 中的示例,了解一下原始内容和运用了表明技能的内容之间的差异。

清单1:展现了原始的内容,全部都是数据,能够依照任何办法运用。

Russell Crowe
Tom Hanks
Meg Ryan
Mary Stuart Masterson
Alec Baldwin
Ashley Judd
Keanu Reeves

清单2:要比清单 1 愈加杂乱,运用表明技能对相同的数据进行了装修,并能够当即表明在支撑 HTML 的浏览器中。

﹤HTML﹥
﹤HEAD﹥
﹤TITLE﹥Search Results: Actors﹤/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"﹥
    ﹤TR BGCOLOR="#FFCCCC"﹥
      ﹤TH width="50%" ALIGN="center"﹥Last Name﹤/TH﹥
      ﹤TH width="50%" ALIGN="center"﹥First Name﹤/TH﹥
    ﹤/TR﹥
    ﹤TR﹥
      ﹤TD width="50%"﹥Baldwin﹤/TD﹥
      ﹤TD width="50%"﹥Alec﹤/TD﹥
    ﹤/TR﹥
    ﹤TR﹥
      ﹤TD width="50%"﹥Crowe﹤/TD﹥
      ﹤TD width="50%"﹥Russell﹤/TD﹥
    ﹤/TR﹥
    ﹤TR﹥
      ﹤TD width="50%"﹥Hanks﹤/TD﹥
      ﹤TD width="50%"﹥Tom﹤/TD﹥
    ﹤/TR﹥
    ﹤TR﹥
      ﹤TD width="50%"﹥Judd﹤/TD﹥
      ﹤TD width="50%"﹥Ashley﹤/TD﹥
    ﹤/TR﹥
    ﹤TR﹥
      ﹤TD width="50%"﹥Masterson﹤/TD﹥
      ﹤TD width="50%"﹥Mary Stuart﹤/TD﹥
    ﹤/TR﹥
    ﹤TR﹥
      ﹤TD width="50%"﹥Reeves﹤/TD﹥
      ﹤TD width="50%"﹥Keanu﹤/TD﹥
    ﹤/TR﹥
    ﹤TR﹥
      ﹤TD width="50%"﹥Ryan﹤/TD﹥
      ﹤TD width="50%"﹥Meg﹤/TD﹥
    ﹤/TR﹥
﹤/TABLE﹥
﹤/CENTER﹥
﹤/BODY﹥
﹤/HTML﹥ 

能够看到,清单 1 中的内容更明晰,非专业人员愈加简略运用和了解,而清单 2 中的内容特定于浏览器表明。很难从中提取数据或将数据用作其他用处。#p#

这个底子的差异,即别离表明和内容而不是集成它们(至少在用户需求运用信息时),是任何表明技能条件,包括 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 编写运用程序之前,细心研讨它的长处和 缺点。让咱们看看其间一些缺点。#p#

可移植性和言语确定

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﹥
﹤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"﹥
﹤%
// Based on user's permissions, perform search differently (business logic!)
Vector actors = pageInfo.getActors()
if (pageInfo.getUserInfo().hasPermission("ADMINISTRATOR")) {
   actors = AdminUtils.getActors(pageInfo.getSearchCriteria());
} else {
   actors = pageInfo.getActors();
}
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 符号库 能够帮助您防止这个问题。符号库答应将自界说符号(例如 ﹤AUTHORS /﹥)增加到 JSP 页面,然后在运转时在符号库内将其解析为代码片段。

运用自界说符号和相关的符号库答应把以上示例转换为清单 6 所示的内容。

﹤CENTER﹥
﹤TABLE width="50%" CELLPADDING="3" CELLSPACING="3" border="1"
         BGCOLOR="#FFFFCC"﹥
   ﹤ACTORS /﹥
﹤/TABLE﹥
﹤/CENTER﹥

在运转时,将履行符号的代码并把正确的成果刺进到页面中。可是这并没有处理问题。对立 JSP 技能的理由并不在于能否 别离内容和表明,而是在于是否有必要 别离。只需 JSP 编码答应内联编码,那么就能够很方便地对内联代码进行终究的修正(特别是迫临终究期限时),而不是将代码转换为一个符号库。假如这不是真的,那么 Java 言语为何会立刻比 C 和 C++ 更盛行:Java 禁用了 C 中许多有问题的特性,例如指针相加。虽然您能够总是着重您不需求 在 C 中履行指针相加,或许优异的程序员将刺进代码 scriptlet,咱们都知道实践会发生什么。Java 言语是一种更好的挑选,由于它禁止 运用这些欠好的习气。可是 JSP 在这方面更相似于 C,答应完结一些十分糟糕的实践。

查验 JSP 技能是否成功到达其所述方针的另一种办法是看它能否在实践中完结这个方针;明显,假如以为 JSP 无法实践完结方针,这是不公平的。大大都模板引擎,比方 FreeMarker 和 WebMacro,都供给了相同的内联编码功用,一般顺便了一种相似 Perl 的言语。可是,比方 Enhydra 的 XMLC 这样的技能不 答应进行这种类型的编码。相反,这些技能将一个纯符号言语页面作为输入,然后生成 Java 办法。这实践上改变了编程流程;运用程序并不像 JSP 技能那样运用页面从运用程序调用逻辑,而是运用办法影响页面的值(Enhydra)。以 Enhydra 为例,运用 XMLC 将页面转换为一个 DOM 树,然后运用 DOM 的 HTML 绑定更新页面中的 “字段”(有关 Enhydra XMLC 的更多信息,请查阅 参考资料)。

这儿的重点是,JSP 技能完结方针的才干远远超越 XMLC,例如,仅仅是答应符号库这一项就比 XMLC 强许多。可是 Sun 规范整体趋向于一向保护向后兼容性,或至少在恰当长的一段时刻内保护向后兼容性。JSP 规范的当时版别为 1.1,它答应运用 scriptlets,因而在未来几年内 JSP 页面内都会支撑这个特性。在深化探求 JSP 编码之前,请留意,在其着重的彻底别离内容和表明的理念和实践完结之间存在一个很大的缺口,它充其量仅仅伪装别离了用户界面和驱动运用程序的代码。

单处理和多使命处理

如前所述,抱负状态下,规划师应该能够履行独自处理,只注重图形规划,而开发人员应该能够将留意力会集在编程上。因而,规划师能够在将页面转换为适宜运用程序的格局后,再对其进行处理。关于 JSP 页面来说,将页面转换为适宜运用程序的格局便是指向页面导入 JavaBeans、刺进内联编码并增加自界说符号库。问题是有些规划师运用的是 HTML 修正器,比方 HoTMetaL、Macromedia Dreamweaver 或 FrontPage,这些修正器无法辨认代码 scriptlets 或符号库,这意味着规划师实践上只收到了页面的一部分。幻想一下,符号库或代码片段只生成了表的若干行,或是页面中其他格局化的细节,这是多么费事的作业。规划师运用了不兼容的 HTML 修正器,无法看到这些元素的外观。在开发人员完结编码后,规划师不能轻松地对页面进行修正,这时,不只没有明晰地区分人物,JSP 编码实践大将这两种人物合二为一:开发人员有必要履行多个使命,有必要担任开发人员、规划师以及其他人物。

假如您依然对此表明置疑,那么请下载 J2EE Reference Implementation 并将其间一个顺便的 JSP 页面加载到一个 WYSIWYG HTML 修正器,例如 Dreamweaver.页面当即被一些黄色区域填充,告知您页面中包括的一切 “过错” 符号。当然,黄色内容来自于 JSP 符号和代码,而不是页面呈现了什么真实的过错。

迄今为止,没有呈现支撑 JSP 功用的 WYSIWYG 修正器,我也没有听说过任何与此相关的项目。虽然模板引擎也具有相同的问题,可是许多根据 Java 的处理方案,例如我最喜欢的 Enhydra,都答应您将符号页面作为输入供给给表明技能。在这种状况下,规划师能够依据需求频频地进行修正,并从头供给符号页面。运转表明技能的引擎或编译程序将符号页面转换为恰当的格局,而且不需求修正任何代码(典型状况下)。终究取得了抱负的成果:规划师和开发人员各司其职。

因而,要留意 JSP 技能作出的许诺和它实践交给的完结。在实践中,要在一个 JSP 技能驱动的环境下发挥成效,有必要让开发人员处理大部分符号,或至少让规划师学习一些 JSP 编码。

HTML 和 XML

JSP 技能最严峻的缺点之一(也是常常被忽视的一个缺点)便是它与 XML 不兼容。更切当地说,而且特别针对 HTML 范畴,JSP 页面不要求具有 XHTML 兼容性。XHTML 是一个 World Wide Web Consortium (W3C) 规范,现在正在替代 HTML 4.0.XHTML 在完结格局杰出的 XML 文档方面界说了 HTML 符号集。例如,
符号有必要被转换为
才干保证 XML 兼容性(假如这个比如没有解说清楚的话,能够查阅 参考资料 列出的 XML 规范,以及关于 XHTML 的 developerWorks 文章)。相同的规矩适用于图画符号,而且在 XHTML 1.1(行将到来)中,大部分字体特点和其他款式被移入到 CSS 款式表中。别的,大大都规范 HTML 文档能够轻松地转换为 XHTML 1.0,这意味着能够运用任何与 XML 兼容的解析器读取,例如 Apache Xerces,而且能够作为 XML 进行处理。

您会问 “这有什么联系呢?”。答案是联系严重。由于 XML 正在快速成为一个在运用程序之间和运用程序内部进行通讯的全球规范。运用 XML 格局传递书本,能够让任何运用底子 XML 数据绑定功用的运用程序轻松地运用您的运用程序的数据。幻想一下,经过将您的数据迁移到 XML 格局,您就能够与信用卡公司进行网上交易!大都状况下,您的数据表明还需求与其他公司进行交互。最常见的状况是门户运用程序,它承受来自各种供给者的内容(例如,气候信息、股票报价和新闻),一般顺便有供给者的符号。可是,由于 JSP 页面将代码和自界说符号库相混合,因而无法在这种环境下杰出地作业。

JSP 页面很少具有格局杰出的 XML 文档,而且不注重是否契合 XHTML,而 XHTML 这种符号言语并不答应运用各种 JSP 自界说符号库。可是,更重要的是,刺进到 JSP 页面的代码片段并不归于任何符号方式,因而当另一个运用程序处理它们时,将发生解析器加载过错。

在您提出质疑之前,让咱们先了解一下整个状况。假如运用程序答应 JSP 页面由初始客户机处理,成果将发生纯 HTML(或 WML、VoXML 等)。可是,大大都恳求这个数据的运用程序运用了必定程度的缓存,由于网络往复开支很贵重。在这些状况下,缓存过的页面将回来过期的数据。因而,您或许更乐意回来与 XML 兼容的成果,最好运用静态的方式。而 JSP 技能在这些状况下力不从心;JSP 页面有必要一向 在运转时进行处理,以去掉 JSP 代码 scriptlets 和符号库。

看看最要害的检测:其他一些表明技能能做到这一点吗?答案是能够。这个范畴最威望的领导者是 Apache Cocoon 项目,它彻底建立在 XML 和一个 XSLT 款式表运用程序(能够在运转时或静态状态下运用)的根底之上。由于 XML Server Pages(在 Cocoon 结构中称为 XSP)实践上是 XML 文档,因而一向与 XML 兼容。像 Tea 和 Enhydra XMLC 等答应输入纯符号言语页面的技能也能够做到这点,虽然它们的意图并不在此。在这些状况下,用户能够运用 XHTML 或规范的 HTML.此外,这比 JSP 技能要好,由于 JSP 不能 静态地完结格局杰出的 XML.

结束语

期望我的尽力能够让您进一步了解JSP 技能的优缺点,而且您能够将JSP 技能看作是许多其他表明技能的替代品。现在,您或许对整个J2EE编程模型也发生了一点置疑。假如您期望进一步研讨渠道挑选,那么能够在 Apache Cocoon、Enhydra 和各种模板引擎中寻觅 JSP 技能的替代挑选。

终究,请记住,本文并不是建议您运用JSP或防止运用它,虽然表面上像是这样。我的意图是鼓舞您对任何技能进行具体的剖析,保证它是正确的挑选。就像编程模型相同,有时它们是适宜的,可是有些时分它们并不适宜。多进行一些比较,找到最适宜自己的技能并作出正确的决议,而不是匆促地决议。

【修正引荐】

  1. 专题:JSP根底教程
  2. JSP中Action特点的功用浅析
  3. 高功能、高弹性JSP和Servlet功能优化
  4. Java和JSP编程的六个常见问题
转载请说明出处
知优网 » JSP技能优缺点深入分析(jsp技术的优缺点)

发表评论

您需要后才能发表评论