作为一个职业程序员,很多时候反而不会太在意工具背后的理论,因为完成任务往往是最重要的。由于中国网络的的兴起,大量业内外人士开始接触 Java 语言,一时间网上铺天盖地都是一些关于基本概念的问题。人的好奇心往往是激起来的而不是自发的,就如网上没几个人会问操作系统或者汽车制造业的概念一样,其实更多时候人们只是好奇,而不是想进一步做什么。
但,好奇总是好的,尤其对于知识来说。
我最近难得闲暇,也翻阅了不少资料,正好借这个机会谈谈 J2EE 的架构。
正文:
如同其它版本一样,J2EE 本身也是一些工具包的集合,只不过是更多针对企业应用。我们知道 Java 是伴随着网络兴起的,从互联网时代到来的那一刻开始,客户端/服务器的结构就已经深入人心,但在早先的时候即便是用 J2EE,开发服务器也相当繁琐。这就是为什么要有程序服务器(Application Server),同时就引出了容器(Container)的概念。要想理解什么是容器,最简单的办法就是从需求来推导。
正如操作系统会为程序开发人员准备 api 一样,程序服务器要怎么同 Java 开发人员的程序交互,开发好的程序又怎么能在服务器端运行?有人可能说有 J2EE 就行了,其实不然。J2EE 并没有提供一个现实可用的服务器程序,只是提出了 J2EE 程序的规范,你用 J2EE 开发出来的程序实际上是没有服务器功能的(比如建立 Socket 响应 HTTP 请求,以 SMTP 发送邮件之类),但不用担心,一切必要的功能已经由服务器程序完成了。你需要在意的只是如何与服务器交互,而交互的任务就落到了容器的头上。
容器将服务器功能对应 J2EE 规范封装为 J2EE 程序可以调用的接口,同时通过 XML 配置文件处理类与类之间的关系。(比如何时生成实例,何时销毁)这时你编写程序只要考虑容器暴露出来的接口,不用担心服务器具体的调用方式了。而这也为之后的 ejb 容器及 Spring 这个大热门的容器提供了空间,容器脱离了服务器而存在,你只需对容器编程,不用担心用的是何种服务器。
至于 ejb 就好说了,其实它的前身就是 ibm 为自己公司开发的容器,里面包装了比 J2EE 规范更多的接口,方便企业程序的开发应用。而 sun 之后接纳了 ejb 作为 J2EE 的一部分,使得程序开发更加便捷。Spring 的出现则是因为人们对 ejb 依旧不满,希望有更加易用的容器出现。Spring 作为一个轻量级容器一方面简化了开发的难度,另一方面由于模块化的优点方便人们将 Spring 与其它框架组合(比如 Struts 和 Hibernate 等),使开发 J2EE 程序变得越发简单。当然这并不是说 JSP + Java bean 的方法不是最简单的,而是就一些中大型应用而言,Spring 找到了一个微妙的平衡。
这就是J2EE架构:一些工具包的集合,程序服务器,接口,容器……而Spring则是一个易用的容器。
【编辑推荐】