【问题标题】:Is there any other strongly-integrated presentation layer tool other than JSF/JSP for Java EE?除了 JSF/JSP for Java EE,还有其他强集成的表示层工具吗?
【发布时间】:2023-03-04 10:02:01
【问题描述】:

我在大学教授 Java EE,这是一个学生提出的问题。我说“不”,但我不太确定,所以我想我可能会问你们强大的开发人员。 :)

基本上,如果实体在我的上下文中,我想做的是使用它们:cat getter、setter 等,就像普通的 POJO 一样。如果我通过其远程接口使用 EJB,实体将与核心基础架构分离,所以这是不行的。

我想过在我的硕士论文中写一个这样的层。如果这是一个死主意,请随时告诉我。如果不是,请告诉我你是否想要一个。

或者如果有这样的工具,请告诉我!

【问题讨论】:

    标签: java jakarta-ee presentation-layer


    【解决方案1】:

    在一个基本的现代世界 Java EE 应用程序中,它被分成不同的层,其中有 4 个基本层

    +--------------------+
    |   Presentation     |
    +--------------------+
    | Controller/Actions |
    +--------------------+
    | Business Delegate  |
    |     (Service)      |
    +--------------------+
    |  Data Access Layer |
    +--------------------+
    |      Database      |
    +--------------------+
    

    您的应用程序应该从一开始就拆分成这些层,这样您就可以在任何给定的时间点替换任何层而不影响它的任何同级层。

    例如,如果您将 JDBC 用于数据访问层,您应该能够将其替换为 Hibernate,而不会影响业务委托或数据库层。使用这种架构的好处是允许与多种技术进行协作。您的业​​务代表(服务层)应该能够与 Web 服务对话并处理应用程序处理,甚至无需使用浏览器!

    关于使用JSP作为表示层,还有其他可用的技术,如velocityfreemarker,正如上面提到的iberck,tapestry也有自己的渲染引擎。您也可以使用 XML + XSLT 来呈现 UI。还有一些 UI 管理应用程序,如 Tilessitemesh,可帮助您将各种技术集成为页面的不同组件并将它们显示为一个。

    您还可以使用带有JNLP 的轻量级 Swing 组件并开发桌面风格的企业应用程序。我们所需要的只是一点想象力和客户要求,我们可以使用任何东西作为表示层。

    【讨论】:

      【解决方案2】:

      我从未尝试过,但 JSF 与 Facelets 一起工作应该比 JSP 更好。

      IBM 有关于它的 an article

      【讨论】:

        【解决方案3】:

        啊。看来您没有正确回答我的问题:)

        Bean 用于在应用程序内部提供服务。假设我想开发一个带有 swing gui 的独立 java 应用程序,并且我想从该应用程序中使用 java ee 应用程序范围内的实体。

        这就是我想要无缝的:创建实体,修改它们,以直观的方式删除它们,而不关心 EntityManager 分离问题(如果你远程调用 EJB 并且它传回一个实体对象,它将在返回前分离)。

        我不想开发 Web 应用程序。 JSF/JSP 等是强集成的,但在许多环境中,独立的客户端应用程序会更好。 :)

        【讨论】:

          【解决方案4】:

          看到你在中间的评论,我知道你想要一个基于 Java EE 的桌面框架。

          这里的答案是 JSF 在 servlet api 上工作。并且绝对适用于网络,但等等,您仍然可以在您的应用程序中嵌入 tomcat 或 jetty!

          可能性几乎是无穷无尽的,如果您的业务层定义明确,只需构建一个调用您的业务功能的摇摆层。

          此外,Java EE 是一种 API,可以替换某些部分,或者您可以只使用其中的一部分。该容器主要用于处理 EJB、Servlets JNDI 和其他小东西。所有这些都可以被桌面应用程序使用。

          所以答案取决于您的具体目标和应用程序的实际设计/实现。

          【讨论】:

            【解决方案5】:

            另一种选择是the Spring Framework。 Spring 为将实体对象绑定到视图提供了自己的支持,并在连接后为您处理获取/设置。有许多 Spring 模块可供选择。 Spring MVC 和 Spring Webflow 都值得一试。 Spring MVC (IMO) 更容易上手,但 Sring Webflow 允许更复杂的导航和更多范围选项(例如:流范围)。如果您正在寻找一本书Spring In Action 是血统。为了使用 Spring,您需要处理一些概念(例如依赖注入),但值得花时间。

            【讨论】:

              【解决方案6】:

              另一种选择是Tapestry5 框架。 Tapestry 是一个开源框架,用于在 Java 中创建动态、健壮、高度可扩展的 Web 应用程序。 Tapestry 是对标准 Java Servlet API 的补充和构建,因此它可以在任何 servlet 容器或应用服务器中工作。

              Tapestry 将 Web 应用程序划分为一组页面,每个页面都由组件构成。这提供了一致的结构,允许 Tapestry 框架承担关键问题的责任,例如 URL 构建和分发、客户端或服务器上的持久状态存储、用户输入验证、本地化/国际化和异常报告。开发 Tapestry 应用程序涉及使用纯 HTML 创建 HTML 模板,并将模板与少量 Java 代码组合。在 Tapestry 中,您根据对象以及这些对象的方法和属性来创建您的应用程序,而不是根据 URL 和查询参数。 Tapestry 为 Java Web 应用程序带来了真正的面向对象开发。

              【讨论】:

                【解决方案7】:

                如今,bean 背后的意识形态存在于我所知道的任何适当的 Java 框架中。正如 Rich 所提到的,Spring 是一个很好/很棒的全方位业务逻辑框架(查看它的 jdbc template 类,它们简直太棒了 - 另一个很棒的宝石是 applicationContext.xml 这是),对于视图层,我个人更喜欢 Apache Wicket .

                我认为您不应该自己制作,而是找到一个适合您需求的框架并开始为其代码库做出贡献,这样您就可以从已经形成的用户群开始,并且您的代码将得到更彻底的编写这反过来会让你成为一个更好的程序员。

                【讨论】:

                  【解决方案8】:

                  grails (http://www.grails.org/) 或 griffon (http://griffon.codehaus.org/) 可能感兴趣

                  【讨论】:

                    【解决方案9】:

                    StringTemplate 由 ANTLR 背后的人 Terrence Parr 编写。如果您对从模型生成某种文本表示感兴趣,这非常好。

                    使用它从同一个模型生成 XML、网页和dot files,我取得了很好的效果。你编写一个模板来渲染一个对象。该模板可以根据从模型派生的数据调用其他模板(包括递归)。 (q.v.Picture Functions)

                    Getters 和map.get() 可以直接从模板中调用。模型可以是任何 POJO。 ST 以其与控制器的严格分离而自豪,因此模板本身允许的逻辑很少。

                    与所有这些小语言一样,它是新的学习内容,可能不是您想要的。它非常适合我。

                    【讨论】:

                      猜你喜欢
                      • 2020-05-14
                      • 2010-10-17
                      • 2010-11-17
                      • 1970-01-01
                      • 2011-09-06
                      • 2020-06-28
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多