You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web应用在Eclipse+Glassfish 4.1中正常运行,部署到Tomcat 9后异常

问题分析与解决方案

这个问题我之前帮朋友排查过,核心原因其实是Tomcat和GlassFish的定位差异——你踩了一个很常见的Java EE容器误区!

核心问题:Tomcat本身不支持EJB

GlassFish是完整的Java EE应用服务器,内置了EJB(Enterprise JavaBeans)容器,能处理EJB的创建、注入、生命周期管理等逻辑;但Tomcat只是一个轻量级的Servlet/JSP容器,它只实现了Java EE中的Servlet和JSP规范,完全不支持EJB相关功能。

你的Servlet里大概率用了@EJB注解来注入EJB实例,或者直接依赖了EJB的API/实现类,Tomcat启动时既无法识别@EJB注解,也找不到EJB容器来创建对应的Bean实例,最终就会抛出类似截图里的类找不到或者依赖注入失败的错误。

具体解决方案(按推荐优先级排序)

  • 方案1:改用支持Java EE的应用服务器
    如果你不想修改代码,最简单的办法就是放弃Tomcat,继续用GlassFish,或者换成WildFly、Payara这类完整的Java EE应用服务器,它们都原生支持EJB,直接部署你的WAR包就能正常运行。

  • 方案2:重构代码移除EJB依赖
    如果你坚持要使用Tomcat,需要把业务逻辑从EJB中迁移出来:

    1. 删除EJB相关的注解(比如@Stateless、@EJB)
    2. 将原EJB中的业务逻辑封装成普通的Java类
    3. 在Servlet中直接实例化这些普通类,或者用简单的依赖注入工具(比如Google Guice)来管理实例
    4. 如果用到了EJB的事务管理,可以改用JDBC事务或者Spring的事务管理来替代
  • 方案3:给Tomcat添加EJB支持(不推荐新手)
    你可以使用TomEE(Apache Tomcat的Java EE增强版),它是在Tomcat基础上集成了OpenEJB等Java EE组件,原生支持EJB。或者手动给Tomcat集成OpenEJB容器,但配置步骤比较繁琐,容易出问题,适合有一定经验的开发者。

内容的提问来源于stack exchange,提问作者AlexScalar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:00:58