JavaEE6及其替代方案

JavaEE6及其替代方案,java,spring,struts,java-ee-6,Java,Spring,Struts,Java Ee 6,我是一名JavaSE开发人员,但我有丰富的web背景(PHP、Perl/CGI等),现在我开始新的项目。它将具有web界面、意大利面条业务逻辑、作为存储的关系数据库以及与其他服务的连接。我从头做起 我的同事告诉我使用spring、spring security和struts。 我简要地看了一下JavaEE6规范,发现它几乎涵盖了企业应用程序的所有方面。我问我的同事为什么他们需要spring和struts,但看起来他们使用技术仅仅是因为他们熟悉spring和struts,而不熟悉经典的JavaEE

我是一名JavaSE开发人员,但我有丰富的web背景(PHP、Perl/CGI等),现在我开始新的项目。它将具有web界面、意大利面条业务逻辑、作为存储的关系数据库以及与其他服务的连接。我从头做起

我的同事告诉我使用spring、spring security和struts。 我简要地看了一下JavaEE6规范,发现它几乎涵盖了企业应用程序的所有方面。我问我的同事为什么他们需要spring和struts,但看起来他们使用技术仅仅是因为他们熟悉spring和struts,而不熟悉经典的JavaEE6堆栈

所以,我的问题是:JavaEE6有什么不好的地方? 如果有JNDI查找,为什么我需要spring?为单元测试创建假InitialContext需要一两天的时间。这就是全部:我站在外面的工具,如弹簧。 如果Servlets规范中内置了安全性,为什么我需要spring安全性? 我可以使用web.xml将任何请求映射到任何servlet,不需要struts.xml。我可以使用servlet过滤器代替struts拦截器。 有RMI,所以我不需要spring remote。 等等

如果有JavaEE6,我为什么要为那些花哨的东西而烦恼呢

我真的很想找到JavaEE6还不够的情况。 有吗


谢谢

Spring对于JavaEE来说不是必需的。Spring只是使复杂的JavaEE组件易于使用

Spring是一个模型视图控制器,它使javaee更干净、更有组织。将模型、视图和控制器分离在结构上更为正确

我同意你的看法。如果它是一个简单的网站,那么我认为你可以用JavaEE做任何事情。然而,想象一下有很多处理表单输入的代码和很多模型。每个控制器都可以有一个视图。您可以创建一个servlet,然后转发到正确的jsp页面,也可以使用spring,因为它已经完成了所有这一切

决定您需要使用多少spring。一个好的框架可以让你选择要使用的部分。我认为spring做得很好,因为您可以使用mvc模型,或者更进一步,用它做更多的事情


最后一点,spring具有依赖注入,这使得配置更加容易

为什么人们使用春天,为什么它如此流行,需要一点历史

过去,Spring比JavaEE应用程序更简单。我参考了EJB2.x规范。我感觉到有一种对该规范复杂本质的反抗。开发人员想要一种更简单的架构,Spring通过允许他们编写POJO(普通的旧Java对象)为他们提供了这种架构而不是必须实现特定接口才能获得所需功能的类

Spring还使两个原则更加流行:控制反转(InversionofControl,IoC)和依赖注入。这两个原则结合在一起,提供了一种不同的方式来连接应用程序的各个组件,并在应用程序运行时将这些组件放入应用程序中。这一点,再加上仅仅编写POJO的想法,对许多人来说是非常有吸引力的,因为代码更简单,更容易连接所有组件

较新的EJB3规范取消了Spring提供的一些功能,但是Spring不仅仅是一个IoC容器。它为JDBC访问数据库、处理事务的多种简单方法、测试实用程序、MVC堆栈等提供了很好的模板。它很受欢迎,现在仍然很受欢迎。我听过的一个笑话是

“EJB3,没有人问这个问题的答案……”

EJB3是一个不错的选择。春天是个不错的选择。Grails也是一个不错的选择(使用Spring,在封面下休眠)。

“那么,为什么我需要Spring?”

伊利亚!最后你说服了我(希望你自己)你不需要春天。事实上,这堆东西没有什么特别的好处。。。除非你已经习惯了。他们写了一本关于网络技术的书,然后在书中加入了计算机科学的其他内容,称之为RESTfull

“然而,想象一下有很多处理表单输入的代码和很多模型。每个控制器可能都有一个视图”

阿米尔考虑得很好。我所知道的web框架之间的真正区别在于组件的定义。Struts有三种类型的组件-视图、控制器和模型组件。乍一看很好(肯定比其他人好)。但是你能用这些组件构建什么呢一个页面视图、一个页面控制器和一个页面模型。天知道从这三行组件绑定项目的成本是多少——如果可能的话,可能是一个巨大的配置


真正的解决方案是(正如您在上面引用的实际情况中所述)组件的概念,每个组件都有自己的视图、控制器和模型。到目前为止,只有一个框架做到了这一点——HybridJava。Spring中的网页构建块是什么?

听起来您需要使用Spring,然后使用JavaEE6来实现特定的功能,以便您可以将这两种功能与实际工作的原型进行比较

然而,我使用spring的原因是:

  • 能够将我的应用程序从应用程序服务器中抽象出来。因此,我可以在任何应用服务器上运行,或者在AS之外运行,以进行单元测试
  • 为了改进我的设计,我必须编写大量的锅炉板代码
  • IOC/DI—需要依赖项的对象不知道如何获取依赖项—它只知道它需要什么接口。一些第三方提供了它们。是的,您可以在JavaEE6中推出自己的第三方版本,但它已经在Spring中提供
  • Bean管理的事务—Spring提供了对事务进行完全低级控制所需的所有工具。我总是建议使用BMT,因为它给你可能需要的灵活性
我知道)B