今天研究一下什么是容器???
那么容器到底是什么呢?在****的论坛上人们众说纷纭:1)容器 和原意放东西的地方差不多,把链表了,数组一类的结构称作容器!2)在面向对象的编程中,你所面对的东西都叫对象,是想一下,来存放对象集合的东西叫什么?3)从特征上来看,容器主要分为顺序容器(list和vector)和关联容器(map和set)。通俗地说,vector就是可以自动增长大小的数组,它在内存中所处的空间是连续的,list就是链表,这两者的区别主要是关注它们的插入特性和对元素的后续访问要求。如果我们要随机访问一个容器,则vector 比list好得多;如果我们需要在容器的任意位置插入或删除元素,则list 又比vector好得多。4)容器就是装对象的东西。比如数组,链表,哈希表。
他们之所以被成为“容器”就是因为他们的存在在很大程序上就是为了容纳一组别的东西。
但是在百度上的说法更让人易于理解,那就是实际上容器就是一个服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如java中的Tomcat容器,ASP的IIS或PWS都是这样的容器,一个服务器不止一个容器的。
webscope是一种容器技术
何为容器?容器是一种服务调用规范框架,J2EE大量运用了容器和组件技术来构分层的企业级应用。在J2EE规范中,相应的有WEB Container和EJB Container等。
WEB Container,给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP、SERVLET直接跟容器中的服务接口交互,不必关注其它系统问题。WEB Container主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。比如,Resin 2.以上版本提供的Servlet Container就实现了J2EE的Servlet 2.3规范。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节,直接引用环境变量。
session,request,response就行、EJB不用关心数据库连接速度、各种事务控制,直接由容器来完成。
1.1. 容器的职责
容器的职责因具体执行的服务调用规范的不同而有差别,比如Servlet Container只需实现Servlet 2.3规范。而Portlet Container,如Pluto,则需要具体实现基于JSR 168 portlet 规范,具体的技术规范,比如需要实现基于容器级的事件处理机制Action Event、Message Event等。从水平的方向来看,通常容器提供系统级的服务调用。
1.2. 容器与应用服务器
容器是服务调用规范的具体实现,比如EJB Container是对EJB 2.0规范的实现。然而,实现只是衡量规范的执行程度,通常容器是由应用服务器来具体执行,从这个层面来说,应用服务器又可以称之为容器的容器。
1.3. 容器与IOC原则
IOC,Inversion Of Control,即倒置控制,IOC自面向对象诞生起就存在,并不是最新技术,象SRP、OCP和DIP等面向对象的基本法则一样。Inversion Of Control,这个短语是由Brian Foote在他的一篇论文中最先使用的(/drc/)。组件所需的一切通过Contexts、Configurations和Loggers的方式赋予组件。
在组件容器中,组件不需要实现或扩展(不依赖)容器类和接口,由容器在组件需要时提供其它依赖组件实例。反例:EJB其中的EJB组件需要实现几个接口,需要用JNDI或全局注册表得到其它EJB实例。
IOC,实现了组件与容器间的解耦,意味着在开发组件时同样可以采用从上至下的方法。不需要建立一个注册类,客户端必须调用此注册类才能获得组件实例。
各容器的区别
map 是关联容器他的每一个元素都是由一个键值和一个数据值组成的
使用区别:
1 .如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
2 .如果你需要大量的插入和删除,而不关心随即存取,则应使用list
3 .如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque