验证码画布生成以及点击图片切换验证码

//这个验证码画布生成是师兄写的,不是本人写的 1 package com.didinx.common;
 2
 3 import javax.imageio.ImageIO;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.annotation.WebServlet;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import java.awt.*;
10 import java.awt.image.BufferedImage;
11 import java.io.IOException;
12 import java.util.Random;
13
14 /**
15  * 验证码
16  */
17 @WebServlet("/checkCodeServlet")
18 public class CheckCodeServlet extends HttpServlet {
19     public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
20
21         //服务器通知浏览器不要缓存
22         response.setHeader("pragma","no-cache");
23         response.setHeader("cache-control","no-cache");
24         response.setHeader("expires","0");
25
26         //在内存中创建一个长80,宽30的图片,默认黑色背景
27         //参数一:长
28         //参数二:宽
29         //参数三:颜色
30         int width = 80;
31         int height = 30;
32         BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
33
34         //获取画笔
35         Graphics g = image.getGraphics();
36         //设置画笔颜色为灰色
37         g.setColor(Color.GRAY);
38         //填充图片
39         g.fillRect(0,0, width,height);
40
41         //产生4个随机验证码,12Ey
42         String checkCode = getCheckCode();
43         //将验证码放入HttpSession中
44         request.getSession().setAttribute("code",checkCode);
45
46         //设置画笔颜色为黄色
47         g.setColor(Color.YELLOW);
48         //设置字体的小大
49         g.setFont(new Font("黑体",Font.BOLD,24));
50         //向图片上写入验证码
51         g.drawString(checkCode,15,25);
52
53         //将内存中的图片输出到浏览器
54         //参数一:图片对象
55         //参数二:图片的格式,如PNG,JPG,GIF
56         //参数三:图片输出到哪里去
57         ImageIO.write(image,"PNG",response.getOutputStream());
58     }
59     /**
60      * 产生4位随机字符串
61      */
62     private String getCheckCode() {
63         String base = "0123456789ABCDEFGabcdefg";
64         int size = base.length();
65         Random r = new Random();
66         StringBuffer sb = new StringBuffer();
67         for(int i=1;i<=4;i++){
68             //产生0到size-1的随机值
69             int index = r.nextInt(size);
70             //在base字符串中获取下标为index的字符
71             char c = base.charAt(index);
72             //将c放入到StringBuffer中去
73             sb.append(c);
74         }
75         return sb.toString();
76     }
77     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
78         this.doGet(request,response);
79     }
80 }

验证码生成效果如图:

生成验证码后,可以用进行验证码校验,可以用ajax【blur(失去焦点事件)】也可以用同步提交,与表单同时提交,验证码校验程序如下,用的同步,与表单同步提交:

  $("#loginForm").submit(function () {       //id选择器获得页面输入的用户名
        var username = $("#email").val();       //id选择器获得页面输入的密码
        var password = $("#password").val();       //id选择器获得页面输入的验证码
        var checkcode = $("#check").val();
        $.post("/userServlet?methodName=login", {
            username: username,
            password: password,
            checkcode: checkcode          //也可以用表单序列化 同样是id选择器         // var formData=$("#loginForm").serialize();         //可以在后台通过Map<String,String[]>map=request.getparameterMap获取         //
        }, function (result) {
            console.log(result);

            if (result.flag) { //alert("大帅哥");
                location.href = "/index.html";
            } else {
                //alert("小帅哥")
                $("#errorMsg").show().html(result.errorMsg)
            }
        }, "json");
        return false;
    })

后台web程序如下:

 private void login(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String checkcode = request.getParameter("checkcode");
        String code = (String) request.getSession().getAttribute("code");
        ResultInfo resultInfo = new ResultInfo();
        if (!code.equalsIgnoreCase(checkcode)) {
            resultInfo.setFlag(false);
            resultInfo.setErrorMsg("验证码错误,请重新输入");
            String str = JSON.toJSONString(resultInfo);
            response.getWriter().print(str);
            return;
        }
        UserService userService = new UserServiceImp();
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        boolean outcome = userService.login(user);
        if (outcome) {
            resultInfo.setFlag(true);

        } else {
            resultInfo.setFlag(false);
            resultInfo.setErrorMsg("用户名或密码错误!请重新输入!");
        }
        String str1 = JSON.toJSONString(resultInfo);
        response.getWriter().print(str1);

    }

②:通过鼠标点击验证码图片切换验证码:

//给图片绑定点击事件

<img src="/checkCodeServlet" onclick="changeimg(this)>;

//点击事件所调用的方法

funcion changeimg(img){

//通过获取点击时的当前时间并且拼接在url后面加载不同的图片(url参数不同,所以图片不同)

img.src="checkCodeServlet?data="+new Date.getTime();

}

原文地址:https://www.cnblogs.com/linsky/p/10356859.html

时间: 2024-10-09 13:45:08

验证码画布生成以及点击图片切换验证码的相关文章

CI 点击图片刷新验证码

<img src="<?php echo site_url('home/login/code'); ?>" onclick= this.src="<?php echo site_url('home/login/code').'/'?>"+Math.random() /> CI 点击图片刷新验证码,布布扣,bubuko.com

selector实现点击图片切换(解决常见的点击无效问题)

实现效果图:       图片未点击前                         图片点击后 selector的实现方法其实很简单,只需3步: 第一步:选择两张图片效果图放在res/drawable-hdpi中,放在mdpi也可以 第二步:在mdpi文件夹中新建xml文件,命名为selector.xml.注意名字selector后面会引用到. 在selector.xml文件中,完成代码: <?xml version="1.0" encoding="utf-8&qu

Button按钮点击图片切换效果

Button按钮图片切换效果设置. 通常在工程中用到图片按钮点击事件,大多都用ImageButton.在这里我们用 Button的点击事件,在图片的切换过程中不再通过setBackgroundResource()设置 点击效果.而是通过.xml预先设置好切换效果.在这里我们习惯把该.xml文件放到drawable文件夹下. 代码如下: //xml文件   名称这里为test_press.xml 1. android:state_pressed="true"  为点击后效果 2. and

vue 实现active点击图片切换

循环条件下: 1.点击函数@click="active(index)" 获取点击的位置 2.讲索引值传给class,点击哪一个则显示哪一个的样式 3.在data添加ins的初始值 4.使用三目运算符切换图片 三木运算符执行方法:如果index == ins为真,则显示imgItem.active的图片,否则显示imgItem.path的图片 5.书写active方法 6.效果 原文地址:https://www.cnblogs.com/zzz-knight/p/11673050.html

点击图片切换随机图片?

$(function(){ var strAlt=$("img").attr("title"); strAlt +="<br/><br/>"+$("img").attr("src"); $("divAlt").html(strAlt); }) 随机图片$(function(){ $("img").attr("src".fun

2018.7.2 如何用js实现点击图片切换为另一图片,再次点击恢复到原图片

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible"

基于jquery鼠标点击图片翻开切换效果

基于jquery鼠标点击图片翻开切换效果是一款基于jQuery+CSS3实现的点击图片切换特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="container"> <img src="images/1.jpeg" alt="1" /> <img src="images/2.jpeg" alt="2" /> <img s

a标签做锚点 图片切换

一.a标签设置锚点 1.使用id定位: <a href="#fifth">锚点跳到5F</a> <p style="height: 1300px"> 中间有很多内容 </p> <div id="fifth" style="height: 1300px"> 这里是5F的内容 </div> 这样的定位可以针对任何设置Id属性的标签来定位. 2.使用a标签的属性

.net图片验证码生成、点击刷新及验证输入是否正确

①创建ValidateCode.aspx,在ValidateCode.aspx.cs中加入如下代码.生成验证码图片,在页面上输出,输出jpeg格式. protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Bitmap b = new Bitmap(80, 30);// 图片大小 Graphics g = Graphics.FromImage(b);// 对图片操作 g.Clear(Color.Gray)