【问题标题】:Is JAX-RS suitable as a MVC framework?JAX-RS 适合作为 MVC 框架吗?
【发布时间】:2023-03-26 01:15:01
【问题描述】:

JAX-RS has some MVC support,但我想知道 JAX-RS 是否真的是构建供人类使用的 Web 应用程序的好选择。

如果用户在表单中输入错误或不完整的信息,它应该像 Grails 或 Wicket 一样再次显示。有没有一种使用 JAX-RS 的舒适方法?

据我所知,如果未提供所有必需参数或存在类型转换问题(例如 Date),则 URI 映射无法正常工作。对吗?

是否支持国际化模板?

这是example for a simple JAX-RS based GUI application。但它真的很简单,i18n 和验证之类的东西就不讨论了。

【问题讨论】:

    标签: java model-view-controller jakarta-ee web-frameworks jax-rs


    【解决方案1】:

    是的,您可以,但是您必须摆脱旧的页面发布模型,并开始将您的应用程序视为与 RESTful SOA 通信的断开连接的 UI。输入表单数据时,如果数据不正确,它会发布到服务端点,然后您会返回错误并由 UI 处理该错误。您不会在传统的页面发布模型中将表单发布到服务器,而是对后端系统进行类似 RPC 的调用。您的视图与 MVC 堆栈的其余部分完全分离。这使得用自定义移动或 IVR 系统替换视图变得非常简单。

    如果用户在表单中输入错误或不完整的信息,它应该像 Grails 或 Wicket 一样再次显示。有没有一种使用 JAX-RS 的舒适方法?

    使用富 Internet 应用程序,您不必重新填充数据,因为您从未离开过页面,会向服务器发出 XHR 调用,并返回成功 200 或错误。 UI 然后根据该响应决定要做什么,但页面仍然完好无损,因为调用是从主 UI 线程带外的。

    【讨论】:

    • 这意味着几乎所有与服务器的通信都使用 JavaScript,对吧?
    • 是的,这是核心概念之一,服务器由两部分组成,提供静态 HTML 的 Web 服务器和应用程序服务器,它是用于数据和业务逻辑的一系列 REST 端点。您可以从浏览器发出 XHR 调用以获取数据和表单处理、业务逻辑。好的部分是这为您提供了非常细粒度的控制。例如,您可能想在输入所有信息后验证表单,但您可能还想检查在他们输入时是否使用了用户名。通过在 XHR /JAX-RS 调用中进行这两种操作,您就有了一个共同的架构。
    • 为了澄清即使认为服务器由两部分组成,它们在物理上也可以是同一台服务器,只是有助于将它们可视化为两个不同的实体。同样,我个人使用可以将静态 HTML 导出到 Web 服务器的 CMS。这提供了没有运行时依赖的模板。我不使用 JSP,而是使用纯 HTML、CSS 和 JavaScript 构建前端。
    • +1 这里的关键是您的 JAX-RS 资源不仅用作 RESTful API,还用作您的 Ajax 回调端点。当接受标头包括“text/html”和纯 XML 或 JSON 数据(如果分别为“application/xml”或“application/json”)时,通过回复数据的 UI 表示来继续 REST 范例。
    【解决方案2】:

    JAX-RS 是 Java EE RESTful 框架。 JavaServer Faces (JSF) 是 Java EE MVC 框架。它支持您在问题中提到的所有内容:错误时回发到相同的表单、i8n/l10n 和 much 更多。要了解有关 JSF 的更多信息,请转至 Java EE 6 tutorial part II chapters 4-9

    你可以用 JAX-RS 做一点 MVC,但它不是一个成熟的 MVC 框架。同样的故事还在继续,您可以使用 JSF 做一些 RESTful,但它不是一个成熟的 RESTful 框架。

    如果你想要两全其美,我认为你真的需要前往Ruby on RailsGroovy on Rails

    【讨论】:

    • 谢谢。我知道 JSF,但我正在寻找一些 RESTful 来构建 GUI 应用程序。
    • 看看 Ruby 或 Groovy on Rails。
    • Grails 受 Ruby on Rails 的启发,但不是克隆。我的两分钱,BalusC :)
    【解决方案3】:

    或者采用集成方法来获得两全其美:JAX-RS + MVC。

    JAX-RS 的 JBoss RESTEasy 实现与 Spring MVC 集成。见http://www.jboss.org/resteasy

    这里有一个关于 RESTEasy + Spring MVC 的小教程:http://java.dzone.com/articles/resteasy-spring

    【讨论】:

    • 感谢您分享这篇有趣文章的链接!
    【解决方案4】:

    这一篇有很多问题,我就其中两个发表我的看法。

    “我想知道 JAX-RS 是否真的是构建供人类使用的 Web 应用程序的好选择。”

    Web 服务通常是供机器进行交互的,尽管我认为通常是人类必须对交互进行编程 - 这需要与 SOAP 进行比较,目前,机器生成的代码有更多的空间来自 WSDL。

    “如果用户在表单中输入错误或不完整的信息”

    • 然后在接受 html 表单表示的 RESTful HTTP Web 服务中,您应该返回 HTTP 错误 400,因为客户端提供的表示不符合您的服务期望的表示 - 由客户端来处理错误。

    【讨论】:

    • 我同意在发送不正确的数据时返回 400 状态。但是,当数据以表格形式输入时,仅此一项是没有帮助的。突出显示表单字段会更好。
    • 天哪,你认为 Rails 的幕后发生了什么?您曾多次表示您想要一种 RESTful 方式来做事。我认为您需要了解这意味着什么:en.wikipedia.org/wiki/…
    【解决方案5】:

    看看ReXSL - 它是一个基于 JAX-RS 的 MVC 框架。因此,答案是——是的,JAX-RS 非常适合 MVC 设计。

    【讨论】:

      【解决方案6】:

      简短回答:

      它是为 JAVA EE 8 实现 MVC (MVC 1.0 - JSR 371) 的基础。Controller 将是一个带有 @Controller 注释的 JAX-RS bean(在类或方法上)。

      更多信息请见:MVC 1.0 (JSR 371)

      如果您当时选择了这条路,您已经做了一个非常好的决定,那么它应该会让您更轻松地升级和使用新的 Java EE 8 MVC 架构。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-29
        • 2011-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多