allen
          專注于java ee技術,包括struts,jsf,webwork,spring,hibernate,ibatis
          posts - 7,  comments - 9,  trackbacks - 0


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

          import javax.imageio.ImageIO;
          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          public class RadomCodeServlet extends HttpServlet
          {

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


          ?public void doPost(HttpServletRequest request, HttpServletResponse response)
          ???throws ServletException, IOException {
          ??//設置頁面不緩存
          ??response.setHeader("Pragma","No-cache");
          ??response.setHeader("Cache-Control","no-cache");
          ??response.setDateHeader("Expires", 0);
          ??//在內存中創建圖象
          ??int width=60, height=20;
          ??BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

          ??//獲取圖形上下文
          ??Graphics g = image.getGraphics();

          ??//生成隨機類
          ??Random random = new Random();

          ??//設定背景色
          ??g.setColor(getRandColor(200,250));
          ??g.fillRect(0, 0, width, height);

          ??//設定字體
          ??g.setFont(new Font("Times New Roman",Font.PLAIN,18));
          ??
          ??//隨機產生155條干擾線,使圖象中的認證碼不易被其它程序探測到
          ??g.setColor(getRandColor(160,200));
          ??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);
          ??}
          ??
          ??//取隨機產生的認證碼(4位數字)
          ??String sRand="";
          ??for (int i=0;i<4;i++)
          ??{
          ????? String rand=String.valueOf(random.nextInt(10));
          ????? sRand+=rand;
          ????? // 將認證碼顯示到圖象中
          ????? g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//調用函數出來的顏色相同,可能是因為種子太接近,所以只能直接生成
          ????? g.drawString(rand,13*i+6,16);
          ??}

          ??//將認證碼存入SESSION
          ??request.getSession().setAttribute("rand",sRand);


          ??//圖象生效
          ??g.dispose();

          ??//輸出圖象到頁面
          ??ImageIO.write(image, "JPEG", response.getOutputStream());??
          ?}
          ?
          ?//給定范圍獲得隨機顏色
          ?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);
          ??? }
          ?調用:
          ?<td height="25">
          ????????????<div align="right">
          ?????????????<font color="#000000">驗證碼:</font>
          ????????????</div>
          ???????????</td>
          ???????????<td align="left">
          ????????????<input type="text" name="randCode" size=10></input>
          ????????????<img style="cursor:hand" name="validatecode"
          ?????????????src=" servlet/RadomCodeServlet" height="17" align="middle"
          ?????????????onclick="document.validatecode.src=' servlet/RadomCodeServlet'">
          ???????????</td>

          posted on 2006-12-08 13:51 robbin163 閱讀(248) 評論(0)  編輯  收藏

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


          網站導航:
           

          <2006年12月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 江永县| 延边| 唐山市| 石棉县| 白水县| 静安区| 邵阳县| 肃宁县| 景洪市| 英吉沙县| 清丰县| 和平县| 临潭县| 方山县| 邢台市| 依兰县| 延庆县| 克拉玛依市| 黄石市| 蚌埠市| 平阳县| 土默特右旗| 自治县| 河池市| 响水县| 新河县| 沙洋县| 新巴尔虎左旗| 鄄城县| 鄂托克前旗| 河北区| 明光市| 格尔木市| 绵阳市| 苗栗市| 姜堰市| 德钦县| 镇巴县| 高清| 大同市| 齐齐哈尔市|