欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

jsp 生成网页验证码的Servlet,jspservlet,import java.

来源: javaer 分享于  点击 3322 次 点评:194

jsp 生成网页验证码的Servlet,jspservlet,import java.


import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 生成图形验证码的Servlet */public class ImageCodeMakerServlet extends HttpServlet {    public void doGet(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        doPost(req, resp);    }    /**     * @see javax.servlet.http.HttpServlet#void     *      (javax.servlet.http.HttpServletRequest,     *      javax.servlet.http.HttpServletResponse)     */    public void doPost(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        // 首先设置页面不缓存        resp.setHeader("Pragma", "No-cache");        resp.setHeader("Cache-Control", "no-cache");        resp.setDateHeader("Expires", 0);        // 定义图片的宽度和高度        int width = 90, height = 40;        // 创建一个图像对象        BufferedImage image = new BufferedImage(width, height,                BufferedImage.TYPE_INT_RGB);        // 得到图像的环境对象        Graphics g = image.createGraphics();        Random random = new Random();        // 用随机颜色填充图像背景        g.setColor(getRandColor(180, 250));        g.fillRect(0, 0, width, height);        for (int i = 0; i < 5; i++) {            g.setColor(getRandColor(50, 100));            int x = random.nextInt(width);            int y = random.nextInt(height);            g.drawOval(x, y, 4, 4);        }        // 设置字体,下面准备画随机数        g.setFont(new Font("", Font.PLAIN, 40));        // 随机数字符串        String sRand = "";        for (int i = 0; i < 4; i++) {            // 生成四个数字字符            String rand = String.valueOf(random.nextInt(10));            sRand += rand;            // 生成随机颜色            g.setColor(new Color(20 + random.nextInt(80), 20 + random                    .nextInt(100), 20 + random.nextInt(90)));            // 将随机数字画在图像上            g.drawString(rand, (17 + random.nextInt(3)) * i + 8, 34);            // 生成干扰线            for (int k = 0; k < 12; k++) {                int x = random.nextInt(width);                int y = random.nextInt(height);                int xl = random.nextInt(9);                int yl = random.nextInt(9);                g.drawLine(x, y, x + xl, y + yl);            }        }        // 将生成的随机数字字符串写入Session        req.getSession().setAttribute("randcode", sRand);        // 使图像生效        g.dispose();        // 输出图像到页面        ImageIO.write(image, "JPEG", resp.getOutputStream());    }    /**     * 产生一个随机的颜色     *      * @param fc     *            颜色分量最小值     * @param bc     *            颜色分量最大值     * @return     */    public Color getRandColor(int fc, int bc) {        Random random = new Random();        if (fc > 255) {            fc = 255;        }        if (bc > 255) {            bc = 255;        }        int r = fc + random.nextInt(bc - fc);        int g = fc + random.nextInt(bc - fc);        int b = fc + random.nextInt(bc - fc);        return new Color(r, g, b);    }}
相关栏目:

用户点评