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. CentOS7.2下安装php加速软件Xcache

    说明: php安装目录:/usr/local/php php.ini配置文件路径:/usr/local/php/etc/php.ini Nginx安装目录:/usr/local/nginx Nginx ...

  2. Ubuntu_linux系统与网络服务管理

    1.远程telnet联机:telnetd: 2.远程加密ssh联机:openssh: 3.webmin远程联机:webmin: 3.VNC远程图像界面控制:vino: 4.NAT网关服务器:iptab ...

  3. 7 numpy 傅里叶,提取图片轮廓

    任务:提取照片中轮廓   本次处理图片:我的女神之一  江一燕   导入模块: #jyy.show()   会打开本地图片浏览器       使用傅里叶反转 获取实部,舍弃虚部 去除小数部分 将一维数 ...

  4. hdu2004 成绩转换【C++】

    成绩转换 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. CVE-2014-6271 漏洞告警

    原理:BASH除了可以将shell变量导出为环境变量,还可以将shell函数导出为环境变量!当前版本的bash通过以函数名作为环境变量名,以“(){”开头的字串作为环境变量的值来将函数定义导出为环境变 ...

  6. 【codeforces 514B】Han Solo and Lazer Gun

    [题目链接]:http://codeforces.com/contest/514/problem/B [题意] 每次攻击可以把经过自己的一条直线上的所有点都毁掉; 然后给你n个目标物的坐标 问你最少要 ...

  7. Curious Cupid

    There are K different languages in the world. Each person speaks one and only one language. There ar ...

  8. 洛谷 P1186 玛丽卡

    P1186 玛丽卡 题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道 ...

  9. jabberNet 修改花名册条目的昵称

    修改昵称,这么简单的功能,在jabberNet里怎么实现? 翻遍了jabberNet里的代码,jabber.client.RosterManager也,JabberClient也,似乎都没有现成的方法 ...

  10. Openfire 配置连接SQL SERVER(非默认实例)

    安装好Openfire之后,紧接着进行配置. 连接数据库的时候遇上问题. 打算用我本机上的一个SQL SERVER做为数据库.但是,我本机装了几个SQL SERVER实例,现在我打算使用的是那个非默认 ...