1. 程式人生 > >jQuery+Ajax+Mysql 檢測使用者名稱註冊時是否重名

jQuery+Ajax+Mysql 檢測使用者名稱註冊時是否重名

利用jQuery框架,封裝了底層的Ajax非同步技術,通過簡單的方法呼叫即可實現。這篇部落格是針對使用者註冊時出現的使用者名稱重名問題的自動檢測,利用的技術是Ajax非同步傳輸。

register.jsp 註冊顯示頁面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>

<body
>
<form action="login" method="post" id="myform"> <table align="center"> <tr> <td>使用者名稱:</td> <td> <input type="text" name="name" id="username" title="使用者名稱" /> <div
id="message">
</div> </td> </tr> <tr> <td>密碼:</td> <td><input type="password" name="pwd" id="userpwd" title="密碼" /> </td> </tr> <tr
>
<td>性別:</td> <td><input type="radio" name="sex" value="男" title="性別" /><input type="radio" name="sex" value="女" title="性別" /></td> </tr> <tr> <td>年齡:</td> <td><input type="text" name="age" title="年齡" /> </td> </tr> <tr> <td>Email:</td> <td><input type="text" name="email" title="Email" /> </td> </tr> <tr> <td colspan="2" align="center"><input type="button" value="注 冊" onclick="check()" /> <input type="reset" value="重 置" /></td> </tr> </table> </form> </body> <script type="text/javascript" src="${pageContext.request.contextPath }/script/jquery-3.2.1.js"></script> <script type="text/javascript"> // 檢查表單元素的值是否為空 function check() { var myform = document.getElementById("myform"); for ( var i = 0; i < myform.length; i++) { if (myform.elements[i].value == "") { alert(myform.elements[i].title + "不能為空"); myform.elements[i].focus(); return; } } myform.submit(); // 表單中最後input提交標籤用的是button型別,首先不提交表單,在js判斷表單項都不為空時 再提交表單。 } $(function(){ $(":input[name='name']").blur(function(){ var val = $(this).val(); val = $.trim(val); if(val != ""){ var url = "${pageContext.request.contextPath }/UserServlet"; // 將前端的業務轉到後端Servlet來處理。最後Servlet再將結果返回給前端JSP頁面 var args = {"userName":val, "time":new Date()}; $.post(url, args, function(data){ // URL中處理的結果都儲存在data資料中,而data中的格式是Servlet中返回的結果格式,即為html $("#message").html(data); //將data結果附加到div中 }); } }); }); </script> </html>

UserServlet 邏輯處理Servlet類,用於對使用者重名的判斷以及響應處理結果的輸出等。其中用於資料庫檢測重名的方法省略了(LoginDao.getInstance().checkUserName(userName.trim()); // 查詢資料庫是否存在該使用者名稱)


package com.servlet.user;

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.dao.LoginDao;
import com.user.UserInfo;

public class UserServlet extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html; charset=UTF-8"); // 設定響應結果的格式為text/html,字符集為UTF-8
        response.setCharacterEncoding("UTF-8"); // 設定響應結果的字元編碼為UTF-8
        // 禁止快取
        response.setHeader("Cache-Control", "no-store,no-cache,must-revalidate");
        response.setHeader("Cache-Control", "post-check=0,pre-check=0");
        response.setDateHeader("Expires", 0);
        response.setHeader("Pragma", "no-cache");

        PrintWriter out = response.getWriter();
        out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
        // 從httpRequest()方法中獲得請求引數值
        // 通過httpRequest()方法封裝的請求引數被編碼為UTF-8格式,此處若想還原原來的編碼格式,則需要通過UTF-8格式解碼

        String userName = request.getParameter("userName");
        String result = null;
        boolean check = LoginDao.getInstance().checkUserName(userName.trim()); // 查詢資料庫是否存在該使用者名稱
        if (check) {
            result = "<font color='red'>該使用者已經被使用</font>";
        } else {
            result = "<font color='green'>該使用者名稱可以使用</font>";
        }
        response.getWriter().print(result); // 將結果輸出到response響應流中
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        this.doPost(req, resp);
    }

}