zoukankan      html  css  js  c++  java
  • servlet 验证码生成

    servlet

    package com.htpo.net;

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.PrintWriter;
    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 testget extends HttpServlet {

        /**
         * Constructor of the object.
         */
        public testget() {
            super();
        }

        public static final char[] CHARS = { '2', '3', '4', '5', '6', '7', '8',
                '9', '0', 'A', 'Q', 'W', 'E', 'R', 'T', 'G', 'D', 'S', 'W', 'G',
                'H' };// 随机字符的字典
        public static Random random = new Random();// 随机数

        public static String getRandomString() {
            // 字符的缓存
            StringBuffer buf = new StringBuffer();
            for (int i = 0; i < 6; i++) {// 循环 六次
                buf.append(CHARS[random.nextInt(CHARS.length)]);
            }
            return buf.toString();
        }

        public static Color getRandomColor() {
            return new Color(random.nextInt(255), random.nextInt(255),
                    random.nextInt(255));
        }

        public static Color getReverseColor(Color c) {
            return new Color(255 - c.getRed(), 255 - c.getGreen(),
                    255 - c.getBlue());
        }

        /**
         * Destruction of the servlet. <br>
         */
        public void destroy() {
            super.destroy(); // Just puts "destroy" string in log
            // Put your code here
        }

        /**
         * The doGet method of the servlet. <br>
         *
         * This method is called when a form has its tag value method equals to get.
         *
         * @param request
         *            the request send by the client to the server
         * @param response
         *            the response send by the server to the client
         * @throws ServletException
         *             if an error occurred
         * @throws IOException
         *             if an error occurred
         */
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {

            /*
             * response.setContentType("text/html"); String re =
             * request.getParameter("username"); System.out.println(re); PrintWriter
             * out = response.getWriter();
             *
             * // response.sendRedirect("test.jsp"); // String s =
             * "[{ id:1, pId:0, name:"pNode
             * 1", open:true},{ id:11, pId:1, name:"pNode
             * 11"},{ id:111, pId:11, name:"leaf node
             * 111"},{ id:112, pId:11, name:"leaf node
             * 112"},{ id:113, pId:11, name:"leaf node
             * 113"},{ id:114, pId:11, name:"leaf node
             * 114"},{ id:12, pId:1, name:"pNode 12"},{ id:121, pId:12, name:"leaf
             * node 121"},{ id:122, pId:12, name:"leaf node
             * 122"},{ id:123, pId:12, name:"leaf node
             * 123"},{ id:124, pId:12, name:"leaf node
             * 124"},{ id:13, pId:1, name:"pNode 13 - no
             * child", isParent:true},{ id:2, pId:0, name:"pNode
             * 2"},{ id:21, pId:2, name:"pNode
             * 21", open:true},{ id:211, pId:21, name:"leaf node
             * 211"},{ id:212, pId:21, name:"leaf node
             * 212"},{ id:213, pId:21, name:"leaf node
             * 213"},{ id:214, pId:21, name:"leaf node
             * 214"},{ id:22, pId:2, name:"pNode 22"},{ id:221, pId:22, name:"leaf
             * node 221"},{ id:222, pId:22, name:"leaf node
             * 222"},{ id:223, pId:22, name:"leaf node
             * 223"},{ id:224, pId:22, name:"leaf node
             * 224"},{ id:23, pId:2, name:"pNode 23"},{ id:231, pId:23, name:"leaf
             * node 231"},{ id:232, pId:23, name:"leaf node
             * 232"},{ id:233, pId:23, name:"leaf node
             * 233"},{ id:234, pId:23, name:"leaf node
             * 234"},{ id:3, pId:0, name:"pNode 3 - no child", isParent:true}]";
             * out.write(s);
             *
             * out.println(
             * "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">");
             * out.println("<HTML>");
             * out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
             * out.println("  <BODY>"); out.print("    This is ");
             * out.print(this.getClass()); out.println(", using the GET method");
             * out.println("  </BODY>"); out.println("</HTML>");
             *
             * out.flush(); out.close();
             */
            String s = request.getParameter("username");
            System.out.println(s);
            response.setContentType("image/jpeg");// 设置输出的类型
            String randomString = getRandomString();// 得到返回的字符集
            request.getSession(true).setAttribute("randomString", randomString);
            int with = 100;
            int hight = 30;// 生成图片的大小
            Color color = getRandomColor();// 用于背景色
            Color reverse = getReverseColor(color);// 用于前景色
            BufferedImage bi = new BufferedImage(with, hight,
                    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, with, hight);// 绘制背景
            g.setColor(reverse);// 设置颜色
            g.drawString(randomString, 18, 20);// 绘制随机字符
            for (int i = 0, n = random.nextInt(100); i < n; i++) {// 画最多100个噪音点
                g.drawRect(random.nextInt(with), random.nextInt(hight), 1, 1);// 随机噪音点
            }
            ServletOutputStream out = response.getOutputStream();
            // 转换图片格式
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            encoder.encode(bi);// 对图片进行编码
            out.flush();// 输出
        }

        /**
         * The doPost method of the servlet. <br>
         *
         * This method is called when a form has its tag value method equals to
         * post.
         *
         * @param request
         *            the request send by the client to the server
         * @param response
         *            the response send by the server to the client
         * @throws ServletException
         *             if an error occurred
         * @throws IOException
         *             if an error occurred
         */

        /**
         * Initialization of the servlet. <br>
         *
         * @throws ServletException
         *             if an error occurs
         */
        public void init() throws ServletException {
            // Put your code here
        }

    }
    ---------------------------------------

    jsp

      function reloadImage(){
                document.getElementByIdx_x_x("btn").disabled=false;
                document.getElementByIdx_x_x("Identity").src='testget?ts='+new Date().getTime();
                
             }
             
             function yanzheng() {
             
                
            }
             
        </script>

    <img src="testget" id="Identity" />
       <input type="button" id="btn" value="换个图片" onclick="reloadImage()"/>

    开源学习,互动进步
  • 相关阅读:
    [转]趣题:一个n位数平均有多少个单调区间?---- From Matrix67
    2015编程之美复赛
    Codeforces Round #304 (Div. 2)
    HDU 5226
    HDU 5225
    HDU 3666
    HDU 4598
    Codeforces Round #303 (Div. 2) E
    编程之美初赛第二场AB
    2015 编程之美初赛第一场 AC题
  • 原文地址:https://www.cnblogs.com/L0VEGP/p/5042302.html
Copyright © 2011-2022 走看看