jsp+servlet实现验证码

  1. 创建servlet

  1. CodeServlet:  
  2. package com.lxs.servlet;  
  3. import java.awt.Color;  
  4. import java.awt.Font;  
  5. import java.awt.Graphics;  
  6. import java.awt.image.BufferedImage;  
  7. import java.io.IOException;  
  8. import java.io.OutputStream;  
  9. import java.util.Random;  
  10.   
  11. import javax.imageio.ImageIO;  
  12. import javax.servlet.ServletException;  
  13. import javax.servlet.http.HttpServlet;  
  14. import javax.servlet.http.HttpServletRequest;  
  15. import javax.servlet.http.HttpServletResponse;  
  16.   
  17. public class CodeServlet extends HttpServlet {  
  18.     private static final long serialVersionUID = 1L;  
  19.       
  20.     protected void service(HttpServletRequest request, HttpServletResponse response)  
  21.             throws ServletException, IOException {  
  22.         String codes="abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ0123456789";    
  23.         BufferedImage img=new BufferedImage(80,30,BufferedImage.TYPE_3BYTE_BGR);  
  24.         Graphics g=img.getGraphics();  
  25.         //填充图片  
  26.         g.setColor(new Color(255,255,255));  
  27.         g.fillRect(008030);  
  28.         //画入五个随机数  
  29.         Random rm=new Random();  
  30.         StringBuffer sb=new StringBuffer();  
  31.         for(int i=0;i<5;i++){  
  32.             int index=rm.nextInt(codes.length());  
  33.             char code=codes.charAt(index);  
  34.             g.setColor(new Color(rm.nextInt(256),rm.nextInt(256),rm.nextInt(256)));  
  35.             g.setFont(new Font("宋体", Font.BOLD, 25));  
  36.             g.drawString(code+""2+15*i, 22);  
  37.             sb.append(code);  
  38.         }  
  39.           
  40.         //画干扰线  
  41.         for(int i=0;i<10;i++){  
  42.             g.setColor(new Color(rm.nextInt(256),rm.nextInt(256),rm.nextInt(256)));  
  43.             g.drawLine(rm.nextInt(100), rm.nextInt(50), rm.nextInt(100), rm.nextInt(50));  
  44.         }  
  45.           
  46.         //将验证码图片回写给浏览器  
  47.         response.setContentType("image/jpeg;charset=utf-8");  
  48.         OutputStream out=response.getOutputStream();  
  49.         ImageIO.write(img, "jpeg", out);  
  50.           
  51.         //将随机字符串保存在session中  
  52.         request.getSession().setAttribute("code", sb.toString());  
  53.     }  
  54.   
  55. }   

  1. web-xml

  1.  <servlet-name>CodeServlet</servlet-name>  
  2.     <servlet-class>com.yinhe.web.servlet.CodeServlet</servlet-class>  
  3.   </servlet>  
  4.   <servlet-mapping>  
  5.     <servlet-name>CodeServlet</servlet-name>  
  6.     <url-pattern>/checkCode</url-pattern>  
  7.   </servlet-mapping>  
  8. 前台页面
  9.   <script type="text/javascript">         
  10.   function loadImage(){                 document.getElementById("randImage").src = "${pageContext.request.contextPath}/image.jsp?"+Math.random(); //Math.random()方法非常重要,它使每次的请求都不同以便重新发送。如果每次的请求都一样,那么不会重新生成页面          }
  11.      </script> 

  12. <img src="checkCode" alt="" id="codeImg"  
  13. style="width: 80px; height: 30px; border: 1px solid black;" />   
  14. <a href="javascript:;" οnclick="document.getElementById('codeImg').src = 'checkCode?'+(new Date()).getTime()">换一张</a>  
  15. <span id="codemsg" style="color: red; font-size: 20px;"></span>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值