最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用Servlet生成驗(yàn)證碼圖片

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

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

一、實(shí)現(xiàn)思路

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

二、生成驗(yàn)證碼

生成驗(yàn)證碼的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);

        //驗(yàn)證碼字符范圍
        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]);
        }

        // 添加噪點(diǎn)
        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è)置驗(yàn)證碼中的干擾線
        for (int i = 0; i < 4; i++) {
            //隨機(jī)獲取干擾線的起點(diǎn)和終點(diǎn)
            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());  //寫(xiě)到輸出流

    }

    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);
    }

}

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

相關(guān)文章

  • Java阻塞隊(duì)列必看類(lèi):BlockingQueue快速了解大體框架和實(shí)現(xiàn)思路

    Java阻塞隊(duì)列必看類(lèi):BlockingQueue快速了解大體框架和實(shí)現(xiàn)思路

    這篇文章主要介紹了Java阻塞隊(duì)列必看類(lèi):BlockingQueue快速了解大體框架和實(shí)現(xiàn)思路,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • spring常用注解開(kāi)發(fā)一個(gè)RESTful接口示例

    spring常用注解開(kāi)發(fā)一個(gè)RESTful接口示例

    這篇文章主要為大家介紹了使用spring常用注解開(kāi)發(fā)一個(gè)RESTful接口示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • windows系統(tǒng)配置Java開(kāi)發(fā)環(huán)境變量

    windows系統(tǒng)配置Java開(kāi)發(fā)環(huán)境變量

    這篇文章主要介紹了windows系統(tǒng)配置Java開(kāi)發(fā)環(huán)境變量,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-12-12
  • 詳解如何在Java中創(chuàng)建Excel迷你圖

    詳解如何在Java中創(chuàng)建Excel迷你圖

    迷你圖是一種簡(jiǎn)潔而有效的數(shù)據(jù)可視化方式,常用于展示趨勢(shì)和變化,通常被用于數(shù)據(jù)儀表盤(pán)、報(bào)告和展示中,以便在有限的空間內(nèi)展示多個(gè)數(shù)據(jù)集的趨勢(shì),今天小編為大家介紹如何在Java中創(chuàng)建Excel迷你圖,需要的朋友可以參考下
    2023-10-10
  • 解決MyEclipse中Maven設(shè)置jdk版本jdk1.8報(bào)錯(cuò)問(wèn)題

    解決MyEclipse中Maven設(shè)置jdk版本jdk1.8報(bào)錯(cuò)問(wèn)題

    今天安裝了jdk1.8、tomcat8、和maven3.5.2,弄好后在myeclipse新建了一個(gè)maven項(xiàng)目,項(xiàng)目默認(rèn)是jdk1.5,改成jdk1.8后項(xiàng)目報(bào)錯(cuò)
    2018-10-10
  • java使用ajax完成上傳文件

    java使用ajax完成上傳文件

    這篇文章主要為大家詳細(xì)介紹了java使用ajax完成上傳文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Spring @Transaction 注解執(zhí)行事務(wù)的流程

    Spring @Transaction 注解執(zhí)行事務(wù)的流程

    這篇文章主要介紹了Spring @Transaction 注解執(zhí)行事務(wù)的流程,Spring 是如何開(kāi)啟事務(wù)的?又是如何進(jìn)行提交事務(wù)和關(guān)閉事務(wù)的,本文給大家詳細(xì)介紹,需要的朋友可以參考下
    2021-06-06
  • SpringBoot解決406錯(cuò)誤之返回對(duì)象缺少Getter/Setter方法引發(fā)的問(wèn)題

    SpringBoot解決406錯(cuò)誤之返回對(duì)象缺少Getter/Setter方法引發(fā)的問(wèn)題

    在Spring Boot開(kāi)發(fā)中,接口請(qǐng)求返回?cái)?shù)據(jù)是系統(tǒng)交互的重要環(huán)節(jié),然而,開(kāi)發(fā)過(guò)程中常常會(huì)遇到由于數(shù)據(jù)類(lèi)型或返回格式問(wèn)題導(dǎo)致的錯(cuò)誤,其中最常見(jiàn)的就是406 Not Acceptable異常,本篇文章以實(shí)際的案例出發(fā),詳細(xì)分析在POST請(qǐng)求中產(chǎn)生406錯(cuò)誤的原因
    2024-11-11
  • Java中BEAN與EJB的區(qū)別淺析

    Java中BEAN與EJB的區(qū)別淺析

    這篇文章主要介紹了Java中BEAN與EJB的區(qū)別淺析,本文總結(jié)了它們之間的不同之處,需要的朋友可以參考下
    2015-03-03
  • springmvc開(kāi)啟異步請(qǐng)求報(bào)錯(cuò)Java code using the Servlet API or

    springmvc開(kāi)啟異步請(qǐng)求報(bào)錯(cuò)Java code using the Ser

    這篇文章主要為大家介紹了springmvc開(kāi)啟異步請(qǐng)求報(bào)錯(cuò)Java code using the Servlet API or解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-02-02

最新評(píng)論

临泽县| 桂东县| 贵南县| 原阳县| 渝北区| 西乌| 政和县| 丁青县| 庆城县| 嘉兴市| 垫江县| 维西| 舟山市| 福州市| 聊城市| 九台市| 阳原县| 哈密市| 墨玉县| 雅安市| 长垣县| 交口县| 旬阳县| 北流市| 怀化市| 石狮市| 乌拉特后旗| 德兴市| 黄浦区| 西畴县| 黄冈市| 海原县| 乐昌市| 连南| 栾川县| 武强县| 丰顺县| 女性| 天门市| 阿坝县| 板桥市|