容器servlet
public class CheckCodeServlet extends HttpServlet {
private static final long serialVersionUID = -2377809954841166880L;
private int height = 25;
private int width = 100;
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 画出验证码图片
*/
//1.创建画布
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//2.获得画笔
Graphics g = image.getGraphics();
//3.为画笔设置随机颜色
Random r = new Random();
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
//4.设置背景色
g.fillRect(0, 0, width, height);
//5.为画笔重设颜色用来写字符串
g.setColor(new Color(0,0,0));
g.setFont(new Font(null,Font.BOLD,20));
//调用方法生成一个验证码(长度为5随机从A~Z 0-9选取
String str = new RandomStr().randomStr();
//画出验证码
g.drawString(str, 10, 22);
//画出干扰线
for(int i=0;i<=6;i++){
g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));
}
/**
* 输出
*/
//设置消息头告诉浏览器输出的为一个图片
response.setContentType("image/jpeg");
//或得一个字节输出流
OutputStream ops = response.getOutputStream();
//将图片压缩输出
javax.imageio.ImageIO.write(image, "jpeg", ops);
ops.close();
/**
* 将验证码转发通过session转发给login页面(其他页面也可以接收使用)
*/
HttpSession session = request.getSession();
session.setAttribute("checkcode", str);
}
//内部类 存放生成随机字符串的方法
class RandomStr{
Random r = new Random();
private String randomStr(){
String str = "";
for(int i=0;i<6;i++){
Character c = (char)f(r.nextInt(2));
str = str + c.toString();
}
return str;
}
private int f(int x){
switch(x){
case 0:
return 48+r.nextInt(10);
case 1:
return 65+r.nextInt(26);
default:
return 55;
}
}
}
}
jsp页面
<img src="checkcode" id="img" οnclick="this.src='checkcode?'+Math.random;"/> <a href="javascript:;" οnclick="document.getElementById('img').src='checkcode?'+Math.random();">换一张</a>