本文實例為大家分享了Java圖片驗證碼代碼,供大家參考,具體內(nèi)容如下
網(wǎng)頁顯示效果:
index.jsp
使用兩種方式強(qiáng)制圖片更新:
1、設(shè)置圖片輸出時不緩存。
2、用js改變請求的地址。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> < html > < head > < title >第一個web項目的主頁</ title > < script type = "text/javascript" > function changeImg(){ var _img=document.getElementById("_img"); var time=new Date().getTime();//瀏覽器認(rèn)為相同的動作(被過濾)沒必要應(yīng)答,所以用時間值改變src值(即請求)(事實上是同一請求) _img.src="confirm?"+time;//用js改變請求的地址 } </ script > </ head > < body > < h2 >主頁主頁</ h2 > < h2 >湖南長沙</ h2 > < h3 >發(fā)布方式一......</ h3 > < img src = "images/1.jpg" /> < br /> < a href = "jsps/a.jsp" >去到子頁</ a > < hr /> < form > 姓名:< input type = "text" name = "nmae" />< br /> 密碼:< input type = "password" name = "pwd" /> < br /> 確認(rèn)密碼:< input type = "text" name = pwd2 /> < br /> 驗證碼:< input type = "text" />< img id = "_img" src = "confirm" /> <!-- 不可行 <a href="confirm">看不清</a> <br/> --> < a href = "javascript:changeImg();" >看不清</ a > < br /> < input type = "submit" value = "注冊" /> </ form > </ body > </ html > |
自動生成驗證碼的java代碼
關(guān)鍵類(以下類為基礎(chǔ)部分的內(nèi)容)
BufferedImage
ImageIO
Graphics/Graphics2D
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
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 ImageServlet extends HttpServlet{ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // System.out.println("jinlaile"); resp.setContentType( "image/jpeg" ); //jpeg是圖片格式。設(shè)置響應(yīng)內(nèi)容的類型為jpeg的圖片 int width= 64 ; int height= 40 ; BufferedImage bImg= new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g=bImg.getGraphics(); //背景 g.setColor(Color.white); g.fillRect( 0 , 0 , width, height); //字體顏色 g.setFont( new Font( "aa" , Font.BOLD, 18 )); //用隨機(jī)數(shù)生成驗證碼:4個0~9以內(nèi)的整數(shù) Random r= new Random(); for ( int i= 0 ;i<= 4 ;i++){ int t=r.nextInt( 10 ); //10以內(nèi)的隨機(jī)整數(shù) int y= 10 +r.nextInt( 20 ); //上下位置:10~30 Color c= new Color(r.nextInt( 255 ), r.nextInt( 255 ), r.nextInt( 255 )); g.setColor(c); g.drawString( "" +t, i* 16 , y); } //畫干擾線 for ( int i= 1 ;i< 8 ;i++){ Color c= new Color(r.nextInt( 255 ), r.nextInt( 255 ), r.nextInt( 255 )); g.setColor(c); g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height)); } //把圖形刷到bImg對象中 g.dispose(); //相當(dāng)于IO中的close()方法帶自動flush(); ImageIO.write(bImg, "JPEG" , resp.getOutputStream()); //通過resp獲取req的outputStream對象,發(fā)向客戶端的socket的封裝,即寫到客戶端 } } |
web.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<? xml version = "1.0" encoding = "UTF-8" ?> < web-app version = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> < display-name ></ display-name > <!-- 訪問安全目錄WEB-INF中的b.jsp文件 --> < servlet > < servlet-name >bbbb</ servlet-name > < jsp-file >/WEB-INF/b.jsp</ jsp-file > </ servlet > <!-- 訪問生成驗證碼的java代碼 --> < servlet > < servlet-name >img</ servlet-name > < servlet-class >cn.hncu.servlet.ImageServlet</ servlet-class > </ servlet > < servlet-mapping > < servlet-name >bbbb</ servlet-name > < url-pattern >/bb.asp</ url-pattern > </ servlet-mapping > < servlet-mapping > < servlet-name >img</ servlet-name > < url-pattern >/confirm</ url-pattern > </ servlet-mapping > < welcome-file-list > < welcome-file >index.jsp</ welcome-file > </ welcome-file-list > </ web-app > |
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。