IT兄弟连 JavaWeb教程 jQuery对AJAX的支持经典案例

案例需求:编写用户登陆页面的验证码模块,在用户进行登陆时,输入验证码后不需要点击提交按钮,使用AJAX异步地向服务器发送验证验证码的请求。如果验证码正确,可以点击提交按钮,如果验证码输入错误,提示用户。如果用户看不清验证码,点击验证码还可以刷新出新的验证码。

案例实现:

验证码原理:当页面请求一个验证码的Servlet时,这个Servlet会把数据以图片的形式传给客户端,并把数据以字符串的形式存入了session中。当用户以图片为标准输入对应的验证码并发送给对应的用来验证验证码的Servlet时,验证验证码的Servlet收到用户输入的数据,并从session取出对应的验证码字符进行验证即可。

●  定义向客户端发送验证码的Servlet。详细代码如下:

package com.xdl.servlet;

import com.sun.image.codec.jpeg.JPEGCodec;

import com.sun.image.codec.jpeg.JPEGImageEncoder;

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 javax.servlet.http.HttpSession;

import java.awt.*;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.io.OutputStream;

import java.util.Random;

@WebServlet("/checkCode")

public class CheckCode extends HttpServlet {

public void service(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

response.setContentType("image/jpeg");

BufferedImage image = new BufferedImage

(60, 20, BufferedImage. TYPE_INT_RGB);

Graphics g = image.getGraphics();

Random r = new Random();

g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));

g.fillRect(0, 0, 60, 20);

g.setColor(new Color(0,0,0));

String number = String.valueOf(r.nextInt(99999));

HttpSession session = request.getSession();

session.setAttribute("number", number);

g.drawString(number, 5, 15);

g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));

g.drawLine(r.nextInt(60), r.nextInt(20), r.nextInt(60), r.nextInt(20));

OutputStream os = response.getOutputStream();

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);

encoder.encode(image);

}

}

●  定义用来验证验证码准确性的Servlet。详细代码如下:

package com.xdl.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.HashMap;

import java.util.Map;

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 net.sf.json.JSONObject;

@WebServlet("/validateCheckCode")

public class ValidateCheckCode extends HttpServlet {

protected void service(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

String  code  = request.getParameter("code");

String   answer = (String)request.getSession().getAttribute("number");

Map<String,Object>  info = new HashMap<>();

if(code.equals(answer)){

info.put("state", 1);

info.put("msg", "验证码正确");

}else{

info.put("state", 0);

info.put("msg", "验证码不正确");

}

String jsonStr = JSONObject.fromObject(info).toString();

PrintWriter  pw  = response.getWriter();

pw.write(jsonStr);

pw.close();

}

}

●  编写客户端页面,包括用户名输入框、密码输入框、以及验证码输入框和提交按钮。详细代码如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Title</title>

<script type="text/javascript" src="js/jquery-3.3.1.js"></script>

<script type="text/javascript">

function validCode(){

$.ajax({

url:‘validateCheckCode‘,

type:‘post‘,

data:{code:$("#code").val()},

dataType:‘json‘,

success:function(message){

if(message.state==1){

$("#loginBtn").removeAttr("disabled");

}else{

$("#loginBtn").attr(‘disabled‘,‘disabled‘);

}

$("#sp1").html(message.msg);

}

});

}

function  changeCode(){

$("#imgcode").attr("src","checkCode.do?r="+Math.random());

$("#loginBtn").attr(‘disabled‘,‘disabled‘);

}

</script>

</head>

<body>

账号:<input type="text" placeholder="请输入账号" name="account_no"> <br>

密码:<input type="password" placeholder="请输入密码" name="account_password">

<br>

验证码:<input type="text" name="check_code" id="code" placeholder="请输入验证码" onblur="validCode()" ><img src="checkCode.do" id="imgcode" onclick= "changeCode()"><br>

<span id="sp1"></span><br>

<input type="submit" id="loginBtn" value="登录" disabled="disabled">

</body>

</html>

目前全部的代码已经编写完成,我们打开Tomcat服务器,在浏览器中输入http://localhost:8080/checkcode/login.html。浏览器将出现如图2所示的页面。

此时是无法点击登陆按钮的,因为我们的验证码没有通过验证,现在我们输入正确的验证码,然后将鼠标移出验证码输入框。

图2  login.html

图3  输入了正确的验证码

我们输入了正确的验证码,并且服务器也已经验证通过了,现在我们就可以点击登陆按钮了。

现在我们输入错误的验证码来看看页面上会出现什么效果。

可以看到我们输入了错误的验证码,服务器检查没有通过,登陆按钮还是不可点击的。

有时我们页面上面的验证码不清晰,不能很好的辨认其中的字符,所以在我们的登陆页面中,为验证码图片添加了一个单击事件,当点击验证码图片时,页面会使用Ajax重新向服务器发送新的请求来刷新验证码。

图4  输入错误的验证码后,提示验证码

图5  使用AJAX向服务端重新获取验证码

不正确,并且登陆按钮无法点击

原文地址:https://www.cnblogs.com/itxdl/p/10995877.html

时间: 2024-11-09 18:12:07

IT兄弟连 JavaWeb教程 jQuery对AJAX的支持经典案例的相关文章

IT兄弟连 JavaWeb教程 jQuery对AJAX的支持经典面试题

1.简述对Ajax的理解 AJAX是Asynchronous JavaScript and Xml异步的JavaScript和Xml.它一种用来改善用户体验的技术其实质是使用XMLHttpRequest对象异步地向服务器发请求.服务器返回部分数据,而不是-个完整的页面,以页面无刷新的效果更改页面中的局部内容. 2.什么是JSON,在什么情况下使用? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解析和生成.JSON采用

IT兄弟连 JavaWeb教程 jQuery对AJAX的支持

jQuery对AJAX的支持 jQuery对Ajax请求的创建.发送.响应.注册数据处理函数.JSON的解析和缓存以及传参等都进行了相应的封装,同时也考虑了浏览器的兼容性问题. jQuery中对AJAX支持核心函数 jQuery中对Ajax支持的核心函数是$.ajax()函数,$.ajax()函数的代码结构如下: $.ajax({ url : 请求地址, type : 请求方式, async : 默认为true,表示异步请求,false表示同步请求, data : 请求参数, dataType

【JavaWeb】jQuery对Ajax的支持

jQuery对Ajax的支持 jQuery对Ajax进行封装,提供了$.ajax()方法 语法:$.ajax(options) 常用设置项 说明 url 发送请求地址 type 请求类型get|post data 向服务器传递的参数 dataType 服务器响应的数据类型text|json|xml|html|jsonp|script success 接收响应时的处理函数 error 请求失败时的处理函数 实例代码 MusicServlet.java package demo; import ja

IT兄弟连 JavaWeb教程 jQuery中其他AJAX支持的函数

● $.get()函数 $.get(url,data,function,dataType);参数说明如下: url:请求地址 data:请求参数 dataType:服务器返回的数据类型 function:服务器正常处理时执行的回调函数 ● $.post()函数 $.post(url,data,function,dataType);参数说明如下: url:请求地址 data:请求参数 dataType:服务器返回的数据类型 function:服务器正常处理时执行的回调函数 ● $.getJSON(

JavaScript之Ajax-6 Ajax的增强操作(jQuery对Ajax的支持、表单操作)

一.jQuery对Ajax的支持 load() - 作用: 将服务器返回的数据字节添加到符合要求的节点之上 - 用法: $obj.load(请求地址,请求参数) - 请求参数 - "username=tom&age=22" - {'username':'tom','age':22} - 有请求参数时,load方法发送POST请求,否则发送GET请求 get() - 作用: 发送GET类型的请求 - 用法: $.get(请求地址,请求参数,回调函数,服务器返回的数据类型) - 说

JQuery中Ajax详细参数使用案例

JQuery中Ajax详细参数使用案例 参考文档:http://www.jb51.net/shouce/jquery1.82/ 参考文档:http://jquery.cuishifeng.cn/jQuery.Ajax.html 注意事项 本案例演示测试了官方文档中不常用的参数使用方法 前端代码 function theFileUploadGai() {//执行上传 var zhi={ "a1":["你好啊","こんにちは","hello

IT兄弟连 JavaWeb教程 使用AJAX发送POST请求并获取响应

POST请求用于向服务器发送应该被保存的数据,因此POST请求天然比GET请求多需要一份需要被保存的数据.那么这些数据应该放在何处呢?毕竟,我们的open()方法接收的三个参数都没有合适的位置. 答案是需要发送的数据会作为send()方法的参数最终被发往服务器,该数据可以是任意大小,任意类型. 使用Ajax发送POST请求需要使用setRequestHeader()方法设置请求头,代码如下: function PostRequest(){ var xhr = null; if(window.XM

IT兄弟连 JavaWeb教程 AJAX中参数传递问题

使用Ajax发送GET请求并需要传递参数时,直接在URL地址后拼接参数,格式如下: xhr.open('get','请求路径?参数名1=参数值1&参数名2=参数值2...',true); 使用Ajax发送POSt请求并需要传递参数时,也可以直接在URL地址后拼接参数,这样的话和发送GET请求时没有区别,也可以在send方法中进行参数的传递,而且建议使用send方法进行参数传递,并且需要对请求头做特殊设置,设置Content-Type为URL编码方式,格式如下: xhr.setRequestHea

IT兄弟连 JavaWeb教程 AJAX常见问题

1 中文乱码问题 ● POST提交乱码 乱码原因:所有浏览器对Ajax请求参数都使用UTF-8进行编码,而服务器默认使用ISO-8859-1去解码,所以产生乱码. 解决方法:在服务器接收请求参数前设置解析编码. request.setCharacterEncoding("UTF-8"); ● GET提交乱码 乱码原因:IE浏览器发送请求时,会默认使用GBK字符集对请求参数进行编码,而其他浏览器会使用UTF-8.服务器默认情况下使用的时ISO-8859-1进行解码,所以产生乱码. 解决方