Greedy的工作室

          posts - 23,comments - 7,trackbacks - 0

           

          package cn.com.lough.struts.action;

          import java.awt.Color;
          import java.awt.Font;
          import java.awt.Graphics;
          import java.awt.image.BufferedImage;
          import java.util.Random;

          import javax.imageio.ImageIO;
          import javax.servlet.ServletOutputStream;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import javax.servlet.http.HttpSession;

          import org.apache.struts.action.Action;
          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionForward;
          import org.apache.struts.action.ActionMapping;
          import org.apache.commons.lang.RandomStringUtils;

          /**
          * MyEclipse Struts Creation date: 01-11-2007
          *
          * XDoclet definition:
          *
          * @struts.action validate="true"
          */
          public class ValidatecodeAction extends Action {
           /*
            * Generated Methods
            */

           /**
            * Method execute
            *
            * @param mapping
            * @param form
            * @param request
            * @param response
            * @return ActionForward
            */
           public ActionForward execute(ActionMapping mapping, ActionForm form,
               HttpServletRequest request, HttpServletResponse response) {
             try {
               int width = 50;
               int height = 18;
               // 取得一個4位隨機字母數字字符串
               String s = RandomStringUtils.random(4, true, true);
               
               // 保存入session,用于與用戶的輸入進行比較.
               // 注意比較完之后清除session.
               HttpSession session = request.getSession(true);
               session.setAttribute("validateCode", s);

               response.setContentType("images/jpeg");
               response.setHeader("Pragma", "No-cache");
               response.setHeader("Cache-Control", "no-cache");
               response.setDateHeader("Expires", 0);

               ServletOutputStream out = response.getOutputStream();
               BufferedImage image = new BufferedImage(width, height,
                   BufferedImage.TYPE_INT_RGB);
               Graphics g = image.getGraphics();
               // 設定背景色
               g.setColor(getRandColor(200, 250));
               g.fillRect(0, 0, width, height);

               // 設定字體
               Font mFont = new Font("Times New Roman", Font.BOLD, 18);// 設置字體
               g.setFont(mFont);

               // 畫邊框
               // g.setColor(Color.BLACK);
               // g.drawRect(0, 0, width - 1, height - 1);

               // 隨機產生干擾線,使圖象中的認證碼不易被其它程序探測到
               g.setColor(getRandColor(160, 200));
               // 生成隨機類
               Random random = new Random();
               for (int i = 0; i < 155; i++) {
                 int x2 = random.nextInt(width);
                 int y2 = random.nextInt(height);
                 int x3 = random.nextInt(12);
                 int y3 = random.nextInt(12);
                 g.drawLine(x2, y2, x2 + x3, y2 + y3);
               }

               // 將認證碼顯示到圖象中
               g.setColor(new Color(20 + random.nextInt(110), 20 + random
                   .nextInt(110), 20 + random.nextInt(110)));

               g.drawString(s, 2, 16);

               // 圖象生效
               g.dispose();
               // 輸出圖象到頁面
               ImageIO.write((BufferedImage) image, "JPEG", out);
               out.close();
             } catch (Exception e) {
               e.printStackTrace();
             }
             return null;
           }

           private Color getRandColor(int fc, int bc) { // 給定范圍獲得隨機顏色
             Random random = new Random();
             if (fc > 255)
               fc = 255;
             if (bc > 255)
               bc = 255;
             int r = fc + random.nextInt(bc - fc);
             int g = fc + random.nextInt(bc - fc);
             int b = fc + random.nextInt(bc - fc);
             return new Color(r, g, b);
           }
          }



          jsp頁面的調用
          <html:img page="/validatecode.do" border="0" onclick="this.src='/validatecode.do'" alt="請輸入此驗證碼,如看不清請點擊刷新。" style="cursor:pointer" />
          posted on 2008-06-27 10:51 greedy 閱讀(294) 評論(0)  編輯  收藏 所屬分類: Struts

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 榆树市| 江门市| 阜新| 阳泉市| 灵台县| 固镇县| 阿克陶县| 广昌县| 广州市| 德格县| 涿州市| 台东县| 萝北县| 大同市| 林周县| 宾川县| 佛冈县| 太湖县| 松江区| 巴里| 长治市| 融水| 时尚| 钦州市| 江阴市| 绥德县| 扶余县| 金昌市| 桓台县| 称多县| 常熟市| 崇仁县| 平远县| 拉萨市| 赞皇县| 东乌珠穆沁旗| 韩城市| 阿勒泰市| 观塘区| 新源县| 吴堡县|