久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

servlet生產(chǎn)唯一圖片驗證碼

 pengx 2008-12-18
參考了幾篇文章,,寫了個用servlet生產(chǎn)唯一驗證碼(改造了原作者代碼,,在此致謝,后附鏈接),。附件是可直接使用的工程,。明天試用一個開源項目,可以比較方便的生成各種風(fēng)格的驗證碼,,甚至還有聲音,,比較有意思。第一次記錄自己的學(xué)習(xí),,以后爭取每天寫一點,。
===================================================
Java代碼
  1. package com.stone.study.validate;   
  2.   
  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.ByteArrayOutputStream;   
  8. import java.io.IOException;   
  9.   
  10. import javax.imageio.ImageIO;   
  11. import javax.servlet.ServletException;   
  12. import javax.servlet.ServletOutputStream;   
  13. import javax.servlet.http.HttpServlet;   
  14. import javax.servlet.http.HttpServletRequest;   
  15. import javax.servlet.http.HttpServletResponse;   
  16. import javax.servlet.http.HttpSession;   
  17.   
  18. public class ImgValidateServlet2 extends HttpServlet {   
  19.     private static int WIDTH = 90;   
  20.     private static int HEIGHT = 20;   
  21.     private static int LENGTH = 6;   
  22.   
  23.     @Override  
  24.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   
  25.          HttpSession session = request.getSession();   
  26.   
  27.          response.setContentType("image/jpeg");   
  28.   
  29.          ServletOutputStream sos = response.getOutputStream();   
  30.   
  31.          //設(shè)置瀏覽器不要緩存此圖片   
  32.          response.setHeader("Pragma","No-cache");   
  33.          response.setHeader("Cache-Control","no-cache");   
  34.          response.setDateHeader("Expires"0);   
  35.   
  36.          //創(chuàng)建內(nèi)存圖象并獲得其圖形上下文   
  37.          BufferedImage image =    
  38.                 new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);    
  39.   
  40.          Graphics g = image.getGraphics();   
  41.   
  42.          //產(chǎn)生隨機(jī)的認(rèn)證碼   
  43.          char [] rands = generateCheckCode();   
  44.   
  45.          //產(chǎn)生圖像   
  46.          drawBackground(g);   
  47.   
  48.          drawRands(g,rands);   
  49.   
  50.          //結(jié)束圖像的繪制過程,完成圖像   
  51.          g.dispose();   
  52.   
  53.          //將圖像輸出到客戶端   
  54.          ByteArrayOutputStream bos = new ByteArrayOutputStream();   
  55.   
  56.          ImageIO.write(image, "JPEG", bos);   
  57.   
  58.          byte [] buf = bos.toByteArray();   
  59.   
  60.          response.setContentLength(buf.length);   
  61.   
  62.          //下面的語句也可寫成:bos.writeTo(sos);   
  63.          sos.write(buf);   
  64.          bos.close();   
  65.          sos.close();   
  66.   
  67.          //將當(dāng)前驗證碼存入到Session或者數(shù)據(jù)庫中,下一個表單處理中驗證客戶端提交的驗證碼是否正確   
  68.          session.setAttribute("check_code",new String(rands));   
  69.     }   
  70.   
  71.     private static char [] generateCheckCode()   
  72.     {   
  73.        //定義驗證碼的字符表   
  74.        String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";   
  75.   
  76.        char [] rands = new char[LENGTH];   
  77.        for(int i=0; i<LENGTH; i++)   
  78.   
  79.        {   
  80.           int rand = (int)(Math.random() * 36);   
  81.           rands[i] = chars.charAt(rand);   
  82.        }   
  83.   
  84.        return rands;   
  85.     }   
  86.        
  87.        private void drawRands(Graphics g , char [] rands)    
  88.        {   
  89.           g.setColor(Color.BLACK);   
  90.           g.setFont(new Font(null,Font.ITALIC|Font.BOLD,18));   
  91.   
  92.           //在不同的高度上輸出驗證碼的每個字符            
  93.           g.drawString("" + rands[0],1,17);   
  94.           g.drawString("" + rands[1],16,15);   
  95.           g.drawString("" + rands[2],31,18);   
  96.           g.drawString("" + rands[3],46,16);   
  97.           g.drawString("" + rands[4],61,14);   
  98.           g.drawString("" + rands[5],76,19);   
  99.   
  100.           System.out.println(rands);   
  101.        }   
  102.   
  103.        private void drawBackground(Graphics g)   
  104.   
  105.        {   
  106.            //畫背景   
  107.           g.setColor(new Color(0xDCDCDC));   
  108.           g.fillRect(00, WIDTH, HEIGHT);   
  109.   
  110.           //隨機(jī)產(chǎn)生120個干擾點   
  111.           for(int i=0; i<120; i++)   
  112.   
  113.           {   
  114.              int x = (int)(Math.random() * WIDTH);   
  115.   
  116.              int y = (int)(Math.random() * HEIGHT);   
  117.   
  118.              int red = (int)(Math.random() * 255);   
  119.   
  120.              int green = (int)(Math.random() * 255);   
  121.   
  122.              int blue = (int)(Math.random() * 255);   
  123.   
  124.              g.setColor(new Color(red,green,blue));           
  125.   
  126.              g.drawOval(x,y,1,0);   
  127.   
  128.           }   
  129.              
  130.           //加兩條干擾線   
  131.           g.drawLine(05905);   
  132.           g.drawLine(0159015);   
  133.   
  134.        }   
  135.   
  136.        public static void main(String args[]) {   
  137.            char[] chars = generateCheckCode();   
  138.   
  139.            System.out.println(chars);   
  140.        }   
  141. }  

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多