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

Vaadin 8.1.5配置Push在Tomcat 7.0.82运行时抛出类找不到异常

解决Vaadin Push配置中的ClassNotFoundException问题

看起来你遇到的问题是Tomcat版本与Atmosphere兼容依赖不匹配导致的,具体来说,org.apache.coyote.http11.upgrade.UpgradeInbound是Tomcat 7特有的类,而你的运行环境大概率是Tomcat 8或更高版本——这些版本里已经移除了这个类,换成了新的WebSocket升级API,所以才会每隔几秒就抛出找不到类的异常。

下面是具体的修复步骤:

1. 移除手动指定的AsyncSupport配置

先把web.xml里这个多余的初始化参数删掉:

<init-param>
 <param-name>org.atmosphere.cpr.asyncSupport</param-name>
 <param-value>org.atmosphere.container.Tomcat7AsyncSupportWithWebSocket</param-value>
</init-param>

Atmosphere框架本身会自动检测当前运行的容器(Tomcat版本),手动指定Tomcat7的实现类反而会在高版本Tomcat上出错。

2. 调整Maven依赖

如果你的Tomcat版本是8或更高,把atmosphere-compat-tomcat7依赖替换成对应的Tomcat8兼容包:

<!-- 移除旧的Tomcat7兼容依赖 -->
<!--
<dependency>
 <groupId>org.atmosphere</groupId>
 <artifactId>atmosphere-compat-tomcat7</artifactId>
 <version>2.0.1</version>
</dependency>
-->

<!-- 添加Tomcat8兼容依赖(适配Tomcat8/9) -->
<dependency>
 <groupId>org.atmosphere</groupId>
 <artifactId>atmosphere-compat-tomcat8</artifactId>
 <version>2.0.1</version> <!-- 版本建议和Vaadin内部依赖的Atmosphere版本保持一致 -->
</dependency>

另外,其实Vaadin的vaadin-push依赖已经包含了基础的Atmosphere运行时,如果你不确定版本匹配问题,也可以尝试直接移除所有手动添加的atmosphere-*依赖,让Vaadin自动管理对应的兼容包。

3. 确认核心配置保留

确保你的servlet配置里保留这两个Vaadin Push生效的关键项:

<init-param>
 <param-name>pushmode</param-name>
 <param-value>automatic</param-value>
</init-param>
<async-supported>true</async-supported>

这部分你已经正确设置了,不需要改动。

问题根源说明

Tomcat 7和Tomcat 8+的WebSocket升级机制有核心变化:

  • Tomcat7使用UpgradeInbound处理WebSocket升级请求
  • Tomcat8及以上改用UpgradeHandler接口替代了旧的类
    你手动指定了Tomcat7的AsyncSupport实现,在高版本Tomcat环境下自然找不到对应的类,而Push机制会反复尝试建立连接,所以每隔几秒就会触发一次异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:34:05