我正在努力熟悉JavaEE。关于每个“组件”的目的(缺少一个更好的词),我有点困惑:Session Beans和Servlets,以及它们如何与Web应用程序(客户端JavaScript)正确交互。
为了理解这一点,我正在构建一个简单的Web应用程序。使用每个组件构建类似于以下内容的首选方法是什么:
发送请求时,是将其发送到Servlet(使用EJB)还是通过WSDL发送到会话Bean?如何使用这两种方法为该用户维护“状态”?我认为使用Session Beans就像使用@Stateful注释它一样简单。
另外,我假设从客户端发送的请求必须是SOAP格式。使用更轻量级的东西(比如JSON)有多容易?虽然我更喜欢使用轻量级的东西,但是如果SOAP使开发更快/更容易,则没有必要。
答案 0 :(得分:4)
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 Persistence Architecture框架(JPA)维护状态,并通过无状态会话bean访问和操作此类数据。刚接触Java EE的开发人员经常试图使用有状态会话bean来维护在持久存储中更好地管理的状态。本教程将向您介绍不同类型的bean类型及其用途。
答案 1 :(得分:1)
Web服务(WSDL,SOAP等)通常用于应用程序之间的通信。
在单个Web应用程序中,您通常使用AJAX进行简单的GET / POST请求,并接收完整的HTML页面,或HTML(AJAX)的片段,或XML或JSON数据(AJAX)。浏览器通常与servlet通信,但很少直接使用servlet。
通常的方法是在servlet之上使用框架。框架可以分为两大类:基于动作的框架(Stripes,Spring MVC,Struts等)或基于组件的框架(JSF,Wicket,Tapestry等)。
在n层应用程序中,所有上述技术都应该只包含表示层。此表示层与业务层进行通信,实际业务逻辑发生在该业务层,其中事务用于访问数据库,消息传递系统等。此业务层是使用EJB的位置。
答案 2 :(得分:0)
您可以按如下方式创建基本架构:
创建EAR instread两个不同的项目,如EJB Jar和Web Application 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){
}
}