2、WEB开发由浅入深系列BLOG-2(Servlet编写验证码)

原创 2012年03月31日 14:35:18

1、用Servlet返回相应的文件的时候我们就调用response.setContextType(“image/JPEG”);方法就可以了,这次的案例是写一个验证码的案例。代码和注释内容如下所示:
 
private static Random ran = new Random(); //声明一个静态的random全局变量
 
--准备工作.一个得到随即验证码文字的方法,一个随即颜色的方法,一个得到反色颜色的方法
//得到验证码的文字
 
    public String getRamdomString(){
       char[] cs = {'1','2','3','4','5','6','7','8','9','A'};
       StringBuffer sb = new StringBuffer();   //创建sb拼装验证码String
       for(int i=0 ; i < 6 ; i++){
           char a = cs[ran.nextInt(cs.length)];   //用random搭配数组的length方法,得到数组的随即字节
           sb.append(String.valueOf(a));
       }         
       return sb.toString();
    }
    //获得随即的颜色
    public Color getBackColor(){
       return new Color(ran.nextInt(225),ran.nextInt(225),ran.nextInt(225));
    }
    //获得颜色的反色
    public Color getReverseColor(Color c){
       return new Color(225-c.getRed(),225-c.getGreen(),225-c.getBlue());
    }
 
 
 
//生成验证码的方法
public void doGet(HttpServletRequest request, HttpServletResponseresponse)
           throws ServletException, IOException {
 
       response.setContentType("image/JPEG"); //设置返回文件格式
      
       String code = this.getRamdomString(); //得到随即字符串
       Color backcolor = this.getBackColor();   //得到背景颜色
       Color reverseColor= this.getReverseColor(backcolor); //得到背景色的反色
       int width = 100;
       int height = 30;
       //new一个图片流,有长度,宽度和type3个参数
       BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
       Graphics2D gg= bi.createGraphics();    //得到绘画工具
       Font f = new Font(Font.SANS_SERIF,Font.BOLD,16);   //声明一个font
       gg.setFont(f);
       gg.setColor(backcolor);            //设置背景色
       gg.fillRect(0, 0, width, height);   //绘制背景
       gg.setColor(reverseColor);         //设置绘画工具反色背景色
       gg.drawString(code, 18, 20);       //写字符串验证码宽18,高20开始
       for(int i = 0 ; i < 100 ; i++){    //画100个噪点
           gg.setColor(new Color(ran.nextInt(225),ran.nextInt(225),ran.nextInt(225)));
           gg.drawRect(ran.nextInt(width), ran.nextInt(height),1,1); //限制宽,高范围
       }
       ServletOutputStream sos = response.getOutputStream();   //得到返回对象
       JPEGImageEncoder jie = JPEGCodec.createJPEGEncoder(sos);//得到编码器。
       jie.encode(bi);          //将bi编码至图片
       bi.flush();          //写至客户端
      
       sos.close();
    }


5、WEB开发由浅入深系列BLOG-5(Servlet实现简单文件上传)

Servlet实现文件的上传 客户端: 上传文件的案例 上...

3、WEB开发由浅入深系列BLOG-3(Servlet两种跳转方式,Servlet读取web.xml,Servlet配置)

Web.xml配置局部servlet参数和全局上下文参数的写法: 1、 局部Servlet: ServletForGetInfos cn.servlet.test.ServletFo...

8、WEB开发由浅入深系列BLOG-8(JSTL标准标签库之FMT标签)

1、 首先引入标签库: //1、fmt:requestEncoding标签改变请求编码

7、WEB开发由浅入深系列BLOG-7(JSTL标签之核心标签库)

引入是必不可少的 1、c:out标签通过c:out标签输出值 2、c:set标签,通过JavaBean和EL表达式结合 ...

1、WEB开发由浅入深系列BLOG-1(Http协议初学)

1、 运用Tomcat和Servlet,采用继承HttpServlet的写法来得到Servlet封装的HTTP协议相关信息:下面是相关代码和结果: 代码: int port =request.ge...

java web开发:servlet中图形验证码功能的实现

一 验证码的由来 在web项目开发中,为了防止部分人使用自动工具(如:自动注册机)等进行批量的数据处理,在不同的功能节点部分,添加了验证码进行验证,达到对自动软件的屏蔽效果 最经典的应用如...

java web验证码生成总结(包括servlet、jsp和struts2实现)

public ByteArrayInputStream getInputStream() {               return inputStream;           }        ...

猫哥带你去战斗—Java Web开发—Servlet篇[2]—get与post

本篇主要涉及2个内容: 使用MyEclipse简化创建Servlet的过程 get与post请求的区别 哈哈,列完了这2个条目,猫哥自我感觉干货满满啊。首先是1,使用MyEclipse简化创建Serv...

java web开发高并发系列(4)---Java并发与多线程教程(2)

Java同步块 Java 同步块(synchronized block)用来标记方法或者代码块是同步的。Java同步块用来避免竞争。本文介绍以下内容: Java同步...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2、WEB开发由浅入深系列BLOG-2(Servlet编写验证码)
举报原因:
原因补充:

(最多只允许输入30个字)