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

JBoss7部署Spring Boot(Undertow)项目出现404错误求助

解决Spring Boot War包部署JBoss后Controller 404问题

看起来你碰到了Spring Boot部署到外部容器(JBoss)的典型坑——嵌入式Tomcat跑起来一切正常,JBoss部署后却出现404,我来帮你一步步排查解决:

1. 先确认启动类是否继承了SpringBootServletInitializer

这是部署到外部Servlet容器的核心要求,嵌入式Tomcat不需要这个,但JBoss这类外部容器必须靠它来初始化Spring应用上下文。你的启动类应该改成这样:

@SpringBootApplication
public class YourAppApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(YourAppApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(YourAppApplication.class, args);
    }
}

如果没加这个类或者没重写configure方法,JBoss根本没法正确加载你的Spring应用,自然会返回404。

2. 检查JBoss的上下文路径是否正确

你用*-war.original部署时,JBoss默认的上下文路径是这个文件的名字去掉后缀。比如你的文件是myapp-war.original,那么访问路径要加上/myapp-war前缀——比如原来嵌入式Tomcat里的/api/hello,现在要写成http://your-jboss-host:port/myapp-war/api/hello。

如果你想自定义上下文路径,可以在pom.xml里设置<finalName>:

<build>
    <finalName>my-app</finalName>
    <!-- 其他插件配置 -->
</build>

这样生成的my-app-war.original部署后,上下文路径就是/my-app,访问起来更友好。

3. 验证Spring Boot Maven插件配置是否正确

Spring Boot的war插件默认会生成两个文件:一个是带嵌入式Tomcat的可执行war,另一个*-war.original是供外部容器使用的纯war包。确保你的插件配置没有问题:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <attach>true</attach> <!-- 确保生成original文件 -->
    </configuration>
</plugin>

如果插件配置有误,可能导致*-war.original的结构不正确,JBoss无法正确解析。

4. 查看JBoss日志,确认应用是否完全启动

部署成功的提示不代表Spring容器已经初始化完成。去JBoss的server.log里搜索类似Started YourAppApplication in X seconds的日志——如果找不到这条日志,说明应用没真正启动,大概率是依赖冲突。

最常见的是Servlet API冲突:Spring Boot依赖里的Servlet API必须设置为provided,因为JBoss已经自带了这个库,避免重复加载:

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

5. 检查Controller的RequestMapping路径

最后确认下你的Controller注解有没有拼写错误,比如@RequestMapping("/api")有没有写成@RequestMapping("api")(少了斜杠),或者有没有使用相对路径导致的问题。另外,确保Controller类上加上了@RestController或@Controller注解,否则Spring不会把它识别为请求处理类。

按照上面的步骤排查,应该能解决你的404问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:24:36