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

如何解决Tomcat过滤器启动失败(javax.servlet.Filter缺失)问题?

解决Struts 2.3.30启动Filter失败+404问题

问题根源

  1. Servlet API不匹配:javax.servlet.Filter找不到,要么是Tomcat版本过高(比如10+改用jakarta.servlet替代javax.servlet命名空间),要么是Maven中servlet-api依赖的scope设置错误,导致运行时缺失核心类。
  2. Java版本兼容性冲突:Struts 2.3.30是2016年的老版本,官方仅支持Java 6/7/8,Java 17的语法规则和类库变更会引发兼容性问题。

一步步解决

1. 将Java版本降级至8

Struts 2.3.x最高兼容Java 8,必须调整版本:

  • 修改pom.xml添加版本配置:
<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>
  • 调整IntelliJ IDEA配置:打开File > Project Structure,将Project SDK、Module SDK均设置为Java 8;再进入Settings > Build, Execution, Deployment > Compiler > Java Compiler,把Target bytecode version改为1.8。

2. 修正Servlet API依赖配置

Tomcat自带Servlet API,因此Maven依赖需设置为provided(无需打包到war包中):

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

注意:如果当前使用Tomcat 10+,直接降级到Tomcat 9.x版本——Struts 2.3.x不支持Jakarta Servlet规范,Tomcat 9仍使用javax.servlet,刚好匹配。

3. 切换至Tomcat 9.x版本

将Tomcat替换为9.x系列(比如9.0.80),确保和Struts 2.3.30的依赖完全兼容。

4. 检查Struts核心依赖完整性

确保核心依赖齐全,避免缺失必要组件:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.3.30</version>
</dependency>
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-convention-plugin</artifactId>
    <version>2.3.30</version>
</dependency>

5. 清理缓存并重新构建

  • 执行Maven命令清理旧构建文件并重新拉取依赖:mvn clean install -U
  • 清除IntelliJ IDEA缓存:File > Invalidate Caches...,选择Invalidate and Restart,彻底清除IDE缓存。

验证步骤

  1. 启动Tomcat 9,查看控制台是否不再出现Filter启动失败的报错。
  2. 访问项目根路径(如http://localhost:8080/你的项目名称),检查页面是否能正常加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:07:02