用户登陆,退出等基本Action(1) 验证码

首先需要一个验证码生成的工具类(ConfirmCodeGen.java):

package com.tools;

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

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 * 生成验证码
 * 
 * @author Michael Young
 * 
 */
public final class ConfirmCodeGen {

	/**
	 * @param response
	 * @param width
	 * @param height
	 * @param len
	 * @return
	 * @throws Exception
	 */
	public static String genImageCode(HttpServletResponse response, int width,
			int height, int len) throws Exception {
		// random number
		String code = Integer.toString((int) (Math.random() * (1E4)));
		for (int i = code.length(); i < len; i++)
			code += "0";
		response.setContentType("image/jpeg");
		response.addHeader("pragma", "NO-cache");
		response.addHeader("Cache-Control", "no-cache");
		response.addDateHeader("Expries", 0);
		BufferedImage image = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
		Graphics g = image.getGraphics();
		// 以下填充背景颜色
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, width, height);
		// 画边框
		g.setColor(Color.black);
		g.drawRect(0, 0, width - 1, height - 1);
		// 设置字体颜色
		g.setColor(Color.BLACK);
		// g.setColor(new Color());
		g.setFont(new Font("Times New Roman", Font.BOLD, 16));
		g.drawString(code, 5, 15);
		// 88点
		Random random = new Random();
		for (int i = 0; i < 66; i++) {
			int x = random.nextInt(width);
			int y = random.nextInt(height);
			g.setColor(new Color((int) Math.floor(Math.random() * 255)));
			g.drawLine(x, y, x, y);
		}
		g.dispose();
		ServletOutputStream outStream = response.getOutputStream();
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outStream);
		encoder.encode(image);
		outStream.flush();
		outStream.close();
		return code;
	}

	/**
	 * @param session
	 * @param confirmCode
	 * @return
	 */
	public static boolean isCorrectCode(HttpServletRequest request) {
		HttpSession session = request.getSession();
		String confirmCode = request.getParameter("confirmCode");
		if (session.getAttribute("confirmcode") == null || confirmCode == null) {
			return false;
		}
		String code = (String) session.getAttribute("confirmcode");
		// 移除Session
		session.removeAttribute("confirmcode");
		if (code.equals(confirmCode)) {
			return true;
		}
		return false;
	}

	/**
	 * 从ajax判断验证码的正确与否
	 * 
	 * @param confirmCode
	 *            验证码
	 * @param session
	 * @return
	 */
	public static Byte isCorrectCodeFromSession(String confirmCode,
			HttpSession session) {
		if (session.getAttribute("confirmcode") == null || confirmCode == null) {
			return 0;
		}
		String code = (String) session.getAttribute("confirmcode");
		if (code.equals(confirmCode)) {
			return 1;
		}
		// 移除Session
		session.removeAttribute("confirmcode");
		return 0;

	}
}

  2、需要一个自定义的Action的result,(ConfirmCodeGenResult.java):

/**
 * 
 */
package com.web.struts.results;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.StrutsResultSupport;

import com.opensymphony.xwork2.ActionInvocation;
import com.tools.ConfirmCodeGen;

/**
 * title: 生成的验证码的Result
 * 
 * @author conkeyn
 * @时间 2009-4-14:下午02:31:52
 */
public class ConfirmCodeGenResult extends StrutsResultSupport {

	/**  */
	private static final long serialVersionUID = 2545890371747338210L;

	/** 随机图片宽度 */
	private int c_width;

	/** 随机图片高度 */
	private int c_height;

	/** 随机数长度 */
	private int c_length;

	@Override
	protected void doExecute(String finalLocation, ActionInvocation invocation)
			throws Exception {
		HttpServletResponse response = ServletActionContext.getResponse();
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();
		Object widthO = invocation.getStack().findValue("c_width");
		if (widthO != null) {
			c_width = (Integer) widthO;
			if (c_width <= 0) {
				c_width = 45;
			}
		} else {
			c_width = 45;
		}
		Object heightO = invocation.getStack().findValue("c_height");
		if (heightO != null) {
			c_height = (Integer) heightO;
			if (c_height <= 0) {
				c_height = 20;
			}
		} else {
			c_height = 20;
		}
		Object c_lengthO = invocation.getStack().findValue("c_length");
		if (c_lengthO != null) {
			c_length = (Integer) c_lengthO;
			if (c_length <= 0) {
				c_length = 4;
			}
		} else {
			c_length = 4;
		}
		String random = ConfirmCodeGen.genImageCode(response, c_width,
				c_height, c_length);

		session.setAttribute("confirmcode", random);
	}

	public int getC_width() {
		return c_width;
	}

	public void setC_width(int c_width) {
		this.c_width = c_width;
	}

	public int getC_height() {
		return c_height;
	}

	public void setC_height(int c_height) {
		this.c_height = c_height;
	}

	public int getC_length() {
		return c_length;
	}

	public void setC_length(int c_length) {
		this.c_length = c_length;
	}

}

 3、需要一个默认的action():

package com.web.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 基本Action
 * 
 * 
 * 
 */
public class base extends ActionSupport {
	/**
	 * 
	 */
	private static final long serialVersionUID = -7546749187705748430L;

	/** 验证码的随机图片宽度 */
	protected int c_width;

	/** 验证码的随机图片高度 */
	protected int c_height;

	/** 验证码的随机数长度 */
	protected int c_length;

	public String execute() throws Exception {
		return SUCCESS;
	}


	/**
	 * Convenience method to get the request
	 * 
	 * @return current request
	 */
	protected HttpServletRequest getRequest() {
		return ServletActionContext.getRequest();
	}


	/**
	 * Convenience method to get the response
	 * 
	 * @return current response
	 */
	protected HttpServletResponse getResponse() {
		return ServletActionContext.getResponse();
	}

	/**
	 * Convenience method to get the session
	 */
	protected HttpSession getSession() {
		return getRequest().getSession();
	}

	
	public int getC_width() {
		return c_width;
	}

	public void setC_width(int c_width) {
		this.c_width = c_width;
	}

	public int getC_height() {
		return c_height;
	}

	public void setC_height(int c_height) {
		this.c_height = c_height;
	}

	public int getC_length() {
		return c_length;
	}

	public void setC_length(int c_length) {
		this.c_length = c_length;
	}
}

 配置文件(struts-validation.xml):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>
	<package name="map_validation" extends="struts-default" namespace="/validation">
		<result-types>
			<result-type name="confirmCodeGenResult"
				class="com.web.struts.results.ConfirmCodeGenResult" />
		</result-types>
		<action name="confirm" class="baseAction">
			<result type="confirmCodeGenResult"></result>
		</action>
	</package>
</struts>
 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值