JBoss和tomcat的区别

本文详细介绍了JBoss和Tomcat的部署方式区别,特别是暴露式部署在JBoss中的应用,并指导如何在Eclipse环境下实现热部署。包括部署目录、配置方法和解决部署过程中遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JBoss和tomcat的区别

注意JBoss和tomcat是不一样,JBoss是一个可伸缩的服务器平台,当你的EJB程序编制完成后,如果访问量增加,只要通过增加服务器硬件就可以实现多台服务器同时运算,提高了负载容量,这个性能容量理论上是没有限制的,理论上无最大支持在线人数的上限,对于JBoss/EJB这样的平台来说,无最大访问量限制一说。

这是JBoss/EJB不同于Spring /Tomcat等平台的最大优点所在,而且EJB 3.0也将出现轻量化解决方案,其实随着发展,已经模糊了轻量/重量的区别,如果还是以轻量/重量作为架构选择的标准,无疑是不明智的。

可伸缩性应该是架构选择的主要标准,所谓可伸缩性,只在小型系统、一台服务器情况下,我的系统也可以良好运转,多台服务器扩展后,我的系统只需通过增加硬件就可以实现性能扩展,无需修改太多软件。

 

JBoss和Tomcat部署方式的区别(解释暴露式部署)

转自:http://wwwcomy.iteye.com/blog/2106246

本来想写"Eclipse Juno(j2ee)开发环境下JBoss热部署的实现方式(暴露式部署,WTP)"


但是内容貌似有点多,写在一个贴子里太罗嗦了,单独拎一个出来记录一下基础知识。

之前的开发一直使用Tomcat作为servlet容器,最近公司的项目需要EJB容器,所以不得不看一下JBoss的部署方式。

以下所说的JBoss都是5.10GA版本,免费的嘛,谁用谁知道。

其实每个人都有自己习惯的调试方式,有的人喜欢搞完代码ant打个包放到server下远程调试,有的喜欢直接在IDE(比如Eclipse)下 直接debug on server调试。 我更倾向于后者,因为现在的项目往往都比较大,打个包要好久,直接debug on server会更方便一些。

首先普及一下JBoss和Tomcat的部署方式区别
1. 沉思。。。 其实没什么特别大的区别=。=,毕竟JBoss使用了Tomcat的很多特性嘛(甚至很多代码,servlet处理这一块应该都是Tomcat的东西)
2. Tomcat的部署方式:

  • 打成war包放到webapps下
  • 直接把符合J2EE规范的目录(其实就是war包解压出来的目录)放到webapps下
  • 在server.xml里面配置context自定义webapp的加载目录
  • 在%Tomcat_Home%\conf\Catalina\localhost下添加一个xml用来定义webapp目录(之前开发我就是用的这种方式,很快很舒坦,用的Tomcatplugin)


3.JBoss的部署方式:

    • 打成war/ear包放到%JBOSS_HOME%/server/default/deploy下
    • 直接把符合J2EE规范的目录(其实就是war包解压出来的目录)放到webapps下,这里要注意一点,这个目录的名字要做一下修 改:比如你的项目叫 "webproject",那么你的解压之后目录应该改名成webproject.war(我把war去掉就访问不了了,至于原因我也没查),注意这个不是文件,是个目录,他下面会有WEB-INF目录。而这种直接部署目录的方式,就叫做暴露式部署Exploded Deployment,见链接 放个截图:



    • JBoss不支持修改server.xml添加context的方式自定义webapp路径。这个算待讨论吧,反正我加了个context节点然后JBoss就起不来的,尽管网上有这种添加的说法。
    • JBoss自定义webapp部署路径的方式可以详见JBoss_Enterprise_Application_Platform-5-Getting_Started_Guide-en-US.pdf,chapter6,section2。 我就不细说了,下载地址google吧,redhat官网就有。
    • JBoss应该还支持在启动时候加参数的方式指定webapp目录,据说WTP插件启动时候就是这么干的,但是这点我没有确认过,而且看了下WTP的行为好像不是这么干的,有需要的可以自行google。
      如果对部署方式有疑问,请先看这个帖子:
      JBoss和Tomcat部署方式的区别(解释暴露式部署)

      我们说一下Eclipse J2ee版本(下个WTP插件也行)自带的run on server功能,支持好多webserver,但是jboss只支持到5了,原因你懂的。接下来我们就看一下如何使用。

      1. Window-preferences-Server-Runtime Environment-Add-Jboss-选择ApplicationServer的Home即可添加一个Server。
      2.新创建一个Dynamic Web Project,注意Dynamic web module version选2.5(5.10应该支持不了3.0)。
      3.在WebContent下面写个index.html,然后在工程右键,run as-run on server,选择你刚才创建的JBoss,finish。然后就可以访问了。

      接下来是贴题的内容了:
      Eclipse的这个功能实际上是把项目打成war放到了JBoss的deploy目录下面,当我们在eclipse里面修改文件的时候,如果仔细观察console的话,会发现有类似以下的内容会闪着出现:
      Java代码   收藏代码
      1. Buildfile: C:\eclipse\plugins\org.eclipse.jst.server.generic.jboss_1.6.1.v200904151730\buildfiles\jboss323.xml  


      这个目录可能和WTP或者eclipse版本有关,具体请自查。我们来看一下jboss323.xml,发现实际上是个ant脚本。以下内容
      Java代码   收藏代码
      1. <target name="deploy.j2ee.web">  
      2.         <jar compress="false" destfile="${project.working.dir}/${module.name}.war">   
      3.             <zipfileset dir="${module.dir}">  
      4.                 <include name="**/*.*"/>  
      5.                 <exclude name="**/*.war"/>  
      6.             </zipfileset>  
      7.         </jar>  
      8.         <move file="${project.working.dir}/${module.name}.war" todir="${server.publish.dir}"/>  
      9.         <sleep seconds="${pause.deploy}"/>  
      10.     </target>  


      描述了web项目发布时候的动作,先把整个项目打成war包,然后把他复制到了JBoss server的publish路径,这个路径我看了下应该是%JBOSS_HOME%\server\default\deploy。

      现在的问题是, 每次修改完,他都要重新去做jar操作来打包,当项目比较大的时候这个操作是很耗时的,所以我们现在使用暴露式部署的方式进行部署,因为修改的文件少的时候,ant会检查文件的修改时间,没修改的文件是不会复制的:
      1. 把上面那段xml修改为
      Java代码   收藏代码
      1. <target name="deploy.j2ee.web">  
      2.         <property name="deploy.dir" location="${server.publish.dir}/${module.name}.war" />  
      3.         <mkdir dir="${deploy.dir}" />  
      4.         <copy todir="${deploy.dir}">  
      5.             <fileset dir="${module.dir}">  
      6.                 <include name="**/*.*"/>  
      7.                 <exclude name="**/*.war"/>  
      8.                 <exclude name="**/web.xml"/>  
      9.             </fileset>  
      10.         </copy>  
      11.         <copy todir="${deploy.dir}" overwrite="true">  
      12.             <fileset dir="${module.dir}">  
      13.                 <include name="**/web.xml"/>  
      14.             </fileset>  
      15.         </copy>  
      16.         <sleep seconds="${pause.deploy}"/>  
      17.     </target>  

      2.找到undeploy.j2ee.web这个target,这个是如果undeploy进行的动作,修改为:
      Java代码   收藏代码
      1. <target name="undeploy.j2ee.web">  
      2.         <!--<delete file="${server.publish.dir}/${module.name}.war" failonerror="false"> </delete>-->  
      3.         <delete dir="${server.publish.dir}/${module.name}.war" failonerror="false"> </delete>  
      4.         <sleep seconds="${pause.undeploy}"/>  
      5.     </target>  



      解释:
      • deploy.j2ee.web这个target修改为先根据项目名称在jboss的deploy里面创建一个 项目名称.war的目录,然后把eclipse工程下的所有文件,除了war和web.xml,都拷贝到那个新创建的目录下。
      • 接下来,单独拷贝web.xml。单独拷贝的原因在于,我试了一下修改一个servlet类,发现已经同步过去了,但是JBoss并没有去重新部署他,但是修改一个静态html或者jsp都会即时生效,找了好半天资料,在链接发现,如果以暴露式部署的话,必须要修改web.xml,JBoss才认为需要重新部署,所以单独复制了一下web.xml用来修改他的修改时间,这样JBoss就会重新部署了。
      • undeploy.j2ee.web就是为了把deploy里面创建的那个目录删掉。


      其实这样还是稍微有一点问题,毕竟还多了一个复制操作。先把公司项目跑起来看看效率行不行吧,如果不行的话,就要修改JBoss添加自定义的load路径了,去掉这个复制操作。

      参考资料:http://www.blogjava.net/brian/articles/315942.html这个没有处理web.xml
    •  
      JBoss是 全世界开发者共同努力的成果,一个基于J2EE的开放源代码的应用服务器。 因为JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用它,而不用支付费用。2006年,Jboss公司被Redhat公司收购。JBoss 是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。

      JBoss7.1.0.CR1b官方下载地址:http://download.jboss.org/jbossas/7.1/jboss-as-7.1.0.CR1b/jboss-as-7.1.0.CR1b.zip

      JBoss7.0.2.Final官方下载地址:http://download.jboss.org/jbossas/7.0/jboss-as-7.0.2.Final/jboss-as-web-7.0.2.Final.zip

      JBoss优点:

        1、JBoss是免费的,开放源代码J2EE的实现,通过LGPL许可证进行发布。但同时也有闭源的,开源和闭源流入流出的不是同一途径。
        2、JBoss需要的内存和硬盘空间比较小。
        3、安装便捷:解压后,只需配置一些环境变量即可。
        4、JBoss支持"热部署",部署BEAN时,只拷贝BEAN的JAR文件到部署路径下即可自动加载它;如果有改动,也会自动更新。
        5、JBoss与Web服务器在同一个Java虚拟机中运行,Servlet调用EJB不经过网络,从而大大提高运行效率,提升安全性能。
        6、用户可以直接实施J2EE-EAR,而不是以前分别实施EJB-JAR和Web-WAR,非常方便。
        7、Jboss支持集群。

      JBoss官方网站:http://www.jboss.org

      JBoss官方下载地址: http://www.jboss.org/jbossas/downloads/
<think>嗯,用户问的是JBossTomcat区别,我需要先回忆这两个技术的基本信息。首先,Tomcat我记得是Apache基金会的一个项目,主要用作Servlet容器,支持Java ServletJSP。而JBoss现在应该叫WildFly,是一个由Red Hat支持的应用服务器,功能更全面。 那两者的核心区别应该在于应用服务器Web容器的不同。Tomcat主要是Web容器,处理HTTP请求,执行ServletJSP。而JBoss作为应用服务器,除了Web容器外,还提供了EJB容器、JMS、事务管理等企业级功能。需要确认这点是否正确。 接下来,应用场景方面。Tomcat适合轻量级的Web应用,比如简单的网站或者Spring Boot应用。而JBoss适合需要分布式事务、消息队列等企业级功能的大型应用。比如银行系统或者电商平台可能需要JBoss。 架构上,JBoss可能整合了Tomcat或其他Web容器作为其一部分,这样JBoss在底层可能包含Tomcat的功能,但增加了更多组件。需要查证这一点,是否JBoss确实内嵌了Tomcat或者Jetty。 管理功能方面,JBoss应该提供更全面的管理界面工具,比如管理控制台支持集群配置、性能监控等高级功能。而Tomcat的管理功能相对基础,主要是应用部署简单的监控。 性能方面,Tomcat因为轻量,启动快,资源占用少。而JBoss由于功能多,启动可能较慢,内存消耗更大。不过具体性能差异可能因版本使用场景而异,需要提醒用户实际测试。 协议支持方面,JBoss可能支持更多的协议,比如RMI、IIOP,适合分布式系统间的通信。Tomcat主要处理HTTP/HTTPS协议。 社区生态部分,Tomcat作为Apache项目,社区活跃,文档丰富,适合中小型项目。JBoss属于Red Hat,有商业支持,适合需要企业级支持的大项目。 安全性方面,JBoss可能提供更细粒度的安全控制,比如集成JAAS,支持角色权限管理。Tomcat的安全配置相对简单,但也足够应对一般需求。 另外,用户可能想知道如何选择,是否需要根据项目需求来决定。比如是否需要EJB、分布式事务等。如果只是运行Spring MVC应用,Tomcat可能更合适;如果使用EJB或需要JTA,那么JBoss更合适。 还要注意版本问题,WildFly是JBoss的后续版本,可能需要说明一下名称的变化,避免用户混淆。同时,Tomcat也有不同版本,如Tomcat 9、10等,支持不同的Servlet规范。 总结时,要分点列出区别,结构清晰,让用户容易理解。可能需要用比较表格来呈现,但用户要求用中文回答,所以用列表形式分项说明。 最后检查是否有遗漏的关键点,比如是否支持微服务架构,或者与Spring Boot的集成情况。Tomcat内嵌于Spring Boot,而JBoss可能需要更多配置。这点可能对用户选择有帮助。</think>JBoss(现称 **WildFly**) **Tomcat** 是两种常用的 Java 中间件,但定位功能差异显著。以下是核心区别的对比: --- ### 1. **核心定位** - **Tomcat** - **轻量级 Web 容器**:专注处理 HTTP 请求,支持 `Servlet/JSP` 规范,适用于简单 Web 应用(如传统 MVC 架构或 Spring Boot 项目)。 - **不包含企业级功能**:如 EJB、分布式事务、消息队列等。 - **JBoss/WildFly** - **完整应用服务器**:支持 `Java EE`(现 Jakarta EE)全栈规范,内置 Web 容器(如 Undertow)、EJB 容器、JMS、JTA 等,适合复杂企业级应用(如银行系统、ERP)。 --- ### 2. **架构复杂度** - **Tomcat** - 结构简单,启动快,资源占用低(约几十 MB 内存),适合资源有限的环境。 - 仅需基础 Java 环境即可运行。 - **JBoss/WildFly** - 模块化设计,整合多种企业级服务,启动较慢,内存占用高(通常数百 MB)。 - 依赖更多底层组件(如事务管理器、连接池)。 --- ### 3. **功能对比** | **功能** | Tomcat | JBoss/WildFly | |--------------------|-----------------|-----------------------------| | **Servlet/JSP** | ✅ 支持 | ✅ 支持(通过内置 Web 容器)| | **EJB** | ❌ 不支持 | ✅ 支持 | | **JMS(消息队列)**| ❌ 需集成 ActiveMQ 等 | ✅ 内置 | | **JTA(事务管理)**| ❌ 需扩展 | ✅ 内置 | | **集群与负载均衡** | ❌ 需手动配置 | ✅ 内置支持 | --- ### 4. **适用场景** - **选择 Tomcat** - 轻量级 Web 应用、REST API 服务。 - 基于 Spring Boot 的微服务(默认内嵌 Tomcat)。 - 资源有限或无需企业级功能的场景。 - **选择 JBoss/WildFly** - 需要 EJB、分布式事务、消息总线的传统企业应用。 - 遗留系统迁移(如旧版 Java EE 项目)。 - 需 Red Hat 商业支持的大型项目。 --- ### 5. **管理与扩展** - **Tomcat** - 提供基础管理界面(`/manager`),支持热部署、日志查看。 - 扩展需依赖第三方库(如 Spring 提供事务管理)。 - **JBoss/WildFly** - 提供功能丰富的管理控制台 CLI,支持动态模块加载、性能监控、集群配置。 - 内置企业级扩展(如 Keycloak 集成、数据源管理)。 --- ### 6. **社区与生态** - **Tomcat** - Apache 开源项目,社区活跃,文档完善,适合中小团队。 - 与 Spring 生态深度整合。 - **JBoss/WildFly** - Red Hat 主导,提供商业支持(如 JBoss EAP),适合有合规性要求的企业。 - 依赖 Java EE 生态,对微服务支持较弱(需搭配 Quarkus 等框架)。 --- ### 总结建议 - **简单 Web 应用** → Tomcat(低成本、易维护)。 - **复杂企业系统** → JBoss/WildFly(功能全面、减少重复造轮子)。 - **微服务/云原生** → 建议 Tomcat + Spring Boot 或直接使用 Quarkus。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值