700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java 验证码图片不显示图片_验证码图片生成及无法显示问题的解决

java 验证码图片不显示图片_验证码图片生成及无法显示问题的解决

时间:2024-05-22 01:47:21

相关推荐

java 验证码图片不显示图片_验证码图片生成及无法显示问题的解决

IntelliJ IDEA实现网页生成验证码相关模块:

importcom.sun.image.codec.jpeg.JPEGCodec;importcom.sun.image.codec.jpeg.JPEGImageEncoder;import java.awt.*;importjava.awt.image.BufferedImage;importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.util.HashMap;importjava.util.Map;importjava.util.Random;public final classImageUtil {private static final char[] chars = { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘,‘7‘, ‘8‘, ‘9‘, ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘, ‘G‘, ‘H‘, ‘I‘};private static final int SIZE = 4;private static final int LINES = 5;private static final int WIDTH = 80;private static final int HEIGHT = 40;private static final int FONT_SIZE = 30;public static MapcreateImage() {

StringBuffer sb= newStringBuffer();

BufferedImage image= newBufferedImage(WIDTH, HEIGHT,

BufferedImage.TYPE_INT_RGB);

Graphics graphic=image.getGraphics();

graphic.setColor(Color.LIGHT_GRAY);

graphic.fillRect(0, 0, WIDTH, HEIGHT);

Random ran= newRandom();for (int i = 1; i <= SIZE; i++) {int r =ran.nextInt(chars.length);

graphic.setColor(getRandomColor());

graphic.setFont(new Font(null, Font.BOLD +Font.ITALIC, FONT_SIZE));

graphic.drawString(chars[r]+ "", (i - 1) * WIDTH /SIZE,

HEIGHT/ 2);

sb.append(chars[r]);

}for (int i = 1; i <= LINES; i++) {

graphic.setColor(getRandomColor());

graphic.drawLine(ran.nextInt(WIDTH), ran.nextInt(HEIGHT),

ran.nextInt(WIDTH), ran.nextInt(HEIGHT));

}

Map map = new HashMap();

map.put(sb.toString(), image);returnmap;

}public staticColor getRandomColor() {

Random ran= newRandom();

Color color= new Color(ran.nextInt(256), ran.nextInt(256),

ran.nextInt(256));returncolor;

}public staticInputStream getInputStream(BufferedImage image)throwsIOException {

ByteArrayOutputStream bos= newByteArrayOutputStream();

JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(bos);

encoder.encode(image);byte[] imageBts =bos.toByteArray();

InputStream in= newByteArrayInputStream(imageBts);returnin;

}

}

生成验证码ImageUtill类

/*** 产生登录页面验证码*/@RequestMapping("/createImage.do")public voidcreateImage(

HttpServletResponse response, HttpSession session)throwsException {

Map imageMap =ImageUtil.createImage();

String code=imageMap.keySet().iterator().next();

session.setAttribute("imageCode", code);

BufferedImage image=imageMap.get(code);

response.setContentType("image/jpeg");

OutputStream ops=response.getOutputStream();

ImageIO.write(image,"jpeg", ops);

ops.close();

}

JSP网页调用(片段,将上面的ceateImage.do放入src中):

验证码:

程序确定是无误的!

可以写成Java程序进行验证图片的生成:

但是:在网页中无法显示验证码图片。错误信息是无法写入Tomcat的temp目录,但temp目录肯定是存在的,原因是写入temp目录必须要管理员权限。

解决方法:

进入tomcat安装目录:C:\Program Files\Apache Software Foundation\Tomcat 8.5

右击temp属性:

对所有用户勾选所有权限,问题解决!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。