工具Servlet - 4位驗證碼圖片:CheckCodeServlet
阿新 • • 發佈:2020-12-05
Servlet - 4位驗證碼圖片:CheckCodeServlet
package com.itheima.web.servlet; 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.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; /** * 驗證碼 */ @WebServlet("/checkCode") public class CheckCodeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { //伺服器通知瀏覽器不要快取 response.setHeader("pragma","no-cache"); response.setHeader("cache-control","no-cache"); response.setHeader("expires","0"); //在記憶體中建立一個長80,寬30的圖片,預設黑色背景 //引數一:長 //引數二:寬 //引數三:顏色 int width = 80; int height = 30; BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //獲取畫筆 Graphics g = image.getGraphics(); //設定畫筆顏色為灰色 g.setColor(Color.GRAY); //填充圖片 g.fillRect(0,0, width,height); //產生4個隨機驗證碼,12Ey String checkCode = getCheckCode(); //將驗證碼放入HttpSession中 request.getSession().setAttribute("CHECKCODE_SERVER",checkCode); //設定畫筆顏色為黃色 g.setColor(Color.YELLOW); //設定字型的小大 g.setFont(new Font("黑體",Font.BOLD,24)); //向圖片上寫入驗證碼 g.drawString(checkCode,15,25); //將記憶體中的圖片輸出到瀏覽器 //引數一:圖片物件 //引數二:圖片的格式,如PNG,JPG,GIF //引數三:圖片輸出到哪裡去 ImageIO.write(image,"PNG",response.getOutputStream()); } /** * 產生4位隨機字串 */ private String getCheckCode() { String base = "0123456789ABCDEFGabcdefg"; int size = base.length(); Random r = new Random(); StringBuffer sb = new StringBuffer(); for(int i=1;i<=4;i++){ //產生0到size-1的隨機值 int index = r.nextInt(size); //在base字串中獲取下標為index的字元 char c = base.charAt(index); //將c放入到StringBuffer中去 sb.append(c); } return sb.toString(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request,response); } }