关闭。此问题不符合 Stack Overflow 准则。它目前不接受答案。我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便可以用事实和引用来回答它。 7 个月前关闭。社区在 7 个月前审查了是否重新打开此问题并将其关闭:原始关闭原因未解决 改进此问题
我正在寻找从头开始创建一个新应用程序,并且可能会使用 Spring MVC 和可能的 Spring Web Flow。 Spring Roo 创建的项目使用 Spring MVC 和可选的 Web Flow。视图技术有哪些好的替代方案,或者 JSP 与 Spring 和 JSTL taglibs 和 jQuery 是要走的路吗?
我最近发现了 Thymeleaf。
它看起来完全替代了 JSP,并与 Spring MVC 集成。模板方法看起来更像 HTML,并且可能更适合您的 UI 设计师。他们有一个小文章,将两个 solutions 并排比较。
在标准 Java EE API 中,JSP 的唯一替代方案是 Facelets。到目前为止 (2010) JSF 是唯一原生支持 Facelets 的 MVC 框架。
Spring MVC 仅支持开箱即用的 JSP,但它有一个可配置的 view resolver,它允许您使用 Facelets。其他候选者是第 3 方模板框架,例如 Velocity、Freemarker 和 Thymeleaf,它们可以配置为 Spring MVC 的视图技术。 Spring 文档有 integration examples 和 Velocity 和 Freemarker。
我最近开始使用纯 HTML 和 jQuery 进行演示,使用 Spring MVC 仅创建一个 JSON 视图。
到目前为止,一切进展顺利,即使我必须进行 javascript 工作,它也可以让我与设计师的交互更加轻松,并且在他发生更改时缩短周转时间,因为我不必将他的 HTML 转换为我的 JSP。整个网站的可维护性尚无定论。
您可以在 Spring MVC 上拥有任意数量的视图技术。我有 FreeMarker 和 JSP 视图解析器。当我遇到在 FreeMarker 中太复杂(或者在 JSP 中更方便)的视图时,我创建了一个 JSP 视图。例如,带有 JSTL 的 Spring 可以很好地处理表单。为此,我使用 JSP 视图,但对于几乎所有其他内容,我都有 FreeMarker 视图。
查看 Spring MVC 文档以了解如何配置多个视图解析器,基本上:
<bean name="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<property name="prefix" value=""/>
<property name="suffix" value=".ftl"/>
<property name="order" value="1"/> <!--NOTICE THE ORDER-->
</bean>
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
<property name="order" value="2"/> <!--NOTICE THE ORDER-->
</bean>
虽然这是一个老问题,但我想我会提供一个新兴的替代方案,即 Scalate。
Scalate 是模板选项的强大力量。唯一的可能是 Scalate 需要大量依赖项(虽然它需要 Scala,但它不需要您用 Scala 编写)。
我目前最喜欢的是Handlebars.java,它确实集成了 Spring。
(我之前的回答在这里过时了。)Freemarker 至少和 Velocity 一样好。但是 Thymeleaf 看起来更加引人注目,再加上布局方言,它可能使像 sitemesh 和 tile 这样的模板框架变得不必要。对于 JSF,Thoughtworks' criticism 似乎有效:
我们继续看到团队在使用 JSF(JavaServer Faces)时遇到麻烦,并建议您避免使用这种技术。团队似乎选择 JSF,因为它是一个 Java EE 标准,而没有真正评估编程模型是否适合他们。我们认为 JSF 是有缺陷的,因为它的编程模型鼓励使用它自己的抽象,而不是完全接受底层的 Web 模型。 JSF 与 ASP.NET 网络表单一样,尝试在顶级 HTML 标记和无状态 HTTP 协议上创建有状态组件树。 JSF 2.0 和 2.2 的改进,例如无状态视图的引入和 GET 的推广,是朝着正确方向迈出的一步,甚至可能承认原始模型存在缺陷,但我们觉得这太迟了。我们建议团队使用简单的框架并与包括 HTTP、HTML 和 CSS 在内的 Web 技术密切合作,而不是处理 JSF 的复杂性。
您还可以在 Spring MVC 中为您的视图层使用 Angular(客户端框架)。
我的建议是不要查看上面大部分内容中描述的视图框架,它不是在 Spring MVC 之上编写的,因为您最终会遇到回发之类的问题,这意味着您将无法从该视图技术提交数据并从服务器取回响应。像验证这样的例子,用来自服务器的数据刷新的编辑数据提交将不起作用。
这是因为上述某些视图技术中的 java bean 不使用 Spring 容器生命周期。您将只能将它们用于纯视图示例无状态请求。使用 JSF 的示例您将无法使用回发,因为 jsf 回发仅在您使用 jsf 生命周期时才有效,并且如果您将 spring 框架 JSF 视图解析器与 spring mvc 一起使用,您将无法进行回发,因此您需要替换 jsf servlet 控制器而不是 spring mvc 控制器。
再次,因为您的完整项目要求不明确,如果您不想要回发要求,您可以使用上述一些选择。
在 og spring mvc 上编写的一个示例视图技术是基于 zk 框架的 zk mvc,您可以在其中从 ZK GenericForwardComposer 扩展您的 spring mvc 控制器来处理事件。您始终可以使用 Spring 使用 Spring 框架来处理这些控制器的生命周期。
你可以谷歌搜索类似的其他产品。
本综述基于框架生命周期的高级设计。
一切顺利 !!!
您可以在 Spring Webflow 上运行 Facelets
phpj 呢?
它可以用作视图模板,或者您可以从头开始制作您的 Web 服务器系统
我制作了 phpj,因为我不喜欢一直更新我的应用程序并使用 tomcat 加载它,因此我可以使用类似 apache 的配置为我的 Web 应用程序使用静态位置
Apache Velocity 是 Java Server Pages 的一个很好的替代品。
不定期副业成功案例分享