java 生成验证码

来源:互联网 发布:java并发编程的好书 编辑:程序博客网 时间:2024/04/19 06:57

1、效果图

 


2、struts2中 java代码

package com.jst.common.web;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import com.opensymphony.xwork2.ActionSupport;/** * 验证码生成action * @author amadowang * */public class VerifyCodeAction extends ActionSupport implementsServletRequestAware, ServletResponseAware {private HttpServletRequest request;private HttpServletResponse response;@Overridepublic void setServletResponse(HttpServletResponse response) {this.response = response;}@Overridepublic void setServletRequest(HttpServletRequest request) {this.request = request;}@Overridepublic String execute() throws Exception {response.setContentType("image/jpeg");response.setHeader("Pragma", "No-cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);HttpSession session = request.getSession();// 在内存中创建图象int width = 70, height = 23;BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 获取图形上下文Graphics g = image.getGraphics();// 生成随机类Random random = new Random();// 设定背景色g.setColor(getRandColor(200, 250));g.fillRect(0, 0, width, height);// 设定字体g.setFont(new Font("Times New Roman", Font.PLAIN, 24));// 画边框g.setColor(getRandColor(160, 200));g.drawRect(0, 0, width - 1, height - 1);// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到g.setColor(getRandColor(160, 200));for (int i = 0; i < 155; i++) {int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(12);int yl = random.nextInt(12);g.drawLine(x, y, x + xl, y + yl);}// 取随机产生的认证码(4位数字)String sRand = "";for (int i = 0; i < 4; i++) {String rand = String.valueOf(random.nextInt(10));sRand += rand;// 将认证码显示到图象中g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成g.drawString(rand, 13 * i + 14, 20);}// 将认证码存入SESSIONsession.setAttribute("verifyCode", sRand);// 图象生效g.dispose();// 输出图象到页面ImageIO.write(image, "JPEG", response.getOutputStream());return null;}private Color getRandColor(int fc, int bc) {// 给定范围获得随机颜色Random random = new Random();if (fc > 255)fc = 255;if (bc > 255)bc = 255;int r = fc + random.nextInt(bc - fc);int g = fc + random.nextInt(bc - fc);int b = fc + random.nextInt(bc - fc);return new Color(r, g, b);}}

3、jsp代码

<div class="weib"><span><p>用户名:</p> <s:textfield name="user.userCode" cssClass="text1"></s:textfield></span><span><p>密  码:</p><s:password name="user.password" cssClass="text1"></s:password></span><span><p>校验码:</p><input name="verifyCode" id="verifyCode" type="text" class="text1" /><em><img border=0 src="system/verifyCode.action"></em></span></div>

4、struts2.xml配置文件

<struts><package name="default" namespace="/system" extends="struts-default"><!-- 验证码 --><action name="verifyCode" class="com.jst.common.web.VerifyCodeAction"></action></package></struts>



2 0
原创粉丝点击