【问题标题】:What is the preferred way to use EJBs and Servlets for web applications?将 EJB 和 Servlet 用于 Web 应用程序的首选方式是什么?
【发布时间】:2011-06-25 20:00:47
【问题描述】:

我正在尝试熟悉 JavaEE。我对每个“组件”的用途(因为没有更好的词)有点困惑:会话 Bean 和 Servlet,以及它们如何与 Web 应用程序(客户端 JavaScript)正确交互。

为了理解这一点,我正在构建一个简单的 Web 应用程序。使用每个组件构建类似于以下内容的首选方式是什么:

  1. 用户访问“登录”页面
  2. 用户输入数据并点击提交。然后我使用 AJAX 发送请求以登录用户。
  3. 然后服务器端验证用户输入并“登录”用户(返回用户配置文件等)

发送请求时,我是将其发送到 Servlet(使用 EJB)还是通过 WSDL 发送到会话 Bean?如何使用任何一种方法为该用户维护“状态”?我假设使用 Session Beans 就像用 @Stateful 注释一样简单。

另外,我假设从客户端发送的请求必须是 SOAP 格式。使用更轻量级的东西(例如 JSON)有多容易?虽然我更喜欢使用轻量级的东西,但如果 SOAP 使开发变得更快/更容易,那就没有必要了。

【问题讨论】:

  • 您似乎并不确定您到底想问什么?我建议阅读 java ee 教程:download.oracle.com/javaee/6/tutorial/doc 对于初学者来说非常好,阅读后您将熟悉所有“组件”并知道如何构建您的示例应用程序
  • (会话 bean 是 EJB 中的子 bean)请求不要直接与会话 bean 对话(模型)如果您想探索“EJB”,它们可以通过 servlet(控制器)对话。任何典型的 JEE 应用程序 servlet 都会从浏览器接收您的请求,如果您想使用 EJB,那么您可以使用。这是可以通过 JSP 和 servlet 完成的另一种选择,其中查询数据库并通过 servlet 将响应返回到此用例的浏览器 WSDL 和 SOAP 是完全不相关的。

标签: java servlets jakarta-ee ejb session-bean


【解决方案1】:

Java Enterprise Edition tutorial 几乎涵盖了您提出的所有主题;不同种类的 bean 类型的目的是什么,如何实现 Web 服务,如何实现身份验证等。

我强烈建议您花时间构建示例应用程序,特别是如果您是 Java Enterprise Edition (Java EE) 的新手。对核心概念有一个很好的理解很重要,因为由于 Java EE 的技术和标准的广度和深度,一开始可能很难知道应该关注什么。

要记住的一点是,虽然 Java EE 肯定会尝试支持最佳实践并支持设计和开发性能和可扩展性良好的安全企业应用程序,但它并没有规定或限制企业应用程序遵循一种特定的协议、数据格式和企业应用程序设计模式。一些协议和格式可以更好地被核心框架实现开箱即用地支持,并且一些选择取决于供应商,但很少有特定的技术选择被锁定在规范中。

为了回答您的一些具体问题,Java EE 对 SOAP 有很好的支持,但它不偏爱也不将 Web 服务限制为 SOAP 协议。使用 JAXB 和 JAX-RS,开发接受和返回 XML 或 JSON 或两者兼有的 RESTful Web 服务同样容易。是否需要使用 SOAP、REST 或其他协议由您决定。

您也可以选择使用 JAX-RS 等框架还是显式开发 Servlet 来处理 HTTP 请求和响应。在许多情况下,JAX-RS 将拥有您所需的一切,这意味着您可以将 Web 服务实现为带有一些注释的普通旧 Java 方法,而不必费心编组和解组内容和参数。

同样,对于 JAXB,是否要使用 WSDL 取决于您。如果你有 WSDL 定义那就太好了,但如果你没有也没有问题。

在许多情况下,您通常会使用 Java 持久性架构框架 (JPA) 维护状态,并通过无状态会话 bean 访问和操作此类数据。刚接触 Java EE 的开发人员经常倾向于使用有状态会话 bean 来维护在持久存储中更好地管理的状态。本教程将带您了解不同种类的 bean 类型及其用途。

【讨论】:

    【解决方案2】:

    Web 服务(WSDL、SOAP 等)通常用于应用程序之间的通信。

    在单个 Web 应用程序中,您通常使用或不使用 AJAX 发出简单的 GET/POST 请求,并接收完整的 HTML 页面、HTML 片段 (AJAX) 或 XML 或 JSON 数据 (AJAX)。浏览器通常与 servlet 对话,但很少直接使用 servlet。

    通常的方法是在 servlet 之上使用框架。框架可以分为两大类:基于动作的框架(Stripe、Spring MVC、Struts 等)或基于组件的框架(JSF、Wicket、Tapestry 等)。

    在 n 层应用程序中,上述所有技术都应该只包含表示层。此表示层与业务层对话,真正的业务逻辑发生在此,事务用于访问数据库、消息传递系统等。此业务层是使用 EJB 的地方。

    【讨论】:

      【解决方案3】:

      您可以按如下方式创建基本架构:

      在 EJB Jar 和 Web 应用程序 WAR 等两个不同的项目中创建 EAR

      您可以创建 servlet,它会调用一些委托类,该类具有引用 EJB 的逻辑 通过在委托类中使用 @EJB 注释将其作为远程调用调用。

       ServletClass {   
           do/post(){
           DelegateClass d = new DelegateClass();
           d.callMethod(withParam);
         }
        }
      
      
          DelegateClass   {
             @EJB
             EJBlocalinterface  ejbintance;
             void callMethod(DefinPrarm){
                ejbinstance.callEJBMethod();
             }
          }
      
      
      
          @Statelss
          EJBbeanClass implements EJBlocalinterface{
              void callEJBmethod(someParam){
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2011-08-09
        • 1970-01-01
        • 1970-01-01
        • 2013-02-08
        • 2010-09-10
        • 1970-01-01
        • 1970-01-01
        • 2010-12-04
        • 1970-01-01
        相关资源
        最近更新 更多