java web servlet 实现自动生成验证码

来源:互联网 发布:ppt拆分合并软件 编辑:程序博客网 时间:2024/06/05 01:11


效果如图



后台代码如下:

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.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;public class IdentityServlet extends HttpServlet {//随机字典public 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'};public static Random random=new Random();//随机字符public static String getRandomString(){StringBuffer buffer=new StringBuffer();for(int i=0;i<6;i++){buffer.append(CHARS[random.nextInt(CHARS.length)]);}return buffer.toString();}//生成随机颜色为背景public static Color getRandomColor() {returnnew Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));}//生成随机颜色的反色为前景public static Color getRenerseColor(Color color) {return new Color(255-color.getRed(),255-color.getGreen(),255-color.getBlue());}public void doGet(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 randomColor=getRandomColor();Color reverseColor=getRenerseColor(randomColor);BufferedImage bi=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//创建一个彩色图片Graphics2D graphics=bi.createGraphics();graphics.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));graphics.setColor(randomColor);graphics.fillRect(0, 0, width, height);graphics.setColor(reverseColor);graphics.drawString(randomString, 18, 20);for (int i = 0,n=random.nextInt(100); i < n; i++) {graphics.drawRect(random.nextInt(width), random.nextInt(height), 1,1);}ServletOutputStream out = response.getOutputStream();JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(bi);out.flush();}}

注意:在导入JPEGImageEncoder可能会报错,

错误原因:com.sun.image.codec.jpeg.JPEGImageEncoder; 从导入的这个包的名字来看,这不是java自带的包,是sun提供的拓展包,需要在MyEclipse中设置一下,Windows-Preferences-Java-Complicer-Errors/Warnings里面的Deprecated and restricted API中的Forbidden references(access rules)选为Warning



html测试代码:


0 0
原创粉丝点击