手动制作java的验证码

Web应用验证码的组成

(1)输入框

(2)显示验证码的图片

验证码的制作流程

生成验证码的容器使用 j2ee的servlet

生成图片需要的类:

(1) BufferedImage 图像数据缓冲区

(2)Graphic绘制图片

(3)Color获取颜色

(4)Random生成随机数

(5)ImageIO输入图片

具体实现流程:

(1)定义一个Servlet,用于生成验证码

(2)定已BufferedImage对象,主要作用就是制作一个图片缓冲区,作为图片的一个临时容器。

(3)获得Graphic对象,画图的“背景”,理解为"画布"

(4)通过Random生成随机数,来制作验证信息

(5)通过Graphic操作,进行具体画图

(6)信息存至session中

(7)使用ImageIO输出生成的图片,通过设置ImageIO的 write()方法中的out参数,response.getOutputStream(),将图片传至前台

(8)制作验证用的servlet,提取session中的数据进行验证(这里采用ajax异步方法)

具体代码实现(Web端验证码实例)

 <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>java验证码</title>
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
验证码输入:<input type="text" name="checkcode"> &nbsp;
<img id="codeimg" alt="验证码" src="ImageServlet">
<a href="javascript:reloadCode();">看不出清楚?</a><br/>
<input type="submit" value="提交">
<div id="info" style="color:red;"></div> <script type="text/javascript">
$(function(){
//ajax异步传验证码至后台
$("input[type=submit]").click(function(){
$.post("CheckCode",
{"code":$("input[name=checkcode]").val()},
function(data,textStatus)
{
console.log(textStatus);
$("#info").html(data);
},"text");
});
})
//js刷新,重新请求页面,获得新的验证码
function reloadCode(){
var time = new Date().getTime();//创建不同的时间
$("#codeimg").attr("src","ImageServlet?time="+time);//因为时间参数不同,请求重新
}
</script>
</body>
</html>

ImageServlet类(验证码生成部分)

@WebServlet("/ImageServlet")
public class ImageServlet extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public ImageServlet() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
BufferedImage bimg = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);
Graphics g = bimg.getGraphics();
Color color = new Color(200,151,255);//颜色生成
g.setColor(color);
g.fillRect(0, 0, 68, 22);
char[] ch="ABCDEFGHJIKLMNOPQRSTUVWXYZ0123456789".toCharArray();//获得一个含有字母和数字的数组,后续随机从中获取字符
Random random = new Random(); //创建随机数
int len = ch.length,index;
StringBuffer sBuffer = new StringBuffer(); //循环产生4个随机字符
for(int i = 0 ;i<4;i++)
{
index = random.nextInt(len);//产生随机字母与数字
g.setColor(new Color(random.nextInt(88),random.nextInt(120),random.nextInt(90)));//创建随机颜色
g.drawString(ch[index]+"", (i)*15+3, 18);
sBuffer.append(ch[index]);//将随机获取的字符放置缓冲串中
}
request.getSession().setAttribute("newCode", sBuffer.toString());//存至session便于后续验证
ImageIO.write(bimg, "JPG", response.getOutputStream());//通过ImageIO输出图片,并传至前台
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }

CheckCode(验证码验证servlet)

@WebServlet("/CheckCode")
public class CheckCode extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public CheckCode() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setCharacterEncoding("utf-8");
String code = request.getParameter("code").toUpperCase();//获取传来验证码并进行大小写转换
String result=null;
if(request.getSession().getAttribute("newCode").equals(code))
{
result="验证成功!";
response.getWriter().append(result);
}
else {
result="验证码错误!";
response.getWriter().append(result);
}
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }

java制作验证码(java验证码小程序)的更多相关文章

  1. Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战

    Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战 说明:Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战,优惠券是一种常见的促销方式,在规定的周期内购买对应商品类型和额度的商品 ...

  2. Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战

    Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战 说明:Java生鲜电商平台拼团是拉新引流的利器,将拼团运用到极致的就是拼多多,前期通过选取性价比高.实用性强的商品进行拼团,在社交圈(主要 ...

  3. Spring Security 一键接入验证码登录和小程序登录

    最近实现了一个多端登录的Spring Security组件,用起来非常丝滑,开箱即用,可插拔,而且灵活性非常强.我觉得能满足大部分场景的需要.目前完成了手机号验证码和微信小程序两种自定义登录,加上默认 ...

  4. java多线程实现卖票小程序

    package shb.java.demo; /** * 多线程测试卖票小程序. * @Package:shb.java.demo * @Description: * @author shaobn * ...

  5. 基于JAVA网络编程的聊天小程序

    package com.neusoft.edu.socket; import java.io.BufferedReader; import java.io.IOException; import ja ...

  6. appium+java(五)微信小程序自动化测试实践

    前言: 上一篇<appium+java(四)微信公众号自动化测试实践>中,尝试使用appium实现微信公众号自动化测试,接着尝试小程序自动化,以学院小程序为例 准备工作 1.java-cl ...

  7. java实现课堂随机点名小程序

    通过jdbc连接数据库实现读取学生花名册进行随机点名! ~jdbc连接mysql数据库  ||  注释部分代码可通过读取.txt文档实现显示学生信息 ~通过点击开始按钮实现界面中间标签不断更新学生信息 ...

  8. 2018最新版 手机号、验证码正则表达式 jq + 小程序

    HTML: <!-- 表单 --> <input class="weui-input" id="tel" type="tel&quo ...

  9. java服务端实现微信小程序内容安全

    请参考微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.i ...

  10. JAVA实现C/S结构小程序

    程序功能: 客户端向服务器发送一个本地磁盘中的文件, 服务器程序接受后保存在其他位置. 客户端实现步骤: 创建一个客户端对象Socket,构造方法中绑定服务器的IP地址 和 端口号 使用Socket对 ...

随机推荐

  1. centos 安装atom 笔记

    一.安装atom  "To install Atom on Linux, you can download a Debian package or RPM package either fr ...

  2. python全栈学习--day5

    字典 特点:字典是python中唯一的映射类型,采用键值对(key-value) 的形式存数据. 存储大量的数据,是关系型数据,查询数据快. 字典初始说明: 遍历字典从列表开始,列表是从头便利到尾的. ...

  3. React Native 轻松集成分享功能(Android 篇)

    关于推送的集成请参考这篇文章,关于统计的集成请参考这篇文章,本篇文章将引导你集成分享功能. 在集成插件之前,需要在各大开放平台上成功注册应用,并通过审核(支持 3 个可选的主流平台).支持的平台如下: ...

  4. Kettle 初始配置数据量类型资源库

    PS:有段时间不使用Kettle了,但总遇到小伙伴问起,写一篇记录下. 文档使用版本:KETTLE 7.0 Kettle资源库可分为文件与数据库,文件型只需要配置好存放路径就行,这边介绍的是配置数据库 ...

  5. Beta No.1

    一.今日任务 重新熟悉整体项目 对整个项目在未来的beta冲刺中进程有一个合理的规划 由于我们送出的是一个负责前端的成员,引入的也是一个负责前端工作的女生,(女生做起美工比起男生更加得心应手吧)所以我 ...

  6. Software Engineering-HW8 个人总结

    Software Engineering-HW8 个人总结 2017282110264 李世钰 一.请参考第一次作业,当初你对课程的承诺和期望都兑现了吗? 大致实现了.经过了最后的团队项目,基本了解一 ...

  7. python的Virtualenv

    Virtualenv 虚拟的 Python 环境(简称 venv) 是一个能帮助你在本地目录安装不同版本的 Python 模块的 Python 环境,你可以不再需要在你系统中安装所有东西就能开发并测试 ...

  8. Flask 扩展 自定义扩展

    创建一个为视图访问加日志的扩展Flask-Logging,并从中了解到写Flask扩展的规范. 创建工程 先创建一个工程,目录结构如下: flask-logging/ ├ LICENSE # 授权说明 ...

  9. visualVM使用jstatd和jmx连接远程jvm及遇到的问题解决

    visualVM使用jstatd和jmx连接远程jvm及遇到的问题解决 JMX方式: 编辑Tomact里bin目录的catalina.sh . 在其头部加入 JAVA_OPTS=" -Dco ...

  10. NYOJ 炫舞家st

    #include <iostream>#include <cstring>#include <algorithm>using namespace std; cons ...