我知道类似以下三行

<%= x+1 %>
<%= request.getParameter("name") %>
<%! counter++; %>

是一种老式的编码方式,在JSP版本2中存在一种避免JSP文件中出现Java代码的方法。什么是可选的JSP2行,这种技术叫什么?


当前回答

还有一些基于组件的框架,例如Wicket,可以为您生成大量HTML。

最终出现在HTML中的标记是极其基本的,几乎没有任何逻辑可以混合在一起。结果几乎是空的,就像带有典型HTML元素的HTML页面一样。缺点是WicketAPI中有很多组件需要学习,在这些约束条件下,有些事情很难实现。

其他回答

JSTL为条件、循环、集合、get等提供标记。例如:

<c:if test="${someAttribute == 'something'}">
   ...
</c:if>

JSTL与请求属性一起工作——它们通常由Servlet在请求中设置,Servlet转发到JSP。

Python世界的一个好主意是模板属性语言;TAL是由Zope(因此又称为“Zope页面模板”,ZPT)引入的,是一种标准,也有PHP、XSLT和Java的实现(我使用过Python/Zope和PHP的化身)。在这类模板语言中,上面的一个示例可能如下所示:

<table>
    <tr tal:repeat="product products">
        <td tal:content="product/name">Example product</td>
        <td tal:content="product/description">A nice description</td>
        <td tal:content="product/price">1.23</td>
    </tr>
</table>

代码看起来像普通的HTML(或XHTML)加上XML命名空间中的一些特殊属性;它可以用浏览器查看,也可以由设计师安全地调整。

支持宏以及国际化和本地化:

<h1 i18n:translate="">Our special offers</h1>
<table>
    <tr tal:repeat="product products">
        <td tal:content="product/name"
            i18n:translate="">Example product</td>
        <td tal:content="product/description"
            i18n:translate="">A nice description</td>
        <td tal:content="product/price">1.23</td>
    </tr>
</table>

如果内容的翻译可用,则使用它们。

不过,我对Java实现不太了解。

在servlet类中设置值和参数使用JSTL/Taglib在JSP中获取这些值和参数

这种方法的好处是代码也类似HTML密码

在MVC架构模式中,JSP表示视图层。在JSP中嵌入Java代码被认为是一种糟糕的做法。

您可以将JSTL、freeMarker和velocity与JSP一起用作“模板引擎”。

这些标记的数据提供者取决于您正在处理的框架。Struts 2和WebWork作为MVC模式的实现,使用OGNL“非常有趣的技术将Beans财产公开给JSP”。

经验表明,JSP有一些缺点,其中之一是很难避免将标记与实际代码混合。

如果可以,那么可以考虑使用专门的技术来完成您需要做的事情。在JavaEE6中有JSF2.0,它提供了许多不错的功能,包括通过#{bean.method(argument)}方法将Javabean与JSF页面粘合在一起。