solve the problem of 'java web project cannot display verification code'
Posted NONE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了solve the problem of 'java web project cannot display verification code'相关的知识,希望对你有一定的参考价值。
my java code of the function:
package com.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; /** * @ClassName: CaptchaUtil * @Description: 关于验证码的工具类 * @author 无名 * @date 2016-5-7 上午8:33:08 * @version 1.0 */ public final class CaptchaUtil { private CaptchaUtil(){} /* * 随机字符字典 */ private static final char[] CHARS = { \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\', \'A\', \'B\', \'C\', \'D\', \'E\', \'F\', \'G\', \'H\', \'J\', \'K\', \'L\', \'M\', \'N\', \'P\', \'Q\', \'R\', \'S\', \'T\', \'U\', \'V\', \'W\', \'X\', \'Y\', \'Z\' }; /* * 随机数 */ private static Random random = new Random(); /* * 获取6位随机数 */ private static String getRandomString() { StringBuffer buffer = new StringBuffer(); for(int i = 0; i < 6; i++) { buffer.append(CHARS[random.nextInt(CHARS.length)]); } return buffer.toString(); } /* * 获取随机数颜色 */ private static Color getRandomColor() { return new Color(random.nextInt(255),random.nextInt(255), random.nextInt(255)); } /* * 返回某颜色的反色 */ private static Color getReverseColor(Color c) { return new Color(255 - c.getRed(), 255 - c.getGreen(), - c.getBlue()); } public static void outputCaptcha(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/jpeg"); String randomString = getRandomString(); request.getSession(true).setAttribute("randomString", randomString); int width = 100; int height = 30; Color color = getRandomColor(); Color reverse = getReverseColor(color); BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = bi.createGraphics(); g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 16)); g.setColor(color); g.fillRect(0, 0, width, height); g.setColor(reverse); g.drawString(randomString, 18, 20); for (int i = 0, n = random.nextInt(100); i < n; i++) { g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1); } // 转成JPEG格式 ServletOutputStream out = response.getOutputStream(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(bi); out.flush(); } }
First, I found that the awt library of java cannot be used on Linux.
So, must add parameters of jvm to run it.
-Djava.awt.headless=true \\
As for the tomcat environment, u should add this line \'-Djava.awt.headless=true \\\' to the file of \'catalina.sh\' for 8 times.
If it not works. u can try these commands:
yum install libXp.so.6 yum install dejagnu.noarch 1:1.4.4-17.el6 yum install dejavu-sans-mono-fonts.noarch 2.33-1.el6 yum install dejavu-serif-fonts.noarch 2.33-1.el6
Just try, I donot know why~
After doing these things, I still can\'t solve the problem,
the error log is:
It\'s the problem of this java class.
then I found that the 1.8 jdk has abandoned the class of com.sun.image.codec.jpeg.JPEGCodec & com.sun.image.codec.jpeg.JPEGImageEncoder
So I change the code from
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); ........... // 转成JPEG格式 ServletOutputStream out = response.getOutputStream(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(bi);
to
// 转成JPEG格式 ServletOutputStream out = response.getOutputStream(); ImageIO.write(bi, "JPEG", out);
And it worked:
以上是关于solve the problem of 'java web project cannot display verification code'的主要内容,如果未能解决你的问题,请参考以下文章
How to solve the problem that Github can't visit in China?
what's the problem of Object oriented programming
ZOJ 3230 Solving the Problems(数学 优先队列啊)
CF Gym 101955G Best ACMer Solves the Hardest Problem
Solve VS2010 Error "Exceptions has been thrown by the target of an invocation"