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
{
private static int I_WIDTH = 60;
private static int I_HEIGHT = 18;
private static Font VALIDATECODE_FONT = new Font("Times New Roman ", Font.PLAIN, 18);
private Map<String,Object> session;
private HttpServletResponse response;
private Map<String, Object> request;
public String execute()
{
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
// 在內存中創建圖象
BufferedImage image = new BufferedImage(I_WIDTH, I_HEIGHT, BufferedImage.TYPE_INT_RGB);
// 獲取圖形上下文
Graphics g = image.getGraphics();
// 設定背景色
g.setColor(Color.white);
g.fillRect(0, 0, I_WIDTH, I_HEIGHT);
// 畫邊框
g.setColor(Color.blue);
g.drawRect(0, 0, I_WIDTH - 1, I_HEIGHT - 1);
Long validate = new Long(10000 + Math.round((Math.random() * 90000)));
String validateCode = validate.toString();
session.put("validateCode", validateCode);
// 將認證碼顯示到圖象中
g.setColor(Color.black);
g.setFont(VALIDATECODE_FONT);
// g.drawString(rand,10,15);
g.drawString(validateCode.toString(), 7, 15);
// 隨機產生88個幹擾點,使圖象中的認證碼不易被其它程序探測到
Random random = new Random();
for (int iIndex = 0; iIndex < 128; iIndex++)
{
int x = random.nextInt(I_WIDTH);
int y = random.nextInt(I_HEIGHT);
g.drawLine(x, y, x, y);
}
// 圖象生效
g.dispose();
try
{
// 輸出圖象到頁麵
ServletOutputStream sos = response.getOutputStream();
ImageIO.write(image, "jpeg", sos);
sos.close();
return SUCCESS;
}
catch (Exception e)
{
return "error";
}
}
public void setSession(Map<String, Object> session)
{
this.session = session;
}
public void setServletResponse(HttpServletResponse response)
{
this.response = response;
}
public void setRequest(Map<String, Object> request)
{
this.request = request;
}
}
struts.xml,值得注意的時,result type是stream類型
<package name="login" namespace="/" extends="struts-default">
<action name="toCode" >
<result type="stream">
<param name="contentType">image/jpeg</param>
</result>
</action>
</package>
jsp:
<td align="left">
<input type="text" />
<img src="toCode" />
<a href="javascript:change()"> 看不清,換一張</a>
</td>
function change()
{
var img=document.getElementByIdx_x("imgCode");
img.src="toCode?time="+new Date().getTime();
}
最後更新:2017-04-02 22:15:58