您的位置:首页 > 其它

验证码

2015-09-21 00:00 447 查看
摘要: 今天学习了一个登陆验证码,我相信如果每一天学习一点点,一定能成功的。

先说一下jsp页面:

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

开始说servlet/CodeckServlet:

[code=plain]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 {

}

}

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

[code=plain]//前面我们把sb.toString(),存Session中,这里可以直接得到。
String piccode = (String) request.getSession().getAttribute("piccode");
/*获取页面填写的验证码的值*/
String checkcode = request.getParameter("checkcode");
checkcode = checkcode.toUpperCase();
//因为我们的随机数里面只有大写,所以这里把所有数据改成大写就ok了
if(!(checkcode.equals(piccode))){
//判断是不是一样的,然后继续后面操作。
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: