手动制作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端验证码实例)

  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  4. <title>java验证码</title>
  5. <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
  6. </head>
  7. <body>
  8. 验证码输入:<input type="text" name="checkcode"> &nbsp;
  9. <img id="codeimg" alt="验证码" src="ImageServlet">
  10. <a href="javascript:reloadCode();">看不出清楚?</a><br/>
  11. <input type="submit" value="提交">
  12. <div id="info" style="color:red;"></div>
  13.  
  14. <script type="text/javascript">
  15. $(function(){
  16. //ajax异步传验证码至后台
  17. $("input[type=submit]").click(function(){
  18. $.post("CheckCode",
  19. {"code":$("input[name=checkcode]").val()},
  20. function(data,textStatus)
  21. {
  22. console.log(textStatus);
  23. $("#info").html(data);
  24. },"text");
  25. });
  26. })
  27. //js刷新,重新请求页面,获得新的验证码
  28. function reloadCode(){
  29. var time = new Date().getTime();//创建不同的时间
  30. $("#codeimg").attr("src","ImageServlet?time="+time);//因为时间参数不同,请求重新
  31. }
  32. </script>
  33. </body>
  34. </html>

ImageServlet类(验证码生成部分)

  1. @WebServlet("/ImageServlet")
  2. public class ImageServlet extends HttpServlet {
  3. private static final long serialVersionUID = 1L;
  4.  
  5. /**
  6. * @see HttpServlet#HttpServlet()
  7. */
  8. public ImageServlet() {
  9. super();
  10. // TODO Auto-generated constructor stub
  11. }
  12.  
  13. /**
  14. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  15. */
  16. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  17. // TODO Auto-generated method stub
  18. BufferedImage bimg = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);
  19. Graphics g = bimg.getGraphics();
  20. Color color = new Color(200,151,255);//颜色生成
  21. g.setColor(color);
  22. g.fillRect(0, 0, 68, 22);
  23. char[] ch="ABCDEFGHJIKLMNOPQRSTUVWXYZ0123456789".toCharArray();//获得一个含有字母和数字的数组,后续随机从中获取字符
  24. Random random = new Random(); //创建随机数
  25. int len = ch.length,index;
  26. StringBuffer sBuffer = new StringBuffer();
  27.  
  28. //循环产生4个随机字符
  29. for(int i = 0 ;i<4;i++)
  30. {
  31. index = random.nextInt(len);//产生随机字母与数字
  32. g.setColor(new Color(random.nextInt(88),random.nextInt(120),random.nextInt(90)));//创建随机颜色
  33. g.drawString(ch[index]+"", (i)*15+3, 18);
  34. sBuffer.append(ch[index]);//将随机获取的字符放置缓冲串中
  35. }
  36. request.getSession().setAttribute("newCode", sBuffer.toString());//存至session便于后续验证
  37. ImageIO.write(bimg, "JPG", response.getOutputStream());//通过ImageIO输出图片,并传至前台
  38. }
  39.  
  40. /**
  41. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  42. */
  43. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  44. // TODO Auto-generated method stub
  45. doGet(request, response);
  46. }
  47.  
  48. }

CheckCode(验证码验证servlet)

  1. @WebServlet("/CheckCode")
  2. public class CheckCode extends HttpServlet {
  3. private static final long serialVersionUID = 1L;
  4.  
  5. /**
  6. * @see HttpServlet#HttpServlet()
  7. */
  8. public CheckCode() {
  9. super();
  10. // TODO Auto-generated constructor stub
  11. }
  12.  
  13. /**
  14. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  15. */
  16. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  17. // TODO Auto-generated method stub
  18. response.setCharacterEncoding("utf-8");
  19. String code = request.getParameter("code").toUpperCase();//获取传来验证码并进行大小写转换
  20. String result=null;
  21. if(request.getSession().getAttribute("newCode").equals(code))
  22. {
  23. result="验证成功!";
  24. response.getWriter().append(result);
  25. }
  26. else {
  27. result="验证码错误!";
  28. response.getWriter().append(result);
  29. }
  30. }
  31.  
  32. /**
  33. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  34. */
  35. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  36. // TODO Auto-generated method stub
  37. doGet(request, response);
  38. }
  39.  
  40. }

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. Java基础学习笔记八 Java基础语法之接口和多态

    接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...

  2. c语音-第零次作业

    1.你认为大学的学习生活.同学关系.师生应该是怎样? 我认为大学学习应该以自我学习为主,由以往的被动学习改为主动学习,探索新世界,除学习专业知识外对自身欠缺的地方也应该加以补足:同学之间要互相帮助,更 ...

  3. Alpha冲刺Day2

    Alpha冲刺Day2 一:站立式会议 今日安排: 首先完善前一天的剩余安排工作量,其次我们把项目大体分为四个模块:数据管理员.企业人员.第三方机构.政府人员.数据管理员这一模块,数据管理员又可细分为 ...

  4. 【iOS】单元测试

    iOS单元测试(作用及入门提升) 字数1704 阅读16369 评论26 喜欢247 由于只是一些简单实用的东西,学学还是挺不错的.其实单元测试用的好,开发起来也会快很多.单元测试对于我目前来说,就是 ...

  5. Dijkstra算法课后补分博客

    题目名称:Dijkstra算法 题目要求:课上给出相关附图,求解附图顶点A的单源最短路径. 附图: 做题过程 1.了解Dijkstra算法的相关知识,包括定义以及使用方法. 定义:Dijkstra算法 ...

  6. 201621123057 《Java程序设计》第1周学习总结

    1.本周学习总结 .java - - 源程序 .class - - 字节码文件 JVM - - 虚拟机 JRE - - 执行环境 JDK - - 开发工具包 其中,运行的是.class,而非.java ...

  7. iOS开发-继承特征详解

    面向对象的三大特性:封装,继承,多态. 1.继承 继承既能保证类的完整,又能简化代码. 把公共的方法和实例变量写在子类,子类只需要写父类独有的实例变量和方法即可. 继承是面向对象三大特性之一,合理的继 ...

  8. ord在python是什么意思?

    >>> help(ord)Help on built-in function ord in module builtins:ord(...) #这是一个函数 ord(c) -> ...

  9. 【详细】Lucene使用案例

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引 ...

  10. Mac使用brew安装软件

    Homebrew官方网站:https://brew.sh/1,安装brew,Mac中打开Termal输入命令: /usr/bin/ruby -e "$(curl -fsSL https:// ...