一、什么是容器
通俗点容器就是用来盛放东西的。进入java的学习后,第一个要明白的就是java语言是一种完全面向对象的程序设计语言。在这里想说的不是java语言基础,因为没有做过项目,刚刚开始,想要说的是JAVA中面向对象的“称呼”。
首先,给我感触最深就是“容器”。在JAVA中,“容器”的含义很贴近生活,JAVA容器是一个Java 所编写的程序,也是用来存放数据,对象的集合;另一方面来说,这也是面向对象的打包,封装的概念的合理体现。
这样的好处:
1、把具有某种特征的一类型事物打包存放,对外统一提供接口,服务。
2、具有统一的生命周期。
当然还有很多好处,但是目前我的理解还有限。java中有很多不同的容器,用来盛放不同的组件、对象。
二、JAVA内部容器
JAVA内部容器是再学习java核心基础J2SE的时候学习的。这些内部容器就是:List、ArrayList、Vector及map、HashTable、HashMap、Hashset。
这些容器我们通过一个图来展示:
看到这张图,想必大家都不陌生。不必多说,下面只强调重点。
Set:没有顺序,不可以重复
List:有顺序,可以重复(equals)
Arraylist :存储位置相连,所以可以根据存储位置依次遍历查询。
读取快,改动慢
linkList:存储位置不挨着,但是每个对象都包含“next”的引用,通过这条“link”来遍历所有元素查询。
改动快,读取慢
问题:如何使用一个统一的接口,来遍历以上不同的list 元素。——iterator 方法。
Map:成对(key-value)的存入,存的就是键值对。
Hash:介于arraylist 和linked 两者之间,现在一般不太用
三、基于java的基础架构的容器们
基于java基础架构的容器跟java内部容器的区别还是很大的。
首先他们针对的对象不一样,这里的容器存放的是特定功能的“组件”所以基于Java基础架构的容器是在J2EE“体系结构”这个宏观的比较大的层面上进行的“打包”。这些容器是J2EE技术的一种载体。典型的有WEB容器,EJB容器,Application 容器,Applet容器。J2EE技术如此广受企业开发的欢迎跟这些容器有极大关系,这些容器给编程提供了极大的便利。这里只说WEB容器和EJB容器。
WEB容器
给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接与容器中的环境变量接口交互,不必关注其它系统问题。主要由WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
EJB容器
Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。
下面是几个常用WEB容器和EJB容器:
WEB容器
1、Apache只是一个web服务器,解释静态网页Html——确切说是一个web服务器
2、Tomcat是一个初级的应用服务器,支持sp和servlet,不支持EJB,如需EJB功能须用jboss
web 容器+EJB容器。
3、Jboss
4.0 版本之前的JBOSS是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范。从4.0 之后 JBoss含有Jsp和Servlet容器,也就可以做web容器,也包含EJB容器,是完整的J2EE应用服务器。Jboss内嵌Tomcat... 处理静态页面Jboss的速度要比较快。
4、 Websphere 含有Jsp和Servlet容器,也就可以做web容器,也包含EJB容器,是完整的J2EE应用服务器.是IBM公司产品。
5、Weblogic是一个企业级的应用服务器,其中包括j2ee中的各类应用如jsp,servlet,ejb等。
WEB容器和EJB容器区别
在原理上是大体相同的,更多的区别是被隔离的外界环境。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节,直接引用环境变量session,request,response就行、EJB不用关心数据库连接速度、各种事务控制,直接由容器来完成。
打个比方:WEB容器是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),EJB容器就是一个桶(装像EJB这样的水),而这个桶也可以不放在卡车上。