java Web圖片驗證碼

  1. 1.在body中加入如下代碼:  
  2. <script language="javascript">  
  3.     function changeCode() {  
  4.         document.getElementById('checkImg').src = 'GetCaptcha?temp='+ (new Date().getTime().toString(36));  
  5.         return false;  
  6.     }  
  7. </script>  
  8.   
  9. <center>  
  10.         <form>  
  11.             驗證碼: <input type="text" maxlength="113" οnmοuseοver="this.style.background='pink'" οnmοuseοut="this.style.background='white'">  
  12.              <img src="GetCaptcha" alt="驗證碼" name="checkImg" id="checkImg" onClick="changeCode()" />  
  13.         </form>  
  14.     </center>  
  15.   
  16. 2.在web.xml中配置如下代碼:  
  17.     <servlet>  
  18.         <servlet-name>GetCaptcha</servlet-name>  
  19.         <servlet-class>com.eims.util.GetCaptcha</servlet-class>  
  20.     </servlet>  
  21.   
  22.   
  23.     <servlet-mapping>  
  24.         <servlet-name>GetCaptcha</servlet-name>  
  25.         <url-pattern>/GetCaptcha</url-pattern>  
  26.     </servlet-mapping>  
  27.   
  28. 3.在com.eims.util.GetCaptcha包中加入如下工具類  
  29.     package com.eims.util;  
  30.   
  31.   
  32. import java.io.IOException;    
  33. import javax.servlet.ServletException;    
  34. import javax.servlet.http.HttpServlet;    
  35. import javax.servlet.http.HttpServletRequest;    
  36. import javax.servlet.http.HttpServletResponse;    
  37. import javax.servlet.http.HttpSession;    
  38. import java.util.*;    
  39. import java.awt.*;    
  40. import java.awt.image.*;    
  41.     
  42. import javax.imageio.*;    
  43. /** 
  44.  *  
  45.  * @author mzba 
  46.  * 
  47.  */  
  48. public class GetCaptcha extends HttpServlet {    
  49.     private static final long serialVersionUID = 1L;    
  50.     
  51.     /**  
  52.      * @see HttpServlet#HttpServlet()  
  53.      */    
  54.     public GetCaptcha() {    
  55.         super();    
  56.         // TODO Auto-generated constructor stub    
  57.     }    
  58.     
  59.     /**  
  60.      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse  
  61.      *      response)  
  62.      */    
  63.     protected void doGet(HttpServletRequest request,    
  64.             HttpServletResponse response) throws ServletException, IOException {    
  65.         response.setContentType("image/jpeg");    
  66.         response.setHeader("Pragma""No-cache");    
  67.         response.setHeader("Cache-Control""no-cache");    
  68.         response.setDateHeader("Expires"0);    
  69.         HttpSession session = request.getSession();    
  70.         int width = 75, height = 25;    
  71.         BufferedImage image = new BufferedImage(width, height,    
  72.                 BufferedImage.TYPE_INT_RGB);    
  73.   
  74.   
  75.         Graphics g = image.getGraphics();    
  76.         Random random = new Random();    
  77.         g.setColor(getRandColor(200250));    
  78.         g.fillRect(00, width, height);    
  79.         g.setFont(new Font("Times New Roman", Font.PLAIN, 24));    
  80.         g.setColor(getRandColor(160200));    
  81.         g.drawRect(00, width - 1, height - 1);    
  82.         g.setColor(getRandColor(160200));    
  83.         for (int i = 0; i < 155; i++) {    
  84.             int x = random.nextInt(width);    
  85.             int y = random.nextInt(height);    
  86.             int xl = random.nextInt(12);    
  87.             int yl = random.nextInt(12);    
  88.             g.drawLine(x, y, x + xl, y + yl);    
  89.         }    
  90.         String sRand = "";    
  91.         for (int i = 0; i < 4; i++) {    
  92.             String rand = String.valueOf(random.nextInt(10));    
  93.             sRand += rand;    
  94.             g.setColor(new Color(20 + random.nextInt(110), 20 + random    
  95.                     .nextInt(110), 20 + random.nextInt(110)));    
  96.             g.drawString(rand, 13 * i + 1420);    
  97.         }    
  98.     
  99.         session.setAttribute("vcode", sRand);    
  100.     
  101.         g.dispose();    
  102.         ImageIO.write(image, "JPEG", response.getOutputStream());    
  103.     }    
  104.     
  105.     /**  
  106.      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse  
  107.      *      response)  
  108.      */    
  109.     protected void doPost(HttpServletRequest request,    
  110.             HttpServletResponse response) throws ServletException, IOException {    
  111.         // TODO Auto-generated method stub    
  112.     }    
  113.     
  114.     Color getRandColor(int fc, int bc) {  
  115.         Random random = new Random();    
  116.         if (fc > 255)    
  117.             fc = 255;    
  118.         if (bc > 255)    
  119.             bc = 255;    
  120.         int r = fc + random.nextInt(bc - fc);    
  121.         int g = fc + random.nextInt(bc - fc);    
  122.         int b = fc + random.nextInt(bc - fc);    
  123.         return new Color(r, g, b);    
  124.     }    
  125.     
  126. }    
  127.   
  128. 4.在servlet中使用如下代碼進行驗證:  
  129.         /** 
  130.      * 驗證用戶輸入的驗證碼輸入的是否正確 
  131.      * @param request 
  132.      * @param response 
  133.      * @throws ServletException 
  134.      * @throws IOException 
  135.      */  
  136.     public boolean checkValidationCode(HttpServletRequest request, HttpServletResponse response)  
  137.             throws ServletException, IOException {  
  138.         boolean flag=true;  
  139.         HttpSession session=request.getSession();  
  140.         String validationRightCode=(String)session.getAttribute("vcode");  
  141.         String validationUserCode=request.getParameter("validationCode");  
  142.         if(!validationRightCode.equals(validationUserCode)){  
  143.             request.setAttribute("information","驗證碼輸入不正確!");  
  144.             flag=false;  
  145.             RequestDispatcher rd=request.getRequestDispatcher("login/dealwith.jsp");  
  146.             rd.forward(request, response);  
  147.         }  
  148.         return flag;  
  149.     }     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章