java簡單的MVC實現簡單的用戶註冊與登錄

轉載來源http://www.cnblogs.com/bejour/p/3351920.html

本篇中的代碼源自於《輕量級Java EE企業應用實戰(第三版)》第二章,其原來的代碼是實現用戶登錄,我在它的基礎上依照它的寫法添加了用戶註冊。代碼很粗陋,但是能用。

Model模塊代碼,實現對數據庫中表的操作

複製代碼
import java.sql.DriverManager;
import java.sql.ResultSet;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

public class DbDao {
    private Connection conn;
    private String driver;
    private String url;
    private String username;
    private String pass;
    
    public DbDao(){
        
    }
    
    public DbDao(String driver, String url, String username, String pass) {
        this.driver = driver;
        this.url = url;
        this.username = username;
        this.pass = pass;
    }

    public Connection getConn() {
        return conn;
    }

    public void setConn(Connection conn) {
        this.conn = conn;
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }
    
    // get database connection
    public Connection getConnection() throws Exception {
        if(conn == null){
            Class.forName(this.driver);
            conn = (Connection) DriverManager.getConnection(url, username, this.pass);
        }
        return conn;
    }
    
    // insert records
    public boolean insert(String sql, Object... args) throws Exception{
        PreparedStatement pstmt = (PreparedStatement) getConnection().prepareStatement(sql);
        for(int i = 0; i < args.length; i++) {
            pstmt.setObject(i + 1, args[i]); 
        }
        if(pstmt.executeUpdate() != 1)
            return false;
        return true;
    }
    
    // execute query
    public ResultSet query(String sql, Object...args) throws Exception{
        PreparedStatement pstmt = (PreparedStatement) getConnection().prepareStatement(sql);
        for(int i=0; i< args.length; i++) {
            pstmt.setObject(i+1, args[i]);
        }
        return pstmt.executeQuery();
    }
    
    public void modify(String sql, Object...args) throws Exception{
        PreparedStatement pstmt = (PreparedStatement)getConnection().prepareStatement(sql);
        for(int i = 0; i< args.length; i++) {
            pstmt.setObject(i+1, args[i]);
        }
        pstmt.executeUpdate();
        pstmt.close();
    }
    
    public void closeConn() throws Exception{
        if(conn != null && !conn.isClosed())
            conn.close();
    }
}
複製代碼

Control模塊代碼,用servlet實現請求的處理及對數據庫的查詢與修改。

複製代碼
import java.io.IOException;
import java.sql.ResultSet;

import javax.servlet.RequestDispatcher;
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 javax.servlet.http.HttpSession;

@WebServlet(name="login", urlPatterns={"/login"})
public class LoginServlet extends HttpServlet{
    public void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    String errMsg = "";
    RequestDispatcher rd;
    String username = request.getParameter("username");
    String pass = request.getParameter("pass");
    try {
        DbDao dd = new DbDao("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/test",
                "root", "root");
        
        // 查詢結果集
        ResultSet rs = dd.query("select pass from user_table where username = ?", username);
        if(rs.next()){
            //用戶名和密碼匹配
            if(rs.getString("pass").equals(pass)) {
                //獲取session對象
                HttpSession session = request.getSession(true);
                session.setAttribute("name", username);
                
                //獲取轉發對象
                rd = request.getRequestDispatcher("/welcome.jsp");
                
                // 轉發請求
                rd.forward(request, response);
            } else {
                errMsg += "您的用戶名密碼不匹配,請重新輸入";
            }
        } else {
            errMsg += "您的用戶名不存在,請先註冊";
        }
    }catch(Exception e) {
        e.printStackTrace();
    }
    // 如果出錯,轉發到重新登陸
    if(errMsg != null && !errMsg.equals("")){
        rd = request.getRequestDispatcher("/login.jsp");
        request.setAttribute("err", errMsg);
        rd.forward(request, response);
    }
    }
}
複製代碼

 

複製代碼
import java.io.IOException;
import java.sql.ResultSet;

import javax.servlet.RequestDispatcher;
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 javax.servlet.http.HttpSession;

@WebServlet(name="register", urlPatterns={"/register"})
public class RegisterServlet extends HttpServlet{
    public void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    String errMsg = "";
    RequestDispatcher rd;
    String username = request.getParameter("username");
    String pass = request.getParameter("pass");
    String conPass = request.getParameter("conPass");
    
    if((username.length()==0)|| (pass.length()==0)||!pass.equals(conPass))
        errMsg += "註冊失敗,請檢查用戶名和密碼非空,並確定密碼一致";

    else {
        try {
            DbDao dd = new DbDao("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/test",
                    "root", "root");
            ResultSet rs = dd.query("select pass from user_table where username = ?", username);
            if(rs.next()) {
                errMsg += "用戶已經存在,請重新設置用戶名";
            }
            else {
                boolean addUser = dd.insert("insert into user_table(username, pass) values(?, ?)",username, pass);
                if(!addUser) {
                    errMsg += "註冊用戶出現錯誤";
                }
                
                // 註冊成功,轉發到welcome.jsp
                HttpSession session = request.getSession(true);
                session.setAttribute("name", username);
                
                //獲取轉發對象
                rd = request.getRequestDispatcher("/welcome.jsp");
                
                // 轉發請求
                rd.forward(request, response);
            }
            
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
    // 如果出錯,轉發到重新註冊
    if(errMsg != null && !errMsg.equals("")){
        rd = request.getRequestDispatcher("/register.jsp");
        request.setAttribute("err", errMsg);
        rd.forward(request, response);
    }
    }
}
複製代碼

 

View模塊,用jsp呈現註冊與登錄頁面,以及成功後的登錄頁面。

複製代碼
<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login</title>
</head>
<body>
<!-- 輸出錯誤提示信息 -->
<span style="color:red; font-weight:bold">
<%
    if(request.getAttribute("err")!=null){
        out.println(request.getAttribute("err") + "<br/>");
    }
%>
</span>

請輸入用戶名和密碼:
<form id="login" method="post" action="login">
    用戶名:<input type="text" name="username" /><br/>
    密碼&nbsp;<input type="password" name="pass" /><br/>
    <input type="submit" value="登陸"/><br/>
</form>
<a href="register.jsp">註冊用戶</a>
</body>
</html>
複製代碼

 

複製代碼
<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login</title>
</head>
<body>
<!-- 輸出錯誤提示信息 -->
<span style="color:red; font-weight:bold">
<%
    if(request.getAttribute("err")!=null){
        out.println(request.getAttribute("err") + "<br/>");
    }
%>
</span>

請輸入用戶名和密碼:
<form id="login" method="post" action="register">
    用戶名:<input type="text" name="username" /><br/>
    密碼&nbsp;<input type="password" name="pass" /><br/>
    確認密碼<input type="password" name="conPass" /><br/>
    <input type="submit" value="註冊"/><br/>
</form>
</body>
</html>
複製代碼

 

複製代碼
<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Welcome</title>
</head>
<body>
<h2>歡迎登陸, <%=request.getParameter("username") %></h2>
</body>
</html>
複製代碼

 

這裏需要用到mysql數據庫,在test數據庫中建立user_table表,建表的語句可以如下(但不限於)

create table user_table(
id int primary key auto_increment,
username varchar(20),
pass varchar(20)
);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章