Jsp servlet驗證碼工具類分享
更新時間:2018年05月02日 11:25:29 作者:田埂上的夢想
這篇文章主要為大家分享了Jsp servlet驗證碼工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
昨晚在csdn看到一位前輩寫一個ajax+servlet+jsp驗證,頓時心血來潮,在閱讀前輩的代碼下我親手體驗一下,做了一個驗證碼生成工具類,以供大家做個參考。
1、添加VeriyCodeUtils類生成驗證碼圖像
package com.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
/**
*
* @author hubiao
* 驗證碼生成器
* 用到API
* BufferedImage 創(chuàng)建一個圖像
* Graphics2D 繪制
* fillRect(x,y,width,height);背景
* font()字體
* drawRect();邊框
* drawLine();線
* drwaString:圖像數(shù)據(jù)
* ImageIO 生成圖像
*/
public class VeriyCodeUtils {
/**
* @param output 保存驗證圖像的流
* @return 驗證碼
*/
public static String newVeriyCode(OutputStream output)
{
int width = 90;
int height = 40;
int codeCount = 5;
char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
//創(chuàng)建圖像對象,8位RGB
BufferedImage buffered = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//通過Crapahices來繪制圖像到BufferedImage中
Graphics2D gra = buffered.createGraphics();
//設(shè)置圖片背景:白色
gra.setColor(Color.WHITE);
gra.fillRect(0, 0, width, height);
//設(shè)置字體,字體大小根據(jù)圖片高度決定
gra.setFont(new Font("Fixedsys",Font.PLAIN,height-2));
//設(shè)置邊框:黑色,1cm
gra.setColor(Color.BLACK);
gra.drawRect(0, 0, width-1, height-1);
//生成10條黑色干擾線
gra.setColor(Color.BLACK);
Random ran = new Random();
for(int i = 0; i < 70;i++)
{
int x = ran.nextInt(255);
int y = ran.nextInt(255);
int x1 = ran.nextInt(255);
int y1 = ran.nextInt(255);
gra.drawLine(x, y,x+x1, y+y1);//畫直線
}
//生成驗證碼
StringBuffer sb = new StringBuffer();
int r = 0,g = 0,b = 0;
for(int i = 0; i < codeCount; i++)
{
String strRand = String.valueOf(codeSequence[ran.nextInt(codeSequence.length)]);
//對每位驗證碼都生成不同的顏色,增加識別系統(tǒng)難度
r = ran.nextInt(255);
g = ran.nextInt(255);
b = ran.nextInt(255);
gra.setColor(new Color(r, g, b));
gra.drawString(strRand, (i+1)*13, height-4);
sb.append(strRand);
}
try {
ImageIO.write(buffered, "jpeg", output);
} catch (Exception e) {
throw new RuntimeException(e);
}
return sb.toString();
}
}
2、servlet使用驗證碼
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//禁止圖像緩存
resp.setHeader("Pragma", "no-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
resp.setContentType("image/jpeg");
//生成驗證碼圖像
String veriyCode = VeriyCodeUtils.newVeriyCode(resp.getOutputStream());
//將驗證碼保存到session中
HttpSession session = req.getSession();
session.setAttribute("validateCode", veriyCode);
}
3、JSP頁面使用驗證碼
</head>
<script type="text/javascript">
function createCode()
{
var t = new Date().getTime();//防止頁面緩存,使用時間搓
var srcImg = document.getElementById("srcImg");
srcImg.src="/ImgVeifyWeb/vity.do?"+t;
}
</script>
<body>
<h1>${requestScope.code}</h1>
<img id="srcImg" src="<c:url value="/vity.do"></c:url>" /> #這里使用直接讓img訪問servlet,通過response響應(yīng)一個圖像流
<a href="##" rel="external nofollow" id="codeId" onclick="createCode()">換一張</a>
<form action="<c:url value="/hello.do"></c:url>" method="post">
<input type="text" name="codeVify"/>
<input type="submit" value="提交"/>
</form>
</body>
4、校驗驗證碼
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpSession session = req.getSession();
Object validateCode = session.getAttribute("validateCode");
System.out.println(validateCode);
String codeVify = req.getParameter("codeVify");
if(codeVify==null || codeVify.equals(""))
{
req.setAttribute("code","驗證證不能為空");
req.getRequestDispatcher("/index.jsp").forward(req, resp);
return;
}else if(!validateCode.toString().equalsIgnoreCase(codeVify))
{
req.setAttribute("code","驗證證錯誤");
req.getRequestDispatcher("/index.jsp").forward(req, resp);
return;
}
System.out.println("下面開始 做其他業(yè)務(wù)操作....");
}
校驗圖如下:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- 使用easyui從servlet傳遞json數(shù)據(jù)到前端頁面的兩種方法
- jsp+servlet實現(xiàn)猜數(shù)字游戲
- servlet+jsp實現(xiàn)過濾器 防止用戶未登錄訪問
- javascript與jsp發(fā)送請求到servlet的幾種方式實例
- jsp頁面中獲取servlet請求中的參數(shù)的辦法詳解
- Jsp+Servlet實現(xiàn)文件上傳下載 刪除上傳文件(三)
- Jsp+Servlet實現(xiàn)文件上傳下載 文件上傳(一)
- Java,JSP,Servlet獲取當(dāng)前工程路徑(絕對路徑)問題解析
- Servlet返回的數(shù)據(jù)js解析2種方法
相關(guān)文章
JSP中實現(xiàn)判斷客戶端手機類型并跳轉(zhuǎn)到app下載頁面
這篇文章主要介紹了JSP中實現(xiàn)判斷客戶端手機類型并跳轉(zhuǎn)到app下載頁面,實現(xiàn)的原理,是檢測瀏覽器的 USER-AGENT 這個header,然后根據(jù)正則表達式來確定客戶端類型,需要的朋友可以參考下2014-09-09

