Java 之 Response 发送验证码案例

定义一个 Servlet 用来在内存中生成 二维码图片,并向浏览器页面输出。

 1 import javax.imageio.ImageIO;
 2 import javax.servlet.ServletException;
 3 import javax.servlet.annotation.WebServlet;
 4 import javax.servlet.http.HttpServlet;
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 import java.awt.*;
 8 import java.awt.image.BufferedImage;
 9 import java.io.IOException;
10 import java.util.Random;
11
12 @WebServlet("/checkCodeServlet")
13 public class CheckCodeServlet extends HttpServlet {
14     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
15
16         // 定义图片的宽高
17         int width = 100;
18         int height = 50;
19
20         // 1 创建对象,在内存中生成图片(验证码图片对象)
21         BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
22
23         // 2 修饰图片
24         // 2.1 填充背景色
25         Graphics g = image.getGraphics(); //获取画笔对象
26         g.setColor(Color.pink);  // 设置画笔颜色
27         g.fillRect(0,0,width,height);  // 绘制一个矩形,给定坐标与宽高
28
29         // 2.2 画边框
30         g.setColor(Color.blue);    // 设置画笔颜色
31         g.drawRect(0,0,width-1,height-1);  // 给图像绘制边框
32
33         String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789";
34         //生成随机角标
35         Random ran = new Random();
36
37         for (int i = 1; i <= 4; i++) {
38             int index = ran.nextInt(str.length());
39             //获取字符
40             char ch = str.charAt(index);//随机字符
41             //2.3写验证码
42             g.drawString(ch+"",width/5*i,height/2);
43         }
44
45         //2.4画干扰线
46         g.setColor(Color.GREEN);
47
48         // 随机生成坐标点
49
50         for (int i = 0; i < 6; i++) {
51             int x1 = ran.nextInt(width);
52             int x2 = ran.nextInt(width);
53
54             int y1 = ran.nextInt(height);
55             int y2 = ran.nextInt(height);
56             g.drawLine(x1,y1,x2,y2);  // 画干扰线
57         }
58
59
60         // 3 将图片输出到页面展示:通过response 的 字符流,将图片输出到浏览器上
61         ImageIO.write(image,"jpg",response.getOutputStream());
62     }
63
64     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
65         this.doPost(request, response);
66     }
67 }

定义一个web页面,用来查看验证码,可以刷新验证码。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>验证码</title>
 6
 7     <script>
 8         /*
 9                 点击超链接或者图片,需要换一张
10                 1.给超链接和图片绑定单击事件
11
12                 2.重新设置图片的src属性值
13
14          */
15         window.onload = function(){
16             //1.获取图片对象
17             var img = document.getElementById("checkCode");
18             //2.绑定单击事件
19             img.onclick = function(){
20                 //加时间戳
21                 var date = new Date().getTime();
22
23                 img.src = "/web/checkCodeServlet?"+date;
24             }
25
26             // 获取超链接对象
27             var a = document.getElementById("change");
28
29             a.onclick = img.onclick();
30
31         }
32
33
34     </script>
35
36
37 </head>
38 <body>
39
40
41 <img id="checkCode" src="/web/checkCodeServlet" />
42
43 <a id="change" href="javascript:;">看不清换一张?</a>
44
45 </body>
46 </html>

效果图

原文地址:https://www.cnblogs.com/niujifei/p/11620996.html

时间: 2024-07-30 19:51:55

Java 之 Response 发送验证码案例的相关文章

Java基于springMVC的验证码案例

1 ``` 2 Java验证码案例(基于springMVC方式) 3 4 验证码工具类 5 package com.ekyb.common.util; 6 7 import java.awt.Color; 8 import java.awt.Font; 9 import java.awt.Graphics; 10 11 import java.awt.image.BufferedImage; 12 import java.util.ArrayList; 13 import java.util.A

java实现邮件发送验证码

建议不要用qq邮箱,我使用qq邮箱直接一直给我报530错误,我一直认为我代码写的有错误或者POP3/SMTP服务没弄好.所以建议注册个别的邮箱,我就申请了个网易163邮箱瞬间就好了.所以去申请个别的邮箱吧. 用邮件发送验证码,首先需要jar包.我写的代码只需要mail.jar,没有的话可以给我留言,我给你发个. 废话不说了直接上代码(这个代码就是个工具类直接用就好) package com.itheima.utils; import java.util.Properties; import ja

Java实现邮箱发送验证码

第一步,导入JAR包,JAR包下载地址[http://pan.baidu.com/s/1kVRvGyF] 正式代码: 首先书写一个工具类: MailUtil import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties; /** * 邮件工具类 */ public class MailUtil

Response验证码案例 January 27,2020

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>验证码点击切换</title> <script> /* 分析: 点击超链接或者图片,需要换一张 1.给超链接和图片绑定单击事件 2.重新设置图片的src属性值 */ window.onload=function () {//加载完毕后 var i

用Java redis 实现发送手机验证码的功能

要求: 1.输入手机号,点击发送后随机生成6位数字码,2分钟有效 2.输入验证码,点击验证,返回成功或失败 3.每个手机号每天只能输入3次 import redis.clients.jedis.Jedis; import java.util.Random; public class ValidationTest { public static void main(String[] args) { //getValidation("15005076571"); //checkValida

使用中国网建实现Java向手机发送短信的功能

公司需要使用向指定手机发送验证码的功能,在网上搜了一下,有使用'短信猫'的,有使用WebService的,有使用第三方的,我使用的是中国网建提供的API来实现: 中国网建注册送五条短信和三条彩信做测试,这就足够了,今天公司刚买了几千条做测试! 首先是编码的选择: GBK编码发送接口地址: http://gbk.sms.webchinese.cn/?Uid=本站用户名&Key=接口安全秘钥&smsMob=手机号码&smsText=验证码:8888 UTF-8编码发送接口地址: htt

asp.net一般处理程序(.ashx)动态生成验证码案例。

{使用一般处理程序动态生成验证码} 1.新建WebSite项目,添加一般处理程序命名为  yzm.ashx,添加如下代码: public void ProcessRequest(HttpContext context)    {   //将context.Response.ContentType = "text/plain";修改为context.Response.ContentType = "image/JPEG";        context.Response

Java调用SMSLib发送短信详解

项目中需要用到发送短信功能,之前没做过这方面,找人咨询了一下,也网上查了查,发现并不是很复杂.目前项目已经完成了,做个记录以备后用.程序中发送短信主要有4种方法: 1.向当地的运营商申请网关,不需要额外的设备,利用对方提供的 API调用程序发送短信,适用于大型的通信公司.稳定,速度快,适合短信量特别大的需求,需要连接到运营商的网络中,不适合内网项目. 2.短信猫发送短信,借助像 GSM MODEM之类的设备(支持AT指令的手机也行),通过数据线连接电脑来发送短信,这种方法比较适用于小公司及个人.

nodejs通过 智验科技API 向用户发送验证码

在学习上不肯钻研的人是不会提出问题的,在事业上缺乏突破力的人是不会有所创新的. 先简单说一下今天的事情,在一个订单页面的开发过程中,我突发奇想的希望能通过前端的技术向用户发送验证码. 于是我整个晚上都着力于这个需求的思路与实现方式: 1:验证码的数据肯定不能存在于html页面以及js文件中,我觉得这是一个安全性的问题,所以验证码数据应该由后台自动生成,那么在我应该使用哪种后端语言? 2:在日常生活中,发送短信肯定是有费用的,所以我们肯定是不可能通过一两段代码就免费的将验证码发送到用户手机的,那么