@RequestMapping(value="/123.html") public void yaz(HttpServletResponse response,HttpServletRequest request) throws Exception{ request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("text/html;charset=utf-8"); int width=80;int height=40; //画板 BufferedImage b =new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //工具 Graphics g= b.getGraphics(); g.setColor(new Color(40, 200, 255)); g.fillRect(0, 0, width, height); char[] ch="QWERTYUIOPASDFGHJKLZXCVBNM1234567890".toCharArray(); Random random = new Random(); int len = ch.length,index; StringBuffer sb = new StringBuffer(); for (int i = 0; i < 4; i++) { index = random.nextInt(len); g.setColor(new Color(random.nextInt(88), random.nextInt(188), random.nextInt(255))); g.setFont(new Font("微软雅黑", Font.BOLD, 18)); g.drawString(ch[index]+"", i*15+3, 18); sb.append(ch[index]); } //干扰线 for(int i=1;i<10000;i++){ g.setColor(new Color(random.nextInt(88), random.nextInt(188), random.nextInt(255))); g.drawLine(random.nextInt(i*3+2), random.nextInt(i*5+1), random.nextInt(i*3+1),random.nextInt(i*9)); } //结束 g.dispose(); b.flush(); //保存 request.getSession().setAttribute("yzm", sb.toString()); try { //输出图片到页面 ImageIO.write(b, "png", response.getOutputStream()); } catch (IOException e) { } }
前台页面怎么用?
<body> <!-- 图片的路径直接是验证码的请求路径即可 --> <img alt="" src="<%=request.getContextPath()%>/123.html" id="reload" onclick="reload2()"> <script type="text/javascript"> function reload2(){ var time = new Date().getTime(); document.getElementById("reload").src="<%=request.getContextPath()%>/123.html?d="+time; } //为什么请求多了一个参数呢? 是为了告诉浏览器这是一个不同的请求,否则验证码不刷新 </script> </body>