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

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

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

    為了防止某些用戶使用軟件進行登錄和發布信息,很多網站在用戶登錄或者發布信息時,都要求用戶輸入驗證碼。驗證碼通常是以一幅圖片的形式顯示的,用戶按照圖片中顯示的數字或者字母依次輸入,服務端將對用戶輸入和驗證碼進行比較,以判斷用戶是否經過檢驗。由于驗證碼都是隨機生成的,自動發布信息的軟件無法知道生成的驗證碼。

     

      1生成圖片的程序:
      2/*
      3 * RandomCodeServlet.java
      4 *
      5 * Created on 2007-5-29, 0:51:02
      6 *
      7 * To change this template, choose Tools | Template Manager
      8 * and open the template in the editor.
      9 */

     10
     11package com.javahe.image;
     12
     13/**
     14 *
     15 * @author java-he
     16 */

     17import java.awt.Color;
     18import java.awt.Font;
     19import java.awt.Graphics2D;
     20import java.awt.image.BufferedImage;
     21import java.util.Random;
     22import javax.imageio.ImageIO;
     23
     24import javax.servlet.*;
     25import java.io.*;
     26import javax.servlet.http.*;
     27
     28public class RandomCodeServlet extends HttpServlet {
     29    //驗證碼圖片的寬度。
     30    private int width=60;
     31    //驗證碼圖片的高度。
     32    private int height=20;
     33    
     34    protected void service(HttpServletRequest req, HttpServletResponse resp)
     35            throws ServletException, java.io.IOException {
     36        BufferedImage buffImg=new BufferedImage(width,height,
     37                BufferedImage.TYPE_INT_RGB);
     38        Graphics2D g=buffImg.createGraphics();
     39        
     40        //創建一個隨機數生成器類。
     41        Random random=new Random();
     42        
     43        g.setColor(Color.WHITE);
     44        g.fillRect(0,0,width,height);
     45        
     46        //創建字體,字體的大小應該根據圖片的高度來定。
     47        Font font=new Font("Times New Roman",Font.PLAIN,18);
     48        //設置字體。
     49        g.setFont(font);
     50        
     51        //畫邊框。
     52        g.setColor(Color.BLACK);
     53        g.drawRect(0,0,width-1,height-1);
     54        
     55        //隨機產生160條干擾線,使圖象中的認證碼不易被其它程序探測到。
     56        g.setColor(Color.GRAY);
     57        for (int i=0;i<160;i++{
     58            int x = random.nextInt(width);
     59            int y = random.nextInt(height);
     60            int xl = random.nextInt(12);
     61            int yl = random.nextInt(12);
     62            g.drawLine(x,y,x+xl,y+yl);
     63        }

     64        
     65        
     66        //randomCode用于保存隨機產生的驗證碼,以便用戶登錄后進行驗證。
     67        StringBuffer randomCode=new StringBuffer();
     68        int red=0,green=0,blue=0;
     69        
     70        //隨機產生4位數字的驗證碼。
     71        for (int i=0;i<4;i++{
     72            //得到隨機產生的驗證碼數字。
     73            String strRand=String.valueOf(random.nextInt(10));
     74            
     75            //產生隨機的顏色分量來構造顏色值,這樣輸出的每位數字的顏色值都將不同。
     76            red=random.nextInt(110);
     77            green=random.nextInt(50);
     78            blue=random.nextInt(50);
     79            
     80            //用隨機產生的顏色將驗證碼繪制到圖像中。
     81            g.setColor(new Color(red,green,blue));
     82            g.drawString(strRand,13*i+6,16);
     83            
     84            //將產生的四個隨機數組合在一起。
     85            randomCode.append(strRand);
     86        }

     87        //將四位數字的驗證碼保存到Session中。
     88        HttpSession session=req.getSession();
     89        session.setAttribute("randomCode",randomCode.toString());
     90        
     91        //禁止圖像緩存。
     92        resp.setHeader("Pragma","no-cache");
     93        resp.setHeader("Cache-Control","no-cache");
     94        resp.setDateHeader("Expires"0);
     95        
     96        resp.setContentType("image/jpeg");
     97        
     98        //將圖像輸出到Servlet輸出流中。
     99        ServletOutputStream sos=resp.getOutputStream();
    100        ImageIO.write(buffImg, "jpeg",sos);
    101        sos.close();
    102    }

    103}

    104
    105


     1寫好后在web.xml中添加對應的servlet。然后頁面調用的時候用。
     2<%@page contentType="text/html"%>
     3<%@page pageEncoding="UTF-8"%>
     4<%--
     5The taglib directive below imports the JSTL library. If you uncomment it,
     6you must also add the JSTL library to the project. The Add Library action
     7on Libraries node in Projects view can be used to add the JSTL 1.1 library.
     8--
    %>
     9<%--
    10<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"
    %> 
    11--%>
    12<%
    13if(request.getParameter("random")!=null)
    14{
    15    if(request.getParameter("random").equals(session.getAttribute("randomCode")))
    16    {
    17        out.println("ok!");
    18    }
    19}
    20
    %>
    21<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    22"http://www.w3.org/TR/html4/loose.dtd">
    23
    24<html>
    25    <head><title>登錄頁面</title>
    26    <body>
    27        <form method="POST" action="index.jsp">
    28            <table>
    29                <tr>
    30                    <td>用戶名:</td>
    31                    <td><input type="text" name="username"></td>
    32                </tr>
    33                <tr>
    34                    <td>密碼:</td>
    35                    <td><input type="password" name="password"></td>
    36                </tr>
    37                <tr>
    38                    <td>驗證碼:</td>
    39                    <td>
    40                        <input type="text" name="random" maxlength="4">
    41                    <img src="imgcode">
    42                    </td>
    43                </tr>
    44                <tr>
    45                    <td><input type="reset" value="重填"></td>
    46                    <td><input type="submit" value="提交"></td>
    47                </tr>
    48            </table>
    49        </form>
    50    </body>
    51</html>
    52

     

    最近用netbeans 總容易發生一個運行錯誤,指向

    <nbdeploy debugmode="false" clientUrlPart="${client.urlPart}" forceRedeploy="${forceRedeploy}"/>

    。感覺是綁定tomcat失敗。今天晚上調式這個程序的時候又遇到這個問題。發現重啟電腦后,就正常了。也許是先前運行了其他tomcat下的程序吧。

     

    sun的網站看看

    http://forum.java.sun.com/thread.jspa?threadID=610420&messageID=4240787

    發現不少人遇到同樣問題,但是具體似乎沒有說出個所以然,我也不想深究,必定問題自己能解決就行。呵呵。看來netbeans M9還是不夠好哦。期待beta版本。

     

    感覺M9 運行,或者編譯都顯得很慢。呵呵,也許是我電腦內存只有 512M 的原因吧。

    posted on 2007-05-29 02:13 -274°C 閱讀(4438) 評論(3)  編輯  收藏 所屬分類: JSP計算機綜合


    FeedBack:
    # re: 隨機生成動態驗證碼
    2007-05-29 08:36 | Swing
    另外一個提倡的方法是生成隨機數以后 把相應的圖片畫出來
    這樣可以根據需要調用隨機數的風格  回復  更多評論
      
    # re: 隨機生成動態驗證碼
    2008-01-30 22:38 | java綜合網
    http://www.javazh.cn
    java綜合網
    不錯,不錯哦  回復  更多評論
      
    # re: 隨機生成動態驗證碼
    2014-05-01 20:56 | 廈華
    fdfdfdf  回復  更多評論
      

    常用鏈接

    留言簿(21)

    隨筆分類(265)

    隨筆檔案(242)

    相冊

    JAVA網站

    關注的Blog

    搜索

    •  

    積分與排名

    • 積分 - 914685
    • 排名 - 40

    最新評論

    主站蜘蛛池模板: 两个人看的www视频免费完整版| 女bbbbxxxx另类亚洲| 国产福利在线观看永久免费| 国产免费私拍一区二区三区| 亚洲国产成人精品无码区花野真一| 美女视频黄的全免费视频网站| 亚洲激情校园春色| 国产99视频精品免费观看7| 精品国产成人亚洲午夜福利| 成人免费无毒在线观看网站| 亚洲精品无码专区| 免费在线观看毛片| 久久av免费天堂小草播放| 亚洲第一AAAAA片| 69国产精品视频免费| 2020亚洲男人天堂精品| 免费在线观看亚洲| 久久成人永久免费播放| 亚洲国产精品久久久久婷婷老年| 免费A级毛片无码A∨免费| 国产成人精品日本亚洲专一区| 免费毛片在线播放| 精品无码一级毛片免费视频观看 | 羞羞漫画页面免费入口欢迎你| 亚洲а∨天堂久久精品| 91成人免费福利网站在线| 亚洲视频在线免费看| 日韩中文字幕免费| a级毛片免费播放| 国产成人亚洲精品| 久久亚洲欧洲国产综合| 黄在线观看www免费看| 亚洲AV无码精品国产成人| 亚洲精品乱码久久久久久按摩 | 一本色道久久88亚洲综合| 日本一道本不卡免费| 亚洲熟女综合色一区二区三区| 久久亚洲中文字幕精品一区| 免费观看激色视频网站(性色)| 最好2018中文免费视频| 久久久久亚洲Av无码专|