
补充:Servlet处理异步请求一、使用jQuery实现异步登录1.登录页面将jquery-3.4.1.min.js拷入项目的WebContent目录下的自建文件夹js中。如果用户曾经登录过,可从cookie中取出用户名信息填入用户名文本框。登录成功后,可跳转到index.html:如果失败,则给出错误提示,且重新登录。登录异步从服务器端获取Cookie信息$(document).ready(function()(/*/ /服务器端传过来的是text数据$.get("GetCookieServlet",(,(result)=>f$("#username").val(result);$("#userpwd").focus();,"text");“*///服务器端传过来的是JSON数据$.get("GetCookieServlet",{),(result)=>{if(result =null)f$("#username").val("");$("#userpwd").val("");lelse($("#username").val(result.username);$("#userpwd").val(result.userpwd);Y$("#username").focus();},"json");7);用户登录用户名:/p>密码:/p>登录function login()tvarusername=$("#username").val();//取到页面中元素的值var userpwd = $("#userpwd").val();$.ajax((url:"LoginServlet”,//访间地址。即服务器端处理请求的地址-
1 补充:Servlet 处理异步请求 一、使用 jQuery 实现异步登录 1. 登录页面 将 jquery-3.4.1.min.js 拷入项目的 WebContent 目录下的自建文件夹 js 中。 如果用户曾经登录过,可从 cookie 中取出用户名信息填入用户名文本框。 登录成功后,可跳转到 index.html;如果失败,则给出错误提示,且重新登录。 登录 $(document).ready(function(){ /* //服务器端传过来的是 text 数据 $.get("GetCookieServlet", {}, (result)=>{ $("#username").val(result); $("#userpwd").focus(); }, "text"); */ //服务器端传过来的是 JSON 数据 $.get("GetCookieServlet", {}, (result)=>{ if(result == null){ $("#username").val(""); $("#userpwd").val(""); }else{ $("#username").val(result.username); $("#userpwd").val(result.userpwd); } $("#username").focus(); }, "json"); }); 用户登录 用户名: 密码: 登录 function login(){ var username = $("#username").val(); //取到页面中元素的值 var userpwd = $("#userpwd").val(); $.ajax({ url: "LoginServlet", //访问地址。即服务器端处理请求的地址

data:(username,userpwd),//携带的数据dataType:"text",/希望后台传回来什么样的数据type:"post",//什么请求类型用户登录success(result)//成功用户名:amif(result.trim() == "yes")(电码:l/alert("登录成功!");豆浆location.href="index.html";用户名或密码输入错误lelse(//alert("用户名或密码输入错误!")$("#unerror").html("用户名或密码输入错误");$("#username").val("");$("#userpwd").val("");$s("#username").focus();[乐新+子→C@ localhost:8080/chap04_servlet ajax/login.htmt1,金古度海净主肉五学精国家中小学智尊国城中智#error失败7用户登录1)7用户名:adml密码:请输入你8价爱动2.LoginServlet的实现package servlet ajax;import java.io.IOException;import java.io.PrintWriter,import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet:import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletimport javax.servlet.http.HttpServletRequest,importjavax.servlet.http.HttpServletResponse:8处理前端的异步登录请求?@WebServlet("/LoginServlet")public class LoginServlet extends HttpServlet !private static final long serialVersionUID=IL,protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptiondoPost(request, response);protected void doPost(HttpServletRequest request, HttpServletResponse response)throwsServletException,IOException!request.setCharacterEncoding("UTF-8"),Stringusername=request.getParameter("username")String userpwd=request.getParameter("userpwd"),String rememberMeString = request.getParameter("rememberMe");response.setContentType("text/html"),2
2 data: {username, userpwd}, //携带的数据 dataType: "text", //希望后台传回来什么样的数据 type: "post", //什么请求类型 success(result){ //成功 if(result.trim() == "yes"){ //alert("登录成功!"); location.href="index.html"; }else{ //alert("用户名或密码输入错误!"); $("#unerror").html("用户名或密码输入错误"); $("#username").val(""); $("#userpwd").val(""); $("#username").focus(); } }, error(){ //失败 } }) } 2. LoginServlet 的实现 package servlet_ajax; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 处理前端的异步登录请求 */ @WebServlet("/LoginServlet") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String username = request.getParameter("username"); String userpwd = request.getParameter("userpwd"); String rememberMeString = request.getParameter("rememberMe"); response.setContentType("text/html");

response.setCharacterEncoding("UTF-8")PrintWriterout=response.getWriter(),if(("admin").equals(username)&&("123").equals(userpwd))Cookie cookiel =newCookie("username",username);cookiel.setMaxAge(Integer.MAX VALUE),response.addCookie(cookiel):if("on".equals(rememberMeString))(Cookie cookie2 =new Cookie("userpwd",userpwdstring);cookie2.setMaxAge(Integer.MAX_VALUE);response.addcookie(cookie2);request.getSession(.setAttribute("username",username);out.println("yes"),lelse:out.println("no"),113.GetCookieServlet的实现使用第三方类json-lib-2.1-jdk15.jar及相关包,其中JSONObject类中的方法可实现JSON对象与字符串的转换。package servlet ajax;import java.io.IoException;import java.io.Printwriter;importjavax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;importiavax.serylet.http.HttpSeryletReguest:importjavax.servlet.http.HttpServletResponse;/**获取cookie信息*@WebServlet("/GetCookieServlet")public class GetcookieServlet extends HttpServlet (private static final long serialVersionUID =1L;protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IoException(Cookie[] cookies = request.getCookies();String username = null;String userpwd = null;if(cookies!=null)(for(Cookie c:cookies){if("username".equals(c.getName()))(username = c.getValue();Jelse if("userpwd".equals(c.getName()))(userpwd = c.getValue();
3 response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); if (("admin").equals(username) && ("123").equals(userpwd)) { Cookie cookie1 = new Cookie("username", username); cookie1.setMaxAge(Integer.MAX_VALUE); response.addCookie(cookie1); if("on".equals(rememberMeString)) { Cookie cookie2 = new Cookie("userpwd", userpwdString); cookie2.setMaxAge(Integer.MAX_VALUE); response.addCookie(cookie2); } request.getSession().setAttribute("username", username); out.println("yes"); }else { out.println("no"); } } } 3. GetCookieServlet 的实现 使用第三方类 json-lib-2.1-jdk15.jar 及相关包,其中 JSONObject 类中的方法可实现 JSON 对象与 字符串的转换。 package servlet_ajax; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 获取 cookie 信息 */ @WebServlet("/GetCookieServlet") public class GetCookieServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie[] cookies = request.getCookies(); String username = null; String userpwd = null; if(cookies != null) { for(Cookie c: cookies) { if("username".equals(c.getName())) { username = c.getValue(); }else if("userpwd".equals(c.getName())){ userpwd = c.getValue();

break;1Printwriterout =response.getwriter);//返回text内容//out.print(username);//返回JSON内容JsoNObjectjsonObject =new JsoNObject();jsonobject.put("username",username);jsonobject.put("userpwd",userpwd);out.print(jsonObject);+protected void doPost(HttpServletRequest request,HttpServletResponseresponse)throwsServletException,IoException(doGet(request,response);7二、注册时检查用户名是否重名1.注册页面用户名:/span/p>密码:注册/p>(用户名:dmm该用户名已经存在!if(result.trim()--"true")(密码:$("#tip").text("该用户名已经存在!");住s("#register").prop("disabled",true);lelsef$("#tip").text("该用户名可用");$("#register").prop("disabled",false);"text");function regist()tvar regname = $("#regname").val();var userpwd = $("#userpwd").val();$.ajax(turl:"RegistServlet",type:"post",data:[regname,userpwd),dataType:"text",success(result)(if(result.trim()=="yes")(4
4 break; } } } PrintWriter out = response.getWriter(); //返回 text 内容 //out.print(username); //返回 JSON 内容 JSONObject jsonObject = new JSONObject(); jsonObject.put("username", username); jsonObject.put("userpwd", userpwd); out.print(jsonObject); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } 二、注册时检查用户名是否重名 1. 注册页面 用户名: 密码: 注册 function yz(){ let regname = $("#regname").val(); $.get("CheckServlet", {regname}, (result)=>{ if(result.trim() == "true"){ $("#tip").text("该用户名已经存在!"); $("#register").prop("disabled", true); }else{ $("#tip").text("该用户名可用"); $("#register").prop("disabled", false); } }, "text"); } function regist(){ var regname = $("#regname").val(); var userpwd = $("#userpwd").val(); $.ajax({ url: "RegistServlet", type: "post", data: {regname, userpwd}, dataType: "text", success(result){ if(result.trim() == "yes"){

alert("注册成功!");location.href ="login_ajax.html";7J,error()11);12.CheckServlet的实现package servlet ajax,importjava.io.IOException,import java.io.PrintWriter,import javax.servlet.ServletException;importjavax.servlet.annotation.WebServlet,importjavax.servlet.http.HttpServlet,import javax.servlet.http.HttpServletRequest,importjavax.servlet.http.HttpServletResponse;import java.util.ArrayList,import java.util.List,净本查询用户名是否已经存在*/@WebServlet("/CheckServlet")public class CheckServlet extends HttpServlet !private static final long serialVersionUID=IL//使用list保存已注册的用户名Listuserlist=newArrayList0),@Overridepublic void initOthrows ServletExceptionuserlist.add("admin"),userlist.add("阿飞"),userlist.add("张三")userlist.add("阿强"),userlist.add("思思")1protectedvoiddoGet(HttpServletRequestHttpServletResponsethrowsrequestresponse)ServletException,IOExceptionString regname = request.getParameter("regname");boolean f= false;for(String s:userlist)if(s.equals(regname))f=true,break,PrintWriterout=response.getWriterO;
5 alert("注册成功!"); location.href = "login_ajax.html"; } }, error(){ } }); } 2. CheckServlet 的实现 package servlet_ajax; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; /** * 查询用户名是否已经存在 */ @WebServlet("/CheckServlet") public class CheckServlet extends HttpServlet { private static final long serialVersionUID = 1L; //使用 list 保存已注册的用户名 List userlist = new ArrayList<>(); @Override public void init() throws ServletException { userlist.add("admin"); userlist.add("阿飞"); userlist.add("张三"); userlist.add("阿强"); userlist.add("思思"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String regname = request.getParameter("regname"); boolean f = false; for(String s: userlist){ if(s.equals(regname)){ f = true; break; } } PrintWriter out = response.getWriter();

out.print(f),protectedvoid doPost(HttpServletRequest request,HttpServletResponseresponse)throwsServletException,IOExceptiondoGet(request, response);福处理注册请求的RegistServletjava3.request.setCharacterEncoding("utf-8");String regname = request.getParameter("regname");String userpwd =request.getParameter("userpwd");// Useruser=new User(regname,userpwd);//向数据库中写入注册用户信息response.setContentType("text/html");response.setCharacterEncoding("UTF-8");Printwriter out - response.getwriter();out.println("yes");out.close();6
6 out.print(f); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } 3. 处理注册请求的 RegistServlet.java request.setCharacterEncoding("utf-8"); String regname = request.getParameter("regname"); String userpwd = request.getParameter("userpwd"); // User user = new User(regname, userpwd); // 向数据库中写入注册用户信息 response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); out.println("yes"); out.close();