struts、hibernate、spring和J2EE之间有什么样的关系
2015-11-29 13:47:01

5 Answers

Spring enables you to enjoy the key benefits of J2EE, while minimizing the complexity encountered by application code.The essence of Spring is in providing enterprise services to Plain Old Java Objects (POJOs). This is particularly valuable in a J2EE environment, but application code delivered as POJOs is naturally reusable in a variety of runtime environments.
2015-11-29 13:48:24
j2ee是规范,你说的那三个是框架,是遵守了j2ee的规范的代码框架
2015-11-29 13:47:55
没有任何直接关系。
而且 J2EE 是2.0的规范,目前的JPA等是3.0的规范, 现在叫 Java EE了。
Hibernate实现了JPA。
2015-11-29 14:11:13

仔细说说,hibernate就是一种持久层技术,说白了就是帮你怎增删该查你的数据,所以你会不会hibernate根本就和j2ee没有太大关系。


在说说spring,管理bean和集成一些开源技术的东西,我们能用到的只是ioc这块,就是用来管理应用层。所以说spring是一种理念,spring让程序员的思路和头脑进化一个层次,这是不容置疑的,但是它本身是可有可无的,没有spring的时代我们一样开发。


在有就是struts,之前的1.x的版本就是垃圾时代,成就了一批垃圾使用高手,我不是说使用者是垃圾。之后阿帕奇收购了webwork,将webwork改包改名成了struts2,所以struts2还是值得看看的。

2015-11-29 13:48:00

J2EE是一系列技术标准所组成的平台。

JavaEE包含了对一系列标准(接口)的实现。

如果你要用这些接口,恐怕要使用JavaEE服务器而不仅仅是一个Servlet容器

Servlet-API

Servlet变准是如何执行的

因为汤姆猫实现了servlet-api所以它知道怎么去找web.xml文件。
JPA规范

对于tomcat来说,他没有实现JPA规范,所以当你真的要在你的web应用里头实现数据库访问

   可以简单使用JDBC,这一点是不受限制的,因为JDBC不是JavaEE的东西,大家都可以用,JDBC只是Java数据库连接

   一定要使用JPA的话,可以参考这篇文章

   JDBC改JPA

JDBC访问数据库的主要工作包括:

   得到JDBC驱动程序;

   使用DriverManager,Connection,Statement,ResultSet等;

   而使用JPA完成数据的操作包括:

   得到JDBC驱动程序;

   得到持久性提供者相关类库和配置文件;

   提供实体类;

   使用Persistence、EntityManagerFactory和Entity等接口。

而工业界类似于JPA规范的,有Hibernate

Spring

那么问题来了,Spring依赖了什么javaee规范呢?

Spring只依赖于servlet-api。

但是,Spring的可扩展性强得令人发指,对于实现JPA规范,他有Spring Data JPA,它依赖于openjpa-persistence-jdbc,而openjpa实现了JSR-317 Java Persistence 2.0规范,所以的话它仍旧是可以在Tomcat里头用。注意JPA规范用的是persitence.xml的配置文件,这个好理解,跟web.xml是一个道理的。

回过头来,如果你不想用JPA,大可以用Spring自带的JDBCTemplate,它是处在org.springframework.jdbc.core里头的。

总结

Spring的核心仍然在于CDI,正是因为这个原因,哪怕它不去实现大部分的JavaEE规范,它也可以去兼容这些规范的实现,然后利用CDI,注入这些实现。

2015-11-29 14:19:00
您不能回答该问题或者回答已经关闭!

相关文章推荐

  • C#中using指令的几种用法

    using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到

  • C#实例解析适配器设计模式

    将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作

  • C#运行时相互关系

    C#运行时相互关系,包括运行时类型、对象、线程栈和托管堆之间的相互关系,静态方法、实例方法和虚方法的区别等等

  • 使用托管C++粘合C#和C++代码(二)

    本文实现一下C++代码调用C#代码的过程。我构造一个简单并且直观的例子:通过C++ UI 触发C# UI.

  • C#开发高性能Log Help类设计开发

    项目中要在操作数据库的异常处理中加入写Log日志,对于商业上有要求,写log时对其它操作尽可能影响小,不能因为加入log导致耗时太多

  • Async和Await使异步编程更简单

    C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作

  • C#开发中的反射机制

    反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等

  • C#协变和逆变

    “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型,“逆变”则是指能够使用派生程度更小的类型

  • C#基础概念之延迟加载

    延迟加载(lazy load)是Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作

  • C#中的索引器的简单理解和用法

    C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作

  • 使用托管C++粘合C#和C++代码(一)

    C#在xml读写,数据库操纵,界面构造等很多方面性能卓越;C++的效率高,是底层开发的必备武器

  • 深入C# 序列化(Serialize)、反序列化(Deserialize)

    C#中的序列化和反序列化,序列化是.NET运行时环境用来支持用户定义类型的流化的机制