struts2中生成验证码

action:

package com.xy.action;

import java.awt.Color;

import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Map;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;


public class CodeGenAction extends ActionSupport implements SessionAware,ServletResponseAware,RequestAware
{

<wbr>private static int I_WIDTH = 60;<br><wbr>private static int I_HEIGHT = 18;<br><wbr>private static Font VALIDATECODE_FONT = new Font("Times<wbr><wbr> New<wbr><wbr> Roman ", Font.PLAIN, 18);<br><wbr>private Map&lt;String,Object&gt; session;<br><wbr>private HttpServletResponse response;<br><wbr>private Map&lt;String, Object&gt; request;<br><wbr><br><wbr>public String execute()<br><wbr>{<br><wbr><wbr>response.setHeader("Pragma", "No-cache");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr>response.setHeader("Cache-Control", "no-cache");</wbr></wbr>

<wbr><wbr>response.setDateHeader("Expires", 0);</wbr></wbr>

<wbr><wbr>response.setContentType("image/jpeg");</wbr></wbr>

<wbr><wbr>// 在内存中创建图象<br><wbr><wbr>BufferedImage image = new BufferedImage(I_WIDTH, I_HEIGHT, BufferedImage.TYPE_INT_RGB);<br><wbr><wbr>// 获取图形上下文<br><wbr><wbr>Graphics g = image.getGraphics();<br><wbr><wbr>// 设定背景色<br><wbr><wbr>g.setColor(Color.white);<br><wbr><wbr>g.fillRect(0, 0, I_WIDTH, I_HEIGHT);<br><wbr><wbr>// 画边框<br><wbr><wbr>g.setColor(Color.blue);<br><wbr><wbr>g.drawRect(0, 0, I_WIDTH - 1, I_HEIGHT - 1);<br><wbr><wbr>Long validate = new Long(10000 + Math.round((Math.random() * 90000)));<br><wbr><wbr>String validateCode = validate.toString();<br><wbr><wbr>session.put("validateCode", validateCode);<br><wbr><wbr><br><wbr><wbr>// 将认证码显示到图象中<br><wbr><wbr>g.setColor(Color.black);<br><wbr><wbr>g.setFont(VALIDATECODE_FONT);<br><wbr><wbr>// g.drawString(rand,10,15);<br><wbr><wbr>g.drawString(validateCode.toString(), 7, 15);<br><wbr><wbr>// 随机产生88个干扰点,使图象中的认证码不易被其它程序探测到<br><wbr><wbr>Random random = new Random();<br><wbr><wbr>for (int iIndex = 0; iIndex &lt; 128; iIndex++)<br><wbr><wbr>{<br><wbr><wbr><wbr>int x = random.nextInt(I_WIDTH);<br><wbr><wbr><wbr>int y = random.nextInt(I_HEIGHT);<br><wbr><wbr><wbr>g.drawLine(x, y, x, y);<br><wbr><wbr>}<br><wbr><wbr>// 图象生效<br><wbr><wbr>g.dispose();<br><wbr><wbr><br><wbr><wbr>try<br><wbr><wbr>{<br><wbr><wbr><wbr>// 输出图象到页面<br><wbr><wbr><wbr>ServletOutputStream sos = response.getOutputStream();<br><wbr><wbr><wbr>ImageIO.write(image, "jpeg", sos);<br><wbr><wbr><wbr>sos.close();<br><wbr><wbr><wbr>return SUCCESS;<br><wbr><wbr>}<br><wbr><wbr>catch (Exception e)<br><wbr><wbr>{<br><wbr><wbr><wbr>return "error";<br><wbr><wbr>}<br><wbr>}<br><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr>public void setSession(Map&lt;String, Object&gt; session)<br><wbr>{<br><wbr><wbr>this.session = session;<br><wbr>}</wbr></wbr></wbr></wbr></wbr>

<wbr>public void setServletResponse(HttpServletResponse response)<br><wbr>{<br><wbr><wbr>this.response = response;<wbr><wbr><br><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr>public void setRequest(Map&lt;String, Object&gt; request)<br><wbr>{<br><wbr><wbr>this.request = request;<br><wbr>}</wbr></wbr></wbr></wbr></wbr>

}


struts.xml,值得注意的时,result type是stream类型

<package name="login" namespace="/" extends="struts-default">
<wbr>&lt;action name="toCode" class="com.xy.action.CodeGenAction"&gt;<br><wbr><wbr>&lt;result type="stream"&gt;<br><wbr><wbr><wbr>&lt;param name="contentType"&gt;image/jpeg&lt;/param&gt;<br><wbr><wbr>&lt;/result&gt;<br><wbr>&lt;/action&gt;<br> &lt;/package&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>


jsp:

<td align="left">
<input id="txtCode" type="text" style="width: 150px" />
<img id="imgCode" src="toCode" />
<a href="javascript:change()"> 看不清,换一张</a>
</td>

<wbr>function change()<br><wbr>{<br><wbr><wbr><wbr><wbr>var img=document.getElementByIdx_x("imgCode");<br><wbr>img.src="toCode?time="+new Date().getTime();<br><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值