首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java Web 整合驗證碼與二維碼生成:基於 Jelly-core 庫的零代碼配置實戰

     編輯:Java 綜合教學

Java Web 整合驗證碼與二維碼生成:基於 Jelly-core 庫的零代碼配置實戰

在傳統 Java Web 開發中,驗證碼與二維碼生成往往需要引入工具類、編寫 Servlet、處理圖片流。本文介紹一種零 Java 代碼、純 XML 配置的輕量級方案——利用 jelly-core-1.7.0.GA.jar,僅需在 web.xml 註冊 Servlet 即可實現多樣式驗證碼與可定製二維碼生成,極大簡化開發流程。

一、環境準備

  1. 下載 jelly-core-1.7.0.GA.jar 放入項目 WEB-INF/lib 目錄。
  2. 無需編寫任何 Java 類,直接配置 web.xml 即可生效。

二、驗證碼模塊:三大內置樣式任意切換

核心 Servlet:org.jelly.image.ValidateCode,映射路徑如 /idCode。通過 <init-param> 的 style 參數切換樣式:

樣式 style 值 視覺效果 配置片段
波紋(默認) wave 背景波浪干擾,字符扭曲 無需 init-param,直接註冊 Servlet
陰影 shadow 字符帶陰影立體感 <param-name>style</param-name><param-value>shadow</param-value>
魚眼 fishEye 中心凸起魚眼鏡頭效果 <param-name>style</param-name><param-value>fishEye</param-value>

完整 web.xml 範例(陰影樣式)

<servlet>
    <servlet-name>ValidateCode</servlet-name>
    <servlet-class>org.jelly.image.ValidateCode</servlet-class>
    <init-param>
        <param-name>style</param-name>
        <param-value>shadow</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>ValidateCode</servlet-name>
    <url-pattern>/idCode</url-pattern>
</servlet-mapping>

JSP 頁面調用

<img src="<%=request.getContextPath()%>/idCode" onclick="this.src=this.src+'?'+Math.random()" />

三、驗證碼核心配置參數詳解

所有參數均在 <init-param> 中設置,屬性名區分大小寫:

參數名 說明 默認值 可選值/範例
border是否顯示邊框noyes / no
borderColor邊框顏色blackRGB值 / 顏色名稱(red, #FF0000)
borderThickness邊框粗細1數值
width圖片寬度(不建議修改)230數值
height圖片高度(不建議修改)90數值
fontSize字體大小(不建議修改)70數值
fontColor字體顏色blackRGB / 顏色名稱
fontFamily字體名稱Arial,Helvetica...字體名稱列表
charString字符集類型NUN(數字) L(小寫) U(大寫) NL NU LU NLU
charLength字符長度4數值
charSpace字符間距1數值
noiseColor干擾線顏色blackRGB / 顏色名稱
sessionKeySession 存儲鍵名idCode自定義字符串

提示:width/height/fontSize 標註「不建議配置」,因為庫內部已根據字符長度自動計算最佳尺寸,強制修改可能導致顯示異常。

四、二維碼模塊:靈活定製前景背景與容錯率

核心 Servlet:org.jelly.image.Qrcode,映射路徑如 /qrcode。通過參數定製:

參數名 說明 默認值 可選值
size圖片大小(模塊數)7數值(越大越清晰)
imageType輸出圖片格式jpgpng, bmp, gif, jpg, jpeg
foreground前景色(碼色)blackRGB / 顏色名稱
background背景色whiteRGB / 顏色名稱
errorCorrect容錯等級H (30%)L(7%) M(15%) Q(25%) H(30%)

配置範例:粉色前景、高容錯二維碼

<servlet>
    <servlet-name>Qrcode</servlet-name>
    <servlet-class>org.jelly.image.Qrcode</servlet-class>
    <init-param>
        <param-name>foreground</param-name>
        <param-value>pink</param-value>
    </init-param>
    <init-param>
        <param-name>errorCorrect</param-name>
        <param-value>H</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>Qrcode</servlet-name>
    <url-pattern>/qrcode</url-pattern>
</servlet-mapping>

前端調用:動態傳遞內容

二維碼內容通過請求參數 data 傳遞:

<img src="<%=request.getContextPath()%>/qrcode?data=HelloWorld" />

五、驗證碼校驗邏輯(後端)

表單提交時,從 Session 取出驗證碼比對:

String inputCode = request.getParameter("validateCode");
String sessionCode = (String) session.getAttribute("idCode"); // 對應 sessionKey
if (sessionCode != null && sessionCode.equalsIgnoreCase(inputCode)) {
    // 校驗通過
} else {
    // 校驗失敗
}

六、優缺點評估與適用場景

✅ 優勢

  • 零代碼侵入:無需寫工具類、Servlet、圖片流處理,純配置即用。
  • 樣式豐富:三種驗證碼風格 + 可定製二維碼顏色/容錯,滿足大多數業務。
  • 輕量級:單 JAR 約幾百 KB,無額外依賴。

⚠️ 局限

  • 功能固化:無法實現極度定製化需求(如自定義字體文件、動畫驗證碼、Logo 嵌入二維碼)。
  • 維護狀態:jelly-core 早期項目,社區活躍度低,長期項目建議遷移至 kaptcha、google-zxing 或 hutool 等活躍庫。
  • Session 依賴:分布式環境需配置 Session 共享(Redis/Sticky Session)。

七、總結

對於中小型項目、快速原型、內部管理系統,jelly-core 以「零代碼、純配置」極致簡化了驗證碼與二維碼接入成本。只需丟 JAR、改 web.xml、寫一行 <img> 標籤即可上線。若業務演進至高定製、高併發、分布式場景,再引入成熟庫重構即可——技術選型的核心,始終是「當下足夠用,未來好擴展」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved