AJAX+JAVA用戶登陸注冊(cè)驗(yàn)證的實(shí)現(xiàn)代碼
需求
通過(guò)ajax異步刷新頁(yè)面驗(yàn)證用戶輸入的賬號(hào)密碼是否在數(shù)據(jù)庫(kù)中存在。
技術(shù)棧
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; } //提交請(qǐng)求 var xmlHttp; function checkUserExists() { var u = document.getElementById("uname"); var username = u.value; if (username == "") { alert("請(qǐng)輸入用戶名"); u.focus(); return false; } //訪問(wèn)字符串 var url = "loginServlet"; //創(chuàng)建核心xmlhttprequest組件 xmlHttp = createXMLHttpRequest(); //設(shè)置回調(diào)函數(shù) xmlHttp.onreadystatechange = proessRequest; //初始化核心組件 xmlHttp.open("post", url, true); //設(shè)置請(qǐng)求頭 xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;"); //發(fā)送請(qǐng)求 xmlHttp.send("uname="+username); } //回調(diào)函數(shù) function proessRequest() { if (xmlHttp.status==200 && xmlHttp.readyState == 4) { var b = xmlHttp.responseText;//得到服務(wù)端的輸出結(jié)果 if (b=="true") { document.getElementById("alert").innerHTML = "<font color='red'>用戶名已經(jīng)存在!</font>"; }else { document.getElementById("alert").innerHTML = "<font color='blue'>用戶名可以使用!</font>"; } } } </script> <body> 請(qǐng)輸入用戶名: <input id="uname" name="uname" type="text" onblur="checkUserExists()" /><div id="alert" style="display:inline"></div> </body> </html>
這里沒(méi)有用Dao層,直接用servlet和service層進(jìn)行驗(yàn)證。
下面是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語(yǔ)句 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(); } } }
關(guān)于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; }
關(guān)于控制層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);//調(diào)用service中的查詢方法 response.setCharacterEncoding("UTF-8");//設(shè)置字符編碼 PrintWriter out = response.getWriter(); out.print(isUname); out.flush(); out.close();//關(guān)閉資源 } /** * @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); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java使用Ajax實(shí)現(xiàn)跨域上傳圖片功能
- React+ajax+java實(shí)現(xiàn)上傳圖片并預(yù)覽功能
- 使用Ajax進(jìn)行文件與其他參數(shù)的上傳功能(java開(kāi)發(fā))
- AJAX實(shí)現(xiàn)數(shù)據(jù)的增刪改查操作詳解【java后臺(tái)】
- Java后臺(tái)判斷ajax請(qǐng)求及處理過(guò)程詳解
- 使用jquery 的ajax 與 Java servlet的交互代碼實(shí)例
- java模擬ajax訪問(wèn)另一個(gè)項(xiàng)目的controller代碼實(shí)例
- Java+Ajax實(shí)現(xiàn)的用戶名重復(fù)檢驗(yàn)功能實(shí)例詳解
- jQuery的Ajax接收java返回?cái)?shù)據(jù)方法
- 原生JavaScrpit中異步請(qǐng)求Ajax實(shí)現(xiàn)方法
- Javaweb使用cors完成跨域ajax數(shù)據(jù)交互
- Java使用Ajax異步上傳文件
相關(guān)文章
Spring Boot如何動(dòng)態(tài)創(chuàng)建Bean示例代碼
這篇文章主要給大家介紹了關(guān)于Spring Boot如何動(dòng)態(tài)創(chuàng)建Bean的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09nacos配置注冊(cè)中心時(shí)指定命名空間不起作用的問(wèn)題
這篇文章主要介紹了nacos配置注冊(cè)中心時(shí)指定命名空間不起作用的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。2022-01-01java封裝空值建議使用Optional替代null的方法示例解析
這篇文章主要為大家介紹了java封裝空值建議使用Optional替代null的方法原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11Spring Hibernate實(shí)現(xiàn)分頁(yè)功能
這篇文章主要為大家詳細(xì)介紹了Spring Hibernate實(shí)現(xiàn)分頁(yè)功能的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05Java并發(fā)Map面試線程安全數(shù)據(jù)結(jié)構(gòu)全面分析
本文將探討如何在Java中有效地應(yīng)對(duì)這些挑戰(zhàn),介紹一種強(qiáng)大的工具并發(fā)Map,它能夠幫助您管理多線程環(huán)境下的共享數(shù)據(jù),確保數(shù)據(jù)的一致性和高性能,深入了解Java中的并發(fā)Map實(shí)現(xiàn),包括ConcurrentHashMap和ConcurrentSkipListMap,及相關(guān)知識(shí)點(diǎn)2023-09-09SpringBoot+Swagger-ui自動(dòng)生成API文檔
今天小編就為大家分享一篇關(guān)于SpringBoot+Swagger-ui自動(dòng)生成API文檔,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03Java實(shí)現(xiàn)Promise.all()的示例代碼
這篇文章主要介紹了Java實(shí)現(xiàn)Promise.all()的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08Java Validation Api使用方法實(shí)例解析
這篇文章主要介紹了Java Validation Api使用方法實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Spring MVC4.1服務(wù)器端推送實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Spring MVC4.1服務(wù)器端推送實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11