关键字: 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 - 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()
{
}
}
{
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
"
>