<?xml version="1.0" encoding="gb2312"?>

<!-- RSS generated by oioj.net on 4/16/2004 ; 感谢LeXRus提供 RSS 2.0 文档; 此文件可自由使用，但请保留此行信息 --> 
<!-- Source download URL: http://blogger.org.cn/blog/rss2.asp       -->
<rss version="2.0">

<channel>
<title>enpro的博客</title>
<link>http://blogger.org.cn/blog/blog.asp?name=enpro</link>
<description>enpro的博客</description>
<copyright>blogger.org.cn</copyright>
<generator>W3CHINA Blog</generator>
<webMaster>webmaster@blogger.org.cn</webMaster>
<item>
<title><![CDATA[JSP/Servlet写验证码]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=enpro&amp;id=3465</link>
<author>enpro</author>
<pubDate>2005/3/10 5:48:20</pubDate>
<description><![CDATA[<A></A>
<DIV class=postbody>
<P><FONT size=1><FONT color=#ff0000><FONT color=#000000>转自[<A class=headermaintitle id=Header1_HeaderTitle href="http://blog.yesky.com/Blog/tiantian911/">天天的专栏</A>]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在好多网站都是通过动态的生成验证码来防止恶意注册，投票等，简单的分析了一下，大概的实现原理是这样的：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;用一个JSP/<SPAN class=hilite1>Servlet</SPAN>来生成图像，可以用java.awt.image来实现： </FONT></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><FONT color=#000000><IMG src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">BufferedImage&nbsp;image&nbsp;</SPAN></FONT><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;BufferedImage(width,&nbsp;height,RGB);<BR><IMG src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" align=top>Graphics&nbsp;g&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;image.getGraphics();<BR><IMG src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" align=top>g.setFont(Font&nbsp;f);<BR><IMG src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" align=top>g.drawString(num);</SPAN></DIV></DIV>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这样很容易的就生成了一个内存中的图像，注意，是在服务器的内寸中，要把它传送给客户端，就要把它作为response来传送：<BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">ImageIO.write(image,&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">JPEG</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;response.getOutputStream());</SPAN></DIV></DIV>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;然后把验证码的字符串通过session来传递给需要验证验证码的网页就可以了<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在需要显示验证码图像的地方加入：<BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">img&nbsp;</SPAN><SPAN style="COLOR: #ff0000">src</SPAN><SPAN style="COLOR: #0000ff">="image.jsp"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></DIV></DIV>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;就可以了，不过最后也是最重要的一点就是一定要把下列语句加入到网页头部来防止浏览器会缓存网页：<BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">meta&nbsp;</SPAN><SPAN style="COLOR: #ff0000">http-equiv</SPAN><SPAN style="COLOR: #0000ff">="Content-Type"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;content</SPAN><SPAN style="COLOR: #0000ff">="text/html;&nbsp;charset=gb2312"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">META&nbsp;</SPAN><SPAN style="COLOR: #ff0000">HTTP-EQUIV</SPAN><SPAN style="COLOR: #0000ff">="Pragma"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;CONTENT</SPAN><SPAN style="COLOR: #0000ff">="no-cache"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">META&nbsp;</SPAN><SPAN style="COLOR: #ff0000">HTTP-EQUIV</SPAN><SPAN style="COLOR: #0000ff">="Cache-Control"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;CONTENT</SPAN><SPAN style="COLOR: #0000ff">="no-cache"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://blog.yesky.com/Blog/Images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">META&nbsp;</SPAN><SPAN style="COLOR: #ff0000">HTTP-EQUIV</SPAN><SPAN style="COLOR: #0000ff">="Expires"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;CONTENT</SPAN><SPAN style="COLOR: #0000ff">="0"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN></DIV></DIV>
<P><BR>&nbsp;</P>
<P>PS:这种验证码通常防止OCR要加入干扰，下面是转载的一段话：<BR><FONT color=#ff0000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 干扰这样加是最有效的：随机渐变色（包括文字和背景）+所有可打印字符+字符大小随机变化+位置不固定+象素行或列随机错位。</FONT></P></FONT></FONT></DIV>]]></description>
</item>
</channel>
</rss>