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

JavaWeb 使用Session實(shí)現(xiàn)一次性驗(yàn)證碼功能

 更新時(shí)間:2019年08月28日 14:05:02   作者:chenhongyong  
這篇文章主要介紹了JavaWeb 使用Session實(shí)現(xiàn)一次性驗(yàn)證碼功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

表單

<form action="loginServlet" method="post">
 請(qǐng)輸入驗(yàn)證碼:<input type="text" name="code" />
 <img src="getCodeServlet" /><br />
 <button type="submit">提交</button>
</form>

載入頁面時(shí),會(huì)自動(dòng)請(qǐng)求getCodeServlet,獲取圖片(驗(yàn)證碼)。

getCodeServlet,產(chǎn)生驗(yàn)證碼

@WebServlet("/getCodeServlet")
public class GetCodeServlet extends HttpServlet {
  //驗(yàn)證碼的寬、高
  private static int WIDTH=80;
  private static int HEIGHT=25;
  //繪制背景
  private void drawBg(Graphics g){
    //rgb
    g.setColor(new Color(128, 128, 128));
    //繪制矩形。x,y,wigth,height
    g.fillRect(0,0,WIDTH,HEIGHT);
    //隨機(jī)繪制100個(gè)干擾點(diǎn)
    Random random=new Random();
    for (int i=0;i<100;i++){
      //產(chǎn)生(0,1)上的小數(shù),*WIDTH|HEIGHT,再取整也行
      int x=random.nextInt(WIDTH);
      int y=random.nextInt(HEIGHT);
      g.drawOval(x,y,1,1);
      //干擾點(diǎn)的顏色也可以隨機(jī),隨機(jī)產(chǎn)生red,green,blue即可
      //g.setColor(new Color(red,green,blue));
    }
  }
  //繪制驗(yàn)證碼
  private void drawCode(Graphics g,char[] code){
    g.setColor(Color.BLACK);
    //字體、樣式(多個(gè)時(shí)豎線分隔)、字號(hào)
    g.setFont(new Font("serif",Font.ITALIC|Font.BOLD,18));
    //在不同位置繪制驗(yàn)證碼字符,參數(shù):要繪制的String、橫、縱坐標(biāo)。+""是為了char轉(zhuǎn)String。
    g.drawString(code[0]+"",1,17);
    g.drawString(code[1]+"",16,15);
    g.drawString(code[2]+"",31,18);
    g.drawString(code[3]+"",46,16);
  }
  //隨機(jī)產(chǎn)生4位驗(yàn)證碼
  private char[] getCode(){
    String chars="0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm";
    char[] code=new char[4];
    Random random=new Random();
    for (int i=0;i<4;i++){
      //[0,62)
      int index= random.nextInt(62);
      code[i]=chars.charAt(index);
    }
    return code;
  }
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
    HttpSession session = request.getSession();
    ServletOutputStream sos = response.getOutputStream();
    response.setContentType("image/jpeg");
    //設(shè)置瀏覽器不緩存此圖片
    response.setHeader("Pragma","No-cache");
    response.setHeader("Cache-Control","no-cache");
    response.setDateHeader("Expires",0);
    //創(chuàng)建內(nèi)存圖片
    BufferedImage bufferedImage = new BufferedImage(WIDTH, HEIGHT, TYPE_INT_RGB);
    Graphics g= bufferedImage.getGraphics();
    char[] code=getCode();
    //將驗(yàn)證碼放到session域中。session對(duì)象要在提交響應(yīng)之前獲得
    session.setAttribute("code",new String(code));
    drawBg(g);
    drawCode(g,code);
    g.dispose();
    //將圖片輸出到瀏覽器
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write(bufferedImage,"JPEG",baos);
    baos.writeTo(sos);
    baos.close();
    sos.close();
  }
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    doPost(request,response);
  }
}

loginServlet,處理表單

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=utf-8");
    HttpSession session = request.getSession();
    String trueCode= (String) session.getAttribute("code");
    String code=request.getParameter("code");

    if (code.equals(trueCode)){
      response.getWriter().write("驗(yàn)證碼正確");
    }
    else {
      response.getWriter().write("驗(yàn)證碼錯(cuò)誤");
    }
  }

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request,response);
  }
}

上面的處理方式要區(qū)分驗(yàn)證碼的大小寫。

不區(qū)分大小寫:

//先轉(zhuǎn)換為全大寫|全小寫,再判斷
    trueCode=trueCode.toLowerCase();
    code=code.toLowerCase();
    //trueCode=trueCode.toUpperCase();
    //code=trueCode.toUpperCase();

總結(jié)

以上所述是小編給大家介紹的JavaWeb 使用Session實(shí)現(xiàn)一次性驗(yàn)證碼功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • 在IDEA中配置tomcat并創(chuàng)建tomcat項(xiàng)目的圖文教程

    在IDEA中配置tomcat并創(chuàng)建tomcat項(xiàng)目的圖文教程

    這篇文章主要介紹了在IDEA中配置tomcat并創(chuàng)建tomcat項(xiàng)目的圖文教程,需要的朋友可以參考下
    2020-07-07
  • 關(guān)于java開發(fā)的性能問題總結(jié)(必看)

    關(guān)于java開發(fā)的性能問題總結(jié)(必看)

    下面小編就為大家?guī)硪黄P(guān)于java開發(fā)的性能問題總結(jié)(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java自定義Enum的實(shí)現(xiàn)示例

    Java自定義Enum的實(shí)現(xiàn)示例

    Java中的自定義Enum類型是一種特殊的類,用于表示固定數(shù)量的常量值,本文主要介紹了Java自定義Enum的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • JAVA設(shè)計(jì)模式之組合模式原理與用法詳解

    JAVA設(shè)計(jì)模式之組合模式原理與用法詳解

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之組合模式,簡(jiǎn)單說明了組合模式的原理,并結(jié)合實(shí)例分析了java組合模式的具體用法,需要的朋友可以參考下
    2017-08-08
  • 在Java生產(chǎn)環(huán)境下進(jìn)行性能監(jiān)控與調(diào)優(yōu)的詳細(xì)過程

    在Java生產(chǎn)環(huán)境下進(jìn)行性能監(jiān)控與調(diào)優(yōu)的詳細(xì)過程

    在Java生產(chǎn)環(huán)境下進(jìn)行性能監(jiān)控與調(diào)優(yōu)是一個(gè)復(fù)雜但重要的過程,它涉及到多個(gè)方面,包括代碼分析、JVM監(jiān)控、線程管理、垃圾收集優(yōu)化、內(nèi)存管理、數(shù)據(jù)庫交互等,下面我將提供一個(gè)詳細(xì)的概述和示例代碼,需要的朋友可以參考下
    2025-02-02
  • Java8 Predicate花樣用法詳解

    Java8 Predicate花樣用法詳解

    本文主要介紹了Java 8 Predicate花樣用法詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 帶你深入了解java-代理機(jī)制

    帶你深入了解java-代理機(jī)制

    Java 有兩種代理方式,一種是靜態(tài)代理,另一種是動(dòng)態(tài)代理。如果我們?cè)诖a編譯時(shí)就確定了被代理的類是哪一個(gè),那么就可以直接使用靜態(tài)代理;如果不能確定,那么可以使用類的動(dòng)態(tài)加載機(jī)制,在代碼運(yùn)行期間加載被代理的類這就是動(dòng)態(tài)代理
    2021-08-08
  • Java?API操作Hdfs的示例詳解

    Java?API操作Hdfs的示例詳解

    這篇文章主要介紹了Java?API操作Hdfs詳細(xì)示例,遍歷當(dāng)前目錄下所有文件與文件夾,可以使用listStatus方法實(shí)現(xiàn)上述需求,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Java內(nèi)部類之間的閉包和回調(diào)詳解

    Java內(nèi)部類之間的閉包和回調(diào)詳解

    相信閉包和回調(diào)對(duì)每位學(xué)習(xí)Java的人來說都不陌生,那么今天小編和大家分享一篇關(guān)于Java內(nèi)部類之間的閉包和回調(diào),有需要的可以參考借鑒。
    2016-09-09
  • java實(shí)現(xiàn)簡(jiǎn)易的計(jì)算器界面

    java實(shí)現(xiàn)簡(jiǎn)易的計(jì)算器界面

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)易的計(jì)算器界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評(píng)論

明星| 东方市| 和平县| 罗源县| 东明县| 巴彦县| 石嘴山市| 平湖市| 即墨市| 长春市| 漳平市| 长武县| 沛县| 博湖县| 广丰县| 陆良县| 白沙| 五大连池市| 略阳县| 鸡西市| 汝南县| 渝北区| 永川市| 武城县| 濉溪县| 密山市| 花莲市| 娱乐| 临海市| 泗洪县| 广昌县| 梧州市| 绍兴县| 兰州市| 小金县| 永泰县| 哈密市| 余干县| 平罗县| 广灵县| 怀柔区|