Everyone knows the verification code, and I don’t need to say more about its function. If you are not very clear, please refer to the explanation in Baidu Encyclopedia. Generally, the generation of verification codes is to randomly generate characters (numbers, letters, or Chinese characters, etc.), then draw these generated characters into a picture, and then add some interfering elements to the picture, such as various lines, etc. OK, let’s talk nonsense and read it down:
Simple login page (the code is not complete, only the verification code part)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Verification Code</title> <script type="text/javascript"> <span style="white-space:pre" data-filtered="filtered"></span><span style="white-space:pre"> </span> //JS function to refresh the verification code<span style="white-space:pre"> </span>function changeCode() { <span style="white-space:pre"> </span>var imgNode = document.getElementById("vimg"); <span style="white-space:pre"> </span>//Reload the verification code to achieve the purpose of refreshing <span style="white-space:pre"> </span>imgNode.src = "servlet/AuthImageServlet?t=" + Math.random(); // Prevent browser cache issues <span style="white-space:pre"> </span>} </script> </head> <body> <form action="checkServlet" method="post"> <label>Input verification code</label><br/> <input type="text" name="randomCode"/><img id="vimg" onclick="changeCode();" src="servlet/AuthImageServlet"><br/> <input type="submit" value="submit"> </form> </body> </html>Through session.getAttribute("rand"), the generated verification code is obtained, and then compared with the user input, and then the corresponding processing is performed based on the comparison results.
Generate verification code through servlet:
package com.util.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class AuthImageServlet extends HttpServlet { private static final String CONTENT_TYPE = "text/html; charset=gb2312"; //Set the size of letters, private Font mFont = new Font("Times New Roman", Font.PLAIN, 17); public void init() throws ServletException { super.init(); } 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); int b=fc+random.nextInt(bc-fc); return new Color(r,g,b); } public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); //Indicate that the generated response is the image response.setContentType("image/jpeg"); int width=100, height=18; 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(1, 1, width-1, height-1); g.setColor(new Color(102,102,102)); g.drawRect(0, 0, width-1, height-1); g.setFont(mFont); g.setColor(getRandColor(160,200)); //Draw a random line for (int i=0;i<155;i++) { int x = random.nextInt(width - 1); int y = random.nextInt(height - 1); int xl = random.nextInt(6) + 1; int yl = random.nextInt(12) + 1; g.drawLine(x,y,x + xl,y + yl); } //Draw a random line from the other direction for (int i = 0;i < 70;i++) { int x = random.nextInt(width - 1); int y = random.nextInt(height - 1); int xl = random.nextInt(12) + 1; int yl = random.nextInt(6) + 1; g.drawLine(x,y,x - xl,y - yl); } //Generate random numbers and convert random numbers into letters String sRand=""; for (int i=0;i<6;i++) { int itmp = random.nextInt(26) + 65; char ctmp = (char)itmp; sRand += String.valueOf(ctmp); g.setColor(new Color(20+random.nextInt(110), 20+random.nextInt(110), 20+random.nextInt(110))); g.drawString(String.valueOf(ctmp),15*i+10,16); } HttpSession session = request.getSession(true); session.setAttribute("rand",sRand); g.dispose(); ImageIO.write(image, "JPEG", response.getOutputStream()); } }servlet configuration information in web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>AuthImageServlet</servlet-name> <servlet-class>com.util.servlet.AuthImageServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AuthImageServlet</servlet-name> <url-pattern>/servlet/AuthImageServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
In this way, the verification code function is implemented, which is very simple and practical. Of course, there are more beautiful and rigorous ways. Interested friends can study in depth. Here I will share with you a relatively simple way. All are welcome to criticize and correct me.
The above is all the content of this article. I hope it will be helpful to everyone's learning and I hope everyone will support Wulin.com more.