`
EJB_wawa
  • 浏览: 107094 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用servlet编写一个验证码的例子

    博客分类:
  • web
阅读更多
使用servlet编写一个验证码的例子
package com.topsuntech.gUnit_cnpo.common.servlet;

import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;

/*
* 功能:调用AuthServlet可以生成一个验证码图片,图片的宽度和高度可以自定义
* 调用格式: /servlet/AuthServlet?width=60&height=20
*       或者/servlet/AuthServlet
* 时间:2007-9-4

*
*/
public class AuthServlet extends HttpServlet {
private Font mFont=new Font("Times New Roman", Font.PLAIN,18);//设置字体
//static String AuthCode="";

// 处理post
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
    doGet(request,response);
}

public void doGet(HttpServletRequest request,HttpServletResponse response)
      throws ServletException,IOException {
// 取得一个1000-9999的随机数


      HttpSession session=request.getSession();//request.getSession(false)当参数为false时,有可能不创建session
      //session.setAttribute("getImg",s);
      response.setContentType("image/gif");
      response.setHeader("Pragma","No-cache");
      response.setHeader("Cache-Control","no-cache");
      response.setDateHeader("Expires", 0);
      int width=60;
      int height=20;
      if(request.getParameter("width")!=null && !request.getParameter("width").equals(""))
       width = Integer.parseInt(request.getParameter("width"));
      if(request.getParameter("height")!=null && !request.getParameter("height").equals(""))
       height = Integer.parseInt(request.getParameter("height"));
                

      ServletOutputStream out=response.getOutputStream();
      BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //设置图片大小的
      Graphics gra=image.getGraphics();
      Random random=new Random();

      gra.setColor(getRandColor(200,250));     //设置背景色
      gra.fillRect(0,0,width,height);

      gra.setColor(Color.black); //设置字体色
      gra.setFont(mFont);


      // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
      gra.setColor(getRandColor(160,200));
      for (int i=0;i<155;i++)
      {
       int x = random.nextInt(width);
       int y = random.nextInt(height);
              int xl = random.nextInt(12);
              int yl = random.nextInt(12);
       gra.drawLine(x,y,x+xl,y+yl);
      }

      // 取随机产生的认证码(4位数字)
      String sRand="";
      for (int i=0;i<4;i++){
         String rand=String.valueOf(random.nextInt(10));
         sRand+=rand;
          // 将认证码显示到图象中
          gra.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
          gra.drawString(rand,13*i+6,16);
      }
          //System.out.println("showimage="+sRand);
          //session.setAttribute("getImg",sRand);
          session.setAttribute("AuthCode",sRand);
          //AuthCode = sRand;
          //session.putValue("AuthCode",sRand);
          JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);
          encoder.encode(image);
          //out.flush();

}

    static 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);
    }
  
    static public String getAuthCode(HttpSession session){//返回验证
     return (String)session.getAttribute("AuthCode");
         
    }

分享到:
评论

相关推荐

    jsp+javabean+servlet版留言本(J2EE例子)

    mvc版留言本,采用jsp+javabean+servlet编写,即model2版 eclipse项目,可以直接导入,数据库类型mysql,支持分页,ajax验证码.代码内有详细注解,一看就明白,本人一直坚持简单易懂原则,帮助更多的初学者更快的掌握j2ee技术...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    4.24.3 一个例子 178 4.25 小结 179 第2部分 servlet篇 第5章 servlet与tomcat 182 5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    4.24.3 一个例子 178 4.25 小结 179 第2部分 servlet篇 第5章 servlet与tomcat 182 5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    4.24.3 一个例子 178 4.25 小结 179 第2部分 servlet篇 第5章 servlet与tomcat 182 5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    4.24.3 一个例子 178 4.25 小结 179 第2部分 servlet篇 第5章 servlet与tomcat 182 5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 ...

    java jdk实列宝典 光盘源代码

    一个死锁的例子; 定时器Timer:包括在指定时间执行任务,在指定时间之后执行任务以及在某个时间之后每隔时间段重复执行的任务; 9 Java GUI 日历:使用swing和awt实现一个图形化的日历可以查询星期、日期和年份信息...

    JAVA上百实例源码以及开源项目

     Java编写的HTML浏览器源代码,一个很简单甚至不算是浏览器的HTML浏览器,使用方法:  可直接输入文件名或网络地址,但必需事先连入网络。 Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,...

    JAVA上百实例源码以及开源项目源代码

     Java编写的HTML浏览器源代码,一个很简单甚至不算是浏览器的HTML浏览器,使用方法:  可直接输入文件名或网络地址,但必需事先连入网络。 Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,...

    Java范例开发大全(全书源程序)

    实例255 一个关于泛型的简单例子 511 实例256 带两个类型参数的泛型 513 实例257 有界类型程序示例 514 实例258 通配符使用示例 515 实例259 泛型方法使用示例 516 实例260 泛型接口示例 518 实例261 泛型...

    Java范例开发大全 (源程序)

     实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符(教学视频:39分钟) 9  2.1 基础类型 9  实例2 自动提升 9  实例3 自动转换 10  实例4 常用基础类型之强制转换 11  2.2 运算符 12  实例5...

    java范例开发大全(pdf&源码)

    实例255 一个关于泛型的简单例子 511 实例256 带两个类型参数的泛型 513 实例257 有界类型程序示例 514 实例258 通配符使用示例 515 实例259 泛型方法使用示例 516 实例260 泛型接口示例 518 实例261 泛型实现坐标...

    java范例开发大全源代码

     实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符(教学视频:39分钟) 9  2.1 基础类型 9  实例2 自动提升 9  实例3 自动转换 10  实例4 常用基础类型之强制转换 11  2.2 运算符 12 ...

    java范例开发大全

    实例255 一个关于泛型的简单例子 511 实例256 带两个类型参数的泛型 513 实例257 有界类型程序示例 514 实例258 通配符使用示例 515 实例259 泛型方法使用示例 516 实例260 泛型接口示例 518 实例261 泛型实现坐标...

Global site tag (gtag.js) - Google Analytics