<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 19, comments - 53, trackbacks - 0, articles - 283
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    java JSP 頁面驗證碼制作

    Posted on 2009-05-14 23:02 Gavin.lee 閱讀(1163) 評論(0)  編輯  收藏 所屬分類: web 積累(前端 + 后臺)
    這是我以前做BBS時候用的一個驗證碼機制。

    register.jsp + RegistServlet.java +web.xml + RandomValidateCode.java

    register.jsp 頁面:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"
    ;
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <base href="<%=basePath% />"/>
    <title>注冊首頁面</title>
    </style>
    </head>
    <body>
    <form action="register.do" name="registerForm">
    <table border="0" width="798" height="146">    
     
    <tr>

      
    <td > 驗證碼:</td>
      
    <td ><input type="text" size="20" name="validate" />
      
    <td ><img src="validate.do" onclick="javascript:this.src='validate.do?ran='+Math.random()"    alt="" />(如果看不清請點擊圖片進行更換)</td>
     
    </tr>
    </table>   
    <img src="images/button/register.jpg" type="submit" style="cursor:pointer" />

    </form>
    </body>
    </html>



    RegistServlet.java:

     

    package com.handson.bbs.servlet;
    import
     java.io.IOException;
    import
     javax.servlet.ServletException;
    import
     javax.servlet.http.HttpServletRequest;
    import
     javax.servlet.http.HttpServletResponse;
    import
     com.handson.commons.util.RandomValidateCode;
    public class RegisterServlet extends BaseServlet 
    {
     
    public void
     doGet(HttpServletRequest request, HttpServletResponse response)
       
    throws ServletException, IOException 

      String validate 
    = request.getParameter("validate"
    );  
      String sessionValidate 
    =
     RandomValidateCode.getValidateCodeFromSession(request.getSession());  
      
    if(!validate.equals(sessionValidate))
    {
       request.setAttribute(
    "error""請正確輸入驗證碼!"
    );
       
    this.forward(request, response, "/register.jsp"
    );
       
    return
    ;
      }

      
     }

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

      
    this
    .doGet(request, response);
     }


    }



    web.xml 配置:

    <servlet>
      
    <servlet-name>validateCodeServlet</servlet-name>
      
    <servlet-class>com.handson.commons.util.ValidateCodeServlet</servlet-class>
     
    </servlet>
    <servlet-mapping>
      
    <servlet-name>validateCodeServlet</servlet-name>
      
    <url-pattern>/validate.do</url-pattern>
     
    </servlet-mapping>



    RandomValidateCode.java:

    package com.handson.commons.util;
    import java.util.*;
    import java.awt.*;
    import java.awt.image.*;
    import javax.imageio.*;
    import java.io.*;
    import javax.servlet.http.*;

    /**
     * @descripte create validate code
     * @author Gavin.lee
     * @date 2009-5-14 22:58
     *
     */
    public class RandomValidateCode {
     public static final String KEY_VALIDATE_CODE = "validate_code";
     public static final int DIGITAL_VALIDATE_CODE = 1; //數(shù)字型驗證碼
     public static final int LETTER_VALIDATE_CODE = 2;  //字母型驗證碼
     public static final int MIX_VALIDATE_CODE = 3;  //數(shù)字和字母混合型驗證碼
     
     private static final String PIC_FORMAT = "JPEG";
     private int numberCount = 4;
     private BufferedImage image;
     private int width = 72;
     private int height= 24;
     private String validateCode;
     private Font font = new Font("Times New Roman",Font.PLAIN,20);
     private int validateCodeType = DIGITAL_VALIDATE_CODE;
     
     public RandomValidateCode() {
      this(DIGITAL_VALIDATE_CODE);
     }
     
     public RandomValidateCode(int validateCodeType) {
      if(validateCodeType == DIGITAL_VALIDATE_CODE 
        || validateCodeType == MIX_VALIDATE_CODE
        || validateCodeType == LETTER_VALIDATE_CODE) {
       this.validateCodeType = validateCodeType;
      }
      image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
      generateImage();
     }
     
     /**
      * 給定范圍獲得隨機顏色
      * @param colorFrom
      * @param colorEnd
      * @return
      */
     private Color generateRandomColor(int colorFrom, int colorEnd) {
      Random random = new Random();
      colorFrom = colorFrom > 255 ? 255 : colorFrom;
      colorEnd  = colorEnd > 255 ? 255 : colorEnd;
      int red = colorFrom + random.nextInt(colorEnd - colorFrom);
      int green = colorFrom + random.nextInt(colorEnd - colorFrom);
      int blue = colorFrom + random.nextInt(colorEnd - colorFrom);
      return new Color(red, green, blue);
     }
     
     private void generateImage() {
      Graphics g = image.getGraphics(); //獲取圖形上下文
      Random random = new Random();
      g.setFont(font);
      drawBackground(g, random);
      
      StringBuffer strBuf = new StringBuffer();
      int count = 0;
      while(count 
    < numberCount
    ) {
       int randNum 
    = random.nextInt((int)'z');
       
    if(this.validateCodeType == 
    MIX_VALIDATE_CODE && ! Character.isLetterOrDigit(randNum)) {
        continue;
       } else if(this.validateCodeType 
    == 
    DIGITAL_VALIDATE_CODE && ! Character.isDigit(randNum)) { //只顯示數(shù)字驗證碼
        continue;
       } else if(this.validateCodeType 
    == 
    LETTER_VALIDATE_CODE && ! Character.isLetter(randNum)) { //只顯示數(shù)字驗證碼
        continue;
       }
       
       // 將認(rèn)證碼顯示到圖象中
       String randChar 
    = String.valueOf((char)randNum);
       
    g.setColor(new Color(30+random.nextInt(110), 30+random.nextInt(110), 30+random.nextInt(110)));
       g.drawString(randChar, 16*count+4, 18);
       strBuf.append(randChar);
       count++;
      }
      validateCode 
    = strBuf.toString();
      
    g.dispose();//釋放圖形相關(guān)資源
     }

     private void drawBackground(Graphics g, Random random) {
      //設(shè)定背景色
      g.setColor(generateRandomColor(210, 250));
      g.fillRect(0, 0, width, height);
      g.setColor(new Color(255, 255, 255));
      g.drawRect(0, 0, width-1, height-1); //畫邊框
      
      //隨機產(chǎn)生155條干擾線,使圖象中的認(rèn)證碼不易被其它程序探測到
      g.setColor(generateRandomColor(160,200));
      for(int i 
    = 0; 
    i < 155; i++) {
       int x 
    = random.nextInt(width);
       
    int y 
    = random.nextInt(height);
       
    int xl 
    = random.nextInt(16);
       
    int yl 
    = random.nextInt(16);
       
    g.drawLine(x,y,x+xl,y+yl);
      }
     }
      
     public void outputImage(OutputStream outputStream) {
      if(outputStream 
    == 
    null)
       return;
      
      try {
       ImageIO.write(image, PIC_FORMAT, outputStream);
      } catch (IOException e) {
       e.printStackTrace();
      }
     }
     
     public String getValidateCode() {
      return this.validateCode;
     }
     
     public void bindingRequest(HttpServletRequest request, HttpServletResponse response) { 
      try {
       //set the random number into session
       request.getSession().setAttribute(KEY_VALIDATE_CODE, validateCode);
       
       //set page to no cache for Web Browser
       response.reset();
       response.setContentType("image/*");
       response.setHeader("Pragma","No-cache");
       response.setHeader("Cache-Control","no-cache");
       response.setDateHeader("Expires", 0);

       //output the image stream into response
       outputImage(response.getOutputStream());
      } catch (IOException e) {
       e.printStackTrace();
      }
     }
     
     public static String getValidateCodeFromSession(HttpSession session) {
      return (String)session.getAttribute(KEY_VALIDATE_CODE);
     }
     
     public static void removeValidateCodeFromSession(HttpSession session) {
      session.removeAttribute(KEY_VALIDATE_CODE);
     }
     
    }

    主站蜘蛛池模板: 日韩亚洲翔田千里在线| 亚洲毛片av日韩av无码| 亚洲日韩区在线电影| 免费国产叼嘿视频大全网站| 亚洲欧洲∨国产一区二区三区 | 亚洲国产三级在线观看| 两个人看的www高清免费视频| 青青草原1769久久免费播放 | 亚洲日本视频在线观看| 99热精品在线免费观看| 亚洲综合激情视频| 免费无码成人AV片在线在线播放| 亚洲精品无码mv在线观看网站| 黄色网址在线免费| 四虎影视永久在线精品免费| 国产亚洲自拍一区| 18pao国产成视频永久免费| 亚洲最大黄色网站| 亚洲国产一区二区三区青草影视| 一二三四影视在线看片免费 | 亚洲人成伊人成综合网久久| 成人毛片18女人毛片免费96| 免费一级毛suv好看的国产网站 | 亚洲精品国产啊女成拍色拍| 亚洲精品tv久久久久久久久久| 久久久久国产精品免费看 | 久艹视频在线免费观看| 无人视频免费观看免费视频| 国产精品亚洲精品日韩电影| 亚洲午夜久久久精品影院| 亚洲av女电影网| 免费一级毛片在线播放不收费| 亚洲AV女人18毛片水真多| 国产亚洲美女精品久久久2020| 一级毛片在线播放免费| 亚洲五月六月丁香激情| 2022年亚洲午夜一区二区福利| 四虎最新永久免费视频| 看亚洲a级一级毛片| 亚洲AV综合永久无码精品天堂| 国产在线19禁免费观看|