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>

看看登陆情况:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
用户退出后再点击当前用户:
这里写图片描述

  • 8
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,下面是一个基于 JSPServletJavaBean 实现的简单登陆注册系统的代码示例: 1. 登录页面 login.jsp ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录</title> </head> <body> <h1>用户登录</h1> <form action="LoginServlet" method="post"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> <p><a href="register.jsp">没有账号?点击注册</a></p> </body> </html> ``` 2. 注册页面 register.jsp ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>注册</title> </head> <body> <h1>用户注册</h1> <form action="RegisterServlet" method="post"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> 重复密码:<input type="password" name="password2"><br> <input type="submit" value="注册"> </form> <p><a href="login.jsp">已有账号?点击登录</a></p> </body> </html> ``` 3. LoginServlet.java ```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; public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); UserBean user = new UserBean(username, password); boolean valid = user.validate(); if (valid) { HttpSession session = request.getSession(); session.setAttribute("username", username); response.sendRedirect("welcome.jsp"); } else { response.sendRedirect("login.jsp"); } } } ``` 4. RegisterServlet.java ```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; public class RegisterServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); String password2 = request.getParameter("password2"); if (!password.equals(password2)) { response.sendRedirect("register.jsp"); return; } UserBean user = new UserBean(username, password); boolean success = user.register(); if (success) { HttpSession session = request.getSession(); session.setAttribute("username", username); response.sendRedirect("welcome.jsp"); } else { response.sendRedirect("register.jsp"); } } } ``` 5. UserBean.java ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class UserBean { private String username; private String password; public UserBean(String username, String password) { this.username = username; this.password = password; } public boolean validate() { try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname?user=root&password=root&useSSL=false&serverTimezone=UTC"); PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE username = ? AND password = ?"); stmt.setString(1, username); stmt.setString(2, password); ResultSet rs = stmt.executeQuery(); boolean found = rs.next(); rs.close(); stmt.close(); conn.close(); return found; } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); return false; } } public boolean register() { try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname?user=root&password=root&useSSL=false&serverTimezone=UTC"); PreparedStatement stmt = conn.prepareStatement("INSERT INTO users (username, password) VALUES (?, ?)"); stmt.setString(1, username); stmt.setString(2, password); int rows = stmt.executeUpdate(); stmt.close(); conn.close(); return rows == 1; } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); return false; } } 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; } } ``` 6. welcome.jsp ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>欢迎</title> </head> <body> <h1>欢迎,<%= session.getAttribute("username") %>!</h1> <p><a href="logout.jsp">退出登录</a></p> </body> </html> ``` 7. logout.jsp ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>退出</title> </head> <body> <% session.invalidate(); response.sendRedirect("login.jsp"); %> </body> </html> ``` 以上代码仅供参考,具体实现需要根据实际情况进行调整和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值