十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要介绍SpringMVC生成验证码图片不显示怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
晋江网站建设公司成都创新互联公司,晋江网站设计制作,有大型网站制作公司丰富经验。已为晋江近1000家提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的晋江做网站的公司定做!近期用SSM框架写一个项目,登录模块需要生成验证码图片,我把相关的代码写好了之后传到 jsp ,但是图片不显示,查看控制台显示404,反复查询了一下代码并没有发现任何问题,代码如下:
@Controller public class ValidateCodeController { private static final long serialVersionUID = 1L; private static int WIDTH = 70; // 验证码图片的宽度 private static int HEIGHT = 35; // 验证码图片的高度 @RequestMapping("/validateCode") public void validateCode(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); response.setContentType("image/jpeg"); ServletOutputStream sos = response.getOutputStream(); // 设置浏览器不要缓存该图片 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); // 创建图片缓存区 BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); // 获取画笔 char [] rands = generateCheckCode(); // 产生随机的验证码 // 产生图像 drawBackground(g); drawRands(g, rands); // 结束绘画过程,完成图像 g.dispose(); // 将图像输出到客户端 ByteArrayOutputStream bos = new ByteArrayOutputStream(); ImageIO.write(image, "JPEG", bos); byte [] buf = bos.toByteArray(); response.setContentLength(buf.length); sos.write(buf); bos.close(); sos.close(); // 将当前验证码存入 Session 中 session.setAttribute("valicode", new String(rands)); //System.out.println("1:"+request.getSession().getId()); System.out.println(session.getAttribute("valicode")); } private void drawRands(Graphics g, char[] rands) { g.setColor(new Color(41, 41, 41)); g.setFont(new Font(null, Font.ITALIC|Font.BOLD, 18)); g.drawString("" + rands[0], 2, 17); g.drawString(" " + rands[1], 16, 20); g.drawString(" " + rands[2], 31, 13); g.drawString(" " + rands[3], 46, 18); //System.out.println(rands); } private void drawBackground(Graphics g) { g.setColor(new Color(255, 255, 255)); g.fillRect(0, 0, WIDTH, HEIGHT); // 随机产生 120 个干扰点 for(int i = 0; i < 120; i++) { int x = (int) (Math.random() * WIDTH); int y = (int) (Math.random() * HEIGHT); int red = (int) (Math.random() * 255); int green = (int) (Math.random() * 255); int blue = (int) (Math.random() * 255); g.setColor(new Color(red, green, blue)); g.drawOval(x, y, 1, 0); } } // 生成四个字符的验证码 private char[] generateCheckCode() { String chars = "0123456789abcdefghijklmnopqrstuvwxyz"; char [] rands = new char[4]; for(int i = 0; i <4; i++) { int rand = (int) (Math.random() * 36); rands[i] = chars.charAt(rand); } return rands; } }
jsp 获取验证码图片的关键代码如下:
后来就给validateCode方法加了一个注解@ResponseBody
图片就显示出来了。然后看了 这篇博客,才得知:
1、responseBody一般是作用在方法上的,加上该注解表示该方法的返回结果直接写到Http response Body
中,常用在ajax异步请求中,
2、在RequestMapping中 return返回值默认解析为跳转路径,如果你此时想让Controller返回一个字符串或者对象到前台 就会报404 not response的错误。
3、当加上@ResponseBody
注解后不会解析成跳转地址 会解析成相应的json格式的对象 集合 字符串或者xml等直接返回给前台 可以通过 ajax 的“success”:fucntion(data){} data
直接获取到。
以上是“SpringMVC生成验证码图片不显示怎么办”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联网站建设公司行业资讯频道!
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。