黑马程序员技术交流社区
标题:
动态生成验证码
[打印本页]
作者:
huangbao
时间:
2019-5-23 08:43
标题:
动态生成验证码
public void
doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
//
服务器通知浏览器不要缓存
response.setHeader(
"pragma"
,
"no-cache"
);
response.setHeader(
"cache-control"
,
"no-cache"
);
response.setHeader(
"expires"
,
"0"
);
//
在内存中创建一个长
80
,宽
30
的图片,默认黑色背景
//
参数一:长
//
参数二:宽
//
参数三:颜色
int
width =
80
;
int
height =
30
;
BufferedImage image =
new
BufferedImage(width,height,BufferedImage.
TYPE_INT_RGB
);
//
获取画笔
Graphics g = image.getGraphics();
//
设置画笔颜色为灰色
g.setColor(Color.
GRAY
);
//
填充图片
g.fillRect(
0
,
0
, width,height);
//
产生
4
个随机验证码,
12Ey
String checkCode = getCheckCode();
//
将验证码放入
HttpSession
中
request.getSession().setAttribute(
"CHECKCODE_SERVER"
,checkCode);
//
设置画笔颜色为黄色
g.setColor(Color.
YELLOW
);
//
设置字体的小大
g.setFont(
new
Font(
"
黑体
"
,Font.
BOLD
,
24
));
//
向图片上写入验证码
g.drawString(checkCode,
15
,
25
);
//
将内存中的图片输出到浏览器
//
参数一:图片对象
//
参数二:图片的格式,如
PNG,JPG,GIF
//
参数三:图片输出到哪里去
ImageIO.
write
(image,
"PNG"
,response.getOutputStream());
}
/**
*
产生
4
位随机字符串
*/
private
String getCheckCode() {
String base =
"0123456789ABCDEFGabcdefg"
;
int
size = base.length();
Random r =
new
Random();
StringBuffer sb =
new
StringBuffer();
for
(
int
i=
1
;i<=
4
;i++){
//
产生
0
到
size-1
的随机值
int
index = r.nextInt(size);
//
在
base
字符串中获取下标为
index
的字符
char
c = base.charAt(index);
//
将
c
放入到
StringBuffer
中去
sb.append(c);
}
return
sb.toString();
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2