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

AngularJS路由在Spring MVC Web应用中失效,报404错误求助

解决AngularJS路由加载模板404错误的方案

嗨,我帮你梳理下问题所在和对应的解决步骤,你的核心问题出在Spring视图解析配置、控制器返回值和Angular路由路径的匹配上,和context.xml没关系,不用动它。

1. 配置Spring视图解析器(最关键)

WEB-INF目录下的资源是不能直接被前端请求访问的,必须通过Spring控制器转发。你需要在Spring的配置文件(比如spring-servlet.xml)里添加视图解析器,让Spring能自动定位到你的JSP文件:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

配置完这个,你的控制器就不用返回完整的JSP路径了,只需要返回视图名称即可:

@Controller
public class SampleController {
    @RequestMapping(value="/views/mainview", method=RequestMethod.GET)
    public String displayView(){
        // 视图解析器会自动拼接成 /WEB-INF/views/mainview.jsp
        return "mainview";
    }
}

2. 修正AngularJS路由的templateUrl

注意路由里的路径要和Spring控制器的@RequestMapping完全匹配,最好加上开头的斜杠避免相对路径问题:

app.config(function($routeProvider) {
    $routeProvider
        .when('/', {
            templateUrl: '/views/mainview',
            controller: 'appController'
        })
        .otherwise({
            redirectTo: '/'
        });
});

3. 处理项目上下文路径(如果有)

如果你的项目部署时带了上下文路径(比如访问地址是http://localhost:8080/my-project),那Angular的请求路径需要加上这个上下文。可以在页面里先获取上下文路径:

<script>
    var contextPath = "${pageContext.request.contextPath}";
</script>

然后在Angular路由里用这个变量:

templateUrl: contextPath + '/views/mainview'

4. 验证步骤

先直接访问http://localhost:8080/你的项目名/views/mainview,如果能正常显示JSP页面,说明Spring的映射没问题,再测试Angular路由是否能加载模板。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:37:35