Form表单实现验证码功能

JSP处理页面:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"
    import="java.awt.*,java.util.*,javax.imageio.*,java.awt.image.*"
%>

<%
   response.setHeader("Cache-Control", "no-cache");
   //在内存中创建图像,设置图像的宽和高
   int width=60,height=20;
   //实例化java.awt.image.BufferedImage,作用是访问图像数据缓冲区
   BufferedImage image= new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);   //第三个参数:使用的颜色模式为RGB模式
   //获得画笔
   Graphics g= image.getGraphics();
   //设置背景颜色 RGB
   g.setColor(new Color(200,200,200));
   g.fillRect(0, 0, width, height);
   //取随机产生的验证码(4位数字)
   Random rnd= new Random();
   int randNum=rnd.nextInt(8999)+1000;  //返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
   String ranStr=String.valueOf(randNum);
   //将验证码存到session中
   session.setAttribute("randomString", ranStr);
   //将验证码显示到图像中
   g.setColor(Color.red);
   g.setFont(new Font("",Font.PLAIN,20));  //名称   样式    磅值大小
   g.drawString(ranStr, 10, 17);
   //随机产生100个干扰点,使图像中的验证码不易被其他程序检测到
   for(int i=0;i<100;i++){
       int x=rnd.nextInt(width);
       int y=rnd.nextInt(height);
       g.drawOval(x, y, 1, 1);
   }
   //输出图像到页面
   ImageIO.write(image, "JPEG", response.getOutputStream());
   out.clear();
   out=pageContext.pushBody();
%>

JSP表单页面:

<form action="form" method="post">
   用户名:<input type="text" name="username">   <br>
   密码:<input type="password" name="password"> <br>
      <input type="text" name="code" size="20">  <img name="img" src="yanzhengma.jsp" id="img" onclick="yanzheng()">
      <a href="javascript:vord(0)" onclick="yanzheng()">看不清</a><br>
      <input type="submit" value="提交">
</form>
<script type="text/javascript">
       function yanzheng(){ 
           img.src=img.src+'?'+Math.random();
       }</script>

Servlet处理页面:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("utf-8");
        String yanzheng=request.getParameter("code");
        String username=request.getParameter("username");
        String password=request.getParameter("password");
        if(request.getSession(false).getAttribute("numberStr")!=null)
        {
            String numberStr=(String)request.getSession(false).getAttribute("numberStr");
            if(yanzheng.equals(numberStr))
            {
                if(username.equals("admin")&&password.equals("1234"))
                {
                    response.getWriter().println("恭喜登录成功");
                }else
                {
                    response.getWriter().println("账号或者密码错误登录失败");
                }
            }else
            {
                response.getWriter().println("验证码错误");
            }
        }
    }
原文地址:https://www.cnblogs.com/darren0415/p/6025226.html