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); //将获得的验证码字符串存入session
HttpSession session=request.getSession(true);
session.removeAttribute("VerifyCode");
session.setAttribute("VerifyCode",strCode); //关闭输出流
servletOutputStream.close(); } }

生成jsp验证码的代码详解(servlet版)的更多相关文章

  1. ASP.NET MVC 5 学习教程:生成的代码详解

    原文 ASP.NET MVC 5 学习教程:生成的代码详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 ...

  2. springboot扫描自定义的servlet和filter代码详解_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 这几天使用spring boot编写公司一个应用,在编写了一个filter,用于指定编码的filter,如下: /** ...

  3. JavaWeb学习----JSP内置对象详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. Java生鲜电商平台-Java后端生成Token架构与设计详解

    Java生鲜电商平台-Java后端生成Token架构与设计详解 目的:Java开源生鲜电商平台-Java后端生成Token目的是为了用于校验客户端,防止重复提交. 技术选型:用开源的JWT架构. 1. ...

  5. Java中String的intern方法,javap&cfr.jar反编译,javap反编译后二进制指令代码详解,Java8常量池的位置

    一个例子 public class TestString{ public static void main(String[] args){ String a = "a"; Stri ...

  6. Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测

    Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测 2017年12月13日 17:39:11 机器之心V 阅读数:5931   近日,Artur Suilin 等人发布了 Kaggl ...

  7. vs2017自动生成的#include“stdafx.h”详解及解决方案

    vs2017自动生成的#include“stdafx.h”详解及解决方案 问题描述: 在高版本的Visual Studio的默认设置中,会出现这么一个现象,在新建项目之后,项目会自动生成#includ ...

  8. Github-jcjohnson/torch-rnn代码详解

    Github-jcjohnson/torch-rnn代码详解 zoerywzhou@gmail.com http://www.cnblogs.com/swje/ 作者:Zhouwan  2016-3- ...

  9. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

    本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参 ...

随机推荐

  1. git对vue项目进行版本管理

    生成本地仓库 步骤一:git init 步骤二:git add * 步骤三:git commit -m 'init team' 创建远程仓库 new responstory 复制关联代码的命令 将本地 ...

  2. 强悍的 ubuntu —— 命令行访问网页

    所谓以命令行的方式访问网页,即是在终端下以文本的形式访问网站,这里推荐一个工具:w3m, $ sudo apt-get install w3m $ w3m www.baidu.com

  3. linux学习9-进程管理知识

    Linux 进程管理 实验环境: 用户名:shiyanlou 密码:AJW3tui5 Linux进程之管理控制 实验介绍 通过本实验我们将掌握一些 Linux 所提供的工具来进行进程的查看与控制,掌握 ...

  4. web开发如何使用高德地图API(四)通过AMap.Marker自定义标点

    说两句: 以下内容除了我自己写的部分,其他部分在高德开放平台都有(可点击外链访问). 我所整理的内容以实际项目为基础希望更有针对性的,更精简. 点击直奔主题. 准备工作: 首先,注册开发者账号,成为高 ...

  5. noip模拟赛 站军姿

    分析:纯数学题.相离和包含关系的可以很容易算出来答案,相交的话要先求出两个圆的面积,然后减掉中间重叠的部分,这一部分并不能直接求出来,但是可以求出两个扇形的面积,和它们围成的一个四边形的面积,加加减减 ...

  6. noip模拟赛 fateice-or

    分析:or操作只有在结果的这一位为0的情况下才会强制要求两个数的这一位都为0,其它时候不强求,所以为了最大限度地满足条件,我们先把所有的数的所有位全部变成1,如果p的第i位为0,那么[l,r]的数的第 ...

  7. hdu 3064

    1:前n项和公式:1+2+3+...+n = n*(n+1)/2 2:前n项平方和公式:1^2+2^2+.........+n^2=n*(n+1)*(2n+1)/6 #include<stdio ...

  8. 导出excel - 自用

    export function handerFillZero(num){ return num>=10 ? num : '0'+num; } export function exportExce ...

  9. bcd(Binary-Coded Decimal‎缩写)

    Binary-Coded Decimal‎,简称BCD,称BCD码或二-十进制代码,亦称二进码十进数.是一种二进制的数字编码形式,用二进制编码的十进制代码.这种编码形式利用了四个位元来储存一个十进制的 ...

  10. 洛谷——P2871 [USACO07DEC]手链Charm Bracelet

    https://www.luogu.org/problem/show?pid=2871 题目描述 Bessie has gone to the mall's jewelry store and spi ...