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:;" onclick="document.getElementById('codeImg').src = 'checkCode?'+(new Date()).getTime()">換一張</a>  
  15. <span id="codemsg" style="color: red; font-size: 20px;"></span>  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章