天天看點

JavaWeb學習-Servlet系列-15-自定義驗證碼

這篇來做一個練習題,很有意思,就是實作網頁上登入旁邊一個驗證碼的過程。當然實際開發過程中,網上可以找到很多别人開發好的jar包,直接使用别人的驗證碼成果就可以。

1.ServletDemo3.java代碼

package com.anthony.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;


public class ServletDemo3 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		int width = 110;
		int height = 25;
		// 在記憶體中建立一個圖像對象
		BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		
		//建立一個畫筆
		Graphics g = img.getGraphics();
		
		//給圖檔設定背景顔色和邊框
		g.setColor(Color.PINK);
		g.fillRect(1, 1, width-2, height-2);
		
		//添加邊框并設定顔色
		g.setColor(Color.BLUE);
		g.drawRect(0, 0, width-1, height-1);
		
		//設定字型樣式
		g.setColor(Color.BLUE);
		g.setFont(new Font("宋體", Font.BOLD | Font.ITALIC, 15)); //設定宋體 加粗和斜體顯示,字号15
		
		//給圖檔添加數字
		Random random = new Random();
		int position = 20;
		for (int i = 0; i < 4; i++) {
			g.drawString(random.nextInt(10)+"", position, 18);
			position += 20;
		}
		
		//添加9條幹擾線
		for (int i = 0; i < 9; i++) {
			g.drawLine(random.nextInt(width), random.nextInt(height), random.nextInt(width), random.nextInt(height));
		}
		//講圖檔以流的形式輸出到網頁
		ImageIO.write(img, "jpg", resp.getOutputStream());
		
		
	}
	
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
	
}
           

部署效果

JavaWeb學習-Servlet系列-15-自定義驗證碼

2.登陸表單添加驗證碼

在WebContent檔案夾下建立一個login.html檔案,這個登陸表單html源碼

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
<script type="text/javascript">
	function changeCode() {
		//先要得到圖檔元素
		var img = document.getElementsByTagName("img")[0];
		img.src="/Servlet01/demo3?time=" + new Date().getTime();
	}
</script>
</head>
<body>
	<form action="#" method="post">
		使用者名:<input type="text" name="userName"/></br>
		密碼:<input type="password" name="pwd"/></br>
		驗證碼:<input type="text" name="code"/>
		<img src="/Servlet01/demo3"/><a href="javascript:changeCode()" target="_blank" rel="external nofollow" >看不清換一張</a></br>
		<input type="submit" value="登入"/></br>
	</form>
</body>
</html>
           

部署之後,效果是這樣的

JavaWeb學習-Servlet系列-15-自定義驗證碼

點選浏覽器重新整理可以變換驗證碼,點選  看不清換一張也可以變換驗證碼。上面這個過程就寫一個自定義的驗證碼的過程,上面代碼不懂,暫時沒關系,了解一下這個思路就好。實際開發肯定用别人寫好的開源的驗證碼。

使用驗證碼工具包

網上有一個矩形圖檔驗證碼的jar包ValidateCode.jar,其實和我們這個自定義的差不多,關鍵是這個jar包在csdn下載下傳需要積分,由于不是免費軟體,我這也不建議使用,我們可以把上面自己寫的代碼抽取出來形成一個工具類。把width 和height 和左右 上下舉例都換成變量,這樣就可以像ValidateCode vc = new ValidateCode(寬度,高度,驗證碼個數,幹擾線條數),當然網上還有其他語言的圖檔驗證碼的工具包可以使用。

繼續閱讀