验证码

验证码验证码

验证码的编写

package mall.servlet;

 

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.util.Random;

import java.util.UUID;

 

import javax.imageio.ImageIO;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

@WebServlet("/randomCode")

public class RandomCodeServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

 

    protected void service(HttpServletRequest req, HttpServletResponse resp)

            throws ServletException, IOException {

        //生成随机数

        String randomCode = UUID.randomUUID().toString().substring(0, 5);

 

        //把随机数放进Session中

        req.getSession().setAttribute("RANDOMCODE_IN_SESSION", randomCode);

 

        //创建图片对象

        int width = 120;

        int height = 30;

        int imageType = BufferedImage.TYPE_INT_RGB;

        BufferedImage image = new BufferedImage(width, height, imageType);

 

        //画板

        Graphics g = image.getGraphics();

        g.setColor(Color.PINK);

        //绘制一个实心的矩形

        g.fillRect(1, 1, width - 2, height - 2);

 

        //把随机数画进图片中

        g.setColor(Color.BLACK);//设置随机数的颜色

        Font font = new Font("微软雅黑", Font.BOLD + Font.ITALIC, 30);

        g.setFont(font);//设置随机数的字体和大小

        g.drawString(randomCode, 10, 28);

        //干扰线

        g.setColor(Color.GRAY);

        Random r = new Random();

        for (int i = 0; i < 100; i++) {

            g.fillRect(r.nextInt(width), r.nextInt(height), 2, 2);

        }

 

        //关闭

        g.dispose();

        //把图片对象以流的方式保存出去

        ImageIO.write(image, "jpg", resp.getOutputStream());

    }

}

验证码验证码验证码

前端页面

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

    <script type="text/javascript">

        function change(){

            document.getElementById("randomCode").src="/randomCode?"+new Date().getTime();

        }

    </script>

</head>

<body>

    <h1>用户登录</h1>

    <span style="color:red;">${error}</span>

    <form action="/dd" method="post">

        用户名:<input type="text" name="name"/><br>

        密&nbsp;&nbsp;码<input type="password" name="pad"/><br>

        验证码:<input type="text" name="randomCode" width="60%"/>

        <img alt="" src="/randomCode" title="看不清?换一个" onclick="change()" id="randomCode">

        <br>

        <input type="submit" name="anniu" value="登录"/>

    </form>

</body>

</html>

 

 

 

user类

package mall.domain;

import lombok.Data;

@Data

public class user {

      private int id;

      private String username;

      private String password;

      public user() {}

      public user(String username, String password) {

        this.username = username;

        this.password = password;

    }

}

 

 

 

servlet

 

 

package mall.servlet;

 

import java.io.IOException;

 

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 mall.DAO.Iuserimpl;

import mall.DAO.impl.Iuser;

import mall.domain.user;

@WebServlet("/dd")

public class userser extends HttpServlet{

 

    /**

     *

     */

    private static final long serialVersionUID = 1L;

    private Iuser dao;

    @Override

    public void init() throws ServletException {

        // TODO Auto-generated method stub

        dao=new Iuserimpl();

    }

    @Override

    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // TODO Auto-generated method stub

        req.setCharacterEncoding("UTF-8");

        String code=req.getParameter("randomCode");

        String sessioncode=(String) req.getSession().getAttribute("RANDOMCODE_IN_SESSION");

        

        if(code==null||"".equals(code)){

            req.setAttribute("error", "验证码不能为空或验证码失效");

            req.getRequestDispatcher("/login.jsp").forward(req, resp);

            return;

        }else if(!code.equals(sessioncode)){

            req.setAttribute("error", "验证码错误");

            req.getRequestDispatcher("/login.jsp").forward(req, resp);

            return;

        }

        String name=req.getParameter("name");

        String pad=req.getParameter("pad");

        user u=new user(name,pad);

        System.out.println(name+","+pad+","+dao.getone(u));

        

        if(dao.getone(u)==null){

            req.setAttribute("error", "密码或者账号错误");

            req.getRequestDispatcher("/login.jsp").forward(req, resp);

            return;

        }

        req.getSession().setAttribute("user", u);

        req.getRequestDispatcher("/shopping.jsp").forward(req, resp);

    }

}

验证码验证码