ChatGPT解决这个技术问题 Extra ChatGPT

Spring MVC 视图层的 JSP 替代方案 [关闭]

关闭。此问题不符合 Stack Overflow 准则。它目前不接受答案。我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便可以用事实和引用来回答它。 7 个月前关闭。社区在 7 个月前审查了是否重新打开此问题并将其关闭:原始关闭原因未解决 改进此问题

我正在寻找从头开始创建一个新应用程序,并且可能会使用 Spring MVC 和可能的 Spring Web Flow。 Spring Roo 创建的项目使用 Spring MVC 和可选的 Web Flow。视图技术有哪些好的替代方案,或者 JSP 与 Spring 和 JSTL taglibs 和 jQuery 是要走的路吗?

对于任何感兴趣的人,我最终都选择了 JSP,并且效果非常好。凭借 jsp 标记文件提供的可重用性以及 spring 和 jstl 中可用的漂亮标记库,它不是我记得的 2004 年可怕的 JSP,它有大量的 scriptlet 等等。
请提出替代方案。
以下是 Spring MVC 官方文档中的相关部分:View Technologies

S
Shawn Sherwood

我最近发现了 Thymeleaf

它看起来完全替代了 JSP,并与 Spring MVC 集成。模板方法看起来更像 HTML,并且可能更适合您的 UI 设计师。他们有一个小文章,将两个 solutions 并排比较。


Thymeleaf 本身很棒,但与布局方言一起layout dialect我喜欢它!
为什么我应该在 facelets 时使用 thymeleaf?此外,facelet 的模板方法看起来像 html 等等。我们为什么要使用它?根据 facelets,是什么让它成为一件好事?对我来说“没什么”。也许 thymeleaf 比 jsp 大。所以 java ee 最近为模板语言开发了“facelets”。所以 JSP 是老技术。你为什么要和他比较?它是老技术?对不起我的英语不好。
K
Koray Tugay

在标准 Java EE API 中,JSP 的唯一替代方案是 Facelets。到目前为止 (2010) JSF 是唯一原生支持 Facelets 的 MVC 框架。

Spring MVC 仅支持开箱即用的 JSP,但它有一个可配置的 view resolver,它允许您使用 Facelets。其他候选者是第 3 方模板框架,例如 VelocityFreemarkerThymeleaf,它们可以配置为 Spring MVC 的视图技术。 Spring 文档有 integration examples 和 Velocity 和 Freemarker。


“到目前为止 (2010) JSF 是唯一原生支持 Facelets 的 MVC 框架。”您的意思是“到目前为止(2010 年)Facelets 是唯一原生支持 JSF MVC 框架的视图技术。”? Facelets(它是一种视图技术)不应该支持像 JSF 这样的 MVC 框架吗? (对不起,如果我说的没有意义,我对 JSF 的东西很陌生)。
自 JSF 2.0 起,Facelets 就包含在 JSF 本身中。所以你不需要单独安装它。 Facelets 本身可以与任何其他 MVC 框架(例如 Spring MVC)一起使用,但您必须手动安装和配置它。
d
digitaljoel

我最近开始使用纯 HTML 和 jQuery 进行演示,使用 Spring MVC 仅创建一个 JSON 视图。

到目前为止,一切进展顺利,即使我必须进行 javascript 工作,它也可以让我与设计师的交互更加轻松,并且在他发生更改时缩短周转时间,因为我不必将他的 HTML 转换为我的 JSP。整个网站的可维护性尚无定论。


生成的 RESTful API 可以处理分页吗?
你的宁静 api 可以做任何你想做的事。对于分页,只需添加开始和结束或偏移量和页面大小或获得适当结果所需的任何内容。
嗨,我知道这已经晚了,但只是一个提示,Thymeleaf 试图解决您在回答中提到的确切问题(开发人员-设计师交互)。那么,它可能值得一看。
谢谢@acdcjunior。我参加了 SpringOne 上关于 Thymeleaf 的演示,它看起来非常有趣和自然,直到演示者在他的测试中说 Thymeleaf 比 JSP 慢 8 到 10 倍。
是的,确实比较慢。检查此线程: forum.thymeleaf.org/Performance-issue-td3722763.html 。对我来说,这就是我没有盲目投入其中的原因(因为我通常为互联网门户开发),但对于“内部网”应用程序,那些 JSF 可以接受的应用程序,我觉得 thymeleaf 也可以。不过,希望他们的表现在未来有所改善。干杯!
i
informatik01

您可以在 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>

i
informatik01

Springs 3 documentation 还建议使用 FreeMarker。 Freemarker(据我所知)速度很快,并且集成了一些 Spring 特性,如绑定。


n
naXa stands with Ukraine

Spring MVC 提供与许多不同 view technologies 的集成。我建议使用 FreeMarkerVelocity


A
Adam Gent

虽然这是一个老问题,但我想我会提供一个新兴的替代方案,即 Scalate

Scalate 是模板选项的强大力量。唯一的可能是 Scalate 需要大量依赖项(虽然它需要 Scala,但它不需要您用 Scala 编写)。

我目前最喜欢的是Handlebars.java,它确实集成了 Spring。


有趣的是它没有列出任何 Spring 兼容性。你成功将它与 Spring MVC 集成了吗?
stackoverflow.com/questions/5913373/scala-spring-and-scalategithub.com/scalate/scalate/tree/master/scalate-spring-mvc 。我做了与前者类似的事情。 Spring 很容易与其他东西集成。
@digitaljoel 另请参阅Using Scalate with Spring MVC
N
Nathan Hughes

(我之前的回答在这里过时了。)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 的复杂性。


为什么它是最好的选择?速度的错误检查非常糟糕。那为什么更好呢?
@Adam:它要简单得多,并且不允许scriptlet,我认为这些是对JSP 的改进。我记得为我的速度模板编写测试也很简单。
Q
Quotidian

我同时使用 Stripes 和 Spring。 Stripes 大部分时间都不会影响你,但我发现它可以在你需要时很好地增强 Spring。


A
Athens Holloway

我正在使用 velocity 和 Spring MVC。此外,我在 Google 应用引擎上托管我的应用程序,我没有任何问题。


d
ddsultan

您还可以在 Spring MVC 中为您的视图层使用 Angular(客户端框架)。


你可以在服务器端渲染吗?
如果我理解正确,您想问一下 Angular 是否进行服务器端重绘。从 Angular 2.x 开始,它提供了这个功能。您可以查看此参考:Server-side Rendering
对不起,我应该更具体。我的意思是有没有一种方法可以在没有 nodejs 服务器的情况下在 Java 中渲染一个 Angular 应用程序?
您可能要检查一个社区项目是否有 Java:Angular UniversalJ。我认为它在后台使用 Node。
A
Agassis

我的建议是不要查看上面大部分内容中描述的视图框架,它不是在 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 框架来处理这些控制器的生命周期。

你可以谷歌搜索类似的其他产品。

本综述基于框架生命周期的高级设计。

一切顺利 !!!


n
naXa stands with Ukraine

我认为 Tiles 可以帮助您。
您可以定义模板并在内部使用 JSTL。


T
Tommy B

您可以在 Spring Webflow 上运行 Facelets


l
larsig

phpj 呢?

它可以用作视图模板,或者您可以从头开始制作您的 Web 服务器系统

我制作了 phpj,因为我不喜欢一直更新我的应用程序并使用 tomcat 加载它,因此我可以使用类似 apache 的配置为我的 Web 应用程序使用静态位置


H
Harshana

Apache Velocity 是 Java Server Pages 的一个很好的替代品。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅