package util;
import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.sun.image.codec.jpeg.*;   /** 生成验证码图片*/
public class ValidateCode extends HttpServlet
{  private Font imgFont=new Font("宋体",Font.BOLD,16);//设置字体   public void doPost(HttpServletRequest request,HttpServletResponse response)   throws ServletException,IOException   {   doGet(request,response);   }   //设置浏览器不要缓存此图片response.setHeader("Pragma","No-cache");response.setHeader("Cache-Control","no-cache");response.setDateHeader("Expires", 0);/* * 在给定范围内获得随机颜色 */ private Color getRandColor(int fc,int bc){ Random random = new Random(); if(fc>255) fc=255; if(bc>255) bc=255; int r=fc+random.nextInt(bc-fc); int g=fc+random.nextInt(bc-fc); int b=fc+random.nextInt(bc-fc); return new Color(r,g,b); }/public void doGet(HttpServletRequest request,HttpServletResponse response)     throws ServletException,IOException   {   String strCode  ="";   //验证码(字符串形式)int intCode  =0;     //验证码(数字形式)Random random = new Random();//随机类//生成随机四位数字intCode = (new Random()).nextInt(9999);   if(intCode<1000){intCode+=1000;  }//将数字转化为字符串strCode=intCode+"";   /** 绘图*/response.setContentType("image/gif");   //获得servlet输出流ServletOutputStream servletOutputStream =response.getOutputStream();  //创建表示图像的对象(参数是:宽、高、图片类型)BufferedImage image=new BufferedImage(60,25,BufferedImage.TYPE_INT_RGB); //创建表示图形上下文的对象   Graphics graph=image.getGraphics();//设置此图形上下文的颜色graph.setColor(Color.blue);   //设定矩形的横、纵坐标,及宽、高graph.fillRect(1,1,48,18);   //将此图形上下文的字体设置为指定字体(参数为Font类型)graph.setFont(imgFont);   //随机产生10条干扰线,使图象中的认证码不易被其它程序探测到 graph.setColor(getRandColor(160,200)); for (int i=0;i<10;i++) {           int x = random.nextInt(85); int y = random.nextInt(20); int xl = random.nextInt(12); int yl = random.nextInt(12); //在此图形上下文的坐标系统中,使用当前颜色在点 (x,y) 和 (x1,y1) 之间画一条线graph.drawLine(x,y,x+xl,y+yl); } //分解验证码字符串char c;   for(int i=0;i<4;i++)   {   //返回验证码字符串指定索引处的char值(单个数字)c=strCode.charAt(i);   //使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本(x->文本的横坐标,y->文本的纵坐标)graph.drawString(c+"",9*i+4,16);     }   //对servlet输出流进行JPEG格式编码JPEGImageEncoder imageEncoder=JPEGCodec.createJPEGEncoder(servletOutputStream);   imageEncoder.encode(image);   //将获得的验证码字符串存入sessionHttpSession  session=request.getSession(true);   session.removeAttribute("VerifyCode");   session.setAttribute("VerifyCode",strCode);   //关闭输出流servletOutputStream.close();   }   }   

转载于:https://www.cnblogs.com/xcxcxcxc/p/5541238.html

生成jsp验证码的代码详解(servlet版)相关推荐

  1. java云片模板参数_Java使用云片API发送短信验证码的代码详解

    这篇文章主要介绍了Java使用云片API发送短信验证码,主要用的是Java实现短信验证码.需要的朋友可以参考下 下面开始介绍的是如何利用机器完成批量操作,将短信业务自动化. 获取APIKEY 云片网提 ...

  2. JSP网页弹窗代码详解

    [1.普通的弹出窗口]  其实代码非常简单: <SCRIPT LANGUAGE=javascript>  <!--  window.open ('page.html')  --> ...

  3. Transformer代码详解: attention-is-all-you-need-pytorch

    Transformer代码详解: attention-is-all-you-need-pytorch 前言 Transformer代码详解-pytorch版 Transformer模型结构 各模块结构 ...

  4. php推荐码生成,最新最全PHP生成制作验证码代码详解(推荐),验证码详解_PHP教程...

    最新最全PHP生成制作验证码代码详解(推荐),验证码详解 1.0 首先先看代码 好,现在结合以上代码,来分析分析以上用到的几个函数: ① imagecreatetruecolor(); imagecr ...

  5. [Pytorch系列-69]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - test.py代码详解

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:[Pytorch系列-66]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleG ...

  6. java做jsp问题_java/jsp中 中文问题详解

    java/jsp中 中文问题详解 更新时间:2006年10月13日 00:00:00   作者: 预备知识: 1.字节和unicode Java内核是unicode的,就连class文件也是,但是很多 ...

  7. java kaptcha_java相关:kaptcha验证码使用方法详解

    java相关:kaptcha验证码使用方法详解 发布于 2020-6-7| 复制链接 摘记: 本文为大家分享了kaptcha验证码的使用方法,供大家参考,具体内容如下1.首先在pom.xml文件中导入 ...

  8. java servlet dao_Java+MyEclipse+Tomcat 详解Servlet和DAO数据库增删改查操作(源码)

    [实例简介] 该资源主要参考自己的博客http://blog.csdn.net/eastmount/article/details/45936121 讲诉Java+MyEclipse+Tomcat 详 ...

  9. 基于spring security实现vue2前后端分离的双token刷新机制(完整代码详解,含金量拉满!)

    目录 一.前言: 核心功能概要: 通过加密算法创建一个用户: 二.后端 代码详解: 1.代码整体结构: 2.所需依赖: 3.UserDetailServiceImpl拦截用户登陆: 4.所需工具类 4 ...

最新文章

  1. leetcode C++ 48. 旋转图像 给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。
  2. c# typeof 与 Type.GetType 使用与效率对比
  3. Matlab图片改颜色通道不改名存储
  4. 电脑硬件:磁盘、RAID知识,网卡概念与主流硬件产品知识介绍
  5. AGC002(D~F)【Kruskal重构树,博弈论,dp】
  6. 计算机教案画圆形和方形,画方形和圆形的教案
  7. 手把手玩转win8开发系列课程(14)
  8. unity引用类型序列化_Unity中的序列化与反序列化
  9. Android轮播图代码
  10. 4g 控矿驱动 迪兰rx574_用结果说话 篇四:迪兰RX580 2048SP 4G X-Serial战将i7-8700与R5 2400G双平台体验点评...
  11. ComputeShader
  12. java: 找不到符号 报错
  13. 计算机课代表总结与反思,生物课代表总结与反思(38页)-原创力文档
  14. 用ruby写了一个简单的Gmail登陆和获取未读邮件(http协议)
  15. tensorflow使用较为底层的方式复现VGG16
  16. 【软件下载】常用安装包下载链接
  17. 自定义android控件EditText边框背景
  18. 自学IT和接受IT培训两者的优缺点分析
  19. 启动时出现 r8169 0000:02:00.0: firmware: agent loaded rtl_nic/rtl8168e-3.fw into memory
  20. cordova多语言(国际化,本地化,全球化)

热门文章

  1. 【HDU - 5700】【51nod - 1672】 区间交(贪心,STLset 或线段树第k大)
  2. Apollo进阶课程⑯丨Apollo感知之旅——感知概貌
  3. c语言程序位置式pid算法,增量式与位置式PID算法(C语言实现与电机控制项目)...
  4. oom linux 导致ssh,Linux OOM
  5. 计算机网络十进制转二进制的应用题,【网络-理论】二进制与十进制的转换
  6. mysql sqlite转换_数据库转换工具(SqliteToMysql)
  7. 编程题【Math类】计算类
  8. 关于去苹果服务器验证充值的一些看法
  9. LeetCode - Medium - 264. Ugly Number II
  10. linux mount 查看挂载目录,Linux下使用mount来挂载设备到目录