前一段时间在备考开学考试,关于javaweb的编程题了解到会考到jquery+ajax前后端交互的问题,于是上网找了很多资料,整理出这篇笔记,最后代码也成功运行,希望可以给备考的宝宝们提供一些帮助。
我们考试的题:
使用jquery+ajax完成注册时的用户名验证,要求如下:
前端验证用户名是否合法,账号只能是长度4-12位的数字、字母、下划线
如果用户名合法,通过ajax访问后台验证用户名是否已存在,并给前台作出相应的提示
如果用户名不合法或者已存在,点击注册按钮无法提交表单。
项目目录如下:

创建Servlet并将servlet配置写入web.xml,这里的servlet-name是check根据自己的命名来写
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>check</servlet-name> <servlet-class>com.labor.servlet.CheckUserNameServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>check</servlet-name> <url-pattern>/check</url-pattern> </servlet-mapping> </web-app>
复制
在web下创建一个包导入JS包,并且编写register.jsp前端页面以及ajax数据代码块:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>AJAX实际操作注册验证用户名</title> </head> <body> <form action="" method="post"> 账号:<input type="text" id="username" name="username"><span id="sp"></span><br> <input type="submit" value="注册"> </form> <script src="JS/jquery.min.js"></script> <script> //给账号的文本框添加失去焦点事件 使用jquery绑定 input[name='username'] $("input[name='username']").blur(function () { //获得用户输入的账号 账号只能是长度4-12位的数字、字母、下划线 let username = $(this).val(); //let与var用法一致 获取输入的username //账号只能是长度4-12位的数字、字母、下划线 let reg = /^\w{4,12}$/; if(!reg.test(username)){ alert("用户名不合法!"); return;//return可以结束掉整个方法 } //验证用户名是否合法,如果用户名合法,这个函数返回true,否则返回false function checkUsername() { } //给账号的文本框添加失去焦点事件 $("input[name='username']").blur(checkUsername) //表单的提交事件,如果这个方法返回的是true,就可以提交表单,否则提交不了 $("form").submit(function () { //如果用户名合法,才提交表单 let b = checkUsername(); return b; }) //要页面不刷新去访问后台 要使用ajax let b = true; $.ajax({ url:"check", //后台的action 在web.xml中 验证的Servlet路径 type:"POST", //以post方法提交数据给服务器 data:{ //传给服务器的数据 "Mark":username, }, //"mark"为要向后台传入的参数名称 //将异步请求改为同步 async:false, //如果正常的访问了后台,就执行这个success中的function函数 success:function (obj) { //回调函数 if(obj == "1"){ $("#sp").text('用户名已存在').css("color","red"); //在ajax中return是不会返回值得,而是结束掉整个ajax b = false; }else{ $("#sp").text('√用户名通过验证').css("color","green"); location.href='success.jsp'; } }, }) //用户名合法,就要去该账户中验证用户名是否存在 //要去数据库进行操作,肯定就要写Java代码,Java代码写在servlet中 //要页面不刷新去访问后台,要使用ajax //异步 同步 // location.href='' }); </script> </body> </html>
复制
编写一个success.jsp登录成功跳转的页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> 登录成功! </body> </html>
复制
最后编写CheckUserNameServlet.java来接受前端数据作比较,先接收前端传过来的数据(用户名)与后端已存在的用户名作比较:
package com.labor.servlet; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; import java.io.PrintWriter; import static java.lang.System.out; /*使用jquery+ajax完成注册时的用户名验证,要求如下: 前端验证用户名是否合法,账号只能是长度4-12位的数字、字母、下划线 如果用户名合法,通过ajax访问后台验证用户名是否已存在,并给前台作出相应的提示 如果用户名不合法或者已存在,点击注册按钮无法提交表单。 */ @WebServlet(name = "check", urlPatterns= "/check") public class CheckUserNameServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //接受前端传进来的数据,即刚刚的data String username = request.getParameter("Mark").toString(); PrintWriter out = response.getWriter(); String is_name = "Mark"; if(is_name.equals(username)){ out.print("1"); }else{ out.print("2"); } out.close(); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
复制
运行结果:
输入已经存在的用户名,会提示用户名已存在并且不会跳转页面
少于4个多于12个的用户名长度会弹出提示框:用户名不合法
登录成功跳转页面



谢谢大家的浏览。
希望这篇文章可以帮助到大家。