﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Et.Lee </title><link>http://www.blogjava.net/etlee/</link><description>——编程路漫漫</description><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 09:26:54 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 09:26:54 GMT</pubDate><ttl>60</ttl><item><title>基于struts的验证码实现</title><link>http://www.blogjava.net/etlee/archive/2008/05/28/203643.html</link><dc:creator>涧墨</dc:creator><author>涧墨</author><pubDate>Wed, 28 May 2008 13:51:00 GMT</pubDate><guid>http://www.blogjava.net/etlee/archive/2008/05/28/203643.html</guid><wfw:comment>http://www.blogjava.net/etlee/comments/203643.html</wfw:comment><comments>http://www.blogjava.net/etlee/archive/2008/05/28/203643.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/etlee/comments/commentRss/203643.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/etlee/services/trackbacks/203643.html</trackback:ping><description><![CDATA[
		<font color="#ffa500">
				<strong>
						<font face="Arial" color="#000000">——本文摘至互联网——<br /></font>
						<p>
								<font face="Arial">产生4个验证码的ACTION：</font>
						</p>
						<p>
								<font face="Arial">————ValidateCodeAction.java————</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc">package org.struts.action;</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc">import java.awt.Color;<br />import java.awt.Font;<br />import java.awt.Graphics;<br />import java.awt.image.BufferedImage;<br />import java.util.Random;</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc">import javax.imageio.ImageIO;<br />import javax.servlet.ServletOutputStream;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br />import javax.servlet.http.HttpSession;</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc">import org.apache.struts.action.Action;<br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.action.ActionForward;<br />import org.apache.struts.action.ActionMapping;<br />import org.apache.commons.lang.RandomStringUtils;</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc">public class ValidateCodeAction extends Action {<br /> public ActionForward execute(ActionMapping mapping, ActionForm form,<br />   HttpServletRequest request, HttpServletResponse response) {<br />  try {<br />   int width = 52;<br />   int height = 22;<br />   // 取得一个4位随机字母数字字符串<br />   String code = RandomStringUtils.random(4, true, true);</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc">   // 保存入session,用于与用户的输入进行比较.<br />   // 注意比较完之后清除session.<br />   HttpSession session = request.getSession(true);<br />   session.setAttribute("code", code);</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc">   response.setContentType("images/jpeg");<br />   response.setHeader("Pragma", "No-cache");<br />   response.setHeader("Cache-Control", "no-cache");<br />   response.setDateHeader("Expires", 0);</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc">   ServletOutputStream out = response.getOutputStream();<br />   BufferedImage image = new BufferedImage(width, height,<br />     BufferedImage.TYPE_INT_RGB);<br />   Graphics g = image.getGraphics();<br />   // 设定背景色<br />   g.setColor(getRandColor(200, 250));<br />   g.fillRect(0, 0, width, height);</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc">   // 设定字体<br />   Font mFont = new Font("Times New Roman", Font.BOLD, 18);// 设置字体<br />   g.setFont(mFont);</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc">   // 画边框<br />   // g.setColor(Color.BLACK);<br />   // g.drawRect(0, 0, width - 1, height - 1);</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc">   // 随机产生干扰线，使图象中的认证码不易被其它程序探测到<br />   g.setColor(getRandColor(160, 200));<br />   // 生成随机类<br />   Random random = new Random();<br />   for (int i = 0; i &lt; 155; i++) {<br />    int x2 = random.nextInt(width);<br />    int y2 = random.nextInt(height);<br />    int x3 = random.nextInt(12);<br />    int y3 = random.nextInt(12);<br />    g.drawLine(x2, y2, x2 + x3, y2 + y3);<br />   }</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc">   // 将认证码显示到图象中<br />   g.setColor(new Color(20 + random.nextInt(110), 20 + random<br />     .nextInt(110), 20 + random.nextInt(110)));</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc">   g.drawString(code, 2, 16);</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc">   // 图象生效<br />   g.dispose();<br />   // 输出图象到页面<br />   ImageIO.write((BufferedImage) image, "JPEG", out);<br />   out.close();<br />  } catch (Exception e) {<br />   e.printStackTrace();<br />  }<br />  return null;<br /> }</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc"> private Color getRandColor(int fc, int bc) { // 给定范围获得随机颜色<br />  Random random = new Random();<br />  if (fc &gt; 255)<br />   fc = 255;<br />  if (bc &gt; 255)<br />   bc = 255;<br />  int r = fc + random.nextInt(bc - fc);<br />  int g = fc + random.nextInt(bc - fc);<br />  int b = fc + random.nextInt(bc - fc);<br />  return new Color(r, g, b);<br /> }</font>
						</p>
						<p>
								<font face="Arial" color="#99cccc">}</font>
						</p>
						<p>
								<font face="Arial">struts-config.xml中配置：</font>
						</p>
						<p>
								<font color="#99cccc">
										<font face="Arial"> &lt;action  path="/ValidateCode" type="org.struts.action.ValidateCodeAction" /&gt; <action&nbsp; type="org.struts.action.ValidateCodeAction" path="/ValidateCode" /></font>
								</font>
						</p>
						<p>
								<font face="Arial">JSP中调用的方法：</font>
						</p>
						<p>
								<font color="#99cccc">
										<font face="Arial">&lt;html:img src="/ValidateCode.do" border="0"<br />    onclick="this.src.value='/ValidateCode.do'"<br />    alt="请输入此验证码，如看不清请点击刷新。" style="cursor: pointer"/&gt;<html:img border="0"><br src="/onlinePro/ValidateCode.do" /></html:img></font>
								</font>
						</p>
				</strong>
		</font>
<img src ="http://www.blogjava.net/etlee/aggbug/203643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/etlee/" target="_blank">涧墨</a> 2008-05-28 21:51 <a href="http://www.blogjava.net/etlee/archive/2008/05/28/203643.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>