JAVA验证码工具实例代码
工具类:
packagecom.lhy.web.servlet; importjava.awt.BasicStroke; importjava.awt.Color; importjava.awt.Font; importjava.awt.Graphics2D; importjava.awt.image.BufferedImage; importjava.io.FileNotFoundException; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.OutputStream; importjava.util.Random; importjavax.imageio.ImageIO; publicclassVerifyCode{ privateintw=70;//图片长 privateinth=35;//图片宽 privateRandomr=newRandom();//Random类生成随机数 //列举验证图片中验证码的字体类型 //{"宋体","华文楷体","黑体","华文新魏","华文隶书","微软雅黑","楷体_GB2312"} privateString[]fontNames={"宋体","华文楷体","黑体","微软雅黑","楷体_GB2312"}; //验证码可选字符 privateStringcodes="23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ"; //背景色 privateColorbgColor=newColor(255,255,255); //验证码上的文本 privateStringtext; //生成随机的颜色 privateColorrandomColor(){ intred=r.nextInt(150); intgreen=r.nextInt(150); intblue=r.nextInt(150); returnnewColor(red,green,blue); } //生成随机的字体 privateFontrandomFont(){ intindex=r.nextInt(fontNames.length); StringfontName=fontNames[index];//生成随机的字体名称 intstyle=r.nextInt(4);//生成随机的样式,0(无样式),1(粗体),2(斜体),3(粗体+斜体) intsize=r.nextInt(5)+24;//生成随机字号,24~28 returnnewFont(fontName,style,size); } //画干扰线 privatevoiddrawLine(BufferedImageimage){ intnum=3;//一共画3条 Graphics2Dg2=(Graphics2D)image.getGraphics(); for(inti=0;iVerifyCodeServlet:
packagecom.lhy.web.servlet; importjava.awt.image.BufferedImage; importjava.io.IOException; importjavax.servlet.ServletException; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; publicclassVerifyCodeServletextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ /* *1.生成图片 *2.保存图片上的文本到session域中 *3.把图片响应给客户端 */ VerifyCodevc=newVerifyCode(); BufferedImageimage=vc.getImage(); request.getSession().setAttribute("session_vcode",vc.getText());//保存图片上的文本到session域 VerifyCode.output(image,response.getOutputStream()); } }LoginServlet:
packagecom.lhy.web.servlet; importjava.io.IOException; importjavax.servlet.RequestDispatcher; importjavax.servlet.ServletException; importjavax.servlet.http.Cookie; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjavax.servlet.http.HttpSession; publicclassLoginServletextendsHttpServlet{ publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ /* *校验验证码 *1.从session中获取正确的验证码 *2.从表单中获取用户填写的验证码 *3.进行比较! *4.如果相同,向下运行,否则保存错误信息到request域,转发到login.jsp */ StringsessionCode=(String)request.getSession().getAttribute("session_vcode"); StringparamCode=request.getParameter("verifyCode"); if(!paramCode.equalsIgnoreCase(sessionCode)){ request.setAttribute("msg","验证码错误!"); request.getRequestDispatcher("/login.jsp").forward(request,response); return; } /* *1.获取表单数据 */ //处理中文问题 request.setCharacterEncoding("utf-8"); //获取 Stringusername=request.getParameter("username"); Stringpassword=request.getParameter("password"); /* *2.校验用户名和密码是否正确 */ if("itcast".equalsIgnoreCase(username)){//登录成功 /* *附加项:把用户名保存到cookie中,发送给客户端浏览器 *当再次打开login.jsp时,login.jsp中会读取request中的cookie,把它显示到用户名文本框中 */ Cookiecookie=newCookie("uname",username);//创建Cookie cookie.setMaxAge(60*60*24);//设置cookie命长为1天 response.addCookie(cookie);//保存cookie /* *3.如果成功 *>保存用户信息到session中 *>重定向到succ1.jsp */ HttpSessionsession=request.getSession();//获取session session.setAttribute("username",username);//向session域中保存用户名 response.sendRedirect("/Test/succ1.jsp"); }else{//登录失败 /* *4.如果失败 *>保存错误信息到request域中 *>转发到login.jsp */ request.setAttribute("msg","用户名或密码错误!"); RequestDispatcherqr=request.getRequestDispatcher("/login.jsp");//得到转发器 qr.forward(request,response);//转发 } } }login.jsp:
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%> <%Stringpath=request.getContextPath(); StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>"rel="externalnofollow"> MyJSP'login.jsp'startingpage function_change(){ /* 1.得到img元素 2.修改其src */ varimgEle=document.getElementById("img"); imgEle.src="http://dh.wk163.com<%=basePath%>servlet/VerifyCodeServlet?a="+newDate().getTime(); } <%--本页面提供登录表单,还要显示错误信息--%> 登录
<% /* 读取名为uname的Cookie! 如果为空显示:"" 如果不为空显示:Cookie的值 */ Stringuname=""; Cookie[]cs=request.getCookies();//获取请求中所有的cookie if(cs!=null){//如果存在cookie for(Cookiec:cs){//循环遍历所有的cookie if("uname".equals(c.getName())){//查找名为uname的cookie uname=c.getValue();//获取这个cookie的值,给uname这个变量 } } } %> <% Stringmessage=""; Stringmsg=(String)request.getAttribute("msg");//获取request域中的名为msg的属性 if(msg!=null){ message=msg; } %><%=message%> <%--把cookie中的用户名显示到用户名文本框中--%> 用户名: "/>
密码:
验证码:servlet/VerifyCodeServlet"/> 换一张
loginsuccess:
succ1
<% Stringusername=(String)session.getAttribute("username"); if(username==null){ /* 1.向request域中保存错误信息,转发到login.jsp */ request.setAttribute("msg","您还没有登录!请先登录!"); request.getRequestDispatcher("/login.jsp").forward(request,response); return; } %>欢迎欢迎,热烈欢迎,欢迎<%=username%>领导指导工作!