制作验证码代码(response.getOutputStream运用)

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>
	

猜你喜欢

转载自blog.csdn.net/chenzuen113113/article/details/80904759