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位隨機(jī)字母數(shù)字字符串
               String s = RandomStringUtils.random(4, true, true);
               
               // 保存入session,用于與用戶的輸入進(jìn)行比較.
               // 注意比較完之后清除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();
               // 設(shè)定背景色
               g.setColor(getRandColor(200, 250));
               g.fillRect(0, 0, width, height);

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

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

               // 隨機(jī)產(chǎn)生干擾線,使圖象中的認(rèn)證碼不易被其它程序探測到
               g.setColor(getRandColor(160, 200));
               // 生成隨機(jī)類
               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);
               }

               // 將認(rèn)證碼顯示到圖象中
               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) { // 給定范圍獲得隨機(jī)顏色
             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頁面的調(diào)用
          <html:img page="/validatecode.do" border="0" onclick="this.src='/validatecode.do'" alt="請輸入此驗證碼,如看不清請點擊刷新。" style="cursor:pointer" />
          posted on 2008-06-27 10:51 greedy 閱讀(293) 評論(0)  編輯  收藏 所屬分類: Struts

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 新丰县| 桑日县| 贵州省| 上蔡县| 通河县| 浦城县| 泸西县| 红桥区| 南皮县| 朝阳县| 东山县| 杨浦区| 石门县| 安乡县| 乳山市| 郎溪县| 石家庄市| 杨浦区| 屏边| 云梦县| 宝清县| 会宁县| 青神县| 宝山区| 黄骅市| 茶陵县| 拜泉县| 陆河县| 塔河县| 华坪县| 阜新市| 吴堡县| 商都县| 龙门县| 黄大仙区| 光山县| 田林县| 双峰县| 贞丰县| 嘉黎县| 合川市|