验证码

先说一下jsp页面:

<img alt="验证码" id="imagecode" src="<%=request.getContextPath() %>/servlet/CodeckServlet"/>
//这里src=""中存储的是一个url,大概的意识是后面会把/输出到浏览器的页面上:ImageIO。

开始说servlet/CodeckServlet:

package web;

import java.awt.Color;
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 CodeckServlet extends HttpServlet {
	public CodeckServlet() {
		super();
	}
	public void destroy() {
		super.destroy(); 
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request,response);
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//创建一副内存图片BufferedImage,这里面68为宽,28为高
		BufferedImage bi = new BufferedImage(68,28,BufferedImage.TYPE_INT_RGB);
		//得到属于该图片的画笔:Graphics();
		Graphics g = bi.getGraphics();
		//调节颜色
		Color c = new Color(180,181,181);
		//设置背景颜色
		g.setColor(c);
		//设置背景颜色的范围
		g.fillRect(0, 0, 68, 28);
		//设置随机验证中可能出现的字符
		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域中,
		 * 在另一个校验的Servlet时,可以直接提取这里面的信息;
		 * 方便校验;
		 * */
		request.getSession().setAttribute("piccode", sb.toString());
		//以输出流的方式,将图片弄出来。
		ImageIO.write(bi, "JPG", response.getOutputStream());
	}
	public void init() throws ServletException {
		
	}

}

在得到数据后的判断,简单说一下:

//前面我们把sb.toString(),存Session中,这里可以直接得到。
String piccode = (String) request.getSession().getAttribute("piccode");
/*获取页面填写的验证码的值*/
String checkcode = request.getParameter("checkcode");
checkcode = checkcode.toUpperCase();
//因为我们的随机数里面只有大写,所以这里把所有数据改成大写就ok了
if(!(checkcode.equals(piccode))){
//判断是不是一样的,然后继续后面操作。
}


你可能感兴趣的:(验证码)