欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用Servlet生成驗證碼圖片

 更新時間:2021年08月24日 09:08:09   作者:IT教育-湯小洋  
這篇文章主要為大家詳細(xì)介紹了Java使用Servlet生成驗證碼圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Java使用Servlet生成驗證碼圖片的具體代碼,供大家參考,具體內(nèi)容如下

一、實現(xiàn)思路

1、使用BufferedImage用于在內(nèi)存中存儲生成的驗證碼圖片
2、使用Graphics來進行驗證碼圖片的繪制,并將繪制在圖片上的驗證碼存放到session中用于后續(xù)驗證
3、最后通過ImageIO將生成的圖片進行輸出
4、頁面通過訪問servlet來獲取并展示驗證碼
5、在后臺獲取頁面提交的驗證碼,然后和存放在session中的驗證碼進行比對,進行校驗

二、生成驗證碼

生成驗證碼的servlet,如下所示:

@WebServlet("/code")
public class CodeController {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("utf-8");

        BufferedImage bfi = new BufferedImage(80,25,BufferedImage.TYPE_INT_RGB);
        Graphics g = bfi.getGraphics();
        g.fillRect(0, 0, 80, 25);

        //驗證碼字符范圍
        char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
        Random r = new Random();
        int index;
        StringBuffer sb = new StringBuffer(); //保存字符串
        for(int i=0; i<4; i++){
            index = r.nextInt(ch.length);
            g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
            Font font = new Font("宋體", 30, 20);
            g.setFont(font);
            g.drawString(ch[index]+"", (i*20)+2, 23);
            sb.append(ch[index]);
        }

        // 添加噪點
        int area = (int) (0.02 * 80 * 25);
        for(int i=0; i<area; ++i){
            int x = (int)(Math.random() * 80);
            int y = (int)(Math.random() * 25);
            bfi.setRGB(x, y, (int) (Math.random() * 255));
        }

        //設(shè)置驗證碼中的干擾線
        for (int i = 0; i < 4; i++) {
            //隨機獲取干擾線的起點和終點
            int xstart = (int)(Math.random() * 80);
            int ystart = (int)(Math.random() * 25);
            int xend = (int)(Math.random() * 80);
            int yend = (int)(Math.random() * 25);
            g.setColor(interLine(1, 255));
            g.drawLine(xstart, ystart, xend, yend);
        }

        HttpSession session = request.getSession();  //保存到session
        session.setAttribute("verificationCode", sb.toString());

        ImageIO.write(bfi, "JPG", response.getOutputStream());  //寫到輸出流

    }

    private Color interLine(int Low, int High){
        if(Low > 255)
            Low = 255;
        if(High > 255)
            High = 255;
        if(Low < 0)
            Low = 0;
        if(High < 0)
            High = 0;
        int interval = High - Low;
        int r = Low + (int)(Math.random() * interval);
        int g = Low + (int)(Math.random() * interval);
        int b = Low + (int)(Math.random() * interval);
        return new Color(r, g, b);
    }

}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java開發(fā)只要tomcat設(shè)計模式用的好下班就能早

    java開發(fā)只要tomcat設(shè)計模式用的好下班就能早

    這篇文章主要為大家介紹了java開發(fā)只要tomcat設(shè)計模式的示例詳解,<BR>只要設(shè)計模式用的好下班就能早,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 淺談springboot @Repository與@Mapper的區(qū)別

    淺談springboot @Repository與@Mapper的區(qū)別

    本文主要介紹了淺談springboot @Repository與@Mapper的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java Servlet中Response對象的使用方法

    Java Servlet中Response對象的使用方法

    本文介紹了Java Servlet中Response對象的使用方法,包括設(shè)置響應(yīng)頭、設(shè)置響應(yīng)編碼、向客戶端發(fā)送數(shù)據(jù)、重定向等操作,同時介紹了常用的響應(yīng)狀態(tài)碼和響應(yīng)類型,幫助讀者更好地理解和掌握Servlet中Response對象的用法
    2023-05-05
  • Java中FilterInputStream和FilterOutputStream的用法詳解

    Java中FilterInputStream和FilterOutputStream的用法詳解

    這篇文章主要介紹了Java中FilterInputStream和FilterOutputStream的用法詳解,這兩個類分別用于封裝輸入和輸出流,需要的朋友可以參考下
    2016-06-06
  • Java隱藏特性之雙括號初始化詳解

    Java隱藏特性之雙括號初始化詳解

    Java?語言擁有許多隱藏而強大的特性,其中之一是雙括號初始化,這篇文章將詳細(xì)介紹雙括號初始化的概念、用法和示例代碼,希望對大家有所幫助
    2023-12-12
  • JAVA 中解密RSA算法JS加密實例詳解

    JAVA 中解密RSA算法JS加密實例詳解

    這篇文章主要介紹了JAVA 中解密RSA算法JS加密 的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Springboot vue導(dǎo)出功能實現(xiàn)代碼

    Springboot vue導(dǎo)出功能實現(xiàn)代碼

    這篇文章主要介紹了Springboot vue導(dǎo)出功能實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • springboot+mybatis攔截器方法實現(xiàn)水平分表操作

    springboot+mybatis攔截器方法實現(xiàn)水平分表操作

    這篇文章主要介紹了springboot+mybatis攔截器方法實現(xiàn)水平分表操作,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • Java中使用正則檢查有效日期的實現(xiàn)

    Java中使用正則檢查有效日期的實現(xiàn)

    要判斷一個字符串是否符合時間格式,可以使用正則表達式,本文主要介紹了Java中使用正則檢查有效日期的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • Java日常練習(xí)題,每天進步一點點(3)

    Java日常練習(xí)題,每天進步一點點(3)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07

最新評論