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

JBoss部署Angular 5+应用访问<context>/<ROUTER_URL>时出现404错误

解决Angular打包进WAR部署JBoss的上下文路径问题

我猜你生产环境大概率遇到的是访问带上下文路径的URL(比如http://your-jboss-domain/your-app-context/home)时出现404,或者路由跳转异常的问题吧?毕竟本地开发用的是根路径/,但部署到JBoss后WAR包会有自己的上下文路径,Angular默认的路由和资源路径配置没适配这个,所以会出问题。下面是一步步的解决办法:

1. 配置Angular的基础路径(base href)

Angular需要知道自己部署的基础上下文路径,这样所有资源和路由都会基于这个路径加载。

  • 在angular.json里找到build配置下的options,添加baseHref参数:

    "build": {
      "options": {
        "baseHref": "/your-app-context/",
        // 其他配置...
      }
    }
    

    这里的your-app-context就是你WAR包部署后JBoss分配的上下文路径(如果WAR包名是my-app.war,默认上下文路径就是/my-app)。

  • 或者打包时通过命令行动态指定,这样不用硬编码:

    ng build --base-href /your-app-context/
    

    对应到frontend-maven-plugin的配置里,把npm run build改成带参数的命令:

    <plugin>
      <groupId>com.github.eirslett</groupId>
      <artifactId>frontend-maven-plugin</artifactId>
      <version>1.12.1</version>
      <executions>
        <execution>
          <id>npm run build</id>
          <goals>
            <goal>npm</goal>
          </goals>
          <configuration>
            <arguments>run build -- --base-href /your-app-context/</arguments>
          </configuration>
        </execution>
      </executions>
      <!-- 其他配置(node、npm版本等) -->
    </plugin>
    

2. 配置JBoss的重写规则解决路由刷新404问题

因为Angular是单页应用,所有路由都是前端路由,当用户直接刷新/your-app-context/home或者从外部链接进入时,JBoss会尝试找对应的后端资源,自然会返回404。解决这个需要让JBoss把所有前端路由请求转发到index.html。

  • 在你的WAR包的WEB-INF目录下创建jboss-web.xml,添加上下文路径和欢迎页配置:

    <jboss-web>
      <context-root>/your-app-context</context-root>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
      </welcome-file-list>
    </jboss-web>
    
  • 再创建WEB-INF/web.xml,添加错误页面重定向:

    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="4.0">
      <error-page>
        <error-code>404</error-code>
        <location>/index.html</location>
      </error-page>
    </web-app>
    

    这样JBoss遇到404时会转发到Angular的入口文件,由前端路由处理。

3. 验证Angular路由配置

确保你的路由模块里没有硬编码的绝对路径,所有路由都是相对路径:

const routes: Routes = [
  { path: '', redirectTo: 'home', pathMatch: 'full' },
  { path: 'home', component: HomeComponent },
  // 其他路由...
];

这样路由会自动基于baseHref拼接,不会出现路径错误。

4. 测试打包后的WAR

打包完成后,把WAR包部署到JBoss,访问http://your-jboss-domain/your-app-context/home,应该就能正常加载页面,刷新或者跳转路由也不会再出现404了。

如果还有其他具体问题(比如资源加载失败、上下文路径不生效),可以再补充细节哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:38:18