JSP 是否被取代?如果是,如何?

Is JSP superseeded and if so, how?

我已经有一段时间没有使用 JSP 和 servlet 了。现在我发现一些 material 认为 JSP 已经过时,不应该使用。是这样吗?为什么?如果我们使用 Spring 框架开始一个新项目并希望呈现网页或类似的输出,我们应该使用什么代替模板?

Spring(以及Struts、Apache Wicket 和其他框架)基于servlet。当您将 Spring 用于 Web 时,您正在使用 servlet 作为底层技术。

JSP确实有点落伍了。并且其中存在一些不便之处。例如,JSP 是网页设计人员真正头疼的问题。设计人员不能只打开一个 JSP 文件,进行一些更改,然后在浏览器中检查结果,因为 JSP 文件包含对 HTML 无效的标记。查看页面在浏览器中的外观的唯一方法是部署应用程序并让服务器呈现它。

JSP 中的另一个不便之处是您无法将通用布局外化到专用文件中。您所能做的就是使用 <jsp:include> 将一页导入另一页。如果您有数百个文件,则必须在所有文件中重复相同的 <jsp:include> 以复制公共部分。


当您有数百个复杂的动态页面时,有些模板引擎更适合table 大型项目。一种流行的模板引擎是 Thymeleaf.

Thymeleaf 的模板仅包含有效 HTML。这意味着设计师和程序员可以并行工作。它还具有良好的布局系统。此外,与 JSP 相比,Thymeleaf 具有更易读和优雅的语法。下面是在 Thymeleaf 中生成简单 table 的代码示例:

<html>
....
<table>
  <tr>
    <th>Name</th>
    <th>Price</th>
    <th>In stock</th>
  </tr>
  <tr th:each="prod : ${prods}">
    <td th:text="${prod.name}">Onions</td>
    <td th:text="${prod.price}">2.41</td>
    <td th:text="${prod.inStock}? #{true} : #{false}">yes</td>
  </tr>
</table>
....
</html>

还有许多其他附加功能,例如对国际化的内置支持、将参数传递给片段等。

您可以在 Thymeleaf 和 JSP here and here 的比较中找到更多详细信息。