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

Spring登录页面验证遇404错误,求排查路径/配置/代码问题

Spring登录页面404错误排查

我尝试用Spring实现一个简单的登录验证页面,但访问时出现404错误。以下是我的项目相关信息:

项目目录结构

项目目录结构

LoginController.java

package com.example.login;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class LoginController {
    @GetMapping("/login")
    public String showLoginForm() {
        return "login";
    }

    @PostMapping("/login")
    public ModelAndView login(@RequestParam("username") String username, @RequestParam("password") String password) {
        ModelAndView mav = new ModelAndView();
        if (isValidUser(username, password)) {
            mav.setViewName("success");
            mav.addObject("username", username);
        } else {
            mav.setViewName("redirect:/login?error");
        }
        return mav;
    }

    private boolean isValidUser(String username, String password) {
        return username.equals("admin") && password.equals("admin");
    }
}

Login.jsp

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form action="/login" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br>
        <input type="submit" value="Login">
    </form>
</body>
</html>

dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.example.login" />

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

</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
          http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
</web-app>

pom.xml依赖

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.9</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

请问是路径、配置还是代码存在错误?


问题排查与修复方案

1. 欢迎页配置问题

web.xml里设置的welcome-file为login.jsp,但该文件位于/WEB-INF/views/目录下,而WEB-INF目录是服务器保护目录,无法直接访问,所以会返回404。建议移除welcome-file-list配置,通过访问/login路径进入登录页面。

2. 表单提交路径问题

Login.jsp中表单的action="/login"是绝对路径,会忽略项目部署的上下文路径(比如项目部署在http://localhost:8080/login-demo/下时,该路径会变成http://localhost:8080/login,无法匹配Controller)。

修复方式:使用JSP内置对象获取上下文路径,修改表单提交地址:

<form action="${pageContext.request.contextPath}/login" method="post">

3. 缺失success.jsp页面

Controller登录成功后会跳转至success视图,但当前项目目录中没有创建/WEB-INF/views/success.jsp文件,会导致登录成功后出现404。需要创建该文件,示例内容:

<!DOCTYPE html>
<html>
<head>
    <title>登录成功</title>
</head>
<body>
    <h1>欢迎你,${username}!</h1>
</body>
</html>

4. 项目上下文路径检查

确认项目在服务器上的部署上下文路径,访问时需带上该路径,比如http://localhost:8080/你的项目名/login。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 23:12:53