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

Spring Boot 2.0部署WebSphere 9后Controller路径返回404求助

WebSphere 9部署Spring Boot 2.0 WAR包后Controller 404问题解决

你遇到的这个情况挺典型的——嵌入式Tomcat跑的好好的,打包成WAR丢到WebSphere 9就出Controller 404,首页却能访问,大概率是容器适配和类加载的问题,给你梳理几个关键配置点:

1. 修正Spring Boot的Tomcat依赖范围

WebSphere本身自带Servlet容器,你必须把Spring Boot自带的Tomcat依赖标记为provided,避免和WebSphere的容器API冲突。在你的build.gradle里调整依赖:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    // 把Tomcat依赖设为providedRuntime,打包时不包含进WAR
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    // 你的其他依赖(比如mybatis的mapper扫描相关)...
}

如果不这么做,WAR包会自带Tomcat的servlet相关jar,和WebSphere自带的容器类冲突,导致Spring MVC的请求映射无法被正确识别。

2. 修改WebSphere的类加载策略

WebSphere默认是父类优先的类加载顺序,但Spring Boot应用需要子类优先(也就是应用自己的类先加载),否则WebSphere自带的旧版本Servlet或Spring类会抢先加载,和你的Spring Boot 2.0版本不兼容。

操作步骤:

  • 登录WebSphere管理控制台
  • 找到你部署的应用,进入「类加载和更新检测」页面
  • 把类加载顺序改成「类加载器的类先加载,然后是父类加载器」(英文是"Classes loaded with local class loader first (parent last)")
  • 保存后重启应用

3. 确认上下文根配置

注意Spring Boot的server.servlet.context-path配置在外部容器部署时会失效,WebSphere控制台设置的上下文根才是生效的。比如你在WebSphere里把应用上下文根设为/myapp,那访问Controller的路径应该是/myapp/path/mapped/in/controller,而不是直接用/path/mapped/in/controller——很多人会在这里踩坑。

4. 验证SpringBootServletInitializer配置

你的MyApplication类已经正确继承了SpringBootServletInitializer并重写了configure方法,这部分没问题,但要确认没有其他自定义的DispatcherServlet配置。如果手动注册了DispatcherServlet,会和Spring Boot自动配置的冲突,导致请求映射失效。

先试试前两个配置,这是解决这类问题最常见的方案,大概率能解决你的404问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:25:01