欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單驗證碼生成Java版

 更新時間:2017年11月24日 08:33:43   作者:劉水鏡  
這篇文章主要為大家詳細(xì)介紹了簡單驗證碼生成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>//重新加載驗證碼,達(dá)到刷新的目的 
<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ìn)行比較,再根據(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)了,很簡單、很實用。當(dāng)然還有更加美觀,更加嚴(yán)密的方式,有興趣的朋友可以深入研究。這里就跟大家分享一個比較簡單的方式。歡迎各位批評指正。

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

相關(guān)文章

  • Spring?依賴注入和循環(huán)依賴的實例解析

    Spring?依賴注入和循環(huán)依賴的實例解析

    依賴注入的主要目的是降低類之間的耦合度,使得代碼更加靈活、可維護(hù)和可測試,這篇文章主要介紹了Spring?依賴注入和循環(huán)依賴的相關(guān)知識,需要的朋友可以參考下
    2023-09-09
  • 如何解決java.util.zip.ZipFile解壓后被java占用問題

    如何解決java.util.zip.ZipFile解壓后被java占用問題

    這篇文章主要介紹了如何解決java.util.zip.ZipFile解壓后被java占用問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • IDEA如何修改項目名稱出現(xiàn)中括號

    IDEA如何修改項目名稱出現(xiàn)中括號

    當(dāng)項目文件夾名稱與model名稱不一致時,IDEA會在項目名旁顯示中括號以區(qū)分,修改項目名稱時出現(xiàn)中括號問題,通常是因為IDE中model名與文件夾名不同步,解決方法是統(tǒng)一model名稱和文件夾名稱,可通過重構(gòu)功能或項目結(jié)構(gòu)設(shè)置完成,重命名操作應(yīng)謹(jǐn)慎,以避免路徑等引用錯誤
    2024-10-10
  • 如何基于ThreadPoolExecutor創(chuàng)建線程池并操作

    如何基于ThreadPoolExecutor創(chuàng)建線程池并操作

    這篇文章主要介紹了如何基于ThreadPoolExecutor創(chuàng)建線程池并操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Java文件、文件夾權(quán)限修改的兩種方法

    Java文件、文件夾權(quán)限修改的兩種方法

    這篇文章主要給大家介紹了關(guān)于Java文件、文件夾權(quán)限修改的兩種方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Springboot?hibernate-validator?6.x快速校驗示例代碼

    Springboot?hibernate-validator?6.x快速校驗示例代碼

    這篇文章主要介紹了Springboot?hibernate-validator?6.x校驗,本文以6.2.1.Final版本為例解決了log4j版本的漏洞問題,通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • JAVA JVM面試題總結(jié)

    JAVA JVM面試題總結(jié)

    JVM 可以屏蔽與具體操作系統(tǒng)平臺相關(guān)的信息,使 Java 程序只需生成在 Java 虛擬機上運行的目標(biāo)代碼,就可以在不同的平臺上運行。這篇文章主要介紹了JAVA JVM面試題總結(jié),大家可以參考一下
    2021-08-08
  • Spring Boot整合logback一個簡單的日志集成架構(gòu)

    Spring Boot整合logback一個簡單的日志集成架構(gòu)

    今天小編就為大家分享一篇關(guān)于Spring Boot整合logback一個簡單的日志集成架構(gòu),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java注解詳細(xì)介紹

    Java注解詳細(xì)介紹

    這篇文章主要介紹了Java注解詳細(xì)介紹,本文講解了Java注解是什么、Java注解基礎(chǔ)知識、Java注解類型、定義Java注解類型的注意事項等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • IDEA2023隱藏.idea和.iml文件的實現(xiàn)步驟

    IDEA2023隱藏.idea和.iml文件的實現(xiàn)步驟

    IDEA新建項目會自動生成一個.idea文件夾和.iml文件,本文主要介紹了IDEA2023隱藏.idea和.iml文件的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09

最新評論