Servlet 生成验证码

本文涉及的产品
简介:

package bean;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.awt.Graphics;
import javax.imageio.ImageIO;
import java.awt.Font;

public class RandomServlet extends HttpServlet {
    private static final String CONTENT_TYPE = "image/jpeg";

    //Initialize global variables
    public void init() throws ServletException {
    }

    //产生随机颜色函数getRandColor
    Color getRandColor(int fc, int bc) {
        Random r = new Random();
        if (fc > 255) fc = 255;
        if (bc > 255) bc = 255;
        int red = fc + r.nextInt(bc - fc); //红
        int green = fc + r.nextInt(bc - fc); //绿
        int blue = fc + r.nextInt(bc - fc); //蓝
        return new Color(red, green, blue);
    }

    //Process the HTTP Get request
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException {
        //告诉IE将发送的是一张图片
        response.setContentType(CONTENT_TYPE);
        HttpSession session = request.getSession();
        //设置页面不缓存
        response.setHeader("Pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);

        //创建随机类
        Random r = new Random();

        // 在内存中创建图像,宽度为width,高度为height
        int width = 60, height = 20;
        BufferedImage pic = new BufferedImage(width, height,
                                              BufferedImage.TYPE_INT_RGB);

        // 获取图形上下文环境
        Graphics gc = pic.getGraphics();

        // 设定背景色并进行填充
        gc.setColor(getRandColor(200, 250));
        gc.fillRect(0, 0, width, height);

        //设定图形上下文环境字体
        gc.setFont(new Font("Times New Roman", Font.PLAIN, 20));

        // 随机产生200条干扰直线,使图像中的认证码不易被其他分析程序探测到
        for (int i = 0; i < 200; i++) {
            int x1 = r.nextInt(width);
            int y1 = r.nextInt(height);
            int x2 = r.nextInt(15);
            int y2 = r.nextInt(15);
            gc.setColor(getRandColor(160, 200));
            gc.drawLine(x1, y1, x1 + x2, y1 + y2);
        }
        //随机产生100个干扰点,使图像中的验证码不易被其他分析程序探测到

        for (int i = 0; i < 100; i++) {
            int x = r.nextInt(width);
            int y = r.nextInt(height);
            gc.setColor(getRandColor(120, 240));
            gc.drawOval(x, y, 0, 0);
        }

        // 随机产生4位数字的验证码
        String RS = "";
        String rn = "";
        RS = r.nextInt(9000) + 1000 + "";
        /*
         for(int i=0;i<4;i++){
          //产生10以内随机数字rn
          rn=String.valueOf(r.nextInt(10));
          RS+=rn;
          //将认证码用drawString函数显示到图像里
         gc.setColor(new Color(20+r.nextInt(110),20+r.nextInt(110),20+r.nextInt(110)));
          gc.drawString(rn,13*i+6,16);
         }
         */
        gc.setColor(new Color(20 + r.nextInt(110), 20 + r.nextInt(110),
                              20 + r.nextInt(110)));
        gc.drawString(RS, 10, 16);

        // 释放图形上下文环境
        gc.dispose();

        // 将认证码RS存入SESSION中共享
        session.setAttribute("random", RS);

        // 输出生成后的验证码图像到页面
        ImageIO.write(pic, "JPEG", response.getOutputStream());

    }

    //Process the HTTP Post request
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException {
        doGet(request, response);
    }

    //Clean up resources
    public void destroy() {
    }
}



本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2010/12/19/1910608.html,如需转载请自行联系原作者

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
Java
Servlet实现登录带有验证码验证案例
Servlet实现登录带有验证码验证案例
111 0
|
缓存 JavaScript 前端开发
Servlet验证码的创建应用
1. 打开javaEE,新建一个Dynamic Web Project,然后在工程下的Java Resources—src新建一个Servlet
94 0
|
Web App开发 JavaScript 前端开发
|
JavaScript 前端开发 Java
|
18天前
|
Java
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
19 1
|
18天前
|
Java
人事管理系统【JSP+Servlet+JavaBean】(Java课设)
人事管理系统【JSP+Servlet+JavaBean】(Java课设)
16 0
|
30天前
使用Servlet上传多张图片——前台页面层(Index.jsp)
使用Servlet上传多张图片——前台页面层(Index.jsp)
12 0
|
3月前
|
存储 前端开发 Java
JavaWeb:servlet+jsp+mybatis商品管理增删改查
商品管理通常包括增加(添加)、删除、修改和查询商品信息
43 1
JavaWeb:servlet+jsp+mybatis商品管理增删改查
|
3月前
|
设计模式 前端开发 Java
基于JSP/SERVLET学生管理系统
基于JSP/SERVLET学生管理系统