有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在jsp表单中插入验证码?

我正在使用netbeans和mysql用java开发一个web应用程序。申请表上有一张登记表。当用户提交表单时,将执行客户端和服务器端验证

现在我想在表单中插入验证码。如何插入,以及如何检查用户是否输入了正确的验证码值


共 (5) 个答案

  1. # 2 楼答案

    此代码正在运行:

    //放入您的jsp页面

    <div class="form-cont">
                            <img src="CaptchaImg.jpg" alt="image">
                        </div>
                        <div class="form-cont">
                         <input autocomplete="off"  type="text" class="captcha input-elm" tabindex="3"  
                            placeholder="Captcha Code" name="j_captcha_response" id="j_captcha_response" 
                             maxlength="4">
                        </div>
    
    //PUT in YOUR class
    
    
     String parm = httpServletRequest.getParameter("j_captcha_response");
            String captchaKey = (String)session.getAttribute(CaptchaServlet.CAPTCHA_KEY) ;
    
            if(parm.equalsIgnoreCase(captchaKey)){
    true
    //CODE HERE
    }
    else{
    faLSE
    ERROR HERE 
    }
    
  2. # 3 楼答案

    请尝试reCAPTCHAhttps://developers.google.com/recaptcha/——它是一个被广泛使用的库,具有多种编程语言(包括Java/JSP)的经验证的插件——请参阅插件部分。顺便说一句,您也可以在不使用服务器端处理的情况下使用此库-请参阅“不使用插件显示”和“不使用插件验证”部分

  3. # 4 楼答案

    您的验证码在servlet的doGet(…)中不会发生任何更改方法

    package test.captcha;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.OutputStream;
    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 CaptchaServlet extends HttpServlet {
    
     protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    
    
        response.setContentType("image/jpg");
        /*
         * Define number characters contains the captcha image, declare global
         */
        int iTotalChars = 6;
    
        /*
         * Size image iHeight and iWidth, declare globl
         */
        int iHeight = 40;
        int iWidth = 150;
    
        /*
         * font style
         */
        Font fntStyle1 = new Font("Arial", Font.BOLD, 30);
        Font fntStyle2 = new Font("Verdana", Font.BOLD, 20);
    
        /*
         * Possible random characters in the image
         */
        Random randChars = new Random();
        String sImageCode = (Long.toString(Math.abs(randChars.nextLong()), 36)).substring(0, iTotalChars);
    
        /*
         * BufferedImage is used to create a create new image
         */
        /*
         * TYPE_INT_RGB - does not support transpatency, TYPE_INT_ARGB - support transpatency
         */
        BufferedImage biImage = new BufferedImage(iWidth, iHeight, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2dImage = (Graphics2D) biImage.getGraphics();
    
        // Draw background rectangle and noisey filled round rectangles
        int iCircle = 15;
        //g2dImage.fillRect(0, 0, iWidth, iHeight);
        for (int i = 0; i < iCircle; i++) {
            g2dImage.setColor(new Color(randChars.nextInt(255), randChars.nextInt(255), randChars.nextInt(255)));
            int iRadius = (int) (Math.random() * iHeight / 2.0);
            int iX = (int) (Math.random() * iWidth - iRadius);
            int iY = (int) (Math.random() * iHeight - iRadius);
            //g2dImage.fillRoundRect(iX, iY, iRadius * 2, iRadius * 2,100,100);
        }
        g2dImage.setFont(fntStyle1);
        for (int i = 0; i < iTotalChars; i++) {
            g2dImage.setColor(new Color(randChars.nextInt(255), randChars.nextInt(255), randChars.nextInt(255)));
            if (i % 2 == 0) {
                g2dImage.drawString(sImageCode.substring(i, i + 1), 25 * i, 24);
            } else {
                g2dImage.drawString(sImageCode.substring(i, i + 1), 25 * i, 35);
            }
        }
    
        /*
         * create jpeg image and display on the screen
         */
        OutputStream osImage = response.getOutputStream();
        ImageIO.write(biImage, "jpeg", osImage);
        //osImage.close();
    
        /*
         * Dispose function is used destory an image object
         */
        g2dImage.dispose();
    
        HttpSession session = request.getSession();
        session.setAttribute("dns_security_code", sImageCode);
        //System.out.println("Captcha Page :"+session.getAttribute("dns_security_code"));
    
    }
    
    
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
        }
    
    
    }
    

    如果不存在,则创建web应用程序描述符:/web-INF/web。xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app version="3.0" 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_3_0.xsd">
    
    <servlet>
            <servlet-name>CaptchaServlet</servlet-name>
            <servlet-class>test.captcha.CaptchaServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>CaptchaServlet</servlet-name>
        <url-pattern>/captcha-image.jpg</url-pattern>
    </servlet-mapping>
    </web-app>