小毅的驗證碼

          Posted on 2008-09-10 16:42 H2O 閱讀(179) 評論(0)  編輯  收藏 所屬分類: java
          checkCode.java
          package com.yz.checkcode;

          import java.io.IOException;    
          import java.io.PrintWriter;

          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;    
             
          import com.sun.image.codec.jpeg.JPEGCodec;    
          import com.sun.image.codec.jpeg.JPEGImageEncoder;    
             
          import java.awt.*;    
          import java.awt.image.*;    
          import java.util.*;    
             
          public class checkCode    
              extends HttpServlet {    
             
            public void doGet(HttpServletRequest request, HttpServletResponse response) throws   
                 ServletException, IOException {    
               response.reset();    
               response.setContentType("image/jpeg");    
               response.setHeader("Pragma","No-cache");
               response.setHeader("Cache-Control","no-cache");
               response.setHeader("Expires",   "Tues,   01   Jan   1980   00:00:00   GMT");   
              
             
          //在內存中創建圖象    
              int width = 58, height = 18;    
               BufferedImage image = new BufferedImage(width, height,    
                                                       BufferedImage.TYPE_INT_RGB);    
             
          //獲取圖形上下文    
               Graphics g = image.getGraphics();    
             
          //生成隨機類    
               Random random = new Random();    
             
          //設定背景色    
               g.setColor(new Color(201 + random.nextInt(50), 201 + random.nextInt(50),    
                                   201 + random.nextInt(50)));    
               g.fillRect(0, 0, width, height);    
             
          //設定字體    
               g.setFont(new Font("Times new Roman", Font.PLAIN, 18));    
             
          //畫邊框    
          g.setColor(new Color(255,140,0));    
          g.drawRect(0,0,width-1,height-1);    
             
          //隨機產生155條干擾線,使圖象中的認證碼不易被其它程序探測到    
               g.setColor(new Color(160 + random.nextInt(41), 160 + random.nextInt(41),    
                                   160 + random.nextInt(41)));    
              for (int i = 0; i 
          < 155
          ; i++) {    
                int x 
          = random.nextInt(width);    
                
          int y 
          = random.nextInt(height);    
                
          int xl 
          = random.nextInt(12);    
                
          int yl 
          = random.nextInt(12);    
                 
          g.drawLine(x, y, x + xl, y + yl);    
               }    
             
          //取隨機產生的認證碼
              String src 
          = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKMNOPQRSTUVWXYZ0123456789"
          ;
               String sRand 
          = ""
          ;    
              for (int i 
          = 0; 
          i < 4; i++) {    
                  int position
          =random.nextInt(src.length());
                  
          String radomChar
          =src.charAt(position)+"";
                 
          sRand +
          = radomChar;    
             
          //將認證碼顯示到圖象中    
                 g.setColor(new Color(20 + random.nextInt(111), 20 + random.nextInt(111),    
                                     20 + random.nextInt(111)));    
             
          //調用函數出來的顏色相同,可能是因為種子太接近,所以只能直接生成    
                 g.drawString(  radomChar, 13 * i + 6, 16);    
               }    
              
          //圖象生效    
               g.dispose(); 
               HttpSession session 
          = request.getSession(true);  
               
               
          //將認證碼存入SESSION    
                session.setAttribute("checkCode", sRand);
             
          //輸出圖象到頁面     
               ServletOutputStream out 
          = response.getOutputStream();    
               
          JPEGImageEncoder encoder 
          = JPEGCodec.createJPEGEncoder(out);    
               
          encoder.encode(image);    
               System.out.println("驗證碼:\t"+sRand);
               out.println(sRand);
               out.flush();
               out.close();
             }    
          }    

          getKey.java
          package com.yz.checkcode;

          import java.io.IOException;
          import java.io.PrintWriter;

          import javax.servlet.ServletException;
          import javax.servlet.ServletInputStream;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import javax.servlet.http.HttpSession;

          public class getKey extends HttpServlet {

              public void doGet(HttpServletRequest request, HttpServletResponse response)
                      throws ServletException, IOException {
                  this.doPost(request, response);
              }

              public void doPost(HttpServletRequest request, HttpServletResponse response)
                      throws ServletException, IOException {

                  response.setContentType("text/html");
                  response.setCharacterEncoding("utf-8");
                  PrintWriter out = response.getWriter();    
                  String key=request.getSession().getAttribute("checkCode").toString();
                  out.println(key);
                  out.flush();
                  out.close();
              }
          }

          posts - 0, comments - 21, trackbacks - 0, articles - 101

          Copyright © H2O

          主站蜘蛛池模板: 莱阳市| 崇仁县| 石棉县| 定南县| 沙湾县| 漳州市| 芒康县| 康保县| 星子县| 延津县| 云梦县| 黄石市| 三台县| 嘉峪关市| 靖安县| 万宁市| 昭平县| 韶关市| 那坡县| 郯城县| 寿宁县| 阳泉市| 昭觉县| 宜春市| 阿坝| 惠州市| 滕州市| 抚顺市| 松潘县| 宁河县| 临澧县| 论坛| 安义县| 东莞市| 铜川市| 佳木斯市| 西贡区| 彩票| 家居| 临漳县| 固安县|