利用servlet生成简单的验证码

关键字:   servlet 验证码    

在web.xml配置:

代码
< servlet >   
    
< servlet - name > image </ servlet - name >   
    
< servlet - class > org.test.web.AuthImage </ servlet - class >   
</ servlet >   
  
< servlet - mapping >   
    
< servlet - name > image </ servlet - name >   
 
< url - pattern >/ authImage </ url - pattern >   
</ servlet - mapping >   
 

其servlet源代码:

代码
public   class  AuthImage  extends  HttpServlet   
{   
  
    
private   static   final  String CONTENT_TYPE  =   " text/html; charset=gb2312 " ;   
    
// 设置字母的大小,大小   
     private  Font mFont  =   new  Font( " Times New Roman " , Font.PLAIN,  17 );   
    
public   void  init()  throws  ServletException   
    {   
        
super .init();   
    }   
    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  service(HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException   
    {   
        response.setHeader(
" Pragma " , " No-cache " );   
        response.setHeader(
" Cache-Control " , " no-cache " );   
        response.setDateHeader(
" Expires " 0 );   
        
// 表明生成的响应是图片   
        response.setContentType( " image/jpeg " );   
           
        
int  width = 100 , height = 18 ;   
        BufferedImage image 
=   new  BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);   
           
        Graphics g 
=  image.getGraphics();   
        Random random 
=   new  Random();   
        g.setColor(getRandColor(
200 , 250 ));   
        g.fillRect(
1 1 , width - 1 , height - 1 );   
        g.setColor(
new  Color( 102 , 102 , 102 ));   
        g.drawRect(
0 0 , width - 1 , height - 1 );   
        g.setFont(mFont);   
  
        g.setColor(getRandColor(
160 , 200 ));   
  
        
// 画随机线   
         for  ( int  i = 0 ;i < 155 ;i ++ )   
        {   
            
int  x  =  random.nextInt(width  -   1 );   
            
int  y  =  random.nextInt(height  -   1 );   
            
int  xl  =  random.nextInt( 6 +   1 ;   
            
int  yl  =  random.nextInt( 12 +   1 ;   
            g.drawLine(x,y,x 
+  xl,y  +  yl);   
        }   
  
        
// 从另一方向画随机线   
         for  ( int  i  =   0 ;i  <   70 ;i ++ )   
        {   
            
int  x  =  random.nextInt(width  -   1 );   
            
int  y  =  random.nextInt(height  -   1 );   
            
int  xl  =  random.nextInt( 12 +   1 ;   
            
int  yl  =  random.nextInt( 6 +   1 ;   
            g.drawLine(x,y,x 
-  xl,y  -  yl);   
        }   
  
        
// 生成随机数,并将随机数字转换为字母   
        String sRand = "" ;   
        
for  ( int  i = 0 ;i < 6 ;i ++ )   
        {   
            
int  itmp  =  random.nextInt( 26 +   65 ;   
            
char  ctmp  =  ( char )itmp;   
            sRand 
+=  String.valueOf(ctmp);   
            g.setColor(
new  Color( 20 + random.nextInt( 110 ), 20 + random.nextInt( 110 ), 20 + random.nextInt( 110 )));   
            g.drawString(String.valueOf(ctmp),
15 * i + 10 , 16 );   
        }   
  
        HttpSession session 
=  request.getSession( true );   
        session.setAttribute(
" rand " ,sRand);   
        g.dispose();   
        ImageIO.write(image, 
" JPEG " , response.getOutputStream());   
    }   
    
public   void  destroy()   
    {   
    }   
}  

怎样用:
在页面显示随机图片,可在JSP页面中增加如下代码即可:

代码
< img src = " authImage " >  
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值