`
ronon
  • 浏览: 187055 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

生成jsp验证码的代码详解(servlet版)

    博客分类:
  • java
阅读更多
package util;
import java.util.*;   
import java.io.*;   
import java.awt.*;   
import java.awt.image.*;   
import javax.servlet.*;   
import javax.servlet.http.*;   
import com.sun.image.codec.jpeg.*;   

/*
 * 生成验证码图片
 */
public class ValidateCode extends HttpServlet   
{  
 
      private Font imgFont=new Font("宋体",Font.BOLD,16);//设置字体   
    
       public void doPost(HttpServletRequest request,HttpServletResponse response)   
                                     throws ServletException,IOException   
       {   
               doGet(request,response);   
       }   
    

          //设置浏览器不要缓存此图片
          response.setHeader("Pragma","No-cache");
          response.setHeader("Cache-Control","no-cache");
          response.setDateHeader("Expires", 0);

  
       /* 
        * 在给定范围内获得随机颜色 
        */ 
        private 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); 
        }

        /////////////////////////////////////////////////////////////////////////
        public void doGet(HttpServletRequest request,HttpServletResponse response)     
                               throws ServletException,IOException   
        {   
                String strCode  ="";   //验证码(字符串形式)
                int intCode  =0;     //验证码(数字形式)
                Random random = new Random();//随机类
      
                //生成随机四位数字
                intCode = (new Random()).nextInt(9999);   
                if(intCode<1000)
                {
                        intCode+=1000;  
                }


                 //将数字转化为字符串
                 strCode=intCode+"";   
      
                 /*
                  * 绘图
                  */

                 
                 response.setContentType("image/gif");   
                 //获得servlet输出流
                 ServletOutputStream servletOutputStream =response.getOutputStream();  
                 //创建表示图像的对象(参数是:宽、高、图片类型)
                 BufferedImage image=new BufferedImage(60,25,BufferedImage.TYPE_INT_RGB); 
                //创建表示图形上下文的对象   
                Graphics graph=image.getGraphics();
      
                 //设置此图形上下文的颜色
                graph.setColor(Color.blue);   
                //设定矩形的横、纵坐标,及宽、高
                graph.fillRect(1,1,48,18);   
      
               //将此图形上下文的字体设置为指定字体(参数为Font类型)
                graph.setFont(imgFont);   
    
               //随机产生10条干扰线,使图象中的认证码不易被其它程序探测到 
                graph.setColor(getRandColor(160,200)); 
                for (int i=0;i<10;i++) 
              {           
                        int x = random.nextInt(85); 
                        int y = random.nextInt(20); 
                        int xl = random.nextInt(12); 
                        int yl = random.nextInt(12); 
                        //在此图形上下文的坐标系统中,使用当前颜色在点 (x,y) 和 (x1,y1) 之间画一条线
                        graph.drawLine(x,y,x+xl,y+yl); 
              } 
      
            //分解验证码字符串
              char c;   
            for(int i=0;i<4;i++)   
            {   
                    //返回验证码字符串指定索引处的char值(单个数字)
                    c=strCode.charAt(i);   
                    //使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本(x->文本的横坐标,y->文本的纵坐标)
                    graph.drawString(c+"",9*i+4,16);     
             }   
      
           //对servlet输出流进行JPEG格式编码
            JPEGImageEncoder imageEncoder=JPEGCodec.createJPEGEncoder(servletOutputStream);   
            imageEncoder.encode(image);   
      
              //将获得的验证码字符串存入session
              HttpSession  session=request.getSession(true);   
              session.removeAttribute("VerifyCode");   
              session.setAttribute("VerifyCode",strCode);   
     
            //关闭输出流
              servletOutputStream.close();   
    
       }   
    
}   

分享到:
评论

相关推荐

    JSP开发之生成图片验证码技术的详解

    JSP开发之生成图片验证码技术的详解 我们在网页注册用户时,常常会需要格根据图片给的图片验证码把验证码输进去。那么我们今天就来学习这个。 简单来说分为三步骤: 1.底层用Java实现生成验证码图片 2.通过配置...

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

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

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

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

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

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

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

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    一篇不错的关于java工作流方面讲解及代码

    5.4.2 自动生成验证码(Ran.java) 22 5.4.3 数据库的连接(ConnectionFactory.java) 23 5.4.4 数据库连接的关闭(DatabaseUtils.java)--只提供接口 23 5.4.5 密码修改模块(Common_fuction.java) 24 5.4.6 时间...

    韩顺平sevlet,jsp视频教程知识点.txt

    视频描述: 1 如何在servlet中显示图片 2 分页技术详解 3 用户登录系统功能改进 韩顺平 j2ee视频实战教程servlet第5讲(上集).wmv 视频描述: (一) Cookie的讲解和使用 (二) Cookie和Session的比较 (三) 网站框架的...

    收集的常见的专业问题解决办法.rar

    2009-03-10 17:22 192548 40484 常见的专业问题解决办法\JSP验证码代码的实现_娟行天下.mht 2009-02-24 08:40 156913 33699 常见的专业问题解决办法\JS对select控件的操作汇总整理.mht 2009-02-24 08:40 173330 ...

    iuhyiuhkjh908u0980

    做了一个登陆的界面 我想加个验证码 效果如下: 这个验证码的图片是放在 一个textfield里面的 , 我想将验证码放到 这个textfield后面 ,请教 如何实现? login.js 代码如下: LoginPanel = function() { var win, f;...

Global site tag (gtag.js) - Google Analytics