漁人碼頭

          天行健,君子以自強不息。地勢坤,君子以厚德載物。
          posts - 12, comments - 16, trackbacks - 0, articles - 43
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          JSP 使用 彩色圖片驗證碼( Servlet 生成)

          Posted on 2007-01-22 11:50 Fisher 閱讀(1326) 評論(1)  編輯  收藏 所屬分類: Java基礎
          起servlet服務吧
          首頁
          <img src="RandomCodeCtrl"/>

          web.xml
          <servlet>
          <servlet-name>RandomCodeCtrl</servlet-name>
          <servlet-class>com.chainway.util.RandomCodeCtrl</servlet-class>
          <load-on-startup>4</load-on-startup>
          </servlet>
          <servlet-mapping>
          <servlet-name>RandomCodeCtrl</servlet-name>
          <url-pattern>/RandomCodeCtrl</url-pattern>
          </servlet-mapping>

          RandomCodeCtrl:
          package com.chainway.util;

          import java.io.IOException;
          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          public class RandomCodeCtrl extends HttpServlet {
          private static final long serialVersionUID = 1L;
          protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {
          resp.setContentType("image/jpeg");
          resp.setHeader("Pragma","No-cache");
          resp.setHeader("Cache-Control","no-cache");
          resp.setDateHeader("Expires", 0);
          RandomCode rc = new RandomCode();
          try{
          rc.getRandcode(req,resp);
          }catch(Exception e){
          System.err.println(e);
          }
          }
          public void doPost(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
          doGet(request, response);
          }
          }

          //生成類
          //數字文字圖片驗證碼
          package com.chainway.util;

          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.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import javax.servlet.http.HttpSession;
          public class RandomCode {
          /**
          * 隨機取得一個字體
          * @param Random random 隨機數
          * @return Font 返回一個新字體
          */
          private synchronized Font getsFont(Random random){
          return new Font("Fixedsys",Font.CENTER_BASELINE,18);
          }
          /**
          * 返回一個隨機顏色
          * @param int fc 隨機數
          * @param int bc 隨機數
          * @param Random random 隨機數
          * @return Color 返回一個新顏色
          */
          synchronized Color getRandColor(int fc,int bc,Random random){
          if(fc>255) fc=255;
          if(bc>255) bc=255;
          int r=fc+random.nextInt(bc-fc-6);
          int g=fc+random.nextInt(bc-fc-4);
          int b=fc+random.nextInt(bc-fc-8);
          return new Color(r,g,b);
          }
          /**
          * 生成隨機數圖片
          */
          public synchronized void getRandcode(HttpServletRequest request,HttpServletResponse response)throws Exception{
          System.setProperty("java.awt.headless","true");
          HttpSession session = request.getSession();
          int width=80, height=26;//設置圖片大小
          BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
          Graphics g = image.getGraphics();
          Random random = new Random();
          g.fillRect(0, 0, width, height);//設定邊框
          g.setFont(new Font("Times New Roman",Font.ROMAN_BASELINE,18));
          g.setColor(getRandColor(111,133,random));
          //產生隨機線
          for (int i=0;i<11;i++){
          int x = random.nextInt(width);
          int y = random.nextInt(height);
          int xl = random.nextInt(13);
          int yl = random.nextInt(15);
          g.drawLine(x,y,x+xl,y+yl);
          }
          //產生隨機點
          g.setColor(getRandColor(130,150,random));
          //產生5個隨機數
          String sRand="";
          for (int i=0;i<5;i++){
          g.setFont(getsFont(random));
          g.setColor(new Color(random.nextInt(101),random.nextInt(111),random.nextInt(121)));
          //String rand=String.valueOf(getRandomString(random.nextInt(36)));
          String rand=String.valueOf(getRandomString(random.nextInt(10)));
          sRand+=rand;
          g.translate(random.nextInt(3),random.nextInt(3));
          g.drawString(rand,13*i,16);
          }
          session.removeAttribute("Rand");
          session.setAttribute("Rand",sRand);
          g.dispose();
          ImageIO.write(image, "JPEG", response.getOutputStream());
          }

          public synchronized String getRandomString(int num){
          String randstring = "0123456789";
          //String randstring = "0123456789abcdefghijklmnopqrstuvwxyz";
          return String.valueOf(randstring.charAt(num));
          }

          }

          //登陸判斷方法
          從session里面取驗證碼數字進行比較

          評論

          # re: JSP 使用 彩色圖片驗證碼( Servlet 生成)  回復  更多評論   

          2009-12-16 21:19 by 笑話論壇
          我在面頁調用時,怎么取出來的值總是上一次的啊?
          而且第一次取的值是空的

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


          網站導航:
           
          主站蜘蛛池模板: 柳林县| 长沙县| 五莲县| 东安县| 行唐县| 日喀则市| 油尖旺区| 五台县| 巴林右旗| 江西省| 西平县| 胶州市| 沂南县| 海淀区| 岫岩| 大化| 广水市| 卫辉市| 峡江县| 许昌市| 禄劝| 永德县| 东海县| 凤山市| 长葛市| 华亭县| 甘南县| 城固县| 平顺县| 武城县| 祁连县| 锡林浩特市| 望都县| 隆昌县| 阿克陶县| 嫩江县| 桦甸市| 吉林市| 奈曼旗| 涞源县| 东乌|