来看Java完成随机考证码功能实例
先说优点,首先和C,C++这些语言比起来,java很简单,去掉指针的java,非常好理解,自动垃圾回收机制也很好,自从JDK1.5推出以后,性能上又有了很大提高。如今很多体系的注册、登录大概公布信息模块都增加的随机码功效,就是为了不主动注册程序大概主动公布程序的利用。
考证码实践上就是随机选择一些字符以图片的情势展示在页面上,假如举行提交操纵的同时必要将图片上的字符同时提交,假如提交的字符与服务器session保留的分歧,则以为提交信息有效。为了不主动程序剖析剖析图片,一般会在图片上随机天生一些搅扰线大概将字符举行歪曲,增添主动辨认的难度。
在这里,我们利用servlet来完成随机考证码的完成。
packagecom.servlet;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics2D;
importjava.awt.image.BufferedImage;
importjava.util.Random;
importjavax.imageio.ImageIO;
importjavax.servlet.ServletException;
importjavax.servlet.ServletOutputStream;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
/**
*天生随机考证码
*@authorbitiliu
*
*/
publicclassValidateCodeServletextendsHttpServlet
{
privatestaticfinallongserialVersionUID=1L;
//考证码图片的宽度。
privateintwidth=60;
//考证码图片的高度。
privateintheight=20;
//考证码字符个数
privateintcodeCount=4;
privateintx=0;
//字体高度
privateintfontHeight;
privateintcodeY;
char[]codeSequence={A,B,C,D,E,F,G,H,I,J,
K,L,M,N,O,P,Q,R,S,T,U,V,W,
X,Y,Z,0,1,2,3,4,5,6,7,8,9};
/**
*初始化考证图片属性
*/
publicvoidinit()throwsServletException
{
//从web.xml中猎取初始信息
//宽度
StringstrWidth=this.getInitParameter("width");
//高度
StringstrHeight=this.getInitParameter("height");
//字符个数
StringstrCodeCount=this.getInitParameter("codeCount");
//将设置的信息转换成数值
try
{
if(strWidth!=null&&strWidth.length()!=0)
{
width=Integer.parseInt(strWidth);
}
if(strHeight!=null&&strHeight.length()!=0)
{
height=Integer.parseInt(strHeight);
}
if(strCodeCount!=null&&strCodeCount.length()!=0)
{
codeCount=Integer.parseInt(strCodeCount);
}
}
catch(NumberFormatExceptione)
{}
x=width/(codeCount+1);
fontHeight=height-2;
codeY=height-4;
}
protectedvoidservice(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,java.io.IOException{
//界说图象buffer
BufferedImagebuffImg=newBufferedImage(
width,height,BufferedImage.TYPE_INT_RGB);
Graphics2Dg=buffImg.createGraphics();
//创立一个随机数天生器类
Randomrandom=newRandom();
//将图象添补为红色
g.setColor(Color.WHITE);
g.fillRect(0,0,width,height);
//创立字体,字体的巨细应当依据图片的高度来定。
Fontfont=newFont("Fixedsys",Font.PLAIN,fontHeight);
//设置字体。
g.setFont(font);
//画边框。
g.setColor(Color.BLACK);
g.drawRect(0,0,width-1,height-1);
//随机发生160条搅扰线,使图像中的认证码不容易被别的程序探测到。
g.setColor(Color.BLACK);
for(inti=0;i<160;i++)
{
intx=random.nextInt(width);
inty=random.nextInt(height);
intxl=random.nextInt(12);
intyl=random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
//randomCode用于保留随机发生的考证码,以便用户登录落后行考证。
StringBufferrandomCode=newStringBuffer();
intred=0,green=0,blue=0;
//随机发生codeCount数字的考证码。
for(inti=0;i<codeCount;i++){
//失掉随机发生的考证码数字。
StringstrRand=String.valueOf(codeSequence);
//发生随机的色彩份量来机关色彩值,如许输入的每位数字的色彩值都将分歧。
red=random.nextInt(255);
green=random.nextInt(255);
blue=random.nextInt(255);
//用随机发生的色彩将考证码绘制到图象中。
g.setColor(newColor(red,green,blue));
g.drawString(strRand,(i+1)*x,codeY);
//将发生的四个随机数组合在一同。
randomCode.append(strRand);
}
//将四位数字的考证码保留到Session中。
HttpSessionsession=req.getSession();
session.setAttribute("validateCode",randomCode.toString());
//克制图象缓存。
resp.setHeader("Pragma","no-cache");
resp.setHeader("Cache-Control","no-cache");
resp.setDateHeader("Expires",0);
resp.setContentType("image/jpeg");
//将图象输入到Servlet输入流中。
ServletOutputStreamsos=resp.getOutputStream();
ImageIO.write(buffImg,"jpeg",sos);
sos.close();
}
}
<p>
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 Java 编程语言的风格十分接近C、C++语言。 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 是一种语言,用以产生「小应用程序(Applet(s)) http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 Java 编程语言的风格十分接近C、C++语言。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
页:
[1]