1. 程式人生 > >JSP+Servlet+JavaBean實現使用者登陸,使用者退出

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>

看看登陸情況:
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
使用者退出後再點選當前使用者:
這裡寫圖片描述