1. 程式人生 > >jsp+servlet 驗證碼 (包含看不清,換一張)的程式碼

jsp+servlet 驗證碼 (包含看不清,換一張)的程式碼

servlet類:

import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Random;

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;

/**  * Servlet implementation class CheckCode  */ @WebServlet("/CheckCode") public class CheckCode extends HttpServlet {     private static final long serialVersionUID = 1L;     private static final int Width = 90;// 定義圖片的寬度;     private static final int height = 20;// 定義圖片的長度;     private static int codeCount = 4;// 圖片上顯示的驗證碼個數;     private static int xx = 15;     private static int fontheight = 18;     private static int codeY = 16;     private static char[] codesequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',             'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {             BufferedImage buffimg=new BufferedImage(Width,height,BufferedImage.TYPE_INT_RGB);//建立一個不帶透明的影象物件             Graphics gd=buffimg.getGraphics();//用影象物件去獲取一個繪畫物件              // 建立一個隨機數生成器類               Random random = new Random();               // 將影象填充為白色               gd.setColor(Color.WHITE);               gd.fillRect(0, 0, Width, height);             // 建立字型,字型的大小應該根據圖片的高度來定。                Font font = new Font("Fixedsys", Font.BOLD, fontheight);                gd.setFont(font);                // 畫邊框。                gd.setColor(Color.BLACK);                gd.drawRect(0, 0, Width - 1, height - 1);             // 隨機產生30條幹擾線,使圖象中的認證碼不易被其它程式探測到。                  gd.setColor(Color.BLACK);                    for (int i = 0; i < 30; i++) {                       int x = random.nextInt(Width);//x為Width裡面的隨機一個數                      int y = random.nextInt(height);                        int xl = random.nextInt(12);//x1為12以內的一個數                       int yl = random.nextInt(12);                       gd.drawLine(x, y, x + xl, y + yl);                   }                    // randomCode用於儲存隨機產生的驗證碼,以便使用者登入後進行驗證。                       StringBuffer randomCode = new StringBuffer();                       int red = 0, green = 0, blue = 0;                    // 隨機產生codeCount數字的驗證碼。                            for (int i = 0; i < codeCount; i++) {                             // 得到隨機產生的驗證碼數字。                                 String code = String.valueOf(codesequence[random.nextInt(36)]);                              // 產生隨機的顏色分量來構造顏色值,這樣輸出的每位數字的顏色值都將不同。                                red = random.nextInt(255);                              green = random.nextInt(255);                            blue = random.nextInt(255);                                                     // 用隨機產生的顏色將驗證碼繪製到影象中。                                 gd.setColor(new Color(red, green, blue));                              gd.drawString(code, (i + 1) * xx, codeY);                              // 將產生的四個隨機數組合在一起。                                      randomCode.append(code);                                  }                                 Map<String,Object> map  =new HashMap<String,Object>();                                    //存放驗證碼                                  map.put("code", randomCode);                                   //存放生成的驗證碼BufferedImage物件                                   map.put("codePic", buffimg);                                   ImageIO.write((RenderedImage) map.get("codePic"), "jpg", response.getOutputStream());//將這個驗證碼圖片讀寫到頁面中

        }         protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {             // TODO Auto-generated method stub             doGet(request, response);         } } jsp頁面程式碼:

<%@ page pageEncoding="UTF-8"%> <script type="text/javascript" src="jquery-1.12.0.min.js"></script>//jquery外掛,但是我這裡沒有使用 <script type="text/javascript">     function reImg() {         var img = document.getElementById("Img");         img.src = "../CheckCode?rnd=" + Math.random();//重新整理CheckCode這個servlet,即驗證碼     } </script> <img id="Img" src="../CheckCode"> <a href="#" onclick="reImg()">看不清,換一張</a>

這裡的CheckCode就是上面的servlet類,驗證碼點選一下就改變是改變這個圖片的src,而這個src就是servlet程式碼,所以只要改變servlet程式碼的傳參(隨便定義)