【问题标题】:Alternatives to JSP for Spring MVC view layer [closed]Spring MVC 视图层的 JSP 替代方案 [关闭]
【发布时间】:2011-02-14 08:27:38
【问题描述】:

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

【问题讨论】:

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

标签: java jsp spring-mvc


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

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

      (我之前的回答在这里过时了。)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 的改进。我记得为我的速度模板编写测试也很简单。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

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

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

            【讨论】:

            【解决方案9】:

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

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

            【讨论】:

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

            我认为Tiles 可以帮助你。
            你可以定义模板并在里面使用JSTL。

            【讨论】:

              【解决方案11】:

              我最近发现了Thymeleaf

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

              【讨论】:

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

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

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

              本次审查基于框架生命周期的高级设计。

              一切顺利!!!

              【讨论】:

                【解决方案13】:

                您可以在 Spring Webflow 上运行 Facelets

                【讨论】:

                  【解决方案14】:

                  phpj 呢?

                  它可以用作视图模板,也可以从头开始制作您的网络服务器系统

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

                  【讨论】:

                    【解决方案15】:

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

                    【讨论】:

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

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

                    【讨论】:

                      猜你喜欢
                      • 2014-02-02
                      • 1970-01-01
                      • 2015-12-07
                      • 1970-01-01
                      • 1970-01-01
                      • 2012-10-08
                      • 2010-10-11
                      • 2017-03-23
                      • 2011-09-23
                      相关资源
                      最近更新 更多