
在尝试将 vaadin web 应用程序部署到 apache tomcat 服务器时,开发者可能会遇到应用程序无法访问,浏览器显示 404 not found 错误的情况。尽管 tomcat 服务器本身运行正常,且其他非 vaadin 应用可能可以正常访问,但 vaadin 应用的特定路径(例如 /your-app-name/)却无法解析。
典型的服务器访问日志可能会记录如下错误:
127.0.0.1 - - [15/Nov/2022:11:02:51 -0500] GET /icsprojects-version-1.0/ HTTP/1.1 404 783 127.0.0.1 - - [15/Nov/2022:11:18:00 -0500] GET /icsprojects-version-1.0/ HTTP/1.1 404 783
这些日志条目明确指出,当尝试访问部署的 Vaadin 应用程序路径时,服务器返回了 404 状态码,表示资源未找到。
在遇到此类问题时,开发者通常会进行以下初步排查:
尽管进行了这些排查,问题依旧存在,这表明可能存在更深层次的兼容性问题。
导致 Vaadin 应用在某些 Tomcat 版本上部署失败的根本原因,在于 Java EE (Java Platform, Enterprise Edition) 和 Jakarta EE (Jakarta Enterprise Edition) 之间的包名和规范变更。
Apache Tomcat 的版本兼容性:
Vaadin 框架的兼容性:
问题症结: 当您尝试将一个基于 Java EE (使用 javax.* 包) 的 Vaadin 应用(如 Vaadin 14)部署到 Tomcat 10 或更高版本时,Tomcat 无法找到应用程序所需的 javax.* 包和 API。这导致应用程序无法正确初始化,从而在访问时返回 404 错误,因为 Web 容器未能识别并加载该应用。
针对上述兼容性问题,有以下几种解决方案:
最直接和简单的解决方案是使用与您的 Vaadin 版本兼容的 Tomcat 版本。
如果项目允许且有资源进行迁移,可以考虑将 Vaadin 应用升级到支持 Jakarta EE 的版本(Vaadin 23 及更高版本)。
对于学校项目或需要快速部署的场景,使用 Spring Boot 及其内置的嵌入式 Web 服务器(如 Tomcat、Jetty 或 Undertow)是一种非常简便且强大的解决方案。
优点:
Spring Boot 示例配置: 在您的 Vaadin 项目中,如果使用 Maven,可以在 pom.xml 中添加 Spring Boot Web Starter 依赖。
<dependencies>
<!-- Vaadin dependencies -->
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-spring-boot-starter</artifactId>
</dependency>
<!-- Spring Boot Web Starter (includes embedded Tomcat) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Other Spring Boot dependencies if needed -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>然后,创建一个 Spring Boot 主应用程序类:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class YourVaadinApplication {
public static void main(String[] args) {
SpringApplication.run(YourVaadinApplication.class, args);
}
}通过这种方式,您可以将 Vaadin 应用打包为可执行 JAR,并通过 java -jar your-app.jar 命令直接运行,而无需担心外部 Tomcat 的版本兼容性问题。
Vaadin 应用在 Apache Tomcat 上的 404 部署错误,核心在于 Java EE 和 Jakarta EE 规范之间的不兼容性,尤其是 javax.* 和 jakarta.* 包的冲突。理解这一背景是解决问题的关键。通过选择合适的 Tomcat 版本(Tomcat 9 及更早版本),或升级 Vaadin 到支持 Jakarta EE 的版本,或采用 Spring Boot 嵌入式服务器,开发者可以有效地解决这些兼容性挑战。对于大多数现代项目,尤其是那些追求部署简便性的项目,Spring Boot 的嵌入式服务器方法通常是更优选的解决方案。
以上就是Apache Tomcat 部署 Vaadin 应用:兼容性问题排查与解决方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号