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

Spring MVC登录成功后JS跳转WEB-INF下JSP报404的配置方案

解决Ajax登录后跳转home.jsp的404问题

看起来你遇到的核心问题是:登录验证成功后,前端通过window.location="home.jsp"跳转时触发404错误。这本质上是路径映射不匹配或者Spring MVC的页面访问规则导致的,咱们一步步来解决:

1. 先搞懂Spring MVC里JSP页面的访问逻辑

在Spring MVC项目中,放在WEB-INF/views/下的JSP页面是不能直接通过URL访问的(比如直接敲xxx/home.jsp),必须通过Controller的请求映射来转发。从你的项目结构截图来看,loginPage.jsp应该是在这个目录下,所以home.jsp大概率也在这里,直接访问jsp文件肯定会404。

2. 给Home页面添加Controller路由

在你的LoginController里新增一个处理/home请求的方法,负责转发到home.jsp,同时还能做登录校验(防止未登录直接访问首页):

@RequestMapping(value="/home", method=RequestMethod.GET)
public ModelAndView homePage(HttpServletRequest request) {
    // 检查session,确保只有登录用户能访问首页
    HttpSession session = request.getSession(false);
    if (session == null || session.getAttribute("name") == null) {
        // 未登录则重定向回登录页
        return new ModelAndView("redirect:/");
    }
    // 已登录则转发到home.jsp
    return new ModelAndView("home");
}

3. 修改前端跳转代码

把原来直接访问jsp的代码,改成请求上面新增的Controller路由:

if(parsedresult.success == true) {
    // 注意:如果你的项目部署时有上下文路径,要加上它
    var contextPath = "${pageContext.request.contextPath}";
    window.location = contextPath + "/home";
}

这里用${pageContext.request.contextPath}是为了适配项目部署的上下文路径(比如Tomcat里项目不是根路径的情况),避免硬编码路径导致的问题。

4. 确认视图解析器配置正确

确保你的Spring MVC配置文件(比如spring-servlet.xml)里的视图解析器已经正确配置了前缀和后缀,这样Controller返回的"home"才能正确映射到/WEB-INF/views/home.jsp:

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

5. 额外的优化建议

你的Ajax请求用了POST方式,但参数却拼在URL上,这不符合POST请求的规范,建议改成把参数放在请求体里:

function login() {
    var name = document.getElementById("loginid").value;
    var password = document.getElementById("password").value;
    
    // 用FormData封装参数
    var formData = new FormData();
    formData.append("name", name);
    formData.append("password", password);

    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            var parsedresult = JSON.parse(this.responseText);
            if(parsedresult.success == true) {
                var contextPath = "${pageContext.request.contextPath}";
                window.location = contextPath + "/home";
            } else {
                document.getElementById("errors").innerHTML = parsedresult.message;
            }
        }
    };
    // 加上上下文路径,避免请求路径错误
    xhttp.open("POST", "${pageContext.request.contextPath}/loginPage", true);
    xhttp.send(formData);
}

这样参数不会暴露在URL里,安全性和规范性更好。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:24:38