內蒙古java團隊

          j2se,j2ee開發組
          posts - 139, comments - 212, trackbacks - 0, articles - 65
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          JSP驗證碼大全之Servlet實現(一)

          Posted on 2010-04-28 09:59 帥子 閱讀(408) 評論(0)  編輯  收藏 所屬分類: J2EE技術專區
          ???????? 本文將介紹另一種J2EE中驗證碼的產生跟使用,即在Servlet中定義驗證碼的產生并使用,通過將驗證碼的生成封裝到JAVA類中,更好的達到代碼跟頁面分離的效果,因此提倡使用該方法。
          ??Servlet中實現四位數字驗證碼
          ???以下為在Servlet中實現四位數字驗證碼的源碼分析。
          ?

          import java.awt.image.*;
          import com.sun.image.codec.jpeg.*;
          import javax.servlet.*;
          import javax.servlet.http.*;
          import java.io.*;
          import java.util.*;
          import java.awt.*;
          /*
          ?* 功能:調用AuthCodeServlet可以生成一個4位數字的驗證碼圖片,驗證碼的圖片寬度和高度可以通過配置文件進行定義
          ?* 驗證碼調用格式為: /servlet/AuthCodeServlet?w=78&h=32
          ?* 或者使用默認長寬/servlet/AuthCodeServlet
          ?*/
          ?? public class AuthCodeServlet extends HttpServlet {
          ?? // 處理post
          ??? public void doPost(HttpServletRequest req,HttpServletResponse res)
          ??? throws ServletException,IOException {
          ??? doGet(req,res);
          ?}

          ?? //設置字體
          ?? private Font mFont=new Font("Times New Roman", Font.PLAIN,16);

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

          ???? HttpSession session=request.getSession();
          ???? response.setContentType("image/gif");
          ???? response.setHeader("Pragma","No-cache");
          ???? response.setHeader("Cache-Control","no-cache");
          ???? response.setDateHeader("Expires", 0);
          ???? int width=70; //驗證碼默認長度
          ???? int height=24; //驗證碼默認寬度
          ???? if(request.getParameter("w")!=null && !request.getParameter("w").equals(""))
          ????? width = Integer.parseInt(request.getParameter("w"));
          ???? if(request.getParameter("h")!=null && !request.getParameter("h").equals(""))
          ????? height = Integer.parseInt(request.getParameter("h"));
          ????????????????
          ???? ServletOutputStream out=response.getOutputStream(); //獲取輸出流
          ???? BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //新建驗證圖片,并設置驗證碼圖片的大小
          ???? Graphics gra=image.getGraphics(); //獲取圖形上下文
          ???? Random random=new Random();
          ???? gra.setColor(getRandColor(260,210));??? //設置驗證碼的圖片背景色
          ???? gra.fillRect(0,0,width,height);
          ???? gra.setColor(Color.BLUE); //設置字體色為藍色
          ???? gra.setFont(mFont); //設置定義的字體格式

          ???? // 隨機產生254條干擾直線,使圖象中的驗證碼不易被解析程序分析到
          ???? gra.setColor(getRandColor(110,240));
          ???? for (int i=0;i<254;i++)
          ???? {
          ????? int x = random.nextInt(width);
          ????? int y = random.nextInt(height);
          ???????????? int xl = random.nextInt(63);
          ???????????? int yl = random.nextInt(64);
          ????? gra.drawLine(x,y,x+xl,y+yl);
          ???? }

          ???? // 取隨機產生的驗證碼(4位數字)
          ???? String sRand="";
          ???? for (int i=0;i<4;i++){
          ???? String rand=String.valueOf(random.nextInt(353));
          ???? sRand+=rand;
          ???? // 將認證碼顯示到圖象中
          ????? gra.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
          ???? //調用隨機函數構建隨機顏色三素
          ???????? gra.drawString(rand,13*i+6,16);
          ???? }
          ???????? session.setAttribute("authCode",sRand);
          ???????? JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);
          ???????? encoder.encode(image);

          ?}

          ?? static Color getRandColor(int ff,int cc){
          ????????? //給定范圍獲得隨機顏色
          ????????? Random random = new Random();
          ????????? if(fc>255) ff=255;
          ????????? if(bc>255) cc=255;
          ????????? int r=ff+random.nextInt(cc-ff);
          ????????? int g=ff+random.nextInt(cc-ff);
          ????????? int b=ff+random.nextInt(cc-ff);
          ????????? return new Color(r,g,b);
          ?? }
          ??
          ?? static public String getAuthCode(HttpSession session){
          ??? //返回驗證碼
          ??? return (String)session.getAttribute("AuthCode");
          ?? }
          }

          主站蜘蛛池模板: 化隆| 南澳县| 西藏| 育儿| 永寿县| 金川县| 富裕县| 苍山县| 乐平市| 元朗区| 香格里拉县| 荔浦县| 银川市| 同江市| 永城市| 洛宁县| 招远市| 汉寿县| 临颍县| 尖扎县| 华宁县| 于都县| 五常市| 黔西县| 梨树县| 玉树县| 五原县| 大足县| 紫云| 恩施市| 扎兰屯市| 那曲县| 塔城市| 宿迁市| 鲁甸县| 贺兰县| 保山市| 贵州省| 郎溪县| 弋阳县| 田林县|