java中使用Servlet實現驗證碼
阿新 • • 發佈:2019-02-05
一、驗證碼作用
驗證碼定義:是一種區別使用者是計算機還是人的公共全自動程式;
二、使用servlet實現驗證碼
1、製作頁面
①輸入框
②顯示驗證碼的圖片
圖片的路徑直接指向servlet,可以在servlet中動態生成驗證碼。
2、生成圖片需要用到的類:
(1)BufferedImage:影象資料緩衝區
(2)Graphics:繪製圖片
(3)Color:獲取顏色
(4)Random:生成隨機數
(5)ImageIO:輸出圖片
3、步驟
ImageServlet類
(1)定義BufferedImage物件
(2)獲取Graphics物件
(3)通過Random產生隨機驗證碼資訊
(4)使用Graphics繪製圖片
(5)記錄驗證碼資訊到session中
(6)使用ImageIO輸出圖片
LoginServlet類
(1)獲取頁面驗證碼
(2)獲取Session儲存的驗證碼
(3)比較驗證碼
(4)返回校驗結果
4、建立專案checkcode
(1) index.jsp
給img 標籤加個id
編制重新整理圖片的JS程式碼
<script type="text/javascript">
function reloadCode(){
//定義一個時間
var time = new Date().getTime();
//時間不用,傳參不同,可以重新進行請求
document.getElementById("imagecode").src="<%=request.getContextPath() %>/servlet/ImageServlet?d="+time;
}
</script>
(2) ImageServlet
public class ImageServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
//圖片載入物件 引數(長,寬,圖片型別)
BufferedImage bi = new BufferedImage(68,22,BufferedImage.TYPE_INT_RGB);
//建立畫筆
Graphics g = bi.getGraphics();
Color c = new Color(200,150,255);
g.setColor(c);
//給背景加個框框
g.fillRect(0, 0, 68, 22);
//隨機字串
char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
Random r = new Random();
int len=ch.length,index;
StringBuffer sb = new StringBuffer();
for(int i=0; i<4; i++){
index = r.nextInt(len);
//隨機給生成的字元生成一個顏色
g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
//把字串寫到圖片上
g.drawString(ch[index]+"", (i*15)+3, 18);
sb.append(ch[index]);
}
//字串放到Session中
request.getSession().setAttribute("piccode", sb.toString());
//輸出圖片
ImageIO.write(bi, "JPG", response.getOutputStream());
}
}
5、效果: