亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java+Ajax實現的用戶名重復檢驗功能實例詳解

2024-07-14 08:43:08
字體:
來源:轉載
供稿:網友

本文實例講述了Java+Ajax實現的用戶名重復檢驗功能。分享給大家供大家參考,具體如下:

今天,我來教大家怎么實現Java+Ajax實現用戶名重復檢驗。

實體類代碼:

/** * */package com.hqj.dao;/** * @author HuangQinJian 下午9:12:19 2017年4月23日 */public class User {  private int id;  private String name;  private String password;  /**   *   */  public User() {    super();    // TODO Auto-generated constructor stub  }  /**   * @param id   * @param name   * @param password   */  public User(int id, String name, String password) {    super();    this.id = id;    this.name = name;    this.password = password;  }  public int getId() {    return id;  }  public void setId(int id) {    this.id = id;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  public String getPassword() {    return password;  }  public void setPassword(String password) {    this.password = password;  }  @Override  public String toString() {    return "User [name=" + name + ", password=" + password + "]";  }}

數據庫操作類代碼:

/** * */package com.hqj.db;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/** * @author HuangQinJian 上午9:21:23 2017年4月24日 */public class DBConnection {  public static Connection getConn() {    Connection conn = null;    try {      Class.forName("com.mysql.jdbc.Driver");      conn = DriverManager          .getConnection("jdbc:mysql://localhost/system?user=root&password=729821");    } catch (ClassNotFoundException e) {      e.printStackTrace();    } catch (SQLException e) {      e.printStackTrace();    }    return conn;  }  public static PreparedStatement prepare(Connection conn, String sql) {    PreparedStatement pstmt = null;    try {      if (conn != null) {        pstmt = conn.prepareStatement(sql);      }    } catch (SQLException e) {      e.printStackTrace();    }    return pstmt;  }  public static PreparedStatement prepare(Connection conn, String sql,      int autoGenereatedKeys) {    PreparedStatement pstmt = null;    try {      if (conn != null) {        pstmt = conn.prepareStatement(sql, autoGenereatedKeys);      }    } catch (SQLException e) {      e.printStackTrace();    }    return pstmt;  }  public static Statement getStatement(Connection conn) {    Statement stmt = null;    try {      if (conn != null) {        stmt = conn.createStatement();      }    } catch (SQLException e) {      e.printStackTrace();    }    return stmt;  }  public static ResultSet getResultSet(Statement stmt, String sql) {    ResultSet rs = null;    try {      if (stmt != null) {        rs = stmt.executeQuery(sql);      }    } catch (SQLException e) {      e.printStackTrace();    }    return rs;  }  public static void executeUpdate(Statement stmt, String sql) {    try {      if (stmt != null) {        stmt.executeUpdate(sql);      }    } catch (SQLException e) {      e.printStackTrace();    }  }  public static void close(Connection conn) {    try {      if (conn != null) {        conn.close();        conn = null;      }    } catch (SQLException e) {      e.printStackTrace();    }  }  public static void close(Statement stmt) {    try {      if (stmt != null) {        stmt.close();        stmt = null;      }    } catch (SQLException e) {      e.printStackTrace();    }  }  public static void close(ResultSet rs) {    try {      if (rs != null) {        rs.close();        rs = null;      }    } catch (SQLException e) {      e.printStackTrace();    }  }}

上面的數據庫操作代碼相當于一個工具類,大家可以直接使用,不過要記得改數據庫賬號,密碼以及數據庫表名:

conn = DriverManager    .getConnection("jdbc:mysql://localhost/system?user=root&password=729821");

service類代碼:

/** * */package com.hqj.service;import java.util.List;import com.hqj.dao.User;/** * @author HuangQinJian 上午9:26:26 2017年4月24日 */public interface UserService {  public String checkUserName(String username);}

serviceImpl類代碼:

/** * */package com.hqj.serviceImpl;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List;import com.hqj.dao.User;import com.hqj.db.DBConnection;import com.hqj.service.UserService;/** * @author HuangQinJian 上午9:29:14 2017年4月24日 */public class UserServiceImpl implements UserService {  private Connection conn = null;  private Statement stmt = null;  private PreparedStatement pstmt = null;  DBConnection dbConnection = new DBConnection();  @Override  public String checkUserName(String username) {    conn = DBConnection.getConn();    stmt = DBConnection.getStatement(conn);    String sql = "select * from user where name=" + "'" + username + "'";    System.out.println("用戶查詢時的SQL:" + sql);    String str = null;    try {      pstmt = conn.prepareStatement(sql);      if (pstmt.executeQuery().next() == true) {        str = "用戶名已存在!";      } else {        str = "用戶名可用!";      }    } catch (SQLException e) {      e.printStackTrace();    }    return str;  }}

后臺代碼:

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%><%@ page import="com.hqj.serviceImpl.UserServiceImpl"%><%  String username = request.getParameter("username");  UserServiceImpl u = new UserServiceImpl();  out.println(u.checkUserName(username));%>

前端代碼:

利用原生Ajax實現

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%><%@ page import="com.hqj.dao.User"%><%@ page import="com.hqj.serviceImpl.UserServiceImpl"%><!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><body>  <form action="regeist.jsp" method="post">    用戶名: <input type="text" value="" name="name" id="username"      onblur='checkUserName()'>    <br> 密碼: <input type="text" value="" name="password"><br>    <input type="submit" value="提交">  </form>  <jsp:useBean id="user" scope="session" class="com.hqj.dao.User"></jsp:useBean>  <jsp:setProperty property="name" name="user" />  <jsp:setProperty property="password" name="user" />  <%    if (request.getMethod() == "POST") {      User u = new User();      u.setName(user.getName());      out.println(user.getName());      u.setPassword(user.getPassword());      UserServiceImpl userServiceImpl = new UserServiceImpl();      if (!userServiceImpl.checkUserName(user.getName()).equals(          "用戶名已存在!")) {        userServiceImpl.add(u);        out.println("用戶注冊成功!");      }    }  %>  <h3><%=user.getName()%></h3>  <h3><%=user.getPassword()%></h3></body><script type="text/javascript">  var xmlhttp;  var flag;  function createXMLHttp() {    if (window.ActiveXObject) {      //ie      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");    } else {      //firefox      xmlhttp = new XMLHttpRequest();    }  }  function checkUserName() {    createXMLHttp();    var username = document.getElementById("username").value;    // alert(username);    if (username == "") {      document.getElementById("username").innerHTML = "用戶名不能為空";    }    xmlhttp.open("POST", "checkUserName.jsp", true);    xmlhttp.setRequestHeader("Content-type",        "application/x-www-form-urlencoded");    xmlhttp.send("username=" + username);    xmlhttp.onreadystatechange = function() {      //   alert(xmlhttp.readyState);      //   alert(xmlhttp.status);      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {        console.log(xmlhttp.responseText);        document.getElementById("text").innerHTML = xmlhttp.responseText;      }    }  }</script></html>

在這里有幾個點需要注意:

1、要注意創建xmlhttp語句的正確性!

2、xmlhttp.send(“username=” + username);是發送給后臺的(服務器)的數據!因為后臺需要前端傳送的數據進行判斷!

3、注意區分xmlhttp.responseText與responseXML的區別!

 

responseText 獲得字符串形式的響應數據。
responseXML 獲得 XML 形式的響應數據。

 

如果來自服務器的響應并非 XML,請使用 responseText 屬性;如果來自服務器的響應是 XML,而且需要作為 XML 對象進行解析,請使用 responseXML 屬性。

因為在我的代碼中后臺返回的是String類型,所以必須用responseText。我剛開始時就是因為這個出錯了!

來一個 responseXML 的例子:

xmlDoc=xmlhttp.responseXML;txt="";x=xmlDoc.getElementsByTagName("ARTIST");for (i=0;i<x.length;i++){  txt=txt + x[i].childNodes[0].nodeValue + "<br>";}document.getElementById("myDiv").innerHTML=txt;

 

屬性 描述
onreadystatechange 存儲函數(或函數名),每當 readyState 屬性改變時,就會調用該函數。
readyState 存有 XMLHttpRequest 的狀態。從 0 到 4 發生變化。
0: 請求未初始化
1: 服務器連接已建立
2: 請求已接收
3: 請求處理中
4: 請求已完成,且響應已就緒

 

**在 onreadystatechange 事件中,我們規定當服務器響應已做好被處理的準備時所執行的任務。

當 readyState 等于 4 且狀態為 200 時,表示響應已就緒。**

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%><%@ page import="com.hqj.dao.User"%><%@ page import="com.hqj.serviceImpl.UserServiceImpl"%><!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><body>  <form action="regeist.jsp" method="post">    用戶名: <input type="text" value="" name="name" id="username">    <div id="text"></div>    <br> 密碼: <input type="text" value="" name="password"><br>    <input type="submit" value="提交">  </form>  <jsp:useBean id="user" scope="session" class="com.hqj.dao.User"></jsp:useBean>  <jsp:setProperty property="name" name="user" />  <jsp:setProperty property="password" name="user" />  <%    if (request.getMethod() == "POST") {      User u = new User();      u.setName(user.getName());      out.println(user.getName());      u.setPassword(user.getPassword());      UserServiceImpl userServiceImpl = new UserServiceImpl();      if (!userServiceImpl.checkUserName(user.getName()).equals(          "用戶名已存在!")) {        userServiceImpl.add(u);        out.println("用戶注冊成功!");      }    }  %>  <h3><%=user.getName()%></h3>  <h3><%=user.getPassword()%></h3></body><script type="text/javascript" src="js/jquery-2.2.3.js"></script><script type="text/javascript">  /* $(document).ready(function() {  alert("hello world!");  }); */  var username;  $("#username").blur(function() {    username = $('#username').val();    //console.log(username);    $.ajax({      url : "checkUserName.jsp",      type : "POST",      dataType : "text",      data : {        "username" : username      },      success : function(data) {        //$("#text").innerHTML = data;        //console.log(data)        $("#text").text(data);      }    })  })</script></html>

使用JQuery實現的時候,要注意$.ajax中的參數:

url: 要求為String類型的參數,(默認為當前頁地址)發送請求的地址。

type: 要求為String類型的參數,請求方式(post或get)默認為get。注意其他http請求方法,例如put和delete也可以使用,但僅部分瀏覽器支持。

timeout: 要求為Number類型的參數,設置請求超時時間(毫秒)。此設置將覆蓋$.ajaxSetup()方法的全局設置。

async:要求為Boolean類型的參數,默認設置為true,所有請求均為異步請求。 如果需要發送同步請求,請將此選項設置為false。注意,同步請求將鎖住瀏覽器,用戶其他操作必須等 待請求完成才可以執行。

cache:要求為Boolean類型的參數,默認為true(當dataType為script時,默認為false)。設置為false將不會從瀏覽器緩存中加載請求信息。

data: 要求為Object或String類型的參數,發送到服務器的數據。如果已經不是字符串,將自動轉換為字符串格式。get請求中將附加在url后。防止這種自動轉換,可以查看processData選項。對象必須為key/value格式,例如{foo1:”bar1”,foo2:”bar2”}轉換為&foo1=bar1&foo2=bar2。如果是數組,JQuery將自動為不同值對應同一個名稱。例如{foo:[“bar1”,”bar2”]}轉換為&foo=bar1&foo=bar2。

dataType: 要求為String類型的參數,預期服務器返回的數據類型。如果不指定,JQuery將自動根據http包mime信息返回responseXML或responseText,并作為回調函數參數傳遞。

可用的類型如下:

  • xml:返回XML文檔,可用JQuery處理。
  • html:返回純文本HTML信息;包含的script標簽會在插入DOM時執行。
  • script:返回純文本JavaScript代碼。不會自動緩存結果。除非設置了cache參數。注意在遠程請求時(不在同一個域下),所有post請求都將轉為get請求。
  • json:返回JSON數據。
  • jsonp:JSONP格式。使用SONP形式調用函數時,例如myurl?callback=?,JQuery將自動替換后一個 “?”為正確的函數名,以執行回調函數。
  • text:返回純文本字符串。
  • beforeSend:要求為Function類型的參數,發送請求前可以修改XMLHttpRequest對象的函數,例如添加自定義HTTP頭。在beforeSend中如果返回false可以取消本次ajax請求。XMLHttpRequest對象是惟一的參數。
function(XMLHttpRequest){  this;  //調用本次ajax請求時傳遞的options參數}
  • complete:要求為Function類型的參數,請求完成后調用的回調函數(請求成功或失敗時均調用)。

參數:XMLHttpRequest對象和一個描述成功請求類型的字符串。

function(XMLHttpRequest, textStatus){  this;  //調用本次ajax請求時傳遞的options參數}
  • success:要求為Function類型的參數,請求成功后調用的回調函數,有兩個參數。

(1)由服務器返回,并根據dataType參數進行處理后的數據。
(2)描述狀態的字符串。

function(data, textStatus){//data可能是xmlDoc、jsonObj、html、text等等
  • error:要求為Function類型的參數,請求失敗時被調用的函數。該函數有3個參數,即XMLHttpRequest對象、錯誤信息、捕獲的錯誤對象(可選)。

ajax事件函數如下:

function(XMLHttpRequest, textStatus, errorThrown){ //通常情況下textStatus和errorThrown只有其中一個包含信息 this; //調用本次ajax請求時傳遞的options參數}
  • contentType:要求為String類型的參數,當發送信息至服務器時,內容編碼類型默認為”application/x-www-form-urlencoded”。該默認值適合大多數應用場合。

示例代碼:

$(function(){ $('#send').click(function(){  $.ajax({  type: "GET",  url: "test.json",  data: {username:$("#username").val(), content:$("#content").val()},  dataType: "json",  success: function(data){    $('#resText').empty(); //清空resText里面的所有內容    var html = '';    $.each(data, function(commentIndex, comment){    html += ;//自由發揮

希望本文所述對大家java程序設計有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品影院在线观看| 亚洲最大成人在线| 精品久久久久久久久久久久| 亚洲国产美女久久久久| 欧美一乱一性一交一视频| 九色精品美女在线| 亚洲国产99精品国自产| 亚洲色图第三页| 久久福利视频网| 日本欧美精品在线| 亚洲精品视频免费| 北条麻妃一区二区在线观看| 91av视频导航| 91天堂在线观看| 91九色国产视频| 久久亚洲精品小早川怜子66| 欧美日韩免费看| 国产a∨精品一区二区三区不卡| 高清欧美性猛交xxxx| 日韩精品在线第一页| 日韩a**站在线观看| 国产精品爽黄69天堂a| 久久久亚洲成人| 久久精品视频va| 欧美诱惑福利视频| 国产精品日韩欧美大师| 91av在线免费观看| 国产精品日韩欧美| 国产精品黄色av| 亚洲男子天堂网| 国产成+人+综合+亚洲欧美丁香花| 亚洲黄色在线观看| 欧美激情亚洲一区| 亚洲自拍在线观看| 欧美激情在线视频二区| 欧美自拍视频在线观看| 亚洲永久在线观看| 亚洲自拍另类欧美丝袜| 亚洲а∨天堂久久精品9966| 亚洲www永久成人夜色| 国产精品户外野外| 日韩欧美福利视频| 欧美性猛交xxxxx免费看| 国产精品影片在线观看| 国产精品久久久久久久一区探花| 成人免费大片黄在线播放| 久久国产天堂福利天堂| 国产日韩欧美中文在线播放| 国产精品美女av| 超碰精品一区二区三区乱码| 欧美在线观看日本一区| 欧美老女人性生活| 一个人看的www欧美| 日韩视频免费中文字幕| 亚洲人成网在线播放| 欧美重口另类videos人妖| 成人中文字幕在线观看| 国语自产精品视频在线看抢先版图片| 欧美精品一区二区免费| 欧美性色xo影院| 亚洲欧美日韩一区在线| 国产成人鲁鲁免费视频a| 91精品视频免费看| 亚洲欧洲一区二区三区久久| 欧美福利在线观看| 国产一区二区丝袜| 国产一区二区三区日韩欧美| 97精品国产97久久久久久免费| 91精品在线播放| 992tv成人免费视频| 欧美成人午夜剧场免费观看| 亚洲白拍色综合图区| 久久亚洲电影天堂| 精品国产欧美一区二区三区成人| 久久久久久高潮国产精品视| 久久久久久网站| 欧美性少妇18aaaa视频| 亚洲人在线观看| 国产一区二区三区毛片| 亚洲第一综合天堂另类专| 久久国产加勒比精品无码| 北条麻妃在线一区二区| 欧美日韩在线免费| 亚洲精品国产品国语在线| 亚洲一区二区三区毛片| 久久免费观看视频| 欧美老少配视频| 亚洲福利视频免费观看| 国产精品99久久久久久久久| zzjj国产精品一区二区| 综合久久五月天| 亚洲成成品网站| 精品人伦一区二区三区蜜桃网站| 中文字幕在线观看日韩| 黄色成人av网| 亚洲欧美日韩在线高清直播| 中文字幕日韩av| 日韩精品欧美激情| 久久亚洲一区二区三区四区五区高| 久久亚洲电影天堂| 国产精品日韩久久久久| 久久久久久久91| 少妇精69xxtheporn| 欧美久久久精品| 欧美性色视频在线| 国产精品国产自产拍高清av水多| 国产成人精品免高潮在线观看| 久久亚洲精品视频| 久久欧美在线电影| 国产美女直播视频一区| 欧美片一区二区三区| 国产成人小视频在线观看| 久久成人亚洲精品| 亚洲欧美一区二区三区四区| 亚洲国产小视频在线观看| 久久亚洲春色中文字幕| 国产精品日韩精品| 一区二区三区美女xx视频| 亚洲qvod图片区电影| 日韩美女激情视频| 2019中文在线观看| 91久久精品一区| 韩国一区二区电影| 日韩一二三在线视频播| 91久久久久久久久久久| 精品久久国产精品| 欧美专区第一页| 国产成人精品免高潮在线观看| 青青久久aⅴ北条麻妃| 在线色欧美三级视频| 日韩av中文字幕在线免费观看| 亚洲综合在线小说| 成人免费在线网址| 成人精品久久av网站| 久久精品视频免费播放| 亚洲最大中文字幕| 亚洲专区中文字幕| 在线a欧美视频| 欧美电影免费看| 欧美性极品xxxx娇小| 日韩精品视频免费在线观看| 国产经典一区二区| 亚州精品天堂中文字幕| 久久久久久久久网站| 精品久久久久久中文字幕| 91精品久久久久久久久不口人| 亚洲欧美精品在线| 亚洲人成在线一二| 国产精品18久久久久久首页狼| 国产有码一区二区| 亚洲国产日韩欧美综合久久| 成人国产精品免费视频| 亚洲午夜女主播在线直播| 国产精品成人久久久久| 日韩成人av一区| 日韩色av导航| 久久国产天堂福利天堂| 91久久久久久久久久| 九九热视频这里只有精品| www.99久久热国产日韩欧美.com| 欧美理论电影在线播放| 欧美性猛交丰臀xxxxx网站| 91精品久久久久久综合乱菊| 精品视频—区二区三区免费|