java隨機生成驗證碼
阿新 • • 發佈:2018-11-12
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>