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

如何从Spring MVC访问Angular4页面?解决NotFound报错问题

问题分析与解决方案

你的问题主要出在Spring MVC的静态资源映射配置和单页应用(SPA)的路由回退处理上,结合你的项目结构与代码配置,我梳理了关键错误点和修复方案:

1. WEB-INF目录的访问限制问题

你把Angular打包文件放在/WEB-INF/monitoringFront下,但WEB-INF是服务器受保护的目录,浏览器无法直接访问其中的静态资源(比如runtime.js、main.js);同时原配置里的InternalResourceViewResolver也没有正确指向Angular的index.html。

2. 缺少静态资源映射规则

Spring MVC默认不会自动映射WEB-INF下的静态文件,必须手动配置资源映射,让Spring能正确找到Angular打包后的JS、CSS等文件。

3. SPA路由回退处理缺失

Angular是客户端路由系统,当用户直接访问根路径/或/dashboard时,Spring MVC需要把这些请求转发到index.html,交给Angular路由处理,否则会触发服务器端的404错误。

修复后的WebMvcConfig配置

替换你原来的配置类代码:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "ge.mvc"})
public class WebMvcConfig implements WebMvcConfigurer {

    // 配置静态资源映射,允许Spring访问Angular打包文件
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
                .addResourceLocations("/WEB-INF/monitoringFront/");
    }

    // 配置SPA路由回退,所有非API请求转发到index.html
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        // 根路径直接转发到index.html
        registry.addViewController("/")
                .setViewName("forward:/index.html");
        // 匹配所有Angular路由,统一转发到index.html
        registry.addViewController("/**")
                .setViewName("forward:/index.html");
    }

    // 移除原有的InternalResourceViewResolver,因为不需要JSTL视图,直接转发到Angular入口文件
}

额外检查项

  • 确认Angular打包后的index.html和runtime.js、main.js等文件确实在/WEB-INF/monitoringFront目录下;
  • 修改index.html中的<base href="./">为<base href="/springMvcApp/">,适配你的项目上下文路径,避免资源加载路径错误;
  • 确保Spring MVC的DispatcherServlet映射路径为/(web.xml或Java配置中),让所有请求都能经过DispatcherServlet处理。

完成以上修改后,访问http://localhost:8080/springMvcApp/时,Spring会转发到index.html,Angular路由系统会自动加载LoginComponent,同时静态资源也能正常加载,404问题应该就能解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:26:31