code.jsp
- <%@pagelanguage="java"contentType="text/html;charset=UTF-8"
- pageEncoding="UTF-8"%>
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
- <%@tagliburi="http://struts.apache.org/tags-bean"prefix="bean"%>
- <%@tagliburi="http://struts.apache.org/tags-html"prefix="html"%>
- <%@tagliburi="http://struts.apache.org/tags-logic"prefix="logic"%>
- <%@tagliburi="http://struts.apache.org/tags-tiles"prefix="tiles"%>
- <html>
- <head>
- <http-equivhttp-equiv="Content-Type"content="text/html;charset=UTF-8">
- <title>验证码</title>
- </head>
- <body>
- <html:imgpage="/code.do"border="0"这里写单击事件onclick="this.src='/lookctrl/code.do'"alt="请输入此验证码,如看不清请点击刷新。"style="cursor:pointer"/>
- </body>
- </html>
CodeAction.java
- packagestruts.action;
- importjava.awt.Color;
- importjava.awt.Font;
- importjava.awt.Graphics;
- importjava.awt.image.BufferedImage;
- importjava.util.Random;
- importjavax.imageio.ImageIO;
- importjavax.servlet.ServletOutputStream;
- importjavax.servlet.http.HttpServletRequest;
- importjavax.servlet.http.HttpServletResponse;
- importjavax.servlet.http.HttpSession;
- importorg.apache.struts.action.Action;
- importorg.apache.struts.action.ActionForm;
- importorg.apache.struts.action.ActionForward;
- importorg.apache.struts.action.ActionMapping;
- importorg.apache.commons.lang.RandomStringUtils;
- /**
- *MyEclipseStrutsCreationdate:08-2-2008
- *
- *XDocletdefinition:
- *
- *@struts.actionvalidate="true"
- */
- publicclassCodeActionextendsAction{
- /*
- *GeneratedMethods
- */
- /**
- *Methodexecute
- *
- *@parammapping
- *@paramform
- *@paramrequest
- *@paramresponse
- *@returnActionForward
- */
- publicActionForwardexecute(ActionMappingmapping,ActionFormform,
- HttpServletRequestrequest,HttpServletResponseresponse){
- try{
- intwidth=50;
- intheight=18;
- //取得一个4位随机字母数字字符串
- Strings=RandomStringUtils.random(4,true,true);//这个s的值就是页面验证码上显示的值
- //保存入session,用于与用户的输入进行比较.
- //注意比较完之后清除session.
- HttpSessionsession=request.getSession(true);
- session.setAttribute("validateCode",s);
- response.setContentType("images/jpeg");
- response.setHeader("Pragma","No-cache");
- response.setHeader("Cache-Control","no-cache");
- response.setDateHeader("Expires",0);
- ServletOutputStreamout=response.getOutputStream();
- BufferedImageimage=newBufferedImage(width,height,
- BufferedImage.TYPE_INT_RGB);
- Graphicsg=image.getGraphics();
- //设定背景色
- g.setColor(getRandColor(200,250));
- g.fillRect(0,0,width,height);
- //设定字体
- FontmFont=newFont("TimesNewRoman",Font.BOLD,18);//设置字体
- g.setFont(mFont);
- //画边框
- //g.setColor(Color.BLACK);
- //g.drawRect(0,0,width-1,height-1);
- //随机产生干扰线,使图象中的认证码不易被其它程序探测到
- g.setColor(getRandColor(160,200));
- //生成随机类
- Randomrandom=newRandom();
- for(inti=0;i<155;i++){
- intx2=random.nextInt(width);
- inty2=random.nextInt(height);
- intx3=random.nextInt(12);
- inty3=random.nextInt(12);
- g.drawLine(x2,y2,x2+x3,y2+y3);
- }
- //将认证码显示到图象中
- g.setColor(newColor(20+random.nextInt(110),20+random
- .nextInt(110),20+random.nextInt(110)));
- g.drawString(s,2,16);
- //图象生效
- g.dispose();
- //输出图象到页面
- ImageIO.write((BufferedImage)image,"JPEG",out);
- out.close();
- }catch(Exceptione){
- e.printStackTrace();
- }
- returnnull;
- }
- privateColorgetRandColor(intfc,intbc){//给定范围获得随机颜色
- Randomrandom=newRandom();
- if(fc>255)
- fc=255;
- if(bc>255)
- bc=255;
- intr=fc+random.nextInt(bc-fc);
- intg=fc+random.nextInt(bc-fc);
- intb=fc+random.nextInt(bc-fc);
- returnnewColor(r,g,b);
- }
- }