AJAX+JAVA使用者登陸註冊驗證

haostarlilac發表於2019-01-19

需求

通過ajax非同步重新整理頁面驗證使用者輸入的賬號密碼是否在資料庫中存在。

技術棧

JSP+Servlet+Oracle

具體程式碼

JSP部分:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    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=UTF-8">
<title>Insert title here</title>
</head>
<script>
    function createXMLHttpRequest() {
        try {
            xmlHttp = new XMLHttpRequest();//除了ie之外的其他瀏覽器使用ajax
        } catch (tryMS) {
            try {
                xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");//ie瀏覽器適配
            } catch (otherMS) {
                try {
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//ie瀏覽器適配
                } catch (failed) {
                    xmlHttp = null;
                }
            }
        }
        return xmlHttp;
    }
    //提交請求
    var xmlHttp;
    function checkUserExists() {
        var u = document.getElementById("uname");
        var username = u.value;
        if (username == "") {
            alert("請輸入使用者名稱");
            u.focus();
            return false;
        }
        //訪問字串
        var url = "loginServlet";
        //建立核心xmlhttprequest元件
        xmlHttp = createXMLHttpRequest();
        //設定回撥函式
        xmlHttp.onreadystatechange = proessRequest;
        //初始化核心元件
        xmlHttp.open("post", url, true);
        //設定請求頭
        xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
        //傳送請求
        xmlHttp.send("uname="+username);
    }
    //回撥函式
    function proessRequest() {
        if (xmlHttp.status==200 && xmlHttp.readyState == 4) {
            var b = xmlHttp.responseText;//得到服務端的輸出結果
            if (b=="true") {
                document.getElementById("alert").innerHTML = "<font color=`red`>使用者名稱已經存在!</font>";
            }else {
                document.getElementById("alert").innerHTML = "<font color=`blue`>使用者名稱可以使用!</font>";
            }
        }
    }
</script>
<body>
    請輸入使用者名稱:
    <input id="uname" name="uname" type="text" onblur="checkUserExists()" /><div id="alert" style="display:inline"></div>
</body>
</html>

這裡沒有用Dao層,直接用servlet和service層進行驗證。
下面是service下JDBC查詢的程式碼:

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

import com.stx.service.User;
import com.stx.service.ConnectionManager;

public class ajaxService {
    public boolean  searchUser (String uname) {
    //jdbc查詢使用者名稱是否存在
        boolean isFalse = false;
        Connection connection = null;
        Statement stmt = null;
        ResultSet rs = null;
        connection = ConnectionManager.getConnection();
        try {
            stmt = connection.createStatement();
            String sql = "select * from user_b where uname=`"+uname+"`";//sql語句
            rs = stmt.executeQuery(sql);
            isFalse=rs.next();

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            ConnectionManager.closeResultSet(rs);
            ConnectionManager.closeStatement(stmt);
            ConnectionManager.closeConnection(connection);
        }
        return isFalse;
    }
}

JDBC連線程式碼:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class ConnectionManager {
    private final static String DRIVER_CLASS = "oracle.jdbc.OracleDriver";
    private final static String URL = "jdbc:oracle:thin:@localhost:1521:orcl";
    private final static String DBNAME = "ibook";
    private final static String PASSWORD = "qwer";

    public static Connection getConnection() {
        Connection connection = null;
        try {
            Class.forName(DRIVER_CLASS);
            connection = DriverManager.getConnection(URL, DBNAME, PASSWORD);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

    public static void closeResultSet(ResultSet rs) {
        try {
            if (rs != null)
                rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void closeConnection(Connection connection) {
        try {
            if (connection != null && !connection.isClosed())
                connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void closeStatement(Statement stmt) {
        try {
            if (stmt != null)
                stmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

關於user類:

 public class User {
        private String uname;
        public User() {
            super();
        }
        public User(String uname) {
            super();
            this.uname = uname;
    
        }
    
        public String getUname() {
            return uname;
        }
        public void setUname(String uname) {
            this.uname = uname;
        }

關於控制層servlet:

import java.io.IOException;
import java.io.PrintWriter;

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

import com.stx.service.ajaxService;

/**
 * Servlet implementation class loginServlet
 */
public class loginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private ajaxService ajaxService = new ajaxService();

    /**
     * @see HttpServlet#HttpServlet()
     */
    public loginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String uname = request.getParameter("uname");//獲取到輸入的使用者名稱
        boolean isUname = ajaxService.searchUser(uname);//呼叫service中的查詢方法
        response.setCharacterEncoding("UTF-8");//設定字元編碼
        PrintWriter out = response.getWriter();
        out.print(isUname);
        out.flush();
        out.close();//關閉資源
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

相關文章