Jetty和tomcat的比较
相同点:
Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。
不同点:
架构比较
Jetty的架构比Tomcat的更为简单
Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。
Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。
性能比较
Jetty和Tomcat性能方面差异不大
Jetty可以同时处理大量连接而且可以长时间保持连接,适合于web聊天应用等等。
Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务器内存开销,从而提高服务器性能。
Jetty默认采用NIO结束在处理I/O请求上更占优势,在处理静态资源时,性能较高
少数非常繁忙;Tomcat适合处理少数非常繁忙的链接,也就是说链接生命周期短的话,Tomcat的总体性能更高。
Tomcat默认采用BIO处理I/O请求,在处理静态资源时,性能较差。
其它比较
Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。
Tomcat目前应用比较广泛,对JavaEE和Servlet的支持更加全面,很多特性会直接集成进来。
1. Tomcat是Apache鼎力支持的Java Web应用服务器,只能做JSP和Servlet的Container,不支持EJB,由于它优秀的稳定性以及丰富的文档资料,广泛的使用人群,从而在开源领域受到最广泛的青睐。实际上Tomcat 部分是Apache 服务 器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进 程单独运行的。
2.Apache全球应用最广泛的http服务器,免费,出自apache基金组织.apache仅有的不足是,它本身仅提供html静态页面的功能,不能支持jsp、java servlet、asp等功能,
但通过同其他应用服务器一起工作或添加插件来支持。(稳定高效,通常需要与其他服务器软件或插件协同工作)
3. Jboss作为Java EE应用服务器,它不但是Servlet容器,而且是EJB容器(同时支持EJB的优化版tomcat),是完整的J2EE容器,从而受到企业级开发人员的欢迎,从而弥补了Tomcat只是一个Servlet容器的缺憾。
4.BEA WebLogic Server是专门为企业电子商务应用系统开发的。它不但是Servlet容器,而且是EJB容器(同时支持EJB的优化版tomcat),是完整的J2EE容器, 企业电子商务应用系统需要快速开发,并要求服务器端组件具有良好的灵活性和安全性,
同时还要支持关键任务所必需的扩展、性 能、和高可用性。BEA WebLogic Server简化了可移植及可扩展的应用系统的开发,并为其它应用 系统和系统提供了丰富的互操作性。
但是weblogic不是一款开源的软件,虽然存在免费试用等,但它主要的应用目标为大型商业应用,而这种应用需要高额的license费用。
5.resin:resin是Caucho公司的产品。resin最突出的是它的性能非常高效,连html页面的效率也直追apache;支持 servlet/jsp,EJB。虽然resin是开源的,不过有两种lisence:GPL和商用lisence,
可以在GPL下免费使用,但注意商用 的是要交钱的。(高效全功能的轻型服务器软件)
6.websphere:websphere是IBM旗下的一款应用服务器软件。与weblogic相似,同为商业软件,同具有稳定、高效,支持多种应 用……。也是需要高额的费用,适于大型商业应用;有Community Edition版本,是开源的。
(如果有IBM其他配套产品,大型商用考虑使用)
搭配:
1. 如果仅需要展示html页面,而不要其他功能,apache;
2. 如果是在开发时使用或者是一般小型应用,需要支持jsp/servlet,而又不需要EJB的,tomcat;
3. 需要支持jsp/servlet,不需要EJB,有希望提高服务器的效率和稳定性的,apache+tomcat;
4. 需要支持jsp/servlet/EJB,而又想免费的,apache+jboss(包含tomcat的版本);
5. 需要支持jsp/servlet/EJB,又可以花点小钱的,resin(实在认为有必要,可以考虑resin+apache);
6. 大型商用,可以支付较高费用,weblogic(websphere可选);
7. 大型商用,可以支付较高费用,且有其他IBM相关功能服务的,websphere。
如果对J2EE 包含了 JSF 和EJB 就是标准的javaSE和企业版EJB
EJB从我们一开始没怎么接触J2EE的时候就开始听说了,听说他是一个容器,听说他很高大上,但是对于我们这种java菜小鸟来说真的听不懂呀,这段时间经过我的广泛搜集资料,算是把他的基本定义和基本使用方式知道的差不多了。
我们都知道我们这部分学习的是J2EE,之前学习过J2SE,那么构建知识网的原则我们知道我们需要映射,知道他们之间的相同点和不同点,我们前期在学习J2SE的时候使用到了CMD而我们学习J2EE的时候却没有说使用CMD,可以说J2SE是J2EE的一部分,J2EE适用范围更广,它可以看成在J2SE的平台上加上了无数的组件,才构成了他现在的功能!而我们这次的主角EJB就是这样的一个组件容器,我们以前接触过ITOO的框架我们将我们的工程分为三层表现层、业务逻辑层和数据层,而我们的EJB就是相当于业务逻辑层,土体的他的位置,请见下图:
视图层或表现层:提供用户界面;接收用户输入;数据输出。WEB应用的情况,JSP以及SERVLET属于视图层组件。
业务逻辑层:实际的业务逻辑处理。根据视图层传送过来的数据,进行实际的业务逻辑处理(包括数据库的查询,更新等),再把处理后的结果返回给视图层。EJB,以及不使用EJB的情况下担当业务逻辑处理部分的JavaBean等归属于业务逻辑层组件。
数据库层或数据持久化层:多指用于保存业务数据的数据库,也可以是文件等等。
EJB属于J2EE体系结构中的业务逻辑层部分。
SessionBean
主要负责业务逻辑的处理。根据处理时的状态保持与否,SessionBean又被分为:
Stateful SessionBean(有状态SessionBean)
Stateless Bean(无状态SessionBean)对象的“状态”是指对象的属性值,也就是对象所携带的数据。Stateful SessionBean能维持会话的状态,就是说能为同一客户端保持上一回被调用时的状态,类似于HttpSession;而Stateless SessionBean则不能维持会话状态,也就是说,对Stateless SessionBean来说,每个方法都是独立的,因为对特定客户端不保持会话状态,所以一般也不在Stateless SessionBean里定义成员变量。
EntityBean
负责数据库的访问。通常由SessionBean调用。EntityBean的一个实例所表示的数据通常代表了关系数据库中特定表的特定的一行数据。EJB3开始,EntityBean部分的功能可以通过JPA来实现。
EntityBean的作用:
1,对数据库的操作:查询,数据的更新,删除等
2,数据库表数据的携带
根据对数据库操作(持久化)的不同,EntityBean分为以下2种类型:
1,BMP (Bean-managed persistence:bean管理持久化):持久化操作(数据库的访问,数据的创建,更新,删除等)由EntityBean的实现(javax.ejb.EntityBean的实现类)自身完成。
2,CMP (Container-managed persistence:容器管理持久化):持久化操作由容器根据deploy时的配置信息(ejb-jar.xml)自动完成。
MDB (message-driven bean:消息驱动bean)
MDB主要用来处理异步消息。客户端调用SessionBean,EntityBean的方法时,会一直处于等待状态,直到被调用的方法处理完毕。但使用MDB,客户端向容器发送一个JMS消息之后,不必等待MDB处理完毕便可直接返回。JMS被发送给由容器管理的JMS消息队列,容器在适当的时候通知MDB的callback方法onMessage加以处理。一个MDB需要实现javax.jms.MessageListener接口与javax.ejb.MessageDrivenBean接口。
平时我们经常看到各种容器名称:Servlet容器、WEB容器、Java WEB容器、Java EE容器等,还有各种服务器名称:应用服务器、WEB服务器、WEB应用服务器、Java WEB应用服务器、Java EE服务器等,这么多相似名称,难以弄明白它们之间的区别与联系。
下面我们尝试从它们的定义中,区分它们,找出他们之间的联系,最后通过Apache、nginx、tomcat等举例说明容器以及服务器的联系。
1、容器与服务器的联系
如上图,我们先来看下容器与服务器的联系:容器是位于应用程序/组件和服务器平台之间的接口集合,使得应用程序/组件可以方便部署到服务器上运行。
2、各种容器的区别/联系
2-1、容器(Containers)
容器通常理解就是装东西的,我们这里说技术上的容器就是可以部署应用程序,并在上面运行的环境。
一般来说,它处理屏蔽了服务器平台的复杂性,使得应用程序在它的基础上可以方便快捷的部署;而对于应用程序来说,它就是位于应用程序和平台之间的接口集合。
容器管理组件的生命周期,向应用程序组件分派请求,并提供与上下文数据(如关于当前请求的信息)的接口。
注意,容器技术虚拟化(如Docker 应用容器引擎)不在本文关注范围内。
2-2、Servlet容器
Servlet:属于Java EE重要技术规范,构建了"接收请求--调用servlet程序处理--返回响应"基本模型。
Servlet程序:Java提供了开发Servlet程序的API,该API可以说Servlet容器的一部分,它对接应用程序与Servlet容器;
Servlet容器:就是实现了Servlet技术规范的部署环境,它可以部署运行Servlet程序。
2-3、Java WEB容器
WEB容器:可以部署多个WEB应用程序的环境。
Java WEB容器:实现了Java EE规定的WEB应用技术规范的的部署环境。
Java EE WEB应用技术规范:Servlet、JSP(JavaServer Pages)、Java WebSocket等。
所以,完整的Java WEB容器包含Servlet容器。
2-4、Java EE容器
Java EE容器:实现了Java EE技术规范的部署环境。
Java EE技术规范:除了上面说的Servlet、JSP等Java EE WEB应用技术规范,还包括EJB(Enterprise JavaBeans)等许多技术规范。
所以,完整的Java EE容器包含Java WEB容器(Servlet容器)、EJB容器等。
Apache与Tomcat 区别:
两者定位:Apache是HTTP Web服务器,Tomcat是Web容器。
有一个非常形象的比喻:Apache是一辆车,可以装载静态的物件(HTML静态网页等);但不能装动态的水(JSP、CGI等),要装水就需要桶(容器),当然桶也可以不放在车上而单独存放,则该容器即为Tomcat。
两者的主要区别:
- Apache是世界上最流行的Web服务器(其次是微软的IIS),可以处理浏览器的HTTP请求,默认端口为80;Tomcat是运行在Apache之上的应用服务器,为客户端提供可以调用的方法。Tomcat是一个Servlet容器(可以认为Apache的扩展),可独立运行。
- Apache只支持HTML等静态普通网页,可以单向连通Tomcat(Apache可以访问Tomcat的资源,反之不然);Tomcat是Servlet容器,可以支持JSP、PHP和CGI等,其中CGI是公共网关接口,可以用Perl编写CGI脚本。
- Apache侧重于HTTP Server;Tomcat侧重于Servlet引擎。
两者可以整合:当客户端需要请求静态资源,只需要Apache服务器响应请求;当客户端需要动态资源,如JSP,需要Tomcat服务容器(Tomcat可以将JSP解析为Servlet)。由于JSP需要JDK的数据库驱动接口,所以一般组合是Apache+Tomcat+JDK。
两篇介绍Apache服务网器比较好的博客:Apache与Tomcat的区别于联系,http://www.admin10000.com/document/974.html;web服务器apache架构与原理,http://www.cnblogs.com/fnng/archive/2012/11/08/2761713.html。
Tomcat==>web容器,包含了Servlet容器;
由于Servlet没有main方法,Servlet生命周期方法的调用受控于容器,即容器管理Servlet的生命周期,包括初始化(init)、服务调用(service)和销毁(destroy),Tomcat就是一个Servlet容器。
当Web服务器得到一个Servlet请求时,并不是直接将请求提交给Servlet,而是转交给部署该Servlet的Web容器(Tomcat),由容器向Servlet提供HTTP请求和响应,并由容器调用Servlet的方法,如doGet()和doPost()。更详细的容器处理请求和响应过程,后边再整理。
参考:J2EE总结之EJB总结
参考:Tomcat Jboss Apache WebLogic区别与比较
参考:各种容器与服务器的区别与联系:Servlet容器 WEB容器 Java EE容器 应用服务器 WEB服务器 Java EE服务器