标记库与JSP中的scriptlet

时间:2011-09-02 18:58:35

标签: java performance jsp jstl tld

使用自定义操作而不是使用scriptlet有什么好处(如果有的话)?

例如,哪个在性能上下文中更好?

<c:if test="${param.Clear}">
  <font color="#ff0000" size="+2"><strong> 
  You just cleared your shopping cart! 
  </strong><br>&nbsp;<br></font>
</c:if> 

<%if (param.Clear){%>
      <font color="#ff0000" size="+2"><strong> 
      You just cleared your shopping cart! 
      </strong><br>&nbsp;<br></font>
<%}%>

我有一个很棒的JSP项目,我想知道是否有必要使用标记库或者我是否可以保留我的Java scriptlet。

另外,我想为某些东西实现自定义标记,这些标记现在是带有Java,JavaScript,CSS和HTML代码的独立JSP文件。

5 个答案:

答案 0 :(得分:3)

就性能而言,它们都被编译为servlet,因此它们应该同样表现良好。

在您给出的示例中似乎没有太多推荐JSTL,但是我看到的项目会发生的代码如下:

<%if (param1.Clear() && param2.isSomeFlagSet() && !param3.isSomeOtherFlagSet()){%>
      <font color="#ff0000" size="+2"><strong> 
      You just cleared your shopping cart! 
      </strong><br>&nbsp;<br></font>
<%}%>

它会被全部复制。 &GT; _&LT;如果你用JSTL机械地替换它,你可以得到一些同样糟糕的东西,但是它让你有机会更好地组织事情。

遵循BalusC的建议,尽可能从JSP中删除内联Java代码。

答案 1 :(得分:3)

我喜欢JSP。我认为它是服务于标记语言的最佳Java页面。它的主要缺点是它不适用于电子邮件之类的东西,因为你不能只是将字符串和地图传递给评估者,并像Velocity一样得到结果。

但超出该用例,JSP非常棒。

要回答您的问题,您仍然可以保留scriptlet代码。类似于小脚本“if”与c:if标签肯定会更快的CPU明智,因为“if”只是一个if而c:if是一个方法调用加上一些环境恶作剧在调用标签时。

尽管如此,关于速度差异带来多大影响还是一个不同的问题。

大多数代码不应该在JSP中,显然,逻辑应该主要在Servlet或你后端使用的其他任何东西上,而JSP只包含渲染代码(当然可能涉及IFs)和FORs等。)

针对scriptlet的主要参数是JSP标记文件。标记文件是独立于其他JSP的文件。 JSP标记文件使JSP可重构,并且无需添加新标记。但缺点是,当使用标记文件时,您创建的任何标记都不能在其边界内具有scriptlet代码。

例如,如果您创建了“TABLE”标记,则t:table和/ t:table元素之间的任何内容都不能包含scriptlet元素。但是,您当然可以在标记文件实现中使用scriptlet代码,因此我只需在其中包含我需要的任何scriptlet内容。

您可以访问:JSP tricks to make templating easier?以获取标记文件的概述。但是我们远远超出了这里。我们使用标记文件定义表单和表格以及组件和各种东西。

答案 2 :(得分:1)

这就是为什么我认为JSTL是更好的选择。

  1. 使用JSTL更容易阅读。
  2. 如果您在JSP中创建了一个方法,那么只有该JSP可以使用它。所以可重用性也是一个。
  3. pageScoperequestScope个对象已使用${foo}而不是request.getAttribute('foo')
  4. 读取

    缺点 - 在JSTL中有一些你不能做的事情。

答案 3 :(得分:1)

我宁愿完全摆脱JSP ...... 我现在已经使用JSP工作了6到8年,根本不值得使用。模板引擎可以让您获得更好的转变。

答案 4 :(得分:1)