Java 在web应用程序中使用EJB和servlet的首选方式是什么?

Java 在web应用程序中使用EJB和servlet的首选方式是什么?,java,servlets,jakarta-ee,ejb,session-bean,Java,Servlets,Jakarta Ee,Ejb,Session Bean,我正在努力熟悉JavaEE。对于每个“组件”(缺少更好的词)的用途,我有点困惑:会话bean和servlet,以及它们如何与web应用程序(客户端JavaScript)正确交互 为了理解这一点,我正在构建一个简单的web应用程序。使用每个组件构建类似以下内容的首选方法是什么: 用户访问“登录”页面 用户输入数据并单击提交。然后,我使用AJAX发送一个请求以登录用户 然后服务器端验证用户输入并“记录”用户(返回用户配置文件等) 在发送请求时,我是将其发送到Servlet(使用EJB)还是通过WSD

我正在努力熟悉JavaEE。对于每个“组件”(缺少更好的词)的用途,我有点困惑:会话bean和servlet,以及它们如何与web应用程序(客户端JavaScript)正确交互

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

  • 用户访问“登录”页面
  • 用户输入数据并单击提交。然后,我使用AJAX发送一个请求以登录用户
  • 然后服务器端验证用户输入并“记录”用户(返回用户配置文件等)
  • 在发送请求时,我是将其发送到Servlet(使用EJB)还是通过WSDL发送到会话Bean?如何使用这两种方法来维护该用户的“状态”?我假设对于会话bean,它就像用@Stateful注释它一样简单

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

    这篇文章几乎涵盖了你提到的所有主题;不同类型的bean的用途是什么,如何实现web服务,如何实现身份验证,等等

    我强烈建议您花时间构建示例应用程序,特别是如果您对Java企业版(JavaEE)完全陌生的话。建立对核心概念的良好理解非常重要,因为由于构成JavaEE的技术和标准的广度和深度,在一开始就很难知道应该关注什么

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

    为了回答您的一些特定问题,javaee对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访问和操作这些数据。刚接触JavaEE的开发人员通常倾向于使用有状态会话bean来维护在持久性存储中得到更好管理的状态。本教程将带您了解各种bean类型及其用途。

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

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

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


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

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

    创建两个不同的项目,如EJBJAR和Web应用程序WAR

    您可以创建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){
            }
        }
    

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