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

簡(jiǎn)單驗(yàn)證碼生成Java版

 更新時(shí)間:2017年11月24日 08:33:43   作者:劉水鏡  
這篇文章主要為大家詳細(xì)介紹了簡(jiǎn)單驗(yàn)證碼生成Java版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

驗(yàn)證碼大家都知道,它的作用也不用我多說(shuō)了吧。如果不太清楚請(qǐng)參見(jiàn)百度百科中的解釋,一般驗(yàn)證碼的生成就是隨機(jī)產(chǎn)生字符(數(shù)字、字母或者漢字等),然后將這些生成的字符繪制成一張圖片,再在圖片上加上一些干擾元素,如各種線條之類的。好了廢話不多說(shuō)一起往下看:

簡(jiǎn)單的登錄頁(yè)面(代碼并不完整,只有驗(yàn)證碼部分)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
 <head> 
 <title>驗(yàn)證碼</title> 
 <script type="text/javascript"> 
<span style="white-space:pre" data-filtered="filtered"></span><span style="white-space:pre"> </span> //刷新驗(yàn)證碼的js函數(shù) 
<span style="white-space:pre"> </span>function changeCode() { 
<span style="white-space:pre"> </span>var imgNode = document.getElementById("vimg");   
 
<span style="white-space:pre"> </span>//重新加載驗(yàn)證碼,達(dá)到刷新的目的 
<span style="white-space:pre"> </span>imgNode.src = "servlet/AuthImageServlet?t=" + Math.random(); // 防止瀏覽器緩存的問(wèn)題 
<span style="white-space:pre"> </span>} 
 </script> 
 </head> 
 <body> 
 <form action="checkServlet" method="post"> 
 <label>輸入驗(yàn)證碼</label><br/> 
 <input type="text" name="randomCode"/><img id="vimg" title="點(diǎn)擊更換" onclick="changeCode();" src="servlet/AuthImageServlet"><br/> 
 <input type="submit" value="submit"> 
 </form> 
 </body> 
</html> 

通過(guò)session.getAttribute("rand"),獲得生成的驗(yàn)證碼,然后跟用戶輸入的進(jìn)行比較,再根據(jù)比較結(jié)果做相應(yīng)的處理。

通過(guò)servlet生成驗(yàn)證碼:

package com.util.servlet; 
 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.util.Random; 
 
import javax.imageio.ImageIO; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 
 
public class AuthImageServlet extends HttpServlet { 
 
 private static final String CONTENT_TYPE = "text/html; charset=gb2312"; 
 //設(shè)置字母的大小,大小 
 private Font mFont = new Font("Times New Roman", Font.PLAIN, 17); 
 public void init() throws ServletException 
 { 
 super.init(); 
 } 
 Color getRandColor(int fc,int bc) 
 { 
 Random random = new Random(); 
 if(fc>255) fc=255; 
 if(bc>255) bc=255; 
 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); 
 } 
 
 public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
 { 
 response.setHeader("Pragma","No-cache"); 
 response.setHeader("Cache-Control","no-cache"); 
 response.setDateHeader("Expires", 0); 
 //表明生成的響應(yīng)是圖片 
 response.setContentType("image/jpeg"); 
  
 int width=100, height=18; 
 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
  
 Graphics g = image.getGraphics(); 
 Random random = new Random(); 
 g.setColor(getRandColor(200,250)); 
 g.fillRect(1, 1, width-1, height-1); 
 g.setColor(new Color(102,102,102)); 
 g.drawRect(0, 0, width-1, height-1); 
 g.setFont(mFont); 
 
 g.setColor(getRandColor(160,200)); 
 
 //畫(huà)隨機(jī)線 
 for (int i=0;i<155;i++) 
 { 
  int x = random.nextInt(width - 1); 
  int y = random.nextInt(height - 1); 
  int xl = random.nextInt(6) + 1; 
  int yl = random.nextInt(12) + 1; 
  g.drawLine(x,y,x + xl,y + yl); 
 } 
 
 //從另一方向畫(huà)隨機(jī)線 
 for (int i = 0;i < 70;i++) 
 { 
  int x = random.nextInt(width - 1); 
  int y = random.nextInt(height - 1); 
  int xl = random.nextInt(12) + 1; 
  int yl = random.nextInt(6) + 1; 
  g.drawLine(x,y,x - xl,y - yl); 
 } 
 
 //生成隨機(jī)數(shù),并將隨機(jī)數(shù)字轉(zhuǎn)換為字母 
 String sRand=""; 
 for (int i=0;i<6;i++) 
 { 
  int itmp = random.nextInt(26) + 65; 
  char ctmp = (char)itmp; 
  sRand += String.valueOf(ctmp); 
  g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); 
  g.drawString(String.valueOf(ctmp),15*i+10,16); 
 } 
 
 HttpSession session = request.getSession(true); 
 session.setAttribute("rand",sRand); 
 g.dispose(); 
 ImageIO.write(image, "JPEG", response.getOutputStream()); 
 } 
 
} 

web.xml中的servlet配置信息:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" 
 xmlns="http://java.sun.com/xml/ns/javaee" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
 
 <servlet> 
 <servlet-name>AuthImageServlet</servlet-name> 
 <servlet-class>com.util.servlet.AuthImageServlet</servlet-class> 
 </servlet> 
 <servlet-mapping> 
 <servlet-name>AuthImageServlet</servlet-name> 
 <url-pattern>/servlet/AuthImageServlet</url-pattern> 
 </servlet-mapping> 
 
 <welcome-file-list> 
 <welcome-file>index.jsp</welcome-file> 
 </welcome-file-list> 
</web-app> 

就這樣驗(yàn)證碼的功能就實(shí)現(xiàn)了,很簡(jiǎn)單、很實(shí)用。當(dāng)然還有更加美觀,更加嚴(yán)密的方式,有興趣的朋友可以深入研究。這里就跟大家分享一個(gè)比較簡(jiǎn)單的方式。歡迎各位批評(píng)指正。

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

相關(guān)文章

  • Java substring方法實(shí)現(xiàn)原理解析

    Java substring方法實(shí)現(xiàn)原理解析

    這篇文章主要介紹了Java substring方法實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java中keytool的使用

    Java中keytool的使用

    Keytool 是一個(gè)JAVA環(huán)境下的安全鑰匙與證書(shū)的管理工具,Keytool將密鑰(key)和證書(shū)(certificates)存在一個(gè)稱為keystore 的文件(受密碼保護(hù))中,本文重點(diǎn)給大家介紹keytool的使用,感興趣的朋友一起看看吧
    2022-02-02
  • 老生常談JVM的內(nèi)存溢出說(shuō)明及參數(shù)調(diào)整

    老生常談JVM的內(nèi)存溢出說(shuō)明及參數(shù)調(diào)整

    下面小編就為大家?guī)?lái)一篇老生常談JVM的內(nèi)存溢出說(shuō)明及參數(shù)調(diào)整。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • java使用XSSFWorkbook實(shí)現(xiàn)讀寫(xiě)Excel

    java使用XSSFWorkbook實(shí)現(xiàn)讀寫(xiě)Excel

    這篇文章主要為大家詳細(xì)介紹了java如何通過(guò)使用XSSFWorkbook實(shí)現(xiàn)讀寫(xiě)Excel功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • SpringBoot定時(shí)監(jiān)聽(tīng)RocketMQ的NameServer問(wèn)題及解決方案

    SpringBoot定時(shí)監(jiān)聽(tīng)RocketMQ的NameServer問(wèn)題及解決方案

    這篇文章主要介紹了SpringBoot定時(shí)監(jiān)聽(tīng)RocketMQ的NameServer問(wèn)題及解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-12-12
  • yaml文件中${}語(yǔ)法取值方式

    yaml文件中${}語(yǔ)法取值方式

    在Spring Boot中,配置文件中的${test.aa}等占位符的值可以通過(guò)系統(tǒng)屬性或依賴的其他模塊來(lái)獲取,這意味著,可以通過(guò)JVM參數(shù)或者系統(tǒng)屬性來(lái)指定這些值,例如,通過(guò)在啟動(dòng)命令中添加-Dtest.aa=your_value或在代碼中通過(guò)
    2024-10-10
  • 淺談idea中導(dǎo)入maven項(xiàng)目的兩種方式

    淺談idea中導(dǎo)入maven項(xiàng)目的兩種方式

    本文主要介紹了淺談idea中導(dǎo)入maven項(xiàng)目的兩種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • java 單例模式的實(shí)例詳解

    java 單例模式的實(shí)例詳解

    這篇文章主要介紹了java 單例模式的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助大家徹底理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • SpringBoot的@Scheduled和@Schedules區(qū)別小結(jié)

    SpringBoot的@Scheduled和@Schedules區(qū)別小結(jié)

    本文主要介紹了SpringBoot的@Scheduled和@Schedules區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • ssm 使用token校驗(yàn)登錄的實(shí)現(xiàn)

    ssm 使用token校驗(yàn)登錄的實(shí)現(xiàn)

    這篇文章主要介紹了ssm 使用token校驗(yàn)登錄的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論

任丘市| 镶黄旗| 阳东县| 盐城市| 大厂| 保康县| 德钦县| 南和县| 武清区| 望都县| 和田县| 临城县| 化德县| 交口县| 来宾市| 宁津县| 揭阳市| 桐庐县| 吐鲁番市| 积石山| 海林市| 高密市| 禄丰县| 武安市| 澳门| 汉中市| 长治市| 邛崃市| 贵州省| 如皋市| 南川市| 五寨县| 蒲城县| 九江县| 彝良县| 普兰店市| 承德县| 沈阳市| 鄂托克前旗| 新津县| 改则县|