制作验证码代码(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代码: 
	 
	
	  
	    verifyCodel.html
		
	    
	    
	    
	    
	    
		
		
	  
	  
	  
	    	换一张
	  
	
	

你可能感兴趣的:(javaweb)