register.jsp:
<[email=%@page]%@page[/email] contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=gb2312">
<title>注册表单验证</title>
<style type="text/css">
/* 页面字体样式 */
body, td, input {
font-family:Arial;
font-size:12px;
}
/* 表格基本样式 */
table.default {
border-collapse:collapse;
width:300px;
}
/* 表格单元格样式 */
table.default td {
border:1px solid black;
padding:3px;
}
/* 列头样式 */
table.default td.item {
background:#006699;
color:#fff;
}
/* 正常信息样式 */
div.ok {
color:#006600;
}
/* 警告信息样式 */
div.warning {
color:#FF0000;
}
</style>
<!-- 引入外部checker.js文件 -->
<script type="text/javascript" src="checker.js"></script>
</head>
<body>
<jsp:include page="../head.jsp"></jsp:include>
<h1>注册</h1>
<form method="post" action="register.jsp" οnsubmit="alert('后面的注册过程与传统方式相同。');return false">
<table class="default">
<tr>
<td class="item" width="30%">用户名:</td>
<td width="70%">
<input type="text" name=" name
" id="
name
" οnblur="Checker.checkNode(this)">
<div id=" name
CheckDiv" class="warning">请输入用户名。</div>
</td>
</tr>
<tr>
<td class="item">密码:</td>
<td>
<input type="password" name="password" id="password" οnblur="Checker.checkPassword()">
<div id=" password
CheckDiv" class="warning">请输入密码。</div>
</td>
</tr>
<tr>
<td class="item">密码验证:</td>
<td>
<input type="password" name="password2" id="password2" οnblur="Checker.checkPassword()">
<div id=" password2
CheckDiv" class="warning">请再次输入密码。</div>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="注册">
</td>
</tr>
</table>
</form>
<jsp:include page="../bottom.jsp"></jsp:include>
</body>
</html>
checker.jsp
<%@ page contentType="text/plain; charset=gb2312"%>
<%@ page language="java"%>
<%@ page import="java.sql.*,com.ssit.DB.*"%>
<%!
//查询数据库是否存在相同信息
boolean hasSameValue(String name, String value) {
boolean result = false; //保存检测结果
//定义查询数据库的SQL语句
String sql = "select * from GYNW.B_EXTERNAL_USER where " + name + " = ?";
Connection conn = null; //声明Connection对象
PreparedStatement pstmt = null; //声明PreparedStatement对象
ResultSet rs = null; //声明ResultSet对象
try {
conn =new Connect().getConnection(); //获取数据库连接
pstmt = conn.prepareStatement(sql); //根据sql创建PreparedStatement
pstmt.setString(1, value); //设置参数
rs = pstmt.executeQuery(); //执行查询,返回结果集
//根据结果集是否存在决定查询结果
if (rs.next()) {
result = true;
} else {
result = false;
}
} catch (SQLException e) {
System.out.println(e.toString());
} finally {
if(conn!=null){
try{
conn.close();
}catch(Exception re){
re.getMessage();
}
}
}
return result;
}
%>
<%
out.clear(); //清空当前的输出内容(空格和换行符)
request.setCharacterEncoding("UTF-8"); //设置请求体字符编码格式为UTF-8
String ch_name = request.getParameter("name"); //获取name参数
String value = request.getParameter("value"); //获取value参数
String info = null; //用于保存提示对象的名称
//如果需要判断的是验证码,采用session方式验证
if ("code".equals(ch_name)) {
//获取session中保存的验证码
String sessionCode = (String) session.getAttribute("_CODE_");
//根据对比结果输出响应信息
if (value != null && value.equals(sessionCode)) {
out.print("1验证码正确。");
} else {
out.print("0验证码错误。");
}
} else {
//根据name变量确定提示对象的名称
if ("name".equals(ch_name)) {
info = "用户名";
}
if (hasSameValue(ch_name, value)) {
out.print("0该" + info + "已存在,请更换" + info + "。");
} else {
out.print("1该" + info + "可正常使用。");
}
}
%>
checker.js
var Checker = new function() {
this._url = "checker.jsp"; //服务器端文件地址
this._infoDivSuffix = " CheckDiv
"; //提示信息div的统一后缀
//检查普通输入信息
this.checkNode = function(_node) {
var nodeId = _node.id; //获取节点id
if (_node.value!="") {
var xmlHttp=this.createXmlHttp(); //创建XmlHttpRequest对象
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
//调用showInfo方法显示服务器反馈信息
Checker.showInfo( nodeId
+ Checker._infoDivSuffix,
xmlHttp.responseText);
}
}
xmlHttp.open("POST", this._url, true);
xmlHttp.setRequestHeader(
"Content-type","application/x-www-form-urlencoded");
xmlHttp.send("name=" + encodeURIComponent(_node.id) +
//发送包含用户输入信息的请求体
"&value=" + encodeURIComponent(_node.value));
}
}
//显示服务器反馈信息
this.showInfo = function(_infoDivId, text) {
var infoDiv = document.getElementById(_ infoDivId
); //获取显示信息的div
var status = text.substr(0,1); //反馈信息的第一个字符表示信息类型
if (status == "1") {
infoDiv.className = "ok"; //检查结果正常
} else {
infoDiv.className = "warning"; //检查结果需要用户修改
}
infoDiv.innerHTML = text.substr(1); //写回详细信息
}
//用于创建XMLHttpRequest对象
this.createXmlHttp = function() {
var xmlHttp = null;
//根据window.XMLHttpRequest对象是否存在使用不同的创建方式
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest(); //FireFox、Opera等浏览器支持的创建方式
} else {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式
}
return xmlHttp;
}
//检查两次输入的密码是否一致
this.checkPassword = function() {
var p1 = document.getElementById("password").value; //获取密码
var p2 = document.getElementById("password2").value; //获取验证密码
//当两部分密码都输入完毕后进行判断
if (p1 != "" && p2 != "") {
if (p1 != p2) {
this.showInfo("password2" + Checker._infoDivSuffix,
"0密码验证与密码不一致。");
} else {
this.showInfo("password2" + Checker._infoDivSuffix, "1");
}
} else if (p1 != null) {
this.showInfo("password" + Checker._infoDivSuffix, "1");
}
}
}
表结构
B_EXTERNAL_USER
NAME
VARCHAR2(30)
用户名
PWD
VARCHAR2(50)
密码
ADDRESS
VARCHAR2(200)
地址
COMPANY
VARCHAR2(200)
单位名称
IS_ADMIN
VARCHAR2(1)
是否管理员 ( 缺省为
’0’)
<[email=%@page]%@page[/email] contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=gb2312">
<title>注册表单验证</title>
<style type="text/css">
/* 页面字体样式 */
body, td, input {
font-family:Arial;
font-size:12px;
}
/* 表格基本样式 */
table.default {
border-collapse:collapse;
width:300px;
}
/* 表格单元格样式 */
table.default td {
border:1px solid black;
padding:3px;
}
/* 列头样式 */
table.default td.item {
background:#006699;
color:#fff;
}
/* 正常信息样式 */
div.ok {
color:#006600;
}
/* 警告信息样式 */
div.warning {
color:#FF0000;
}
</style>
<!-- 引入外部checker.js文件 -->
<script type="text/javascript" src="checker.js"></script>
</head>
<body>
<jsp:include page="../head.jsp"></jsp:include>
<h1>注册</h1>
<form method="post" action="register.jsp" οnsubmit="alert('后面的注册过程与传统方式相同。');return false">
<table class="default">
<tr>
<td class="item" width="30%">用户名:</td>
<td width="70%">
<input type="text" name="
<div id="
</td>
</tr>
<tr>
<td class="item">密码:</td>
<td>
<input type="password" name="password" id="password" οnblur="Checker.checkPassword()">
<div id="
</td>
</tr>
<tr>
<td class="item">密码验证:</td>
<td>
<input type="password" name="password2" id="password2" οnblur="Checker.checkPassword()">
<div id="
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="注册">
</td>
</tr>
</table>
</form>
<jsp:include page="../bottom.jsp"></jsp:include>
</body>
</html>
checker.jsp
<%@ page contentType="text/plain; charset=gb2312"%>
<%@ page language="java"%>
<%@ page import="java.sql.*,com.ssit.DB.*"%>
<%!
//查询数据库是否存在相同信息
boolean hasSameValue(String name, String value) {
boolean result = false; //保存检测结果
//定义查询数据库的SQL语句
String sql = "select * from GYNW.B_EXTERNAL_USER where " + name + " = ?";
Connection conn = null; //声明Connection对象
PreparedStatement pstmt = null; //声明PreparedStatement对象
ResultSet rs = null; //声明ResultSet对象
try {
conn =new Connect().getConnection(); //获取数据库连接
pstmt = conn.prepareStatement(sql); //根据sql创建PreparedStatement
pstmt.setString(1, value); //设置参数
rs = pstmt.executeQuery(); //执行查询,返回结果集
//根据结果集是否存在决定查询结果
if (rs.next()) {
result = true;
} else {
result = false;
}
} catch (SQLException e) {
System.out.println(e.toString());
} finally {
if(conn!=null){
try{
conn.close();
}catch(Exception re){
re.getMessage();
}
}
}
return result;
}
%>
<%
out.clear(); //清空当前的输出内容(空格和换行符)
request.setCharacterEncoding("UTF-8"); //设置请求体字符编码格式为UTF-8
String ch_name = request.getParameter("name"); //获取name参数
String value = request.getParameter("value"); //获取value参数
String info = null; //用于保存提示对象的名称
//如果需要判断的是验证码,采用session方式验证
if ("code".equals(ch_name)) {
//获取session中保存的验证码
String sessionCode = (String) session.getAttribute("_CODE_");
//根据对比结果输出响应信息
if (value != null && value.equals(sessionCode)) {
out.print("1验证码正确。");
} else {
out.print("0验证码错误。");
}
} else {
//根据name变量确定提示对象的名称
if ("name".equals(ch_name)) {
info = "用户名";
}
if (hasSameValue(ch_name, value)) {
out.print("0该" + info + "已存在,请更换" + info + "。");
} else {
out.print("1该" + info + "可正常使用。");
}
}
%>
checker.js
var Checker = new function() {
this._url = "checker.jsp"; //服务器端文件地址
this._infoDivSuffix = "
//检查普通输入信息
this.checkNode = function(_node) {
var nodeId = _node.id; //获取节点id
if (_node.value!="") {
var xmlHttp=this.createXmlHttp(); //创建XmlHttpRequest对象
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
//调用showInfo方法显示服务器反馈信息
Checker.showInfo(
xmlHttp.responseText);
}
}
xmlHttp.open("POST", this._url, true);
xmlHttp.setRequestHeader(
"Content-type","application/x-www-form-urlencoded");
xmlHttp.send("name=" + encodeURIComponent(_node.id) +
//发送包含用户输入信息的请求体
"&value=" + encodeURIComponent(_node.value));
}
}
//显示服务器反馈信息
this.showInfo = function(_infoDivId, text) {
var infoDiv = document.getElementById(_
var status = text.substr(0,1); //反馈信息的第一个字符表示信息类型
if (status == "1") {
infoDiv.className = "ok"; //检查结果正常
} else {
infoDiv.className = "warning"; //检查结果需要用户修改
}
infoDiv.innerHTML = text.substr(1); //写回详细信息
}
//用于创建XMLHttpRequest对象
this.createXmlHttp = function() {
var xmlHttp = null;
//根据window.XMLHttpRequest对象是否存在使用不同的创建方式
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest(); //FireFox、Opera等浏览器支持的创建方式
} else {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式
}
return xmlHttp;
}
//检查两次输入的密码是否一致
this.checkPassword = function() {
var p1 = document.getElementById("password").value; //获取密码
var p2 = document.getElementById("password2").value; //获取验证密码
//当两部分密码都输入完毕后进行判断
if (p1 != "" && p2 != "") {
if (p1 != p2) {
this.showInfo("password2" + Checker._infoDivSuffix,
"0密码验证与密码不一致。");
} else {
this.showInfo("password2" + Checker._infoDivSuffix, "1");
}
} else if (p1 != null) {
this.showInfo("password" + Checker._infoDivSuffix, "1");
}
}
}
表结构
B_EXTERNAL_USER
NAME
VARCHAR2(30)
用户名
PWD
VARCHAR2(50)
密码
ADDRESS
VARCHAR2(200)
地址
COMPANY
VARCHAR2(200)
单位名称
IS_ADMIN
VARCHAR2(1)
是否管理员 (