`
ifWhileCaseFor
  • 浏览: 7847 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

servlet生成验证码

 
阅读更多

容器servlet

public class CheckCodeServlet extends HttpServlet {
	
	private static final long serialVersionUID = -2377809954841166880L;
	
	private int height = 25;
	private int width = 100;
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/**
		 * 画出验证码图片
		 */
		//1.创建画布
		BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
		//2.获得画笔
		Graphics g = image.getGraphics();
		//3.为画笔设置随机颜色
		Random r = new Random();
		g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
		//4.设置背景色
		g.fillRect(0, 0, width, height);
		//5.为画笔重设颜色用来写字符串
		g.setColor(new Color(0,0,0));
		g.setFont(new Font(null,Font.BOLD,20));
		//调用方法生成一个验证码(长度为5随机从A~Z 0-9选取
		String str = new RandomStr().randomStr();
		//画出验证码
		g.drawString(str, 10, 22);
		//画出干扰线
		for(int i=0;i<=6;i++){
			g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));
		}
		
		/**
		 * 输出
		 */
		//设置消息头告诉浏览器输出的为一个图片
		response.setContentType("image/jpeg");
		//或得一个字节输出流
		OutputStream ops = response.getOutputStream();
		//将图片压缩输出
		javax.imageio.ImageIO.write(image, "jpeg", ops);
		ops.close();
		
		/**
		 * 将验证码转发通过session转发给login页面(其他页面也可以接收使用)
		 */
		HttpSession session = request.getSession();
		session.setAttribute("checkcode", str);
	}
	
	//内部类 存放生成随机字符串的方法
		class RandomStr{
			Random r = new Random();
			private String randomStr(){
				String str = "";
				for(int i=0;i<6;i++){
					Character c = (char)f(r.nextInt(2));
					str = str + c.toString();
				}
				return str;
			}
			private int f(int x){
				switch(x){
				case 0:
					return 48+r.nextInt(10);
				case 1:
					return 65+r.nextInt(26);
				default:
					return 55;
			}
		}
	}
}

 jsp页面

<img src="checkcode" id="img" onclick="this.src='checkcode?'+Math.random;"/>

<a href="javascript:;" onclick="document.getElementById('img').src='checkcode?'+Math.random();">换一张</a>

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics