Java生成验证码图片
1首先新建一各专门生成验证码图片的类VerifyCode: public class VerifyCode { private int w=70; private int h=35; private Random r=new Random(); //宋体,华文楷书,黑体,华文新魏,华文隶书,微软雅黑,楷体_GB2312,Times New Roman private String [] fontNames={"宋体","华文楷书","黑体","华文新魏","微软雅黑","华文隶书","楷体_GB2312","Times New Roman"}; //可选的字符 private String codes="23456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ"; //背景色 private Color bgColor=new Color(255,255,255); //验证码上的文本 private String text; //生成随机颜色 private Color randomColor(){ int red=r.nextInt(150); int green=r.nextInt(150); int blue=r.nextInt(150); return new Color(red,green,blue); } //生成随机字体 private Font randomFont(){ int index=r.nextInt(fontNames.length);//获取下标 String fontName=fontNames[index];//生成随机的字体名称 int style=r.nextInt(4);//获取随机样式,0表示无样式,1表示粗体,2表示斜体,3表示粗体加斜体 int size=r.nextInt(5)+24;//生成随机字号,24~28 return new Font(fontName,style,size); } //画干扰线 private void drawLine(BufferedImage image){ int num=3;//一共画3条 Graphics2D g2=(Graphics2D) image.getGraphics(); for(int i=0;i用户名: 密 码: 验证码: 看不清换一张 看不清换一张使用javascript实现,代码如下: <script type="text/javascript"> function _change(){ /** *1.得到image图片 *2.修改其src为/test/VerifyCodeServlet */ var imgEle=document.getElementById("img"); imgEle.src="/test/VerifyCodeServlet?a="+new Date().getTime(); } </script> +new Date().getTime()这条语句可以欺骗浏览器,以为请求是新的,实现验证码的改变。 3.在第2步中,VerifyCodeServlet的实现生成一张验证码,并且通过session域保存验证码图片对应的文本内容,为后面的登录验证验证码是否正确做准备。核心代码如下: public class VerifyCodeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 1.生成图片 * 2.保存图片上的文本到session域中 * 3.把图片响应给客户端 */ VerifyCode vc=new VerifyCode(); BufferedImage image=vc.getImage(); //保存图片上的文本到session域 request.getSession().setAttribute("session_code", vc.getText()); VerifyCode.output(image, response.getOutputStream()); } } 4.最后一步,实现登录验证验证码是否正确,其核心代码如下: public class LoginServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 校验验证码 * 1.从session中获取正取的验证码 * 2.从表单中获取用户填写的验证码 * 3.进行比较 * 4.如果相同,向下运行,否则保存错误信息到request域,转发到login.jsp */ String sessionCode=(String) request.getSession().getAttribute("session_code");//获得的验证码里面对应的文本内容 String paramCode=request.getParameter("verifyCode");//用户输入文本框里面的内容 if(!paramCode.equalsIgnoreCase(sessionCode)){ request.setAttribute("msg", "验证码错误!"); request.getRequestDispatcher("/login.jsp").forward(request, response);//打回到登录界面。 return;//返回,不继续执行下面的语句。 } } }