Struts 1.3项目集成Angular 11后静态资源404无法访问问题咨询
问题原因
核心问题是Angular默认的资源根路径配置与实际部署路径不匹配:
- Angular 构建产物默认生成的 HTML 入口文件中,
<base href="/">标签会指定浏览器加载所有相对路径静态资源的基准路径为域名根路径(也就是你遇到的http://localhost:7001/),但你的项目实际部署在 WebLogic 的上下文路径/ScoreReportsWorkbench下,且 Angular 静态资源存放在 webapp 的angular子目录中,路径不匹配导致资源请求404。 - 若资源路径配置正确但仍404,可能是Struts的请求拦截规则拦截了静态资源请求。
解决方案
1. 调整Angular基准路径配置
有两种可选配置方式,二选一即可:
- 固定上下文路径配置:修改
angular.json中projects -> [你的项目名] -> architect -> build -> options下的baseHref字段为/ScoreReportsWorkbench/angular/,或者执行构建命令时添加参数:ng build --base-href /ScoreReportsWorkbench/angular/ - 通用相对路径配置:直接把
baseHref设为./,浏览器会自动从当前HTML文件所在目录加载资源,不需要写死部署上下文,适配性更强。
2. 放行Struts静态资源拦截
检查web.xml中Struts核心Servlet的拦截规则,若配置了拦截*.do之外的请求规则,需要添加配置排除*.js、*.css、*.png等静态资源的拦截,保证Angular资源可以直接被访问。
3. 补充路由兼容配置(可选)
如果你的Angular项目使用了前端路由,建议开启Hash路由模式,避免刷新页面时路由路径被Struts拦截导致404:
修改app-routing.module.ts中的路由配置:
RouterModule.forRoot(routes, { useHash: true })
4. 验证构建输出路径
确认package.json中构建脚本的输出路径配置确实指向Struts项目的src/webapp/angular目录,保证构建后的js、css资源和入口HTML文件在同一级目录。
内容的提问来源于stack exchange,提问作者Peter Arriaza
相关产品推荐
相关产品推荐

