web 验证码,草稿,可用

登录界面:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
    <!-- web3:项目名,在LoginServlet前必须加项目名,如果不加则默认视为工作空间地址 -->
    <form action="/web3/LoginServlet" method="post">
        username:<input type="text" name="username" /> <br><br>
        password:<input type="password" name="password" /><br><br>
        验证码:<img alt="验证码" src="/web3/RandomImageServlet"><br><br>
        <input type="submit" value="login"> <br>
    </form>
</body>
</html>
View Code

Servlet:

public class RandomImageServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("image/jpeg");
        // 禁止浏览器缓存图片
        // 3种禁止缓存的头字段
        resp.setHeader("expires", "-1");
        resp.setHeader("cache-control", "no-cache");
        resp.setHeader("pragma", "no-cache");

        BufferedImage im = new BufferedImage(80, 40, BufferedImage.TYPE_INT_RGB);
        Graphics g = im.getGraphics();
        g.setColor(Color.WHITE);// 设置颜色
        g.fillRect(0, 0, 80, 40);// 填充颜色
        g.setColor(Color.BLACK);
        g.setFont(new Font("TimesRoman", Font.PLAIN, 20));
        String str = generateString();
        g.drawString(str, 15, 15);

        // g.drawLine(10, 1, 80, 40);
        paint(g);
        ImageIO.write(im, "jpg", resp.getOutputStream());

    }

    // 设置线宽
    public void paint(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        Stroke st = g2d.getStroke();
        Stroke bs;
        // LINE_TYPE_DASHED
        bs = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL,
                0, new float[] { 16, 4 }, 0);
        g2d.setStroke(bs);
        g2d.drawLine(10, 1, 80, 40);

        g2d.setStroke(st);
    }

    private String generateString() {
        String s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWZXY0123456789";
        int length = s.length();
        Random ran = new Random();
        StringBuilder sb = new StringBuilder();
        sb.append(s.charAt(ran.nextInt(length)));
        sb.append(s.charAt(ran.nextInt(length)));
        sb.append(s.charAt(ran.nextInt(length)));
        sb.append(s.charAt(ran.nextInt(length)));
        sb.append(s.charAt(ran.nextInt(length)));
        return sb.toString();
    }
}

 

posted @ 2015-09-02 16:10  pepelu  阅读(190)  评论(0编辑  收藏  举报