servlet实现图片验证码

1首先在动态网站项目中创建一个servlet(继承,或者直接创建)(如果在创建的时候版本为3.0则需要在web.xml中配置文件,如果选用2.5则不用配置)

 

servlet实现图片验证码_第1张图片

2.在doget进行验证码的实现

public calss ValidateCodeServlet extends HttpServlet{
    public stitic final int WIDTH=120;//定义图片的长
    public static  final int HEIGHT=30;//定义图片的高
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   //首先先生成一张图片
   BufferedImage bi=new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_INT_RGB);
   //获取画笔
  Graphics g=bi.getGraphics();
   //给图片设置背景  写一个设置背景的方法
    setBackground(g);
   //设置边框  在下面定义一个设置边框的方法
   setBorder(g);
   //像图片中设置干扰线  在下面定义一个干扰线
     setLine(g);
   //设置干扰点
	setPoint(g); 
   //创建一个随机数
	String baseString="1234567890qwertyuiopasfghjklzxcvbnm";
	String code=createRandomCode(baseString, (Graphics2D)g);//调用下面写入随机数的方法 将随机生成的字符写入到图片中
    req.getSession().setAttribute("code", code);
   //向页面中输出
   resp.setContentType("image/jpeg");//设置类型
   ImageIO.write(bi, "jpeg",resp.getOutputStream());
   

}
/**
	 * 设置背景
	 * @param g
	 */
	public void setBackground(Graphics g){
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, WIDTH, HEIGHT);
	}
 /**
	 * 设置边框
	 * @param g
	 */
	public void setBorder(Graphics g){
		g.setColor(Color.GRAY);
		g.drawRect(1, 1, WIDTH-2, HEIGHT-2);
	}
/**
	 * 设置干扰线
	 * @param g
	 */
	public void setLine(Graphics g){
		
		//设置彩色的干扰线
		g.setColor(new Color(new Random().nextInt(200), new Random().nextInt(90), new 
     Random().nextInt(255)));
		
		for (int i = 0; i <5; i++) {
			int x1=new Random().nextInt(WIDTH);
			int x2=new Random().nextInt(WIDTH);
			int y1=new Random().nextInt(HEIGHT);
			int y2=new Random().nextInt(HEIGHT);
			g.drawLine(x1, y1, x2, y2);
		}
	}

   /**
	 * 设置干扰点
	 * @param g
	 */
	public void setPoint(Graphics g){
		//设置彩色的干扰线
	    g.setColor(new Color(new Random().nextInt(200), new Random().nextInt(90), new Random().nextInt(255)));
	    for(int i=0;i<100;i++){
	    	int x=new Random().nextInt(WIDTH);
	    	int y=new Random().nextInt(HEIGHT);
	    	g.drawOval(x, y, 1, 1);
	    }
	}

/**
	 * 产生随机数
	 * @param baseString
	 * @param g
	 * @return
	 */
	public String createRandomCode(String baseString,Graphics2D g){
		StringBuffer sb=new StringBuffer();
		//定义X
		int x=5;
		String ch="";
		//产生随机数
		for(int i=0;i<5;i++){
			//产生一个随机索引
			int index=new Random().nextInt(baseString.length());
			//产生一个随机数
			ch=baseString.charAt(index)+"";
			//把产生的随机数添加到stringbuffer中
			sb.append(ch);
			//为每个字体设置颜色
			g.setColor(new Color(new Random().nextInt(255), new Random().nextInt(255), new Random().nextInt(255)));
			//设置字体
			g.setFont(new Font("微软雅黑",Font.BOLD, 20));
			//把随机数写入图片
			g.drawString(ch, x, 20);
			//设置一个旋转的角度
			int degree=new Random().nextInt(5)%30;
			//实现旋转
			g.rotate(degree*Math.PI/180, x, 20);
			x+=20;
		}
		return sb.toString();
	}





protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
}

预览效果

你可能感兴趣的:(java)