手机版

JSP Servlet实现生成登录验证代码的示例

时间:2021-09-05 来源:互联网 编辑:宝哥软件园 浏览:

随机生成一个四位验证码,包括汉字、数字和英文大小写。

1.Servlet类

包小型应用程序导入Java。啊。基本行程;导入Java。啊。颜色;导入Java。啊。字体;导入Java。啊。图形;导入Java。啊。图形2d;导入Java。啊。geom。affinitetransform导入Java。啊。geom。line2d导入Java。啊。图像。bufferedimage导入Java。io。ioexception导入Java。io。版画作家;导入Java。乌提尔。随机的;导入javax。imageio。imageio导入javax。servlet。servletexception导入javax。servlet。http。HttpServlet导入javax。servlet。http。HttpServletrequest导入javax。servlet。http。HttpServletResponse导入javax。servlet。http。HttpSession公共类PictureCheckCode扩展了httpersvlet { private static最终长串行版本id=1L;public PictureCheckCode(){ super();} public void destroy(){ super。销毁();}公共void init()引发ServletException { super。init();} /*该方法主要作用是获得随机生成的颜色*/public Color getRandColor(int s,int e){ Random Random=new Random();如果s=255如果(e255)e=255;int r,g,b;r=s随机。nextint(e-s);//随机生成RGB颜色中的r值g=s随机。nextint(e-s);//随机生成RGB颜色中的g值b=s随机。nextint(e-s);//随机生成RGB颜色中的b值返回新颜色(r、g、b);} public void doGet(HttpServletrequest请求,HttpServletResponse响应)引发ServletException,IOException { System.out.println('这是doGet方法');this.doPost(请求、响应);} public void doPost(HttpServletrequest请求,HttpServletResponse响应)引发ServletException,IOException { //设置不缓存图片response.setHeader('Pragma ','无缓存');response.setHeader('缓存控制','无缓存');回应。setdateheader(' Expires ',0);//指定生成的响应图片,一定不能缺少这句话,否则错误回应。setcontenttype(' image/JPEG ');int width=80,height=35//指定生成验证码的宽度和高度BufferedImage图像=新的BufferedImage(宽度、高度、BufferedImage .TYPE _ INT _ RGB);//创建BufferedImage对象,其作用相当于一图片图形g=图像。getgraphics();//创建制图法对象,其作用相当于画笔图形2d g2d=(图形2d)g;//创建Grapchics2D对象Random Random=new Random();字体mfont=新字体('楷体,字体. BOLD,16);//定义字体样式g.setColor(getRandColor(200,250));g.fillRect(0,0,宽度,高度);//绘制背景g . set font(mfont);//设置字体g.setColor(getRandColor(180,200));//绘制100条颜色和位置全部为随机产生的线条,该线条为2f表示(int I=0;i100I){ int x=random。next int(width-1);int y=随机。nextint(height-1);int x1=随机。nextint(6)1;int y1=随机。nextint(12)1;基本行程bs=新的基本行程(2f,基本行程基本行程.JOIN _斜角);//定制线条样式Line2D线条=新的第2D行.Double(x,y,x x1,y y1);g2d。setstroke(bs);g2d.draw(线条);//绘制直线} //输出由英文,数字,和中文随机组成的验证文字,具体的组合方式根据生成随机数确定。

字符串sRand=字符串ctmp=int itmp=0;//制定输出的验证码为四位for(int I=0;i4;I){ switch(随机。nextint(3)){ case 1://生成A-Z的字母itmp=随机。nextint(26)65;ctmp=字符串。((char)itmp)的值;打破;第2: //生成汉字String[] rBase={'0 ',' 1 ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 ',' 7 ',' 8 ',' 9 ',' a ',' b ',' c ',' d ',' e ',' f ' };//生成第一位区码int R1=random。nextint(3)11;string str _ R1=rBase[R1];//生成第二位区码int r2if(R1==13){ R2=随机。nextint(7);} else { R2=random。nextint(16);} String str _ R2=rBase[R2];//生成第一位位码int R3=随机。nextint(6)10;string str _ R3=rBase[R3];//生成第二位位码int r4if(R3==10){ R4=随机。nextint(15)1;}否则if(R3==15){ R4=随机。nextint(15);} else { R4=random。nextint(16);} String str _ R4=rBase[R4];//将生成的机内码转换为汉字字节[]字节=新字节[2];//将生成的区码保存到字节数组的第一个元素中string str _ 12=str _ R1 str _ r2int TempLow=整数。par sent(str _ 12,16);字节[0]=(字节)tempLow//将生成的位码保存到字节数组的第二个元素中string str _ 34=str _ R3 str _ r4int tempHigh=整数。par sent(str _ 34,16);字节[1]=(字节)tempHighctmp=新字符串(字节);打破;默认: itmp=随机。nextint(10)48;ctmp=字符串。((char)itmp)的值;打破;} sRand=ctmpColor Color=new Color(20 random . nextint(110),20 random。下一个int(110),随机。next int(110));g.setColor(颜色);//将生成的随机数进行随机缩放并旋转制定角度PS .建议不要对文字进行缩放与旋转,因为这样图片可能不正常显示/*将文字旋转制定角度*/graphics 2d g2d _ word=(graphics 2d)g;affinite transform trans=new affinite transform();trans.rotate((45)*3.14/180,15*i 8,7);/*缩放文字*/float scaleSize=random。next float()0.8f;if(scaleSize1f)scaleSize=1f;跨尺度(尺度大小,尺度大小);g2d _ word。settransform(trans);g .拉伸(ctmp,15*i 18,14);} HttpSession会话=请求。GetSession(真);会话。setattribute(' randCheckCode ',SrAnD);系统。出去。println(SrAnD);g .处置();//释放g所占用的系统资源ImageIO.write(图像,' JPEG ',响应。getoutputstream());//输出图片}}2.web.xml配置

小型应用程序描述这是我的J2EE组件的描述/描述显示-名称这是我的J2EE组件的显示名称/显示-名称servlet-名称pictureCheckCode/servlet-名称servlet-classservlet。PictureCheckCode/servlet-class/servlet servlet-servlet映射servlet-名称pictureCheckCode/servlet-名称URL-模式/PictureCheckCode/URL-模式/servlet-映射3。JSP页面输出验证码

“% @”页面语言=“Java”导入=“Java”。乌提尔。* "页面编码=' utf-8 ' %!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN ' HTML标题登录页面/title meta http-equ v=' pragma ' content=' no-cache ' meta http-equ v=' cache-control ' content=' no-cache ' meta http-equ v=' expires ' content=' 0 ' meta http-equ v=' keywords ' content='关键字1,关键字2,关键字3 ' meta http-equ v=' description ' content='这是我的页面脚本语言=' JavaScript '函数myReload(){ document。getelementbyid(' CreateCheckCode ').src=文档getElementById(' CreateCheckCode ').src?nocache=' new Date().getTime();}/script/head body form action=' loginServlet ' method=' get ' p class=' font TD height '验证码:输入类型=' text ' name=' CheckCode ' style=' width :70 px;height :35 px ' img src=' http : PictureCheckCode ' id=' CreateCheckCode ' align=' middle ' style=' margin-top :-10px;br a href=' onclick=' myReload()' style=' font-size :12 px;颜色:红色边距-左侧:156像素;看不清,换一个/a/p br put类型='提交'值='提交class=' font ' style=' width :240 px;高度:35px背景: # f19e 28 /表单/正文/html4 .后台小型应用程序判断验证码是否与输入一致

通过request.getParameter("检查代码")获取输入验证码,与会话。GetAttribute(" randCheckCode ")比较是否一致。

public void DoGet(Httpservletrequest请求,HttpServletResponse响应)引发ServletException,IOException { String code=request。getparameter('校验码');http会话会话=请求。getSession();if(!代码。等于(会话。GetAttribute(' randCheckCode '){ request。SetAttribute('错误消息','验证码不正确');}系统。出去。println(请求。GetAttribute('错误消息');}运行结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:JSP Servlet实现生成登录验证代码的示例是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。