java制作验证码(java验证码小程序)
手动制作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">
<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验证码小程序)的更多相关文章
- Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战
Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战 说明:Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战,优惠券是一种常见的促销方式,在规定的周期内购买对应商品类型和额度的商品 ...
- Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战
Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战 说明:Java生鲜电商平台拼团是拉新引流的利器,将拼团运用到极致的就是拼多多,前期通过选取性价比高.实用性强的商品进行拼团,在社交圈(主要 ...
- Spring Security 一键接入验证码登录和小程序登录
最近实现了一个多端登录的Spring Security组件,用起来非常丝滑,开箱即用,可插拔,而且灵活性非常强.我觉得能满足大部分场景的需要.目前完成了手机号验证码和微信小程序两种自定义登录,加上默认 ...
- java多线程实现卖票小程序
package shb.java.demo; /** * 多线程测试卖票小程序. * @Package:shb.java.demo * @Description: * @author shaobn * ...
- 基于JAVA网络编程的聊天小程序
package com.neusoft.edu.socket; import java.io.BufferedReader; import java.io.IOException; import ja ...
- appium+java(五)微信小程序自动化测试实践
前言: 上一篇<appium+java(四)微信公众号自动化测试实践>中,尝试使用appium实现微信公众号自动化测试,接着尝试小程序自动化,以学院小程序为例 准备工作 1.java-cl ...
- java实现课堂随机点名小程序
通过jdbc连接数据库实现读取学生花名册进行随机点名! ~jdbc连接mysql数据库 || 注释部分代码可通过读取.txt文档实现显示学生信息 ~通过点击开始按钮实现界面中间标签不断更新学生信息 ...
- 2018最新版 手机号、验证码正则表达式 jq + 小程序
HTML: <!-- 表单 --> <input class="weui-input" id="tel" type="tel&quo ...
- java服务端实现微信小程序内容安全
请参考微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.i ...
- JAVA实现C/S结构小程序
程序功能: 客户端向服务器发送一个本地磁盘中的文件, 服务器程序接受后保存在其他位置. 客户端实现步骤: 创建一个客户端对象Socket,构造方法中绑定服务器的IP地址 和 端口号 使用Socket对 ...
随机推荐
- 使用linux下的crontab定时任务跑定时脚本
使用linux下的crontab定时任务跑定时脚本 tags:定时任务 定时脚本 crontab linux定时脚本 linux 引言:应该有许多人曾经很好奇一些定时脚本是怎么做出来的.我们这次就来说 ...
- 通过cmd命令行连接mysql数据库
找到 mysqld.exe所在的路径 使用cd切换到msyqld.exe路径下 输入mysql连接命令,格式如下 Mysql -P 端口号 -h mysql主机名\ip -u root (用户) ...
- C语言函数嵌套调用作业
一.实验作业 1.1 PTA题目:6-4 十进制转换二进制 设计思路 如果n大于1 对n/2继续进行该函数运算 输出n%2的值 代码截图 调试问题 我第一次做的时候判断的边界条件是大于0继续进行运算, ...
- 第二周c语言PTA作业留
6-1 计算两数的和与差(10 分) 本题要求实现一个计算输入的两数的和与差的简单函数. 函数接口定义: void sum_diff( float op1, float op2, float psum ...
- Python randrange() 函数
Python randrange() 函数 Python 数字 描述 randrange() 方法返回指定递增基数集合中的一个随机数,基数缺省值为1. 语法 以下是 randrange() 方法的语 ...
- 【iOS】Swift GCD-上
尽管Grand Central Dispatch(GCD)已经存在一段时间了,但并非每个人都知道怎么使用它.这是情有可原的,因为并发很棘手,而且GCD本身基于C的API在Swift世界中很刺眼. 在这 ...
- 浅谈数据结构vector
vector: 又名 向量 1.C++中的一种数据结构. 2.是一个类. 3.相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. A.使用时, ...
- 第四章 JavaScript操作DOM对象
第四章 JavaScript操作DOM对象 一.DOM操作 DOM是Document Object Model的缩写,即文档对象模型,是基于文档编程的一套API接口,1988年,W3C发布了第一级 ...
- linux——网络基础
装完linux系统要对网络(ip地址,子网掩码,网关,DNS)进行配置,才能连接网络 一,开启网卡eth0 CentOS显示没有网卡(eth0) 2.设置静态IP vim /etc/sysconfig ...
- angluarjs2入门学习资源
http://www.runoob.com/angularjs2/angularjs2-tutorial.htmlhttps://segmentfault.com/a/1190000008423981 ...