java实现验证码完整版.docx

上传人:b****4 文档编号:26709971 上传时间:2023-06-22 格式:DOCX 页数:7 大小:16.01KB
下载 相关 举报
java实现验证码完整版.docx_第1页
第1页 / 共7页
java实现验证码完整版.docx_第2页
第2页 / 共7页
java实现验证码完整版.docx_第3页
第3页 / 共7页
java实现验证码完整版.docx_第4页
第4页 / 共7页
java实现验证码完整版.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

java实现验证码完整版.docx

《java实现验证码完整版.docx》由会员分享,可在线阅读,更多相关《java实现验证码完整版.docx(7页珍藏版)》请在冰豆网上搜索。

java实现验证码完整版.docx

java实现验证码完整版

java实现验证码完整版

第一步:

在web.xml中配置servlet

ImageServlet

org.servlet.ImageServlet

ImageServlet

/ImageServlet

第二步:

 ImageServlet 实现

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importcom.farm.web.tool.RandomValidateCode;

publicclassImageServletextendsHttpServlet{

privatestaticfinallongserialVersionUID=1L;

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

response.setContentType("image/jpeg");//设置相应类型,告诉浏览器输出的内容为图片

response.setHeader("Pragma","No-cache");//设置响应头信息,告诉浏览器不要缓存此内容

response.setHeader("Cache-Control","no-cache");

response.setDateHeader("Expire",0);

RandomValidateCoderandomValidateCode=newRandomValidateCode();

try{

randomValidateCode.getRandcode(request,response);//输出图片方法

}catch(Exceptione){

e.printStackTrace();

}

}

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

doGet(request,response);

}

}

importjava.awt.Color;

importjava.awt.Font;

importjava.awt.Graphics;

importjava.awt.image.BufferedImage;

importjava.util.Random;

importjavax.imageio.ImageIO;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjavax.servlet.http.HttpSession;

publicclassRandomValidateCode{

publicstaticStringvalidateCode=null;

publicstaticfinalStringRANDOMCODEKEY="RANDOMVALIDATECODEKEY";//放到session中的key

privateRandomrandom=newRandom();

privateStringrandString="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//随机产生的字符串

privateintwidth=80;//图片宽

privateintheight=26;//图片高

privateintlineSize=40;//干扰线数量

privateintstringNum=4;//随机产生字符数量

/*

*获得字体

*/

privateFontgetFont(){

returnnewFont("Fixedsys",Font.CENTER_BASELINE,18);

}

/*

*获得颜色

*/

privateColorgetRandColor(intfc,intbc){

if(fc>255)

fc=255;

if(bc>255)

bc=255;

intr=fc+random.nextInt(bc-fc-16);

intg=fc+random.nextInt(bc-fc-14);

intb=fc+random.nextInt(bc-fc-18);

returnnewColor(r,g,b);

}

/**

*生成随机图片

*/

publicvoidgetRandcode(HttpServletRequestrequest,

HttpServletResponseresponse){

HttpSessionsession=request.getSession();

//BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类

BufferedImageimage=newBufferedImage(width,height,

BufferedImage.TYPE_INT_BGR);

Graphicsg=image.getGraphics();//产生Image对象的Graphics对象,改对象可以在图像上进行各种绘制操作

g.fillRect(0,0,width,height);

g.setFont(newFont("TimesNewRoman",Font.ROMAN_BASELINE,18));

g.setColor(getRandColor(110,133));

//绘制干扰线

for(inti=0;i<=lineSize;i++){

drowLine(g);

}

//绘制随机字符

StringrandomString="";

for(inti=1;i<=stringNum;i++){

randomString=drowString(g,randomString,i);

}

session.removeAttribute(RANDOMCODEKEY);

session.setAttribute(RANDOMCODEKEY,randomString);

validateCode=randomString.toUpperCase();

g.dispose();

try{

ImageIO.write(image,"JPEG",response.getOutputStream());//将内存中的图片通过流动形式输出到客户端

}catch(Exceptione){

e.printStackTrace();

}

}

/*

*绘制字符串

*/

privateStringdrowString(Graphicsg,StringrandomString,inti){

g.setFont(getFont());

g.setColor(newColor(random.nextInt(101),random.nextInt(111),random

.nextInt(121)));

Stringrand=String.valueOf(getRandomString(random.nextInt(randString

.length())));

randomString+=rand;

g.translate(random.nextInt(3),random.nextInt(3));

g.drawString(rand,13*i,16);

returnrandomString;

}

/*

*绘制干扰线

*/

privatevoiddrowLine(Graphicsg){

intx=random.nextInt(width);

inty=random.nextInt(height);

intxl=random.nextInt(13);

intyl=random.nextInt(15);

g.drawLine(x,y,x+xl,y+yl);

}

/*

*获取随机的字符

*/

publicStringgetRandomString(intnum){

returnString.valueOf(randString.charAt(num));

}

}

第三步:

jsp展现

验证码:

65px"id="validatecode"name="validatecode"type="text"/>

"style="cursor:

pointer;"

onclick="javascript:

refresh(this);"

src="

basePath/>/ImageServlet">

src路径根据情况修改

functionrefresh(obj){

obj.src="

basePath/>/ImageServlet?

"+Math.random();

}

第四步:

Action验证

if(RandomValidateCode.validateCode!

=null&&validatecode.trim().toUpperCase().equals(RandomValidateCode.validateCode)){

System.out.println("验证码正确");

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1