util类:
package util; import java.awt.*; import java.awt.image.BufferedImage; import java.util.Random; public class ImageCreater { //画内容 public static void drow(Graphics graphics,String code){ Random random = new Random(); int width =150, height =40; //把验证码中可以出现的内容定义为一个字符串 //定义一个字符串接收随机生成的验证码 //随机生成验证码 graphics.setColor(Color.blue); //通过画笔画线条 for (int j = 0; j < 155; j++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); graphics.drawLine(x, y, x + xl, y + yl); } //设置画笔颜色 graphics.setColor(Color.red); //设置画在画布的哪一个位置 graphics.drawString(code,40,30); } public static BufferedImage createImage(String code){ BufferedImage image = new BufferedImage(150,40,BufferedImage.TYPE_INT_RGB); //获取一个画笔 Graphics graphics = image.getGraphics(); //设置画笔颜色 graphics.setColor(Color.lightGray); graphics.fillRect(0,0,150,40); //设置字体大小,风格,样式 graphics.setFont(new Font("TimesRoman", Font.PLAIN, 30)); //调用上面的方法 drow(graphics,code); return image; } }
生成验证码的servlet
package userservlet; import util.ImageCreater; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.IOException; @WebServlet(name = "CreatImageServlet11-6",urlPatterns = {"/img"}) public class CreatImageServlet116 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //指定数据传输类型 response.setContentType("image/jpeg"); //调用静态方法绘图 String code=""; String content="0123456789abcdefg"; for(int i=0;i<4;i++){ code+=content.charAt((int)(Math.random()*17)); } BufferedImage image=ImageCreater.createImage(code); //获取上下文对象并设置属性值,键值对方式 this.getServletContext().setAttribute("code",code); //通过字节流形式传递图像 ImageIO.write(image,"jpeg",response.getOutputStream()); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }
//验证 验证码是否正确的servlet
package userservlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "SurecodeServlet",urlPatterns = {"/suredcode"}) public class SurecodeServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html; charset=utf-8"); String takecode=request.getParameter("surecode"); System.out.println(takecode); //通过getattribute方式()参数是键,获取值,特别注意的是:上下文对象的作用于不仅仅是在自己的servlet中 String code = this.getServletContext().getAttribute("code").toString(); System.out.println(code); if(!takecode.equals(code)){ response.getWriter().write("<script>alert('验证码错误');</script>"); }else{ response.sendRedirect("./html/index.html"); } //request.getRequestDispatcher("/img").forward(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
//通过html页面刷新验证码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录</title> </head> <link href="../bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen"> <script src="http://code.jquery.com/jquery.js"></script> <script src="../bootstrap/js/bootstrap.min.js"></script> <body> <form action="/suredcode" method="post"> <div class="control-group"> <label class="control-label" for="inputEmail">用户名</label> <div class="controls"> <input type="text" id="inputEmail" name="username" placeholder="username"> </div> </div> <div class="control-group"> <label class="control-label" for="inputPassword">密码</label> <div class="controls"> <input type="pwd" id="inputPassword" name="pwd" placeholder="pwd"> </div> </div> <!--验证码--> <div class="control-group"> <label class="control-label" for="inputPassword">验证码</label> <input type="text" id="inputcode" name="surecode" placeholder="验证码"> <div class="controls"> <img src="/img"> </div> </div> <div class="control-group"> <div class="controls"> <input type="submit" class="btn" value="登录"> </div> </div> </form> <button id="change">看不清,换一张</button> <script> $(function () { var i=0; $("#change").on("click",function () { i++; $("img").attr('src',"../img?"+i); }) }) </script> </body> </html>