Java笔记-WEB算术验证码
生活随笔
收集整理的這篇文章主要介紹了
Java笔记-WEB算术验证码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這里和圖片的字符串驗證碼差不多,只是要保留一個結果就可以了!
程序運行截圖如下:
輸入錯誤后,還是這個界面,但輸入正確后:
程序截圖如下:
maven項目,源碼如下:
LoginServlet.java
import javax.jws.WebService; 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(value = "/login") public class LoginServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//得到數據String inCode = request.getParameter("inCode").toString().toLowerCase();String vailCode = request.getSession().getAttribute("vailCode").toString().toLowerCase();//驗證是否正確if(inCode.equals(vailCode)){response.sendRedirect("index.jsp");}else{String url = request.getHeader("Referer");response.sendRedirect(url);}} }ValServlet.java
import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; 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(value = "/val") public class ValServlet extends HttpServlet {private Random random = new Random();private int width = 140;private int height = 30;private int fontSize = 18;private String str = "+-*÷";private int value = -1; //結果private String randCode(){int one = random.nextInt(100);int two = random.nextInt(100);char op = str.charAt(random.nextInt(str.length()));switch (op){case '+':value = one + two;break;case '-':value = one - two;break;case '*':value = one * two;break;case '÷':value = one / two;break;}return "" + one + op + two + "=?";}private Color randColor(){int r = random.nextInt(256);int g = random.nextInt(256);int b = random.nextInt(256);return new Color(r, g, b);}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//創建畫板BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//創建畫筆Graphics2D pen = img.createGraphics();//生成內容String code = randCode();request.getSession().setAttribute("vailCode", value);//繪制區域pen.fillRect(0, 0, width, height);//繪制字體pen.setFont(new Font("微軟雅黑", Font.BOLD, fontSize+random.nextInt(5)));//繪制字符for(int i = 0; i < code.length(); i++){pen.setColor(randColor());pen.drawString(code.charAt(i) + "", 5 + i * fontSize, (fontSize + height) / 2 + random.nextInt(5));}//繪制噪音線for(int i = 0; i < 2; i++){pen.setColor(randColor());pen.setStroke(new BasicStroke(3));pen.drawLine(random.nextInt(width / 2), random.nextInt(height),random.nextInt(width), random.nextInt(height));}//保存并發送ServletOutputStream out = response.getOutputStream();ImageIO.write(img, "png", out);out.flush();out.close();} }web.xml
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name> </web-app>cal.jsp
<%--Created by IntelliJ IDEA.User: cffDate: 2020/1/31Time: 20:33To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>cal Title</title><style type="text/css">.code_a{color: #0000ff;font-size: 12px;text-decoration: none;cursor: pointer;}#imgCode{cursor: pointer;}</style><script type="text/javascript">function changeCode() {var imgCode = document.getElementById("imgCode");imgCode.src = "val?" + Math.random();}</script> </head> <body><form action="login" method="post"><label>驗證碼:</label><input type="text" id="inCode" name="inCode" /><img src = "val" align="center" id="imgCode" onclick="changeCode()" /><a class="code_a" onclick="changeCode()">換一張</a><br /><input type="submit" value="登錄" /></form> </body> </html>index.jsp
<%--Created by IntelliJ IDEA.User: cffDate: 2020/1/31Time: 22:15To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Title</title> </head> <body> <h1>SUCCESS</h1> </body> </html>porn.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>calVailDemo</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version><scope>provided</scope></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.5</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency></dependencies></project>?
總結
以上是生活随笔為你收集整理的Java笔记-WEB算术验证码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt|Http笔记-两种方式发送http
- 下一篇: MySQL工作笔记-解决导入外部sql中