javaweb中利用ajax实现用户登录时的注册查询
使用jar包:commons-lang3-3.3.2.jar;standard.jar,有什么classnotfound应该就是这两个jar包出了问题;
- 编程中遇到的问题:
- 1.xmlHttp.readyState中的S没有大写,导致程序没有反应,因为数据判断时始终不对,因此一直输出为空;
- 2.xmlHttp.status中的t写了三个,导致的结果同上;
总结顺序:
1.window加载引发function;2.建立xmlHttp;3;打开POST连接;3.设置请求头和请求体并发送;4.post进行参数判断,并返回判断结果给页面;5.页面得到返回结果进行判断,根据判断设置span的参数值。
直接上代码:
ajax3.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function createXmlHttpRequest()
{
try{
return new XMLHttpRequest();//大多数浏览器
}catch (e){
try{
return ActvieXObject("Microsoft.XMLHTTP");//5.5及更早版本
}catch (e){
try{
return ActvieXObject("Msxm12.XMLHTTP");//5.5及更早版本
}catch (e){
alert("哥们儿,您用的什么浏览器啊?");
throw e;
}
}
}
}
window.onload = function() {
//获取文本框,给它的失去焦点事件注册监听
var userEle = document.getElementById("usernameEle");
userEle.oninput =function() {//onblur是文本框失去焦点改变;onchange事件在内容改变(两次内容有可能还是相等的)且失去焦点时触发;
//onpropertychange事件却是实时触发,即每增加或删除一个字符就会触发,通过js改变也会触发该事件,但是该事件IE专有。
//oninput事件是IE之外的大多数浏览器支持的事件,在value改变时触发,实时的,即每增加或删除一个字符就会触发,然而通过js改变value时,却不会触发;
//1.得到异步对象
var xmlHttp = createXmlHttpRequest();
//2.打开连接
xmlHttp.open("POST","<c:url value='/ValidateUsernameServlet'/>",true);
//3.设置请求头:Content-Type
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//4.发送请求,给出请求体
xmlHttp.send("username="+userEle.value);
//5.给xmlHttp的onreadystatechange事件注册监听
xmlHttp.onreadystatechange = function(){
if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
//1.获取服务器的响应,判断是否为1
//是,则获取span,添加内容;“用户名已被注册”
var span = document.getElementById("errorSpan");
var text = xmlHttp.responseText;
if(text == "1"){
//得到span元素
span.innerHTML = "用户名已被注册";
}else{
span.innerHTML = "用户名未被注册";
}
}
};
};
};
</script>
</head>
<body>
<h1>演示用户名是否被注册</h1>
<form action = "" method="post">
用户名:<input type="text" name="username" id="usernameEle"/><span id = "errorSpan"></span><br/>
密 码:<input type="password" name="password" /><br/>
<input type = "submit" value = "注册"/>
</form>
</body>
</html>
ValidateUsernameServlet:
package cn.itcast.web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/ValidateUsernameServlet")
public class ValidateUsernameServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ValidateUsernameServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
/*
* 1.获取参数username
* 2.判断是不是itcast
* 3.如果是,响应1
* 4.如果不是,响应0
*/
System.out.println("已经在运行");
String username = request.getParameter("username");
if(username.equalsIgnoreCase("tony")) {
response.getWriter().print("1");
System.out.println("1");
}else {
response.getWriter().print("0");
System.out.println("0");
}
}
}