SpringMVC生成的验证码图片不显示问题及解决方法
近期用SSM框架写一个项目,登录模块需要生成验证码图片,我把相关的代码写好了之后传到jsp,但是图片不显示,查看控制台显示404,反复查询了一下代码并没有发现任何问题,代码如下:
@Controller
publicclassValidateCodeController{
privatestaticfinallongserialVersionUID=1L;
privatestaticintWIDTH=70;//验证码图片的宽度
privatestaticintHEIGHT=35;//验证码图片的高度
@RequestMapping("/http://dh.wk163.comvalidateCode")
publicvoidhttp://dh.wk163.comvalidateCode(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
HttpSessionsession=request.getSession();
response.setContentType("image/jpeg");
ServletOutputStreamsos=response.getOutputStream();
//设置浏览器不要缓存该图片
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
//创建图片缓存区
BufferedImageimage=newBufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphicsg=image.getGraphics();//获取画笔
char[]rands=generateCheckCode();//产生随机的验证码
//产生图像
drawBackground(g);
drawRands(g,rands);
//结束绘画过程,完成图像
g.dispose();
//将图像输出到客户端
ByteArrayOutputStreambos=newByteArrayOutputStream();
ImageIO.write(image,"JPEG",bos);
byte[]buf=bos.toByteArray();
response.setContentLength(buf.length);
sos.write(buf);
bos.close();
sos.close();
//将当前验证码存入Session中
session.setAttribute("valicode",newString(rands));
//System.out.println("1:"+request.getSession().getId());
System.out.println(session.getAttribute("valicode"));
}
privatevoiddrawRands(Graphicsg,char[]rands){
g.setColor(newColor(41,41,41));
g.setFont(newFont(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);
}
privatevoiddrawBackground(Graphicsg){
g.setColor(newColor(255,255,255));
g.fillRect(0,0,WIDTH,HEIGHT);
//随机产生120个干扰点
for(inti=0;i<120;i++){
intx=(int)(Math.random()*WIDTH);
inty=(int)(Math.random()*HEIGHT);
intred=(int)(Math.random()*255);
intgreen=(int)(Math.random()*255);
intblue=(int)(Math.random()*255);
g.setColor(newColor(red,green,blue));
g.drawOval(x,y,1,0);
}
}
//生成四个字符的验证码
privatechar[]generateCheckCode(){
Stringchars="0123456789abcdefghijklmnopqrstuvwxyz";
char[]rands=newchar[4];
for(inti=0;i<4;i++){
intrand=(int)(Math.random()*36);
rands[i]=chars.charAt(rand);
}
returnrands;
}
}
jsp获取验证码图片的关键代码如下:
后来就给http://dh.wk163.comvalidateCode方法加了一个注解@ResponseBody图片就显示出来了。然后看了这篇博客,才得知:
1、responseBody一般是作用在方法上的,加上该注解表示该方法的返回结果直接写到HttpresponseBody中,常用在ajax异步请求中,
2、在RequestMapping中return返回值默认解析为跳转路径,如果你此时想让Controller返回一个字符串或者对象到前台就会报404notresponse的错误。
3、当加上@ResponseBody注解后不会解析成跳转地址会解析成相应的json格式的对象集合字符串或者xml等直接返回给前台可以通过ajax的“success”:fucntion(data){}data直接获取到。
总结
到此这篇关于SpringMVC生成的验证码图片不显示的文章就介绍到这了,更多相关springmvc验证码图片不显示内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!