通过Ajax实现注册登陆的表单验证,一看就会。
前言:
ajax的简单应用,简单好懂。本次运用的软件为ideal,使用的是tomcat服务器,无框架编程。
AJAX是什么
Asynchronous JavaScript And XML
是一种通过JavaScript和后台进行通信的技术,能够实现页面的局部刷新,提高用户的体验
常规页面刷新会更新整个页面。
ajax技术通过浏览器局部发送请求给后台,后台通过resp.getWriter.print("");响应给前台页面
代码实现:
服务器代码:
一个类写入多个servlet:
package com.dmdd.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class BaseServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String m = req.getParameter("m");
try {
Method method=this.getClass().getDeclaredMethod(m,HttpServletRequest.class,HttpServletResponse.class);
method.setAccessible(true);
method.invoke(this,req,resp);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
这个类是为了实现多个servlet可写入一个类中,简化了代码的结构,运用了反射技术。看不懂没关系,直接照着抄。
服务器具体实现代码:
package com.dmdd.servlet;
import com.dmdd.entity.User;
import com.dmdd.service.Impl.UserServiceImpl;
import com.dmdd.service.UserService;
import com.dmdd.utils.DBUtilss;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/admin.do")
public class AdminServlet extends BaseServlet{
static UserService userService=new UserServiceImpl();
public void checkRegisterUsername(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String username = req.getParameter("username");
List<User> userExists = userService.findUserExists(username);
String regExp = "^[a-zA-Z0-9_-]{4,16}$";
if (!username.matches(regExp)){
resp.getWriter().print("false");
}
else if(userExists!=null&userExists.size()>0){
resp.getWriter().print("exists");
}
else {
resp.getWriter().print("");
}
}
public void checkRegisterPassword(HttpServletRequest req,HttpServletResponse resp) throws IOException {
String password = req.getParameter("password");
String regXp="^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$";
if (!password.matches(regXp)){
resp.getWriter().print("false");
}
else {
resp.getWriter().print("true");
}
}
public void checkRegisterPassword1(HttpServletRequest req,HttpServletResponse resp) throws IOException {
String password = req.getParameter("password");
String password1 = req.getParameter("password1");
if (password.equals(password1)){
resp.getWriter().print("repeat");
}
else {
resp.getWriter().print("");
}
}
public void checkLoginUsername(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String username = req.getParameter("username");
List<User> userExists = userService.findUserExists(username);
if (username==null){
resp.getWriter().print("null");
}
else if(userExists!=null&userExists.size()>0){
resp.getWriter().print("exists");
}
else {
resp.getWriter().print("");
}
}
public void checkLoginPassword(HttpServletRequest req,HttpServletResponse resp) throws IOException {
String password = req.getParameter("password");
String username = req.getParameter("username");
List<User> userExists = userService.findUserExists(username);
if (password==null){
resp.getWriter().print("null");
}
else if(userExists.get(0).getPassword()==password){
resp.getWriter().print("true");
}
else {
resp.getWriter().print("");
}
}
}
浏览器代码:
注册代码:
$(function (){
//给账户对象添加失去焦点事件
$("[name=username]:text").blur(function (){
//连接服务器校验用户名
$.get("/front/admin.do?m=checkRegisterUsername&username="+$(this).val(),function (data){
if (data=="false"){
$("#userMsg").text("请输入正确格式的用户名").css("color","red");
}
else if (data=="exists"){
$("#userMsg").text("此用户已存在").css("color","red");
}
else {
$("#userMsg").text("符合").css("color","green");
}
})
})
$("[name=password]:password").blur(function (){
//连接服务器
$.get("/front/admin.do?m=checkRegisterPassword&password="+$(this).val(),function (data){
if (data=="false"){
$("#passwordMsg").text("密码格式错误").css("color","red");
}
else if (data=="true"){
$("#passwordMsg").text("√").css("color","green");
}
})
})
$("[name=password1]:password").blur(function (){
$.get("/front/admin.do?m=checkRegisterPassword1&password1="+$(this).val()+"&password="+$("[name=password]:password").val(),function (data){
if (data=="repeat"){
$("#passwordMsg1").text("√").css("color","green")
}
else {
$("#passwordMsg1").text("密码不一致").css("color","red")
}
})
})
})
$.get("/front/admin.do?m=checkRegisterPassword&password="+$(this).val()此段写 要请求的servlet地址。 get请求是把需要的参数按照如下形式传递
?参数1&参数2&参数3
登陆代码:
<script>
$(function () {
$("[name=username]:text").blur(function () {
$.get("/front/admin.do?m=checkLoginUsername&username=" + $(this).val(), function (data) {
if (data == "null") {
$("#usernameMsg").text("用户名不能为空").css("color", "red");
} else if (data == "exists") {
$("#usernameMsg").text("√").css("color", "green");
} else {
$("#usernameMsg").text("用户名不存在").css("color", "red");
}
})
})
$("[name=password]:password").blur(function () {
$.get("/front/admin.do?m=checkLoginPassword&password=" + $(this).val() + "&username=" + $("[name=username]:text").val(), function (data) {
if (data == "null") {
$("#passwordMsg").text("密码不能为空").css("color", "red");
} else if (data == "true") {
$("#passwordMsg").text("√").css("color", "green");
} else {
$("#passwordMsg").text("密码错误").css("color", "red");
}
})
})
})
</script>
至于为什么要用jquery写,因为jquery写ajax最简单