<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    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; //數字型驗證碼
     public static final int LETTER_VALIDATE_CODE = 2;  //字母型驗證碼
     public static final int MIX_VALIDATE_CODE = 3;  //數字和字母混合型驗證碼
     
     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)) { //只顯示數字驗證碼
        continue;
       } else if(this.validateCodeType 
    == 
    LETTER_VALIDATE_CODE && ! Character.isLetter(randNum)) { //只顯示數字驗證碼
        continue;
       }
       
       // 將認證碼顯示到圖象中
       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();//釋放圖形相關資源
     }

     private void drawBackground(Graphics g, Random random) {
      //設定背景色
      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); //畫邊框
      
      //隨機產生155條干擾線,使圖象中的認證碼不易被其它程序探測到
      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);
     }
     
    }

    主站蜘蛛池模板: 全免费a级毛片免费看| 亚洲成色www久久网站夜月| 鲁啊鲁在线视频免费播放| 国产亚洲精品激情都市| 在线看片韩国免费人成视频| 国产亚洲成在线播放va| 亚洲欧洲在线观看| 国产精品亚洲综合| 一本色道久久综合亚洲精品高清 | 无码毛片一区二区三区视频免费播放 | 国产精品亚洲AV三区| AV大片在线无码永久免费| 亚洲av无码一区二区三区四区| 亚洲中文字幕无码爆乳AV| 成人A毛片免费观看网站| 亚洲系列中文字幕| 98精品全国免费观看视频| 亚洲av永久无码精品网址| 亚洲AV无码一区二区三区DV| 精品四虎免费观看国产高清午夜| 国产亚洲大尺度无码无码专线| 亚洲免费视频观看| 亚洲精品国产福利片| 亚洲综合激情另类专区| 中国极品美軳免费观看| 亚洲中文字幕久久精品无码VA| 国产乱子伦精品免费无码专区| 免费观看亚洲人成网站| 亚洲精品美女久久久久| 亚洲精品无码久久久久| 免费观看国产精品| 成人毛片免费观看| 野花视频在线官网免费1| 亚洲啪啪免费视频| 亚洲av不卡一区二区三区 | 亚洲av中文无码乱人伦在线播放| 又粗又硬又大又爽免费视频播放| 一级毛片免费播放试看60分钟| 国产精品亚洲mnbav网站| 国产精品视频永久免费播放| 午夜影院免费观看|