JSP頁面的驗證碼生成和調用
在實際項目中,我們還會經常在進行登錄的時候使用驗證碼,下面就是一個驗證碼的jsp頁面代碼,命名為validate.jsp,代碼如下:
<%@ page contentType="image/JPEG" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" pageEncoding="GBK"%><%!Color getRandColor(int fc, int bc) {//給定范圍獲得隨機顏色 Random random = new Random(); if (fc > 255) fc = 255; if (bc > 255) bc = 255; int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r, g, b); }%><% //設置頁面不緩存 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); // 在內存中創建圖象 int width = 60, height = 20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 獲取圖形上下文 Graphics g = image.getGraphics(); //生成隨機類 Random random = new Random(); // 設定背景色 g.setColor(getRandColor(200, 250)); g.fillRect(0, 0, width, height); //設定字體 g.setFont(new Font("Times New Roman", Font.PLAIN, 18)); //畫邊框 //g.setColor(new Color()); //g.drawRect(0,0,width-1,height-1); // 隨機產生155條干擾線,使圖象中的認證碼不易被其它程序探測到 g.setColor(getRandColor(160, 200)); for (int i = 0; i < 100; i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x, y, x + xl, y + yl); } // 取隨機產生的認證碼(4位數字) String sRand = ""; for (int i = 0; i < 4; i++) { String rand = String.valueOf(random.nextInt(10)); sRand += rand; // 將認證碼顯示到圖象中 g.setColor(new Color(20 + random.nextInt(110), 20 + random .nextInt(110), 20 + random.nextInt(110)));//調用函數出來的顏色相同,可能是因為種子太接近,所以只能直接生成 g.drawString(rand, 13 * i + 6, 16); } // 將認證碼存入SESSION session.setAttribute("rand", sRand); // 圖象生效 g.dispose(); // 輸出圖象到頁面 ImageIO.write(image, "JPEG", response.getOutputStream()); %>
當我們在前臺頁面調用的時候可以這樣進行調用:
<a href="javascript:void(0);" onclick="changeImage();">看不清,換一張</a> function changeImage() { var img = document.getElementById("validatImg"); img.src = "<%=basePath%>web/validate.jsp?date=" + new Date();//加上一個隨機數,防止重復 $("#validatImg").show(); } 當我們在java代碼中對jsp驗證碼進行判斷的時候,可以直接從session中獲取,String validate=session.getAttribute('rand');
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!