AJAX+JAVA用戶登陸注冊驗證的實現(xiàn)代碼
需求
通過ajax異步刷新頁面驗證用戶輸入的賬號密碼是否在數(shù)據(jù)庫中存在。
技術(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;
}
//提交請求
var xmlHttp;
function checkUserExists() {
var u = document.getElementById("uname");
var username = u.value;
if (username == "") {
alert("請輸入用戶名");
u.focus();
return false;
}
//訪問字符串
var url = "loginServlet";
//創(chuàng)建核心xmlhttprequest組件
xmlHttp = createXMLHttpRequest();
//設(shè)置回調(diào)函數(shù)
xmlHttp.onreadystatechange = proessRequest;
//初始化核心組件
xmlHttp.open("post", url, true);
//設(shè)置請求頭
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
//發(fā)送請求
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>
請輸入用戶名:
<input id="uname" name="uname" type="text" onblur="checkUserExists()" /><div id="alert" style="display:inline"></div>
</body>
</html>
這里沒有用Dao層,直接用servlet和service層進(jì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語句
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);
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java使用Ajax實現(xiàn)跨域上傳圖片功能
- React+ajax+java實現(xiàn)上傳圖片并預(yù)覽功能
- 使用Ajax進(jìn)行文件與其他參數(shù)的上傳功能(java開發(fā))
- AJAX實現(xiàn)數(shù)據(jù)的增刪改查操作詳解【java后臺】
- Java后臺判斷ajax請求及處理過程詳解
- 使用jquery 的ajax 與 Java servlet的交互代碼實例
- java模擬ajax訪問另一個項目的controller代碼實例
- Java+Ajax實現(xiàn)的用戶名重復(fù)檢驗功能實例詳解
- jQuery的Ajax接收java返回數(shù)據(jù)方法
- 原生JavaScrpit中異步請求Ajax實現(xiàn)方法
- Javaweb使用cors完成跨域ajax數(shù)據(jù)交互
- Java使用Ajax異步上傳文件
相關(guān)文章
springboot對接支付寶支付接口(詳細(xì)開發(fā)步驟總結(jié))
這篇文章主要介紹了springboot對接支付寶支付接口(詳細(xì)開發(fā)步驟總結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
JAVA基于Redis實現(xiàn)計數(shù)器限流的使用示例
計數(shù)器法是限流算法里最簡單也是最容易實現(xiàn)的一種算法,本文主要介紹了JAVA基于Redis實現(xiàn)計數(shù)器限流的使用示例,具有一定的參考價值,感興趣的可以了解一下2023-09-09
Java中volatile關(guān)鍵字的作用是什么舉例詳解
這篇文章主要介紹了Java中volatile關(guān)鍵字的作用是什么的相關(guān)資料,volatile關(guān)鍵字在Java中用于修飾變量,提供可見性和禁止指令重排的特性,但不保證原子性,它通過內(nèi)存屏障實現(xiàn)這些特性,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04
Spring security實現(xiàn)權(quán)限管理示例
這篇文章主要介紹了Spring security實現(xiàn)權(quán)限管理示例,這里整理了詳細(xì)的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-01-01
SpringSecurity拋出異常但AccessDeniedHandler不生效的解決
本文主要介紹了SpringSecurity拋出異常但AccessDeniedHandler不生效的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01

