亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSP實用教程之簡易圖片驗證碼的實現(xiàn)方法(附源碼)

2024-09-05 00:23:13
字體:
供稿:網(wǎng)友

前言

很多新手對圖片驗證碼不是很了解,所以本文嘗試通過一個簡單的 JSP 小程序來實現(xiàn)驗證碼功能。文中給出了詳細的示例代碼,文末給出了完整實例代碼的下載地址,下面話不多說了,來一起看看詳細的介紹吧。

效果圖

jsp,驗證碼,圖片,圖片驗證碼,jsp圖片驗證碼代碼

示例代碼

前臺代碼如下:

<form action="action.jsp/5844.html">jsp" method="POST">  <label> 用戶名:  <input type="text" name="name" data-singleTips="請輸入用戶名" value="admin" />  </label>  <label> 密碼: <input type="password" name="password" />  </label>  <!-- 驗證碼 -->  <label class="captchaCode">  驗證碼: <img src="img.jsp" style="cursor: pointer;" onclick="this.src=this.src + '?' + new Date().valueOf();" />  <input type="text" name="captchaImgCode" />  </label>  <div>  <input type="submit" value="登錄" />   </div> </form> 

驗證碼圖片從何而來? img.jsp 是也:

<%@include file="captcha.jsp"%> <%  init(pageContext);// 加載圖片 %> 

返回圖片的數(shù)據(jù)流。

action.jsp 這里不作用戶名或密碼的檢驗,只是單純驗證碼檢驗。

如果輸入驗證碼通過,顯示如下:

jsp,驗證碼,圖片,圖片驗證碼,jsp圖片驗證碼代碼

反之,給出已捕獲的異常:

jsp,驗證碼,圖片,圖片驗證碼,jsp圖片驗證碼代碼

action.jsp 就是調(diào)用 captcha.jsp 里面的 isPass(pageContext, captchaImgCode) 方法,以及捕獲已知異常。

<%@page pageEncoding="UTF-8"%> <%@include file="captcha.jsp"%> <%  String captchaImgCode = request.getParameter("captchaImgCode");  try {  if (isPass(pageContext, captchaImgCode)) {  out.println("驗證碼通過!");  }  } catch (Throwable e) {  out.println(e);  } %> 

核心 captcha,jsp 代碼:

<%@page pageEncoding="UTF-8" import="java.io.IOException, java.awt.*, java.awt.image.BufferedImage, java.util.Random, javax.imageio.ImageIO"%> <%!  // 定義Captcha 類  public static class Captcha {  /**  * 默認寬度 60  */  private int width = 60;   /**  * 默認高度 20  */  private int height = 20;   /**  * 驗證碼  */  private String code;   /**  * 生成驗證碼圖片  *  * @return 圖片對象  */  public BufferedImage get() {  BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 在內(nèi)存中創(chuàng)建圖像  Graphics g;   g = image.getGraphics(); // 獲取圖形上下文  g.setColor(getRandColor(200, 250)); // 設定背景  g.fillRect(0, 0, width, height);  g.setFont(new Font("Times New Roman", Font.PLAIN, 18)); // 設定字體  g.setColor(getRandColor(160, 200));   Random random = new Random();// 隨機產(chǎn)生干擾線  for (int i = 0; i < 155; i++) {  int x = random.nextInt(width), y = random.nextInt(height);  int xl = random.nextInt(12), yl = random.nextInt(12);  g.drawLine(x, y, x + xl, y + yl);  }   String sRand = ""; // 隨機產(chǎn)生4位驗證碼  for (int i = 0; i < 4; i++) {  String rand = String.valueOf(random.nextInt(10));  sRand += rand;  g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110))); // 將認證碼顯示到圖象中  g.drawString(rand, 13 * i + 6, 16);// 調(diào)用函數(shù)出來的顏色相同,可能是因為種子太接近,所以只能直接生成  }   // 將認證碼存入SESSION  // session.setAttribute("rand", sRand);  setCode(sRand);  g.dispose();// 圖象生效   return image;  }   /**  * 生成隨機顏色  *  * @param fc  * @param bc  * @return  */  private Color getRandColor(int fc, int bc) {  if (fc > 255)  fc = 255;  if (bc > 255)  bc = 255;   Random random = new Random();  int r = fc + random.nextInt(bc - fc);  int g = fc + random.nextInt(bc - fc);  int b = fc + random.nextInt(bc - fc);   return new Color(r, g, b);  }   /**  * 獲取高度  *  * @return  */  public int getHeight() {  return height;  }   /**  * 設置高度  *  * @param height  * 高度  */  public void setHeight(int height) {  this.height = height;  }   /**  * 獲取驗證碼  *  * @return  */  public String getCode() {  return code;  }   /**  * 設置驗證碼  *  * @param code  * 驗證碼  */  public void setCode(String code) {  this.code = code;  }   /**  * 獲取寬度  *  * @return  */  public int getWidth() {  return width;  }   /**  * 設置寬度  *  * @param width  * 寬度  */  public void setWidth(int width) {  this.width = width;  }   }    /**  * SESSION 的鍵值  */  public static final String SESSION_KEY = "rand";   /**  * 顯示驗證碼圖片并將認證碼存入 Session  *  * @param response  * 響應對象  * @param session  * 會話對象  */  public static void init(HttpServletResponse response, HttpSession session) {  Captcha img = new Captcha();   // 不用緩存  response.setHeader("Pragma", "No-cache");  response.setHeader("Cache-Control", "no-cache");  response.setDateHeader("Expires", 0);  response.setContentType("image/jpg");   try {  ImageIO.write(img.get(), "JPEG", response.getOutputStream());   /*  * 加上下面代碼,運行時才不會出現(xiàn)java.lang.IllegalStateException: getOutputStream() has already been called ..........等異常  * response.getOutputStream().flush();  * response.getOutputStream().close();  * response.flushBuffer();  */   // JSP內(nèi)置對象out和response.getWrite()的區(qū)別,兩者的主要區(qū)別:1. 這兩個對象的類型是完全不同的……  // response.getWriter();  // http://blog.sina.com.cn/s/blog_7217e4320101l8gq.html  // http://www.49028c.com/kf/201109/103284.html   // pageContext.getOut().clear();  } catch (IOException e) {  e.printStackTrace();  }   session.setAttribute(SESSION_KEY, img.getCode()); // 將認證碼存入 SESSION  System.out.println("生成驗證碼:" + img.getCode());  }   /**  * 顯示驗證碼圖片并將認證碼存入 Session(For JSP)  *  * @param pageContext  * 頁面上下文對象  */  public static void init(PageContext pageContext) {  init((HttpServletResponse) pageContext.getResponse(), pageContext.getSession());  }    /**  * 判斷用戶輸入的驗證碼是否通過  *  * @param pageContext  * 頁面上下文對象  * @return true 表示通過  * @throws Throwable  */  public static boolean isPass(PageContext pageContext, String code) throws Throwable {  boolean isCaptchaPass = false;   String rand = (String) pageContext.getSession().getAttribute(SESSION_KEY);   System.out.println("rand:" + rand);  System.out.println("CaptchaCode:" + code);   if (rand == null)  throw new UnsupportedOperationException("請刷新驗證碼。");  else if (code == null || code.equals("")) {  throw new IllegalArgumentException("沒提供驗證碼參數(shù)");  } else {  isCaptchaPass = rand.equals(code);  if (!isCaptchaPass)  throw new IllegalAccessError("驗證碼不正確");  }   return isCaptchaPass;  } %> 

 

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關教程知識閱讀請移步到JSP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
午夜精品久久久久久久第一页按摩| 捷克做爰xxxⅹ性视频| 黄网站免费在线播放| 婷婷av在线| 国产精品无码一区| 亚洲欧洲日本国产| 欧美大片专区| 你懂的在线视频| 亚洲黄色免费看| 久久久久免费网站| 99久久精品99国产精品| 国产又黄又猛又粗又爽| 狠狠躁少妇一区二区三区| 不卡免费追剧大全电视剧网站| 国产又爽又黄无码无遮挡在线观看| 国产精品网址| 26uuu日韩精品一区二区| 久久资源免费视频| 麻豆理论在线观看| 亚洲av无码乱码国产精品久久| 亚洲狠狠婷婷综合久久久久图片| 免费观看在线色综合| 精品国产乱码久久久久久浪潮| 亚洲区免费影片| 欧美激情论坛| 丝袜 亚洲 另类 欧美 重口| 亚洲欧洲另类精品久久综合| 国产乱妇乱子在线播视频播放网站| 精久久久久久| 久久久国产一区二区三区四区小说| 777琪琪电影午夜理伦片| 国产一区二区三区四| 国产欧美一区二区三区在线观看视频| 午夜激情综合网| 欧美在线视屏| 欧美成人黑人xx视频免费观看| 动漫精品一区二区三区| 美女久久99| 蜜臀av一区二区在线观看| 亚洲欧美另类在线观看| 亚洲色图.com| 欧美成人aaa片一区国产精品| 日本黄色大片在线观看| 日本a级不卡| 永久免费在线看片视频| 欧美孕妇孕交xxⅹ孕妇交| 欧美日韩综合一区二区三区| 久久精品国产一区二区三区不卡| 亚洲精品99久久久久| 国产高清在线观看视频| 秋霞午夜理伦电影在线观看| 欧美 日韩 国产 激情| 亚洲人成网站影音先锋播放| 亚洲中文字幕无码一区二区三区| 欧美大香线蕉线伊人久久国产精品| 成人免费看片载| 久久99热国产| 日本乱人伦a精品| aa视频在线免费观看| 日韩欧美国产综合一区| 国产私人尤物无码不卡| 秋霞电影网一区二区| 日韩av在线播放资源| 日韩电影免费在线看| 天天干天天操天天干天天操| 日韩精品视频一区二区三区| 日韩伦人妻无码| 国产成人av一区二区三区在线观看| julia一区二区中文久久94| av福利网址| www.欧美精品一二区| 日韩图片一区| 亚洲精品无码专区在线播放| 成人在线中文| 成年人看的羞羞网站| 日韩欧美黄色动漫| 成人在色线视频在线观看免费大全| 日本免费一二区| 色琪琪综合男人的天堂aⅴ视频| 国产在线观看精品一区二区三区| 国产理论在线播放| 国产麻豆剧果冻传媒观看hd高清| 国产亚洲精品久久久| 99pao成人国产永久免费视频| 一区二区亚洲精品国产| 亚洲天堂2014| 欧美寡妇偷汉性猛交| 日韩av中文字幕在线播放| 东方伊人免费在线观看| 欧美高清性xxxxhd| 免费看av毛片| 97在线免费视频观看| 91自拍.com| 小说区图片区综合久久亚洲| 一起操在线观看| av在线dvd| 欧美性受xxxx黑人猛交88| 最新日本在线观看| 亚洲精品一区三区三区在线观看| 欧美色片在线观看| 精品国产乱码久久久久久108| 精品中文字幕在线观看| 中文字幕一区二区三区中文字幕| 欧美激情综合色综合啪啪| 亚洲精品在线一区二区| 黄色片久久久久| 无码国产色欲xxxx视频| 成人免费va视频| 草莓视频18免费观看| 在线观看国产高清视频| 奇米影视第四狠狠777| 超级白嫩亚洲国产第一| 超碰国产在线观看| 天堂网www在线观看| av资源站久久亚洲| 国产欧美一区二区三区在线老狼| av有声小说一区二区三区| 免费又黄又爽又猛大片午夜| 久久久精品影视| 欧美在线激情网| 91动漫免费网站| 91综合久久爱com| 中文字幕欧美三区| 精品av一区二区| 欧美一卡二卡三卡四卡| 性欧美video另类hd3| 欧美videos大乳护士334| 91av一区| 国产精品一区二区免费不卡| 精品国产乱码久久久久久影片| 久久精品视频网| 小泽玛利亚av在线| 亚洲第一第二区| 国产私拍一区| 国产精品-区区久久久狼| 国产伦精品一区二区三区视频网站| 欧美zozo另类异族| 精品理论电影在线| 91香蕉国产线在线观看| 亚洲精品mv在线观看| 青草草在线视频| 黄色激情视频在线观看| 欧美爆操老女人| 国产在线一区不卡| 四虎成人精品永久免费av九九| 亚洲高清影院| 日本美女视频一区| 中文字幕久久精品| 国产一卡2卡3卡四卡网站| 欧美啪啪免费视频| 日韩精品 欧美| 欧美日韩成人在线观看| 26uuu久久噜噜噜噜| 4438五月综合| 欧美激情一区二区三区在线| 毛片在线视频观看| 视频一区国产视频| 微拍福利一区二区| 成人欧美一区二区三区在线| 91年精品国产| 国产一区二区不卡视频| 妺妺窝人体色777777| 日本一区免费在线观看| 综合久久久久综合| 成年人在线观看网站| 污污污污污污www网站免费| 国产中文字幕av| 波波电影院一区二区三区| 亚洲一级免费毛片| 国产成人精品www牛牛影视| 黄色影院在线播放| 一区二区在线免费观看视频| 国产精品va| 91超碰碰碰碰久久久久久综合| 午夜精品久久久久久不卡8050| 国产日韩欧美在线看| 日韩av在线网址| yellow在线观看网址| 欧美18一12sex性处hd| 69欧美性猛交| 日韩av片免费在线观看| 中文字幕久精品免| 国产一区二区三区网站| 成人性视频免费网站| 国产精品久久久久久免费播放| 中文字幕五月天| 色哟哟国产精品免费观看| 亚洲精品18在线观看| 欧美日韩日日摸| 精品成人佐山爱一区二区| 国产日本精品视频| 伊人久久久久久久久久| 亚洲天堂一区二区三区| 欧美一区二区成人6969| 91精品视频网| 日韩和欧美一区二区三区| 天天操天天干天天做| 高清视频一区二区| 日本一区二区三区视频免费看| 日韩情爱电影在线观看| 国产自偷自偷免费一区| 日本黄网站色大片免费观看| 欧美xxxxx性| 国产精品国模在线| 成+人+亚洲+综合天堂| 亚洲啪啪综合av一区二区三区| 国产美女久久久久| ed2k情侣啪啪91av| 91年精品国产| 亚洲精品久久久久| 国内精品视频在线| 国产视频三区四区| 在线国产一区二区三区| 自拍偷拍视频在线| 亚洲国产综合在线看不卡| 三大队在线观看| 99热这里只有精品免费| 91福利免费视频| 三级资源在线| 久久午夜鲁丝片| 国产精品一区二区果冻传媒| 国产三级视频在线| 国产精品毛片久久久久久久久久99999999| 亚洲日韩中文字幕一区| 亚洲伦理一区二区三区| 国产av一区二区三区精品| 成人免费一区| 天天人人精品| 菠萝菠萝蜜在线视频免费观看| 麻豆精品一区二区av白丝在线| 欧美成人精品3d动漫h| 一级片免费观看视频| 国产精品短视频| 橘梨纱av一区二区三区在线观看| 亚洲成人av一区| 偷拍自拍在线| 日韩视频在线播放| 欧美在线不卡视频| 欧美深夜福利视频| 国产精品v欧美精品v日本精品动漫| 国产精品视频免费看| 天天干在线影院| 在线观看日韩av电影| 日本丰满www色| 欧美视频你懂的| 国产极品精品在线观看| 91电影91视频| 在线视频网站| 欧美性感一区二区三区| 国产成人精品视频在线| 在线高清av| 97se亚洲国产综合自在线| 欧美色婷婷天堂网站| 在线中文字幕亚洲| 国产中文字幕在线观看| 尤物tv国产一区| 男女羞羞电影免费观看| 男女啪啪免费视频网站| 国产又爽又黄的激情精品视频| 亚洲综合欧美在线| p色视频免费在线观看| jizzjizzjizzjizzjizzjizzjizz| aaa级精品久久久国产片| 久久综合伊人77777蜜臀| 国产视频网站在线| 亚洲精品一二| 色啪啪.com| 美女被人操网站| 国模大尺度私拍在线视频| 国产精品日韩一区| 妖精视频成人观看www| 一区二区三区电影大全| 亚洲一区二区精品久久av| 久久影院视频免费| 五月花成人网| 日韩一区国产在线观看| 国产精品v欧美精品v日韩精品| 国产日韩亚洲欧美综合| 欧美国产亚洲另类动漫| 日本亚洲天堂| 欧美成人禁片在线www| 亚洲欧洲日产国产综合网| 久99九色视频在线观看| 国产精品巨作av| 国产麻豆永久视频| 蜜桃一区二区三区在线| 国产亚洲一区二区三区| 欧美黑人极品猛少妇色xxxxx| 美女日批在线观看| 性感美女一区二区在线观看| 久久久免费网站| 国产一区二区三区在线观看免费| 99国产精品久久久久久久成人| 久久久久久免费| 国产男人精品视频| 黑人巨大精品欧美黑白配亚洲| 免费下载黄色软件| 日本激情视频在线播放| 国产久一道中文一区| 盗摄牛牛av影视一区二区| 波多野结衣电车痴汉| 欧洲猛交xxxx乱大交3| 国产精品第一页在线观看| 日本不卡免费一区| 久久中文字幕视频| 日韩av密桃| 在线a免费观看| 亚洲女人被黑人巨大进入al| 99电影在线观看| 第一sis亚洲原创| 精品欧美一区二区久久久| 色呦哟—国产精品| 中文字幕1234区| 91久久久久| 国产一线二线三线女| 免费在线观看黄网站| 欧美丝袜自拍制服另类| 国产精品丝袜一区二区| 亚洲网站啪啪| 国产黄色大片在线观看| 中文文精品字幕一区二区| 私密视频在线观看| 精品一区二区三| 国产精品视频白浆免费视频| 久久综合色综合| 精品成人一区二区| 91吃瓜网在线观看| wwwav91com|