struts2生成验证码
2016-07-26 18:41
471 查看
action
package demo.action; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.Action; //一个产生验证码的类 public class IdCode implements Action{ private ByteArrayInputStream input; public ByteArrayInputStream getInput() { return input; } public void setInput(ByteArrayInputStream input) { this.input = input; } //限定验证码的长度 private int codeLength = 4; //限定验证码产生的范围 private String[] str = new String[]{"a","b","c","d","e","f","g","h","i","j"}; //产生随机数 private Random random = new Random(); //验证码中字体大小 private int fontSize = 20; //字体样式 private String fontName = "黑体"; //字体风格 private int fontStyle = Font.BOLD; //验证码图片的宽度 private int width = (fontSize+4)*codeLength; //图片的高度 private int height = fontSize+6; //图片的类型 private int imgtTpe = BufferedImage.TYPE_INT_BGR; //噪点的数量 private int sound = 50; //产生一个限定的字符集中的字符 private String getOneCode(){ int i = random.nextInt(str.length); return str[i]; } //产生一个验证码字符串 private String[] createCode(){ String[] validateCode = new String[codeLength]; for (int j = 0; j < codeLength; j++) { validateCode[j] = getOneCode(); } return validateCode; } private BufferedImage createImage(String[] validateCode){ //创建画布 BufferedImage bi = new BufferedImage(width, height,imgtTpe); //获取画笔 Graphics g = bi.getGraphics(); //绘制背景 g.setColor(Color.white); g.fillRect(0, 0, width, height); //绘制边框 g.setColor(Color.black); g.drawRect(0, 0, width-1, height-1); //绘制噪点 for(int i = 0 ; i<sound ; i++){ g.setColor(new Color(random.nextInt(255))); g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1); } //绘制验证码 Font font = new Font(fontName, fontStyle, fontSize); g.setFont(font); for(int i = 0 ;i<codeLength;i++){ g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255))); g.drawString(validateCode[i], 10+fontSize*i, fontSize); } g.dispose(); return bi; } public void createInputStream(String[] validateCode){ ByteArrayOutputStream output = new ByteArrayOutputStream(); try { boolean a = ImageIO.write(createImage(validateCode), "jpeg", output); System.out.println("a:"+a); } catch (IOException e) { e.printStackTrace(); } input = new ByteArrayInputStream(output.toByteArray()); try { input.close(); output.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public String execute() throws Exception { //创建验证码 String[] validateCode = createCode(); //创建验证码图片 createInputStream(validateCode); //把验证码的值放入session中 HttpSession session = ServletActionContext.getRequest().getSession(); session.setAttribute("validateCode",validateCode); return SUCCESS; } }
Struts2.xml
<action name="imageIdCode" class="demo.action.IdCode" method="execute"> <result name="success" type="stream"> <param name="contentType">image/jpeg</param> <param name="inputName">input</param> </result> </action>
jsp
<script> function changeIdCode(){ $("#idCodee").attr("src","imageIdCode.action?aa"+Math.random()) } </script> <img onclick="changeIdCode()" alt="验证码" title="点击更换" src="imageIdCode.action" id="idCodee"/></td><td id="idcodeid">
相关文章推荐
- java多线程-生产者消费者经典问题
- (11)SSH整合
- Exception in thread "main" java.lang.OutOfMemoryError: PermGen space
- java之File
- JAVA笔记之FileInputStream
- SpringMVC 拦截器
- SpringMVC Redreict 请求的问题
- spring-boot+mybatis+pagehelper+Swagger2构建RESTful API
- java string字符串
- Java入门第三季-综合实战:简易扑克牌游戏
- java中数字基本运算、金额运算精度问题小结
- springmvc+mybatis高效接口编程
- MAC系统里JDK版本切换
- springMVC 基础注意
- IO流4(补充
- 160726Java学习
- Struts2之文件上传
- Javaweb学习总结(四)--eclipse中使用github之public key的生成和设置
- java copyOnWrite
- Selenium java mac 自动化测试