JSP实现验证码 代码怎么写
发布时间:2025-05-22 10:50:06 发布人:远客网络
一、JSP实现验证码 代码怎么写
<%@pagecontentType=\"image/jpeg\"import=\"java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*\"%><%!//createbysmallnest//email:smallnest@gmail.com//website: www.kuaff.com//生成随机颜色 ColorgetRandColor(Randomrandom,intfc,intbc)...{ if(fc>255)fc=255; if(bc>255)bc=255; intr=fc+random.nextInt(bc-fc); intg=fc+random.nextInt(bc-fc); intb=fc+random.nextInt(bc-fc); returnnewColor(r,g,b);}%><%//设置页面不缓存 response.setHeader(\"Pragma\",\"No-cache\"); response.setHeader(\"Cache-Control\",\"no-cache\"); response.setDateHeader(\"Expires\",0);//设置图片的长宽 intwidth=176,height=30;//设置备选汉字,剔除一些不雅的汉字 Stringbase=\"的一了是我不在人们有来他这上着个地到大里说就去子得也和那要下看天时过出小么起你都把好还多没为又可家学只以主会样年想生同老中十从自面前头道它后然走很像见两用她国动进成回什边作对开而己些现山民候经发工向事命给长水几义三声于高手知理眼志点心战二问但身方实吃做叫当住听革打呢真全才四已所敌之最光产情路分总条白话东席次亲如被花口放儿常气五第使写军吧文运再果怎定许快明行因别飞外树物活部门无往船望新带队先力完却站代员机更九您每风级跟笑啊孩万少直意夜比阶连车重便斗马哪化太指变社似士者干石满日决百原拿群究各六本思解立河村八难早论吗根共让相研今其书坐接应关信觉步反处记将千找争领或师结块跑谁草越字加脚紧爱等习阵怕月青半火法题建赶位唱海七女任件感准张团屋离色脸片科倒睛利世刚且由送切星导晚表够整认响雪流未场该并底深刻平伟忙提确近亮轻讲农古黑告界拉名呀土清阳照办史改历转画造嘴此治北必服雨穿内识验传业菜爬睡兴形量咱观苦体众通冲合破友度术饭公旁房极南枪读沙岁线野坚空收算至政城劳落钱特围弟胜教热展包歌类渐强数乡呼性音答哥际旧神座章帮啦受系令跳非何牛取入岸敢掉忽种装顶急林停息句区衣般报叶压慢叔背细\"; [Page]//备选汉字的长度 intlength=base.length();//创建内存图像 BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//获取图形上下文 Graphicsg=image.getGraphics();//创建随机类的实例 Randomrandom=newRandom();//设定图像背景色(因为是做背景,所以偏淡) g.setColor(getRandColor(random,200,250)); g.fillRect(0,0,width,height);//备选字体 String[]fontTypes=...{\"宋体\",\"新宋体\",\"黑体\",\"楷体\",\"隶书\"}; intfontTypesLength=fontTypes.length;//在图片背景上增加噪点 g.setColor(getRandColor(random,160,200)); g.setFont(newFont(\"TimesNewRoman\",Font.PLAIN,14)); for(inti=0;i<6;i++)...{ g.drawString(\"*********************************************\",0,5*(i+2));}//取随机产生的认证码(6个汉字)//保存生成的汉字字符串 StringsRand=\"\"; for(inti=0;i<6;i++)...{ intstart=random.nextInt(length); Stringrand=base.substring(start,start+1); sRand+=rand;//设置字体的颜色 g.setColor(getRandColor(random,10,150));//设置字体 g.setFont(newFont(fontTypes[random.nextInt(fontTypesLength)],Font.BOLD,18+random.nextInt(6)));////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////很多新手对图片验证码不是很了解,今天我们就来看看一个实例吧,首先,先写一个动态图片生成的Servlet类,如下: package org.yuanliang; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class RandomCode extends HttpServlet{ private static final long serialVersionUID= 1L; private static int WIDTH= 65;//设置图片的宽度 private static int HEIGHT= 22;//设置图片的高度 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ HttpSession session= request.getSession(); response.setContentType(\"image/jpeg\"); ServletOutputStream sos= response.getOutputStream(); response.setHeader(\"Pragma\",\"No-cache\"); response.setHeader(\"Cache-Control\",\"no-cache\"); response.setDateHeader(\"Expires\", 0); BufferedImage image= new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics g= image.getGraphics(); char[] rands= generateCheckCode(); drawBackground(g); drawRands(g, rands); g.dispose(); ByteArrayOutputStream bos= new ByteArrayOutputStream(); ImageIO.write(image,\"JPEG\", bos); byte[] buf= bos.toByteArray(); response.setContentLength(buf.length); sos.write(buf); bos.close(); sos.close(); session.setAttribute(\"randomCode\", new String(rands));} private void drawBackground(Graphics g){ g.setColor(new Color(0xDCDCDC)); g.fillRect(0, 0, WIDTH, HEIGHT); for(int i= 0; i< 120; i++){ int x=(int)(Math.random()* WIDTH); int y=(int)(Math.random()* HEIGHT); int red=(int)(Math.random()* 255); int green=(int)(Math.random()* 255); int blue=(int)(Math.random()* 255); g.setColor(new Color(red, green, blue)); g.drawOval(x, y, 1, 0);[Page]}} private void drawRands(Graphics g, char[] rands){// g.setColor(Color.BLUE); Random random= new Random(); int red= random.nextInt(110); int green= random.nextInt(50); int blue= random.nextInt(50); g.setColor(new Color(red, green, blue)); g.setFont(new Font(null, Font.ITALIC| Font.BOLD, 18)); g.drawString(\"\"+ rands[0], 1, 17); g.drawString(\"\"+ rands[1], 16, 15); g.drawString(\"\"+ rands[2], 31, 18); g.drawString(\"\"+ rands[3], 46, 16);} private char[] generateCheckCode(){ String chars=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\"; char[] rands= new char[4]; for(int i= 0; i< 4; i++){ int rand=(int)(Math.random()* 36); rands[i]= chars.charAt(rand);} return rands;} public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ this.doGet(request, response);}} OK!!!保存为RandomCode.java吧,然后进行编译,生成RandomCode.class文件,放到WEB-INF/classes/org/yuanliang目录下;然后在WEB-INF目录下建立web.xml,添加Servlet配置: jsp验证码生成以及刷新关于jsp验证码生成,显示,验证和刷新: 1:四位数据的验证图片生成,用servlet实现 2:在web.xmlli配置servlet 3:页面上显示servlet生成的图片 4:关于验证码输入数据的验证 5:验证码的刷新——————————————————————– 1:四位数据的验证图片生成,用servlet实现,servlet代码如下: import java.io.*; import javax.servlet.http.*; import javax.servlet.*; import java.util.*; import java.awt.*; import java.awt.image.*; import javax.imageio.*; public class vImage extends HttpServlet{ public void init(ServletConfig conf) throws ServletException{ super.init(conf);} public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ res.setContentType(”image/jpeg”); res.setHeader(”Pragma”,“No-cache”); res.setHeader(”Cache-Control”,“no-cache”); res.setDateHeader(”Expires”, 0); HttpSession session= req.getSession();//在内存中创建图象 int width= 60, height= 20; BufferedImage image= new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//获取图形上下文 Graphics g= image.getGraphics();//生成随机类 Random random= new Random();//设定背景色 g.setColor(getRandColor(200, 250)); g.fillRect(0, 0, width, height);//设定字体 g.setFont(new Font(”Times New Roman”, Font.PLAIN, 18));//画边框//g.setColor(new Color());//g.drawRect(0,0,width-1,height-1);//随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 g.setColor(getRandColor(160, 200)); for(int i= 0; i 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);}} 2:在web.xmlli配置servlet: vImage/vimage注:注意元素在web.xml文件里的位置 3:页面上显示servlet生成的图片:注:在需要显示验证码的地方加上这句,name在刷新验证码的时候会用到。 4:关于验证码输入数据的验证:验证码生成时存入了session,就是servlet里的这句session.setAttribute(”post_validate_code”, sRand);具体验证就不多说了。 5:验证码的刷新刷新验证码 function reloadImage(url){ document.form名字.pic.src= url;}前两个有时间参考//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
二、java 登陆时的验证码怎么做
验证码是在用户登录页面上加入一张随机生成的图片,让用户输入图片中所显示的字符或数字,以此来验证用户是否为人类行为,有效防止机器人或者恶意软件攻击。Java实现验证码的具体步骤如下:1.生成随机字符串:可以使用Random类来随机生成字符串,也可以使用UUID等工具。2.把生成的随机字符串放在图片上:可以使用Java的Graphics2D来绘制文本,并设置字体、颜色等属性。3.把生成的图片响应给客户端:可以使用ImageIO类来生成图片文件。4.检验用户输入的验证码是否和图片中的相同:可以使用Session来存储验证码,提交表单时再验证,或者在Ajax请求时把验证码验证结果返回给客户端。完成以上四个步骤就能够完成Java登录页面的验证码功能。
三、用java随机生成四位验证码,只求编程代码
1、下面简单的介绍他们的功能和用途,执行效率等。每个都有各自的优缺点看你是做甚什么方面的研究开发用。
2、.net,是网站编程,现在很多都用这个,但是这个语言编程都有统一思路,很好掌握。窒息那个效率不是很高;
3、php支持跨平台,很容易学会,执行的效率很高;
4、asp是ASP.net的前身,它比较稳定,比.net要弱一点。但是比.net好学。
5、jsp是网页编程,这个学习大约一周就能搞定,不过这个得多实践,不然的话,时间长了,就容易忘记。