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

 import javax.imageio.ImageIO;
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.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random; @WebServlet("/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 定义图片的宽高
int width = 100;
int height = 50; // 1 创建对象,在内存中生成图片(验证码图片对象)
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR); // 2 修饰图片
// 2.1 填充背景色
Graphics g = image.getGraphics(); //获取画笔对象
g.setColor(Color.pink); // 设置画笔颜色
g.fillRect(0,0,width,height); // 绘制一个矩形,给定坐标与宽高 // 2.2 画边框
g.setColor(Color.blue); // 设置画笔颜色
g.drawRect(0,0,width-1,height-1); // 给图像绘制边框 String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789";
//生成随机角标
Random ran = new Random(); for (int i = 1; i <= 4; i++) {
int index = ran.nextInt(str.length());
//获取字符
char ch = str.charAt(index);//随机字符
//2.3写验证码
g.drawString(ch+"",width/5*i,height/2);
} //2.4画干扰线
g.setColor(Color.GREEN); // 随机生成坐标点 for (int i = 0; i < 6; i++) {
int x1 = ran.nextInt(width);
int x2 = ran.nextInt(width); int y1 = ran.nextInt(height);
int y2 = ran.nextInt(height);
g.drawLine(x1,y1,x2,y2); // 画干扰线
} // 3 将图片输出到页面展示:通过response 的 字符流,将图片输出到浏览器上
ImageIO.write(image,"jpg",response.getOutputStream());
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

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

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>验证码</title> <script>
/*
点击超链接或者图片,需要换一张
1.给超链接和图片绑定单击事件 2.重新设置图片的src属性值 */
window.onload = function(){
//1.获取图片对象
var img = document.getElementById("checkCode");
//2.绑定单击事件
img.onclick = function(){
//加时间戳
var date = new Date().getTime(); img.src = "/web/checkCodeServlet?"+date;
} // 获取超链接对象
var a = document.getElementById("change"); a.onclick = img.onclick(); } </script> </head>
<body> <img id="checkCode" src="/web/checkCodeServlet" /> <a id="change" href="javascript:;">看不清换一张?</a> </body>
</html>

效果图

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

  1. 用java实现邮件发送验证码

    java实现邮件发送验证码 建议不要用qq邮箱,我使用qq邮箱直接一直给我报530错误,我一直认为我代码写的有错误或者POP3/SMTP服务没弄好.所以建议注册个别的邮箱,我就申请了个网易163邮箱瞬 ...

  2. Java基于springMVC的验证码案例

    ``` Java验证码案例(基于springMVC方式) 验证码工具类 package com.ekyb.common.util; import java.awt.Color; import java ...

  3. Java实现邮箱发送验证码

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

  4. BOM 点击触发 倒计时发送验证码案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 【工具】java发送验证码邮件

    文章目录 前言 配置邮箱服务器 代码实现 发送随机验证码与验证 后记 前言 要实现 可以设置格式,附件,抄送等功能,就跟真人操控邮箱发送邮件一样的功能,或许比较难,博主没研究,博主暂时没用到那些功能, ...

  6. JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架)

    JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架) 本来想实现 QQ 登录,有域名一直没用过,还得备案,好麻烦,只能过几天再更新啦. 先把实现的发送邮箱验证码更能更新了. 老规矩,更多内容在注释 ...

  7. Java 实现手机发送短信验证码

    Java 实现手机发送短信验证码 采用引入第三方工具的方式,网上查了半天,发现简单的实现方式便是注册一个中国网建的账号,新建账号的时候会附带赠几条免费短信,彩信 ,之后想要在使用就得花钱了.简单的操作 ...

  8. Java 之 Session 包含验证码登录案例

    需求: 1. 访问带有验证码的登录页面login.jsp 2. 用户输入用户名,密码以及验证码.  如果用户名和密码输入有误,跳转登录页面,提示:用户名或密码错误  如果验证码输入有误,跳转登录页面, ...

  9. Servlet请求头response应用简单案例

    Servlet请求头response应用简单案例:访问AServlet重定向到BServlet,5秒后跳到CServlet,并显示图片: AServlet package cn.yzu; import ...

随机推荐

  1. zookeeper核心原理全面解析

    下述各zookeeper机制的java客户端实践参考zookeeper java客户端之curator详解. 官方文档http://zookeeper.apache.org/doc/current/z ...

  2. odoo开发学习「目录」

    目录: 一.odoo介绍(发源 版本 ERP对比 优势劣势 应用场景 发展情况 社区介绍) 二.odoo设计思想 三.odoo自带模块 四.odoo开发前准备(python基础) 五.odoo环境搭建 ...

  3. Sword 正则表达式

    Metacharacters(元字符) 在正则表达式中有一些具有特殊含义的字母,被称为元字符,简言之,元字符就是描述字符的字符,它用于对字符表达式的内容.转换及各种操作信息进行描述. \ 将下一个字符 ...

  4. Flask 上传下载文件

    上传文件示例代码 #encoding:utf8 from werkzeug.utils import secure_filename from flask import Flask,render_te ...

  5. sql 连续分组判断 partition by

    partition by 会根据分类字段进行排序 加上rownum 可以形成 每组从1开始重新排序 举个例子, 我要根据时间为依据,连续出现合并为一组,统计每组在区间里的次数 ------------ ...

  6. EasyNVR网页摄像机无插件H5、谷歌Chrome直播方案中使用Onvif协议控制视频设备预置位转动

    EasyNVR支持预置位控制,包括转到指定预置位,设置指定预置位,删除指定预置位.预置位在安防领域有较为普遍的应用,可以进行很多既定位置的跳转,很方便.之前我们说过如何用Onvif协议进行设备的发现, ...

  7. Content-Type四种常见取值

    一.application/x-www-form-urlencoded 最常见 POST 提交数据的方式.浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 applica ...

  8. LODOP表格水平居中3(宽度为百分比)

    如果一个表格在css样式等中设置了固定的宽度,想要实现表格在纸张中水平居中,可根据固定的宽度设置合适的左边距,如果打印项内容在打印项宽度中居中,可以设置打印项在纸张中居中.方法1:宽度固定,纸张大小固 ...

  9. 前端传实体数组;后台list实体接收参数

    前端页面: $.ajax({ url: url, data: JSON.stringify(data), dataType: "json", contentType: " ...

  10. [ARM-Linux开发] 嵌入式 linux如何生成ko文件

    hello.c文件如下 驱动程序: #include <Linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件. #include <asm ...