JavaWeb JSP+Servlet实现简单普通验证码...纯验证码...

JavaWeb JSP+Servlet实现简单普通验证码…纯验证码…

jsp页面—用作视图展示和用户输入验证码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>登录案例验证码登录</title>
  </head>
  <body>
  <!-- form表单提交验证码信息,去服务器后台对比验证码正确性 -->
  <center>
      <form action="/work1/ExperimentalServlet" method="post">
          验证码:<input type="text" name="checkCode" required="required"><img style="margin-top: 0.6rem" id="checkCode" src="/work1/CheckCodeServlet">
          <input type="submit" value="提交">
      </form>
  </center>
  <script>
      //script用于点击验证码图像是刷新验证码
      document.getElementById("checkCode").onclick=function () {
          //利用时间戳达到重复请求
          var time = new Date().getTime();
          document.getElementById("checkCode").src='/work1/CheckCodeServlet?time='+time;
      }
  </script>

  </body>
</html>

绘制验证码+输出验证码到jsp页面CheckCodeServlet.java

import javax.imageio.ImageIO;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

//采用注解配置的方式进行servlet的配置
@WebServlet(name = "CheckCodeServlet", value = "/CheckCodeServlet")
public class CheckCodeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //绘制传统验证码
        //可以利用对象BufferedImage,设置宽度与高度,以及图片类型
        int width = 120;
        int height = 30;
        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
        //获取画笔对象
        Graphics g = image.getGraphics();
        //设置画笔颜色,设置填充的方法
        g.setColor(Color.pink);
        //填充绘制的图片
        g.fillRect(0,0,width,height);
        //利用Graphics对象和Random对象在图片中随机填写数据
        String str = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm0123456789";
        g.setColor(Color.blue);
        Random random = new Random();
        String checkCode = "";//用来获取验证码的值
        for (int i = 1; i < 5; i++) {
            int index = random.nextInt(str.length());
            String s = str.charAt(index)+"";
            checkCode+=s;
            //设置填写的数据以及位置
            g.drawString(s,120/5*i,height/2);
        }
        HttpSession session = request.getSession();
        //存放验证码在session里面用来验证验证码的正确性
        //session的作用域在服务器期间一直存在且共享
        session.setAttribute("checkCode",checkCode);
        //随机绘制干扰线
        g.setColor(Color.green);
        for (int i = 0; i < 10; i++) {
            int x1 = random.nextInt(width);
            int x2 = random.nextInt(width);
            int y1 = random.nextInt(height);
            int y2 = random.nextInt(height);
            g.drawLine(x1,y1,x2,y2);
        }
        //通过response的输出流将图像输出到页面
        ImageIO.write(image,"jpg",response.getOutputStream());
    }
}

ExperimentalServlet.java用来验证验证码是否正确

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "ExperimentalServlet", value = "/ExperimentalServlet")
public class ExperimentalServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //该页面用于验证码验证
        //用户输入的验证码
        String checkCode1 = request.getParameter("checkCode");
        //session存放的验证码
        HttpSession session = request.getSession();
        String checkCode2 = session.getAttribute("checkCode").toString();
        //对比
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        if (checkCode1.equalsIgnoreCase(checkCode2)){
            writer.write("<script>alert('验证码正确');location.href='/work1/index.jsp'</script>");
            //销毁当前session存放的验证码
            session.removeAttribute("checkCode");
        }else {
            writer.write("<script>alert('验证码错误');location.href='/work1/index.jsp'</script>");
        }
    }
}

运行情况

验证码
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现JavaWeb登录验证码,可以采用以下步骤: 1. 在登录页面中添加验证码输入框和图片显示框。 2. 生成随机的验证码字符串。 3. 把验证码字符串保存到session中。 4. 在后台生成一张验证码图片,并把验证码字符串画到图片上。 5. 把图片输出到前台显示。 6. 用户输入验证码后,后台从session中取出保存的验证码字符串进行比对,验证是否正确。 下面是一个简单的示例代码: 1. 登录页面login.jsp: ```html <form action="login" method="post"> <label>用户名:</label> <input type="text" name="username"><br> <label>密码:</label> <input type="password" name="password"><br> <label>验证码:</label> <input type="text" name="verifyCode"> <img src="verifyCode" onclick="this.src='verifyCode?'+Math.random()"><br> <input type="submit" value="登录"> </form> ``` 2. 后台生成验证码Servlet: ```java @WebServlet("/verifyCode") public class VerifyCodeServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应的类型格式为图片格式 response.setContentType("image/jpeg"); // 创建验证码对象 VerifyCode verifyCode = new VerifyCode(); // 把验证码字符串保存到session中 HttpSession session = request.getSession(); session.setAttribute("verifyCode", verifyCode.getCode()); // 把验证码图片输出到前台 verifyCode.write(response.getOutputStream()); } } ``` 3. 验证验证码Servlet: ```java @WebServlet("/login") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户输入的验证码和保存在session中的验证码字符串 String verifyCode = request.getParameter("verifyCode"); HttpSession session = request.getSession(); String sessionVerifyCode = (String) session.getAttribute("verifyCode"); // 比对验证码是否正确 if (!verifyCode.equalsIgnoreCase(sessionVerifyCode)) { response.getWriter().println("验证码错误!"); return; } // 验证通过,继续登录验证逻辑... } } ``` 其中,VerifyCode是一个生成验证码图片的辅助类,可以参考下面的代码实现: ```java public class VerifyCode { private static final int WIDTH = 120; // 验证码图片宽度 private static final int HEIGHT = 40; // 验证码图片高度 private static final int CODE_LENGTH = 6; // 验证码长度 private static final String CODE_CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 验证码字符集 private String code; // 验证码字符串 public VerifyCode() { // 生成随机的验证码字符串 StringBuilder sb = new StringBuilder(); Random random = new Random(); for (int i = 0; i < CODE_LENGTH; i++) { sb.append(CODE_CHARS.charAt(random.nextInt(CODE_CHARS.length()))); } this.code = sb.toString(); } public String getCode() { return code; } public void write(OutputStream os) throws IOException { // 创建验证码图片 BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics2D g = (Graphics2D) image.getGraphics(); g.setColor(Color.WHITE); g.fillRect(0, 0, WIDTH, HEIGHT); g.setColor(Color.BLACK); g.drawRect(0, 0, WIDTH - 1, HEIGHT - 1); g.setFont(new Font("宋体", Font.BOLD, 20)); for (int i = 0; i < code.length(); i++) { g.drawString(String.valueOf(code.charAt(i)), 20 * i + 10, 25); } // 输出验证码图片 ImageIO.write(image, "JPEG", os); os.flush(); os.close(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值