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

Nik*_*ntz 5 spring templates jsp deprecated

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

Ken*_*kov 8

Spring(以及 Struts、Apache Wicket 等框架)是基于 servlet 的。当您使用 Spring for web 时,您将使用 servlet 作为底层技术。

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

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


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

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

您可以在此处此处找到有关 Themeleaf 和 JSP 比较的更多详细信息。