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()"/>
servlet 验证码生成的更多相关文章
- servlet中生成验证码
		
在servlet中生成验证码 package login; import java.awt.Color; import java.awt.Graphics; import java.awt.image ...
 - Web---图片验证码生成教程详解-从简单到复杂-从本地到前后台
		
首先,我们先来看本地如何生成图片验证码的,再来写输出到网页的验证码如何实现. 先来看最简单的-实现的功能是,将一个字符串变成图片写入到文件中 实现代码: package cn.hncu.img; im ...
 - 利用谷歌 kaptcha 进行验证码生成
		
package main.com.smart.controller; import com.google.code.kaptcha.Producer; import main.com.smart.ut ...
 - 轻量级验证码生成插件webutil-licenseImage
		
轻量级验证码生成插件webutil-licenseImage源码与实例应用 webutil-licenseImage 插件内置4种验证码样式,支持用户扩展.自定义样式实现简单验证码. 源码脱管地址 ...
 - JAVA 验证码生成(转)
		
最近做了一下验证码的功能,网上找了一篇还不错,引用下:http://blog.csdn.net/ruixue0117/article/details/22829557 这篇文章非常好,但是web和js ...
 - Web后端    JAVA实现验证码生成与验证功能
		
首先,写一个验证码生成帮助类,用来绘制随机字母: <span style="font-size:14px;">import java.awt.Color; impor ...
 - java web中验证码生成的demo
		
首先创建一个CaptailCode类 package com.xiaoqiang.code; import java.awt.*; import java.awt.font.FontRenderCon ...
 - JavaWeb开发之普通图片验证码生成技术与算术表达式验证码生成技术
		
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6134649.html 另:算术验证码生成的JSP.Servlet实现均已移植github:https:/ ...
 - 轻量级验证码生成插件webutil-licenseImage源码与实例应用
		
webutil-licenseImage 插件内置4种验证码样式,支持用户扩展.自定义样式实现简单验证码. 源码脱管地址: http://code.google.com/p/licenseimage/ ...
 
随机推荐
- Android 支付密码输入框,自定义EditText实现密码输入框功能;
			
刚撸出来的密码输入框,注释和逻辑看着挺清晰的,一些属性还没有添加,下个博客把属性添加上去: 看一下图: 直接看代码吧! import android.content.Context; import a ...
 - Solr Date类型的哪些你不得不了解的细节
			
我们先来看看Solr日期类型的一些内幕,然后讨论一下Solr日期类型存在的一些问题,最后我们看看怎么解决现存的问题.概述 DateField 在Solr4.x之前,我们只有DateField,这类型现 ...
 - POJ2311 Cutting Game 博弈 SG函数
			
Cutting Game Description Urej loves to play various types of dull games. He usually asks other peopl ...
 - 微信小程序自定义微信客服按钮
			
微信小程序官方api中提到的微信客服,是一个固定的组件,图标样式固定,大小最多27px 很明显这个是不能满足我们各种奇葩需求的.下面提供一个野蛮的自定义方法. 比如做一个这样的按钮: 图标用自定义的, ...
 - 使用Eclipse编译运行MapReduce程序 Hadoop2.6.0_Ubuntu/CentOS
			
使用Eclipse编译运行MapReduce程序 Hadoop2.6.0_Ubuntu/CentOS 2014-10-10 (updated: 2016-05-22) 64246 153 本教程介绍 ...
 - linux问题集
			
Too many authentication failures for root (code 2) 原因:服务器可能由于装了一下安全软件导致有时用ssh远程工具登陆不了,提示太多认证失败for ro ...
 - (一)apache atlas源代码编译与打包
			
特别注意: atlas已经提供了0.8版本可以安装了,只有在国外的服务器上安装编译才比较顺利,可以按照官方文档去安装. 国内很多网址有被墙的问题,目前还没有完全解决,可能安装不成功 安装文档地址:ht ...
 - 【转】 C#操作FTP
			
代码不要忘记引入命名空间using System.Net;using System.IO;下面的几个步骤包括了使用FtpWebRequest类实现ftp功能的一般过程1.创建一个FtpWebReque ...
 - Error: 实例 "ddd" 执行所请求操作失败,实例处于错误状态。: 请稍后再试 [错误: Exceeded maximum number of retries. Exhausted all hosts available for retrying build failures for instance 6f60bc06-fcb6-4758-a46f-22120ca35a71.].
			
Error: 实例 "ddd" 执行所请求操作失败,实例处于错误状态.: 请稍后再试 [错误: Exceeded maximum number of retries. Exhaus ...
 - <转载> js 闭包
			
http://www.haorooms.com/post/js_bbtwo http://www.jb51.net/article/24101.htm http://www.cnblogs.com/f ...