JSP+Servlet+JavaBean实现用户登陆,用户退出

时间:2022-04-17 19:05:46

注册还是沿用上一期的表和数据库
先看看文件布局
JSP+Servlet+JavaBean实现用户登陆,用户退出
先看看JavaBean的设计User.java

package model;
/**
* 用户实体类
*/

public class User {
private int id; // 标识
private String username;// 用户名
private String password;// 密码
private String sex; // 性别
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}

接下来看看数据库的操作DataBaseUtil:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* 数据库连接工具类
*/

public class DataBaseUtil {
/**
* 获取数据库连接
* @return Connection对象
*/

public static Connection getConnection(){
Connection conn = null;
try {
// 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 数据库连接url
String url = "jdbc:mysql://localhost:3306/MyBlog";
// 获取数据库连接
conn = DriverManager.getConnection(url, "root", "");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
/**
* 关闭数据库连接
* @param conn Connection对象
*/

public static void closeConnection(Connection conn){
// 判断conn是否为空
if(conn != null){
try {
conn.close(); // 关闭数据库连接
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

登陆的UserDao.java

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import model.User;
/**
* 用户数据库操作类
*/

public class UserDao {

/**
* 用户登录
* @param username 用户名
* @param password 密码
* @return 用户对象
*/

public User login(String username, String password){
User user = null;
// 获取数据库连接Connection对象
Connection conn = DataBaseUtil.getConnection();
// 根据用户名及密码查询用户信息
String sql = "select * from tb_user where username = ? and password = ?";
try {
// 获取PreparedStatement对象
PreparedStatement ps = conn.prepareStatement(sql);
// 对SQL语句的占位符参数进行动态赋值
ps.setString(1, username);
ps.setString(2, password);
// 执行查询获取结果集
ResultSet rs = ps.executeQuery();
// 判断结果集是否有效
if(rs.next()){
// 实例化一个用户对象
user = new User();
// 对用户对象属性赋值
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
user.setSex(rs.getString("sex"));

}
// 释放此 ResultSet 对象的数据库和 JDBC 资源
rs.close();
// 释放此 PreparedStatement 对象的数据库和 JDBC 资源
ps.close();
} catch (Exception e) {
e.printStackTrace();
}finally{
// 关闭数据库连接
DataBaseUtil.closeConnection(conn);
}
return user;
}
/**
* 判断用户名在数据库中是否存在
* @param username 用户名
* @return 布尔值
*/

public boolean userIsExist(String username){
// 获取数据库连接Connection对象
Connection conn = DataBaseUtil.getConnection();
// 根据指定用户名查询用户信息
String sql = "select * from tb_user where username = ?";
try {
// 获取PreparedStatement对象
PreparedStatement ps = conn.prepareStatement(sql);
// 对用户对象属性赋值
ps.setString(1, username);
// 执行查询获取结果集
ResultSet rs = ps.executeQuery();
// 判断结果集是否有效
if(!rs.next()){
// 如果无效则证明此用户名可用
return true;
}
// 释放此 ResultSet 对象的数据库和 JDBC 资源
rs.close();
// 释放此 PreparedStatement 对象的数据库和 JDBC 资源
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
// 关闭数据库连接
DataBaseUtil.closeConnection(conn);
}
return false;
}
}

LoginServlet.java

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.User;

/**
* 用户登录Servlet类
*/

public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = -3009431503363456775L;
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取用户名
String username = request.getParameter("username");
// 获取密码
String password = request.getParameter("password");
// 实例化UserDao对象
UserDao userDao = new UserDao();
// 根据用户密码查询用户
User user = userDao.login(username, password);
// 判断user是否为空
if(user != null){
// 将用户对象放入session中
request.getSession().setAttribute("user", user);
// 转发到result.jsp页面
request.getRequestDispatcher("message.jsp").forward(request, response);
}else{
// 登录失败
request.setAttribute("info", "错误:用户名或密码错误!");
request.getRequestDispatcher("message.jsp").forward(request, response);
}
}

}

UserExitServlet.java

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import model.User;
/**
* 用户退出Servlet
*/

public class UserExitServlet extends HttpServlet {
private static final long serialVersionUID = 1599366365079846238L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取session
HttpSession session = request.getSession();
// 获取用户对象
User user = (User)session.getAttribute("user");
// 判断用户是否有效
if(user != null){
// 将用户对象逐出session
session.removeAttribute("user");
// 设置提示信息
request.setAttribute("info", user.getUsername() + " 已成功退出!");
}
// 转发到message.jsp页面
request.getRequestDispatcher("message.jsp").forward(request, response);
}

}

最后就是我们的jsp页面:
login.jsp

<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>用户登录</title>
<link rel="stylesheet" type="text/css" href="images/styles.css">
<script type="text/javascript">
function login(form){
if(form.username.value == ""){
alert("用户不能为空!");
return false;
}
if(form.password.value == ""){
alert("密码不能为空!");
return false;
}
}
</script>
</head>

<body>
<div align="center">
<div class="div1">
<div class="top">用户注册</div>
<div class="bottom">
<div class="div2">
<ul>
<li><a href="login.jsp">用户登录</a></li>
<li><a href="message.jsp">当前用户</a></li>
<li><a href="UserExitServlet">用户退出</a></li>
</ul>
</div>
<div class="div3">
<form action="LoginServlet" method="post" onSubmit="return login(this);">
<table align="center" width="300" border="0" class="tb1">
<tr>
<td align="right">用户名:</td>
<td>
<input type="text" name="username">
</td>
</tr>
<tr>
<td align="right">密 码:</td>
<td>
<input type="password" name="password">
</td>
</tr>
<tr>
<td colspan="2" align="center" height="50">
<input type="submit" value="登 录">
<input type="reset" value="重 置">
</td>
</tr>
</table>
</form>
</div>
</div>
</div>
</div>
</body>
</html>

message.jsp

<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<%@ page import="model.User" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>提示信息</title>
<link rel="stylesheet" type="text/css" href="images/styles.css">
</head>

<body>
<div align="center">
<div class="div1">
<div class="top">提示信息</div>
<div class="bottom">
<div class="div2">
<ul>
<li><a href="login.jsp">用户登录</a></li>
<li><a href="message.jsp">当前用户</a></li>
<li><a href="UserExitServlet">用户退出</a></li>
</ul>
</div>
<div class="div3">
<%
// 获取提示信息
String info = (String)request.getAttribute("info");
// 如果提示信息不为空,则输出提示信息
if(info != null){
out.println(info);
}
// 获取登录的用户信息
User user = (User)session.getAttribute("user");
// 判断用户是否登录
if(user != null){
%>

<table align="center" width="350" border="1" height="200" bordercolor="#E8F4CC">
<tr>
<td align="center" colspan="2">
<span style="font-weight: bold;font-size: 18px;"><%=user.getUsername() %></span>
登录成功!
</td>
</tr>
<tr>
<td align="right">性 别:</td>
<td><%=user.getSex()%></td>
</tr>
</table>
<%
}else{
out.println("<br>对不起,您还没有登录!");
}
%>

</div>
</div>
</div>
</div>
</body>
</html>

看看登陆情况:
JSP+Servlet+JavaBean实现用户登陆,用户退出
JSP+Servlet+JavaBean实现用户登陆,用户退出
JSP+Servlet+JavaBean实现用户登陆,用户退出
JSP+Servlet+JavaBean实现用户登陆,用户退出
用户退出后再点击当前用户:
JSP+Servlet+JavaBean实现用户登陆,用户退出