神秘的 J2ee 殿堂

          ·古之學者必有師·做學者亦要做師者·FIGHTING·

          servlet圖片驗證碼

          /**
           * 說明:生成驗證碼servlet
           * 編寫者:LiuYong
           * 日期:2008 8.7
           * 使用時直接把servlet訪問路徑傳給src就好了,如果要重新產生就把img的onclick加個document.getElementById("imgId").src="<%=request.getContextPath() %>/servlet/RandomCodeServlet";就ok,不過火狐里面不行。呵呵
           
          */
          package com.hunau.liuyong;

          import java.awt.Color;
          import java.awt.Font;
          import java.awt.Graphics2D;
          import java.awt.image.BufferedImage;
          import java.io.IOException;
          import java.util.Random;

          import javax.imageio.ImageIO;
          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;

          /**
           * <p>
           * Title:生成驗證碼
           * <p>
           * Description:在servlet中生成驗證碼
           * </p>
           * 
           
          */
          public class RandomCodeServlet extends HttpServlet {

              
          // 高度
              private int width = 90;

              
          // 寬度
              private int height = 20;

              
          protected void service(HttpServletRequest req, HttpServletResponse resp)
                      
          throws ServletException, java.io.IOException {
                  BufferedImage buffImg 
          = new BufferedImage(width, height,
                          BufferedImage.TYPE_INT_RGB);
                  Graphics2D g 
          = buffImg.createGraphics();
                  Random random 
          = new Random();
                  g.setColor(Color.WHITE);
                  g.fillRect(
          00, width, height);
                  
          // 設置字體
                  Font font = new Font("Times New Roman", Font.BOLD, 20);
                  g.setFont(font);
                  
          // 畫邊框
                  g.setColor(Color.GRAY);
                  g.drawRect(
          00, width - 1, height - 1);

                  g.setColor(Color.GRAY);
                  
          // 隨機產生干擾線
                  for (int i = 0; i < 50; i++) {
                      
          int x = random.nextInt(width);
                      
          int y = random.nextInt(height);
                      
          int x1 = random.nextInt(2);
                      
          int y1 = random.nextInt(2);
                      g.drawLine(x, y, x 
          + x1, y + y1);
                  }
                  
          // 數字字母集合
                  char[] numbersAndLettersStore = ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
                          .toCharArray();
                  String randomCode 
          = null;
                  
          int red = 0, green = 0, blue = 0;
                  
          for (int i = 0; i < 4; i++) {
                      red 
          = random.nextInt(255);
                      green 
          = random.nextInt(255);
                      blue 
          = random.nextInt(255);
                      g.setColor(
          new Color(red, green, blue));
                      String tem 
          = String.valueOf(numbersAndLettersStore[random
                              .nextInt(
          62)]);
                      randomCode 
          += tem;
                      g.drawString(tem, 
          15 * i + 1617);
                  }
                  
          // 驗證碼保存到Session范圍
                  HttpSession session = req.getSession();
                  session.setAttribute(
          "code", randomCode.toString());
                  
          // 禁止緩存
                  resp.setHeader("Prama""no-cache");
                  resp.setHeader(
          "Coche-Control""no-cache");
                  resp.setDateHeader(
          "Expires"0);
                  resp.setContentType(
          "image/jpeg");
                  
          // 將圖像輸出到
                  ServletOutputStream sos = resp.getOutputStream();
                  ImageIO.write(buffImg, 
          "jpeg", sos);
                  sos.close();
              }

          }

          posted on 2008-08-07 15:24 月芽兒 閱讀(1117) 評論(0)  編輯  收藏 所屬分類: J2EE學習心得

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          相冊

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 蚌埠市| 于都县| 分宜县| 电白县| 肃宁县| 宁波市| 安岳县| 皋兰县| 儋州市| 嘉黎县| 蒙自县| 金坛市| 金湖县| 安国市| 双流县| 景德镇市| 宣恩县| 偏关县| 简阳市| 姜堰市| 沿河| 尤溪县| 张北县| 会同县| 锡林浩特市| 孟连| 临邑县| 灵丘县| 繁昌县| 潮州市| 大厂| 基隆市| 页游| 大余县| 玉山县| 曲阜市| 建始县| 泗水县| 铁岭市| 巍山| 武鸣县|