Java笔记-WEB算术验证码

这里和图片的字符串验证码差不多,只是要保留一个结果就可以了!

程序运行截图如下:

Java笔记-WEB算术验证码_第1张图片

输入错误后,还是这个界面,但输入正确后:

Java笔记-WEB算术验证码_第2张图片

程序截图如下:

Java笔记-WEB算术验证码_第3张图片

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




    Archetype Created Web Application

cal.jsp

<%--
  Created by IntelliJ IDEA.
  User: cff
  Date: 2020/1/31
  Time: 20:33
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    cal Title
    
    


    
换一张

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: cff
  Date: 2020/1/31
  Time: 22:15
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


SUCCESS

porn.xml



    4.0.0

    org.example
    calVailDemo
    1.0-SNAPSHOT

    war

    

        
            junit
            junit
            3.8.1
            test
        

        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
        

        
            org.projectlombok
            lombok
            1.18.10
            provided
        


        
            commons-io
            commons-io
            2.5
        

        
            commons-fileupload
            commons-fileupload
            1.2.2
        

    

 

你可能感兴趣的:(Java,我的Java地带,Web相关技术)