1.验证码是在所有网站上都会出现的,所以使用非常频繁。 验证码是一个图片,所以我们如果需要生成验证码,那么我们就必须要生成一张图片。
2.验证码涉及到的类:
1.BufferedImage : 该类的作用就是在内存中 生成一张图片。
2.ImageIO: 该类的作用就是把内存中的图片写出到对应 的位置上。
3.代码
1.Servlet代码:
public class VerifyCodeServlet extends HttpServlet {
private Random random = new Random();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//在内存中生成一张图片
BufferedImage image = new BufferedImage(80, 30,BufferedImage.TYPE_INT_RGB);
//获取到图片的画笔
Graphics g = image.getGraphics();
//设置背景颜色
g.setColor(new Color(0, 255, 0));
//使用画笔填充的方式改变的背景的颜色
g.fill3DRect(0, 0, 80, 30, true); // x ,y 左上角的位置 , width 宽,height 高 , raised 凹凸感
//更换笔画颜色
g.setColor(new Color(0,0,255));
//设置字体
g.setFont(new Font("宋体", Font.ITALIC, 16));
//写字
g.drawString(randomCode(), 10, 20);
for(int i = 0 ; i<10 ; i++){
//画干扰线
g.setColor(randomColor());
//画直线
int x1 = random.nextInt(81);
int y1 = random.nextInt(31);
int x2 = random.nextInt(81);
int y2 = random.nextInt(31);
g.drawLine(x1, y1, x2, y2);
}
OutputStream out = response.getOutputStream();
//把内存中图片输出
ImageIO.write(image, "png", out);
}
//随机产生一个颜色
public Color randomColor(){
int r = random.nextInt(256);
int g = random.nextInt(256);
int b = random.nextInt(256);
return new Color(r,g,b);
}
//随机产生一个验证码的字符串
public String randomCode(){
char[] arr = {'a','b','c','我','是','好','坏','人'};
StringBuilder sb = new StringBuilder();
//随机产生四个索引
for (int i = 0; i < 4; i++) {
int index = random.nextInt(arr.length);
//从字符数组中取出对应的字符,存储到StringBuilder
sb.append(arr[index]);
}
return sb.toString();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
2.Html代码:
<html>
<head>
<title>verifyCodel.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
<script type="text/javascript">
//换一张验证码
function changeImage(){
var image = document.getElementsByTagName("img")[0];
//img表单的src属性值一旦发生改变,那么 马上就重新发出请求
image.src="/day37/verifyCode?id="+new Date();
}
</script>
</head>
<body>
<img src="/day37/verifyCode"/><a href="#" onclick="changeImage()">换一张</a>
</body>
</html>
制作验证码代码(response.getOutputStream运用)
猜你喜欢
转载自blog.csdn.net/chenzuen113113/article/details/80904759
今日推荐
周排行