JSP实现用户登录与数据校验完整案例
一、案例概述
本案例基于JSP+Servlet+JavaBean经典MVC模式,实现用户登录功能核心模块,包含前端表单提交、输入数据校验、登录状态判断、结果页面反馈等完整流程。案例采用纯原生JSP技术实现,不依赖第三方框架,适合Java Web初学者学习基础交互、数据传递和校验逻辑,可直接部署运行。
二、开发环境
- JDK 1.8及以上
- Tomcat 8.5及以上
- IDEA/Eclipse开发工具
- 浏览器(Chrome/Edge)
三、核心功能
- 登录表单页面:用户名、密码输入框,提交按钮
- 非空校验:禁止用户名/密码为空提交
- 合法性校验:固定用户名密码模拟登录验证
- 状态反馈:登录成功/失败页面提示
- 页面跳转:登录成功跳转主页,失败返回登录页
四、完整代码实现
1. 用户实体类(User.java)
封装用户信息,遵循JavaBean规范,用于数据传递。
java
public class User {
private String username;
private String password;
// 无参构造
public User() {}
// getter/setter
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2. 登录表单页面(login.jsp)
前端展示页面,提供输入框和提交功能,内置基础校验提示。
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户登录</title>
<style>
.login-box{width: 300px;margin: 100px auto;}
.tips{color: red;}
</style>
</head>
<body>
<div class="login-box">
<h2>用户登录</h2>
<%
// 获取登录失败提示信息
String msg = (String) request.getAttribute("msg");
if(msg != null){
%>
<p class="tips"><%=msg%></p>
<% } %>
<form action="loginServlet" method="post">
<p>用户名:<input type="text" name="username" placeholder="请输入用户名"></p>
<p>密 码:<input type="password" name="password" placeholder="请输入密码"></p>
<p><button type="submit">登录</button></p>
</form>
</div>
</body>
</html>
3. 登录处理Servlet(LoginServlet.java)
核心处理逻辑,接收参数、校验数据、判断登录状态。
java
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置编码格式,解决中文乱码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
// 1. 获取前端提交的参数
String username = request.getParameter("username");
String password = request.getParameter("password");
// 2. 非空校验
if(username == null || username.trim().equals("") || password == null || password.trim().equals("")){
request.setAttribute("msg", "用户名和密码不能为空!");
request.getRequestDispatcher("login.jsp").forward(request, response);
return;
}
// 3. 登录验证(模拟数据库数据)
if("admin".equals(username) && "123456".equals(password)){
// 登录成功,将用户信息存入session
request.getSession().setAttribute("loginUser", username);
response.sendRedirect("index.jsp");
}else{
// 登录失败,返回提示
request.setAttribute("msg", "用户名或密码错误!");
request.getRequestDispatcher("login.jsp").forward(request, response);
}
}
}
4. 登录成功主页(index.jsp)
登录成功后跳转页面,展示欢迎信息和退出功能。
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
</head>
<body>
<h2>欢迎您,<%=session.getAttribute("loginUser")%>,登录成功!</h2>
<p><a href="login.jsp">退出登录</a></p>
</body>
</html>
五、代码说明与运行流程
- 编码处理 :Servlet中设置
UTF-8编码,解决前端提交中文参数乱码问题; - 数据获取 :通过
request.getParameter()获取表单提交的用户名和密码; - 非空校验:过滤空字符串和纯空格输入,提升数据合法性;
- 登录验证:采用固定账号密码模拟校验,实际开发可替换为数据库查询;
- 状态传递 :失败信息通过
request作用域转发,登录状态通过session作用域保存; - 页面跳转:成功使用重定向,失败使用请求转发,保证提示信息正常展示。
六、运行测试
- 将项目部署到Tomcat服务器,启动服务;
- 访问
http://localhost:8080/项目名/login.jsp打开登录页; - 测试场景:
- 空值提交:提示「用户名和密码不能为空」;
- 错误账号:提示「用户名或密码错误」;
- 正确账号(admin/123456):跳转首页,显示欢迎信息。
七、总结
本案例完整实现了JSP用户登录与数据校验功能,覆盖了Java Web开发中前端交互、参数接收、数据校验、作用域传值、页面跳转等核心知识点。代码结构清晰、逻辑简单易懂,适合新手快速掌握JSP基础开发流程,可在此基础上扩展数据库连接、验证码、加密等进阶功能。
海量精选技术文档和实战案例持续更新,敬请关注【风骏时光少年】