生成验证码图片的Java代码
生活随笔
收集整理的這篇文章主要介紹了
生成验证码图片的Java代码
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 驗證碼演示代碼
- 請求資源路徑為什么要添加一個隨機數(shù)的參數(shù)
驗證碼演示代碼
package priv.lwx.javaex.servlet_demo.web.servlet.response;import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random;/*** 驗證碼示例代碼** @author liaowenxiong* @date 2022/1/10 11:01*/ @WebServlet("/check_code") public class CheckCodeServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {int width = 100; // 表示圖片的寬度,單位像素int height = 50; // 表示圖片的高度,單位像素// 1.創(chuàng)建一個圖片對象,代表內(nèi)存中的驗證碼圖片。圖片對象創(chuàng)建好之后,就表示在內(nèi)存中創(chuàng)建了一個圖片(內(nèi)存中存儲的是二進制數(shù)據(jù)),圖片背景色默認黑色BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);// 2.美化圖片// 2.1.填充背景色// 先獲取畫筆Graphics graphics = image.getGraphics();// 設置畫筆的顏色為粉紅色graphics.setColor(Color.PINK);// 填充矩形graphics.fillRect(0, 0, width, height);// 2.2.畫邊框// 設置畫筆的顏色為藍色graphics.setColor(Color.BLUE);// 畫邊框graphics.drawRect(0, 0, -1, height - 1);// 畫隨機字符// 隨機字符的來源String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";// 創(chuàng)建隨機數(shù)對象Random ran = new Random();// 2.3.畫隨機字符。循環(huán)四次,畫4個隨機的字符for (int i = 1; i <= 4; i++) {// 生成隨機的字符串下標int index = ran.nextInt(str.length());// 獲取隨機字符char c = str.charAt(index);// 畫隨機字符graphics.drawString(c + "", width / 5 * i, height / 2);}// 2.4.畫干擾線// 設置畫筆的顏色為綠色的graphics.setColor(Color.GREEN);// 獲取隨機的for (int i = 0; i < 10; i++) {// 獲取兩個隨機點的坐標值int x1 = ran.nextInt(width);int x2 = ran.nextInt(width);int y1 = ran.nextInt(height);int y2 = ran.nextInt(height);// 畫線graphics.drawLine(x1, y1, x2, y2);}// 3.將圖片輸出到Response對象的字節(jié)流中ImageIO.write(image, "jpg", resp.getOutputStream());} }請求資源路徑為什么要添加一個隨機數(shù)的參數(shù)
由于瀏覽器的緩存機制,發(fā)送的請求資源路徑如果與上一次相同,有的瀏覽器不會再向服務器發(fā)送請求。
解決方案:
采用一種“欺騙”手段向服務發(fā)送請求。就是給請求資源路徑增加一個參數(shù),參數(shù)值是一個隨機數(shù),那么就可以制造假象,使得每次發(fā)送的請求地址不同。其實服務器端的 Servlet 每次處理請求時,并沒有用到該參數(shù),只是為了給瀏覽器制造假象罷了。
例如:
img.src="/servlet_demo/check_code?" + Math.random();或者
img.src = "/servlet_demo/check_code?" + date;前端示例代碼:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>注冊界面</title><script>window.onload = function () {var img = document.getElementById("checkCode");var link = document.getElementById("changeCode");// 給圖片元素注冊點擊事件監(jiān)聽器img.onclick = function () {var date = new Date().getTime();img.src = "/servlet_demo/check_code?" + date;}// 給超鏈接注冊點擊事件監(jiān)聽器link.onclick = function () {var date = new Date().getTime();img.src = "/servlet_demo/check_code?" + date;}}</script> </head> <body> <form action="/servlet_demo/request-demo06" method="get"><input type="text" placeholder="請輸入用戶名" name="userName"/><br><input type="text" placeholder="請輸入密碼" name="password"/><br><input type="text" placeholder="請輸入驗證碼" name="checkCode"/><img id="checkCode" src="/servlet_demo/check_code"/><a id="changeCode" href="javascript:void(0);">看不清楚換一張?</a><br><input type="submit" value="提交"/> </form></body> </html>總結
以上是生活随笔為你收集整理的生成验证码图片的Java代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle数据库的命令工具sql*pl
- 下一篇: Java运算符详解