Tomcat Jboss Apache WebLogic区别与比较(阿里面试)
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服务器
Tomcat Jboss Apache WebLogic区别与比较(阿里面试)的更多相关文章
- tomcat,Jboss,weblogic区别与比较
一.tomcat Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,它是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心 ...
- 浅析Apache/Tomcat/JBOSS/Nginx之区别
浅析Apache/Tomcat/JBOSS/Nginx服务器之区别 一.Apache和Tomcat的区别 Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上, ...
- 总结:Apache/Tomcat/JBOSS/Jetty/Nginx区别 .
总结:Apache/Tomcat/JBOSS/Nginx区别 .1.Apache是Web服务器,Tomcat是应用(Java)服务器.Tomcat在中小型系统和并发访问用户不是很多的场合下被普遍使用. ...
- 从0开始学Java——JSP&Servlet——Tomcat和Apache的区别
从<JSP & Servlet 学习笔记>的第一章,了解到web容器:“Web容器是Servlet/jsp唯一认得的http服务器”. 在Java中,容器的类型有多种,这里要说的是 ...
- 主流服务器apache,iis,tomcat,jboss,resion,weblogic,websphere的区别
在互联网高速发展的今天,不同种类的网站大量涌现,每个人都在享受着网络服务带来的便利.而创建自己的个性化网站的门槛不断降低.从事网站架构,这种当年的绝对“”高科技“”绝活.也从it人员的专利“”沦落“” ...
- tomcat和apache的区别
1. Apache是web服务器,Tomcat是应用(java)服务器(也可作web服务器),它只是一个servlet容器,是Apache的扩展. 2. Apache和Tomcat都可以做为独立的we ...
- tomcat和apache的区别--http server vs application server
1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展. 2. Apache和Tomcat都可以做为独立的web服务器来运行,但是A ...
- Tomcat,Jboss,Weblogic通过jndi连接数据库
1. Tomcat配置Jndi数据源 1.1在tomcat服务器的lib目录下加入数据库连接的驱动jar包 1.2修改tomcat服务器的conf目录下server.xml配置文件 编辑server ...
- JBOSS和WebLogic区别
JBoss: 1. JBoss开放源代码Java EE实现,成本低,好控制. 2. JBoss需要的内存和硬盘空间比较小,但是只适合做小项目. 3. 安装非常简单.先解压缩JBoss打包文件再配 ...
随机推荐
- apache,R,P,url重写,伪静态,反向代理
需求: 1,浏览器地址栏中URL不变 2,伪静态重写生效 ===================== <VirtualHost *> ServerName xinwen.888.com.c ...
- Qt Creator无法debug,报错:The selected debugger may be inappropriate for the inferior. Examining symbols and setting breakpoints by file name and line number may fail. The inferior is in the Portable ...
看到这个报错我是绝望的 解决:下载windows sdk win10 sdk 只安装Debugging Tools for Windows 打开 工具-选项-Kits 安装sdk成功后我们可以看到 ...
- 输入5个学生的信息(包括学号,姓名,英语成绩,计算机语言成绩和数据库成绩), 统计各学生的总分,然后将学生信息和统计结果存入test.txt文件中
题目分析: 1.首先想到的是数组存放数据,数组肯定是String类型. 2.String类型的数组,5行6列.要把从第0行第2列到第4行第4列的数据取出转换成数值型,再统计三科总分.最后把计算出的总分 ...
- 详细解读大数据分析引擎Pig&PigLatin语句
Pig 一.Pig的介绍: Pig由Yahoo开发,主要应用于数据分析,Twitter公司大量使用Pig处理海量数据,Pig之所以是数据分析引擎,是因为Pig相当于一个翻译器,将PigLatin语句翻 ...
- Intel 面试(就不该报外企,英语是硬伤)
1 自我介绍(用英文) 啊啊啊,能不能用中文啊,最好用英文,蒙了.... 2 你对硬件了解吗,对X86系统了解吗,知道CPU是怎么处理读一个数据的吗,说说cpu从读一个数据,到内存怎么进行处理? 说的 ...
- R 语言的Dataframe常用操作
上节我们简单介绍了Dataframe的定义,这节我们具体来看一下Dataframe的操作 首先,数据框的创建函数为 data.frame( ),参考R语言的帮助文档,我们来了解一下data.frame ...
- 20155301 Exp9 Web安全基础
20155301 Exp9 Web安全基础 1.实验后回答问题 (1)SQL注入攻击原理,如何防御 答 :原理: 利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web ...
- libgdx学习记录23——图片移动选择
模拟移动选择图片,采用相机实现. package com.fxb.newtest; import com.badlogic.gdx.ApplicationAdapter; import com.bad ...
- [CF1060E]Sergey and Subway[树dp]
题意 给出 \(n\) 个点的树,求 \(\sum_{i=1}^n{\sum_{j=i}^n{\lceil \frac{dis(i,j)}{2} \rceil}}\) . \(n\leq 2 \tim ...
- 【ORACLE】碎片整理
alter table test enable row movement; alter table test shrink space; execute dbms_stats.gather_table ...