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

簡單驗證碼生成Java版

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

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

簡單的登錄頁面(代碼并不完整,只有驗證碼部分)

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

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

通過servlet生成驗證碼:

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)); 
 
 //畫隨機線 
 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); 
 } 
 
 //從另一方向畫隨機線 
 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); 
 } 
 
 //生成隨機數(shù),并將隨機數(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> 

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

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

相關(guān)文章

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

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

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

    Java中keytool的使用

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

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

    下面小編就為大家?guī)硪黄仙U凧VM的內(nèi)存溢出說明及參數(shù)調(diào)整。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • java使用XSSFWorkbook實現(xiàn)讀寫Excel

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

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

    SpringBoot定時監(jiān)聽RocketMQ的NameServer問題及解決方案

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

    yaml文件中${}語法取值方式

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

    淺談idea中導入maven項目的兩種方式

    本文主要介紹了淺談idea中導入maven項目的兩種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-08-08
  • java 單例模式的實例詳解

    java 單例模式的實例詳解

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

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

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

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

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

最新評論

托里县| 惠州市| 壶关县| 阿拉善左旗| 临泽县| 平乡县| 福鼎市| 塘沽区| 双鸭山市| 苍南县| 宁津县| 朝阳区| 西充县| 鹤山市| 南康市| 五台县| 勃利县| 牡丹江市| 常熟市| 北流市| 抚宁县| 务川| 句容市| 河南省| 屯昌县| 关岭| 姜堰市| 恩平市| 玛多县| 新巴尔虎左旗| 始兴县| 吴江市| 兴文县| 龙岩市| 富顺县| 南城县| 巧家县| 神木县| 克什克腾旗| 九寨沟县| 吴堡县|