0

我做过一些 php 开发,这种语言的大趋势是使用 smarty 或其他模板引擎之类的东西。

它通常大致运行如下:

将模板加载为常规字符串,查找其 {tags} 将每个 {tag} 替换为某些代码的结果。带有输入参数的缓存页面呈现结果页面。(有时会添加一些OO原则比如模板变成对象……)

当我查看 jsp 时,我看到了 scriplets、taglibs 的使用以及复杂的东西,比如

<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ page import="ghhghjjgj"%>

然后 :

<logic:if>some html </logic:if>

或更糟:

<%= if (blabal) {%>
some html
<%}else ...%>

等等。

好的,tile 使我能够将一些 jsp 页面粘合在一起,这非常方便(就像 php 中的包含一样)

在我看来,php 方法在以下方面要好得多:

  • 它完全分离了 gui 和模型处理。
    - 当你在后面工作时更容易更改页面内容,你在一个真正的 java 类中,没有像 % @ <%= 这样复杂的东西。(谁说 ala C# 背后的代码;)?)

C# 方法也很有趣,但我只想解决我的问题中的模板部分,而不是开始任何 C# 与 Java 巨魔大战。我也不想说php更好。

我只是想知道为什么 java 中没有安装好的模板引擎以及为什么我们仍然使用 scriplets/taglibs。

所以我想我一定错过了什么。一些 Java EE Web 专家能否向我展示我推理的缺陷?

4

3 回答 3

3

J2EE 很久以前就变成了 Java EE。去掉“2”。

没有人应该使用scriptlet。这是1999年的技术。如果你在书中看到它,那是因为这些书很旧。现在写另一本 servlet/JSP 书的理由并不多。

自定义标签库已经失宠。JSTL 是标准。您不太可能需要更多。

模板很常见 - 看看Velocity。我正在处理的一个项目专门使用它来将 HTML 流式传输到浏览器。

于 2012-06-20T09:30:14.560 回答
0

Java 有很多模板引擎,例如 Velocity。JSP 编译为 Java 字节码。它允许非常快速的执行。这个因素对您是否重要,取决于您的任务,因为大多数网站模板处理都不是问题。

于 2012-06-20T09:30:47.243 回答
0

我真的不明白为什么写作很棒的含义

{if blabal} some html{/if} 

而且不太好写

<logic:if test="blabal"> some html</logic:if>

而且写起来更糟糕

<% if (blabal) { %> some html <% } %>

但写起来很好

#if ( blabal )
    some html
#end

我个人喜欢用java编写我的逻辑。

  • 输入保存
  • 我知道语法

然而,对我来说,混合模板代码和逻辑是好事还是坏事都不是语法问题。因此我更喜欢Snippetory。我从模板中获取逻辑,同时保持模板中的一致性(转义内容等)、外观(格式...)和国际化的责任。绑定逻辑变得可测试,易于组织和重用。数据模型可以按原样使用,无需将其转换为足以用于某种外星技术的模型。在这种情况下,模板更像是一种模型,您可以将必要的数据复制到其中,而不是从上下文中自助服务的过程。

现在,在这种情况下,我们需要用软件来表达同样的事情,因为它总是会发生,因为人们使用关注点分离的原则来使软件更易于维护。

模板:

<t:named-region> some html with a {v:value} </t:named-region>

逻辑:

if (blabal) {
  template.get("named-region").set("value", value).render();
}

现在,当我们看这个时,它的代码要多得多。同样,这对于关注点分离来说是典型的。但是,快速浏览一下这些步骤可能是有意义的:

  1. 获得该地区的访问权。
  2. 数据绑定到模板。这发生在细粒度上,就像填写 from 一样。
  3. 完成的表单绑定到输出。

最后一步似乎是可以分配的。我向它填充数据,所以很明显我想使用它。但是你要知道,render()是一条捷径render(template, "named-region")。所以这是一个描述它是如何使用的。由于这种机制,您可以轻松地将一个文件甚至多个文件的构建块组合到您选择的输出中。这导致这些块的重复使用非常方便。

它让我更加专注:当我努力获得正确的 html、css 和 javaScript 时,我不必处理“访问数据的确切路径如何?” 或“显示此按钮的确切情况是什么?”。它只是关于'有逻辑,所以它有一个名字'。很简单,很干净。

当然还有一些其他引擎支持模板和逻辑的分离,比如 jByte(我用了一段时间)或 JTPL 只是为了命名一个视图。但是,它们似乎都缺少一些功能,我决定编写 Snippetory。

于 2012-09-15T13:18:49.033 回答