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

本地Gradle运行Spring应用,Tomcat访问URL返回404错误排查

本地Tomcat运行Spring应用404问题排查

1. 上下文路径不匹配

App Engine默认将应用部署在根上下文路径(即/),但本地Tomcat部署时,通常会以项目名作为上下文路径前缀。比如你的项目名为agent-app,实际访问路径应该是:

  • 根路径:http://localhost:8080/agent-app/
  • Controller路径:http://localhost:8080/agent-app/AgentInfoAction/ccpView

排查方式:

  • 查看Tomcat启动日志,找到类似Deploying web application archive [xxx.war]的日志,后面会显示部署的上下文路径。
  • 如果用Gradle的Tomcat插件,检查build.gradle里的tomcat配置,是否设置了contextPath = ''(强制根路径):
tomcat {
    contextPath = ''
    port = 8080
}

2. Web.xml欢迎页配置缺失

App Engine可能自动识别index.jsp为欢迎页,但本地Tomcat需要在web.xml中明确配置:

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

如果没有这段配置,访问根路径时Tomcat找不到默认页面,直接返回404。

3. Spring DispatcherServlet映射错误

检查web.xml中DispatcherServlet的映射规则,确保能覆盖到你的Controller请求:

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <!-- 若Controller路径为/AgentInfoAction/*,可以映射为/AgentInfoAction/*或/* -->
    <url-pattern>/AgentInfoAction/*</url-pattern>
</servlet-mapping>

如果映射规则设为*.do这类后缀匹配,而你的Controller路径没有后缀,请求就无法被DispatcherServlet处理。

4. Controller未被正确扫描或映射错误

  • 确认AgentInfoAction类上添加了@Controller注解,且类级别或方法级别的@RequestMapping路径正确:
@Controller
@RequestMapping("/AgentInfoAction")
public class AgentInfoAction {
    @RequestMapping("/ccpView")
    public String ccpView() {
        return "ccpView"; // 对应JSP文件名,需匹配视图解析器配置
    }
}
  • 检查Spring配置文件(或启动类)是否开启了组件扫描,确保Controller所在包被覆盖:
<!-- XML配置方式 -->
<context:component-scan base-package="com.yourpackage.controller"/>
// 注解配置方式(Spring Boot)
@SpringBootApplication(scanBasePackages = "com.yourpackage.controller")

5. 视图解析器配置错误

如果Controller返回的JSP路径不正确,会导致找不到页面返回404。检查Spring的视图解析器配置:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/> <!-- JSP文件所在目录 -->
    <property name="suffix" value=".jsp"/> <!-- 文件名后缀 -->
</bean>

比如返回"ccpView"时,会查找/WEB-INF/jsp/ccpView.jsp,如果文件实际存放在/jsp/目录下,就会找不到。

6. Tomcat版本与依赖不兼容

App Engine使用的Tomcat版本(如9.x)和本地Tomcat版本(如10.x)可能存在Servlet API差异:

  • Tomcat 9及以下使用Java EE(包名javax.servlet)
  • Tomcat 10+使用Jakarta EE(包名jakarta.servlet)

如果本地用了Tomcat 10,但项目依赖的是javax.servlet相关包,会导致Spring容器初始化失败,Controller无法生效。此时要么降级本地Tomcat到9.x,要么将项目依赖替换为Jakarta EE版本。

7. Gradle构建与部署问题

  • 确认build.gradle中正确应用了war插件,且打包的war包包含所有必要文件:
plugins {
    id 'war'
}
  • 本地部署时,确保Tomcat的webapps目录下的war包是最新构建的,没有缓存旧版本。可以执行gradle clean war重新打包后再部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:52:28