加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

怎么达成输入框旁边那个数字验证码

发布时间:2023-06-08 11:11:20 所属栏目:语言 来源:
导读:关于“怎么实现输入框旁边那个数字验证码?用jsp实现”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要

关于“怎么实现输入框旁边那个数字验证码?用jsp实现”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就继续往下看吧。

本文实例为大家分享了jsp实现简单图片验证码的具体代码,供大家参考,具体内容如下:

一、实现的功能分析

(1)在登陆页面加验证码的功能,起到一定的安全性。在输入正确的验证码,用户名和密码的情况下,才可以实现登录。

(2)实现查询数据库的功能。在登陆后的页面中,显示用户名和密码,并且设置有一个超链接,实现查询数据库的功能。

(3)代码核心是:随机生成验证码,并且显示在页面上。同时要和输入框中的输入验证码进行校验。

(4)主页面使用img标签的src属性引入验证页面的jsp文件。

(5)验证码的实现页面使用BufferedImage类的方法产生图片。

(6)使用Graphics类的各种方法实现验证码的构成。

二、代码实现

(1)登录页面:index.jsp文件。

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

    pageEncoding="utf-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>登录页面</title>

</head>

<body>

<form action="LoginServlet" method="post">

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

       密码:<input name="password" type="password" value=""/><br/><br/>

        验证码: <input type="text" name="checkCode" height="20px " value=""/>

      <img src="CodeServlet"/><span>${error_code}</span><br/>

       <input type="submit" value="提交">

</form>

</body>

</html>

(2)登录后的页面:user.jsp文件。

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

    pageEncoding="utf-8"%>

<%@  page import = "com.entity.Author"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>显示登录用户的用户名和密码页面</title>

</head>

<body>

<%  

    //内置对象

    request.setCharacterEncoding("utf-8");

    //获取交互层放入session中的obj

    Author obj = (Author)session.getAttribute("authorInfo");

    if(obj != null){

        out.print("<p>用户名:"+obj.getName()+"</p>");

        out.print("<p>密码:"+obj.getId()+"</p>");

    }

    else{

        response.sendRedirect("index.jsp");

    }

%>

<br/>

<a href="AuthorServlet">用户信息查询 </a>

</body>

</html>

(3)实现数据查询页面:ueslist.jsp文件。

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

    pageEncoding="utf-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>查询信息显示页面</title>

</head>

<body>

<table border="1">

  <tr>

         <td>编号</td>

         <td>名称</td>

         <td>价格</td>

         <td>数量</td>

         <td>日期</td>

         <td>风格</td>

  </tr>

   <c:forEach items="${authorList}" var="author">

  <tr>

    <td>${author.id}</td>

    <td>${author.name }</td>

    <td>${author.price }</td>

    <td>${author.num }</td>

    <td>${author.dates}</td>

    <td>${author.style}</td>

  </tr>

  </c:forEach>

</table>

</body>

</html>

(4)定义一个Author类,用于接收数据库中的元素。

package com.entity;

//用于获取数据库中的元素对象

public class Author {

    private int id;

    private String name;

    private int price ;

    private int num;

    private String dates;

    private String style;

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getPrice() {

        return price;

    }

    public void setPrice(int price) {

        this.price = price;

    }

    public int getNum() {

        return num;

    }

    public void setNum(int num) {

        this.num = num;

    }

    public String getDates() {

        return dates;

    }

    public void setDates(String dates) {

        this.dates = dates;

    }

    public String getStyle() {

        return style;

    }

    public void setStyle(String style) {

        this.style = style;

    }

}

(5)登录页面的交互层:LoginServlet.java文件。用于登录检验和验证码匹配。

//交互层(客户端和服务器的交互)

package com.servlet;

import java.io.IOException;

import java.sql.SQLException;

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 javax.servlet.http.HttpSession;

import com.dao.AuthorDao;

import com.entity.Author;

/**

 * Servlet implementation class LoginServlet

 */

@WebServlet("/LoginServlet")

public class LoginServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    /**

     * @see HttpServlet#HttpServlet()

     */

    public LoginServlet() {

        super();

        // TODO Auto-generated constructor stub

    }

    /**

     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

     */

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws  ServletException, IOException {

        // TODO Auto-generated method stub

        //内置对象request,response

        request.setCharacterEncoding("utf-8");

        HttpSession session = request.getSession();

        //获取用户输入验证码

        String checkCode = request.getParameter("checkCode");

        //获取session中的验证码,也就是CodeServlet中生成的四个字符

        String sessionCode = (String)session.getAttribute("sCode");

        //验证码正确

        if(checkCode.equals(sessionCode)) {

            //获取表单数据

            String username = request.getParameter("username");

            int password = Integer.valueOf(request.getParameter("password"));

            //判断用户信息是否正确,查询数据库获取用户信息

             AuthorDao ad = new AuthorDao();

             Author obj = ad.check(username, password);

             //判断

             if(obj != null) {

                 //重新放入用户信息

            //     HttpSession session = request.getSession();

                 session.setAttribute("authorInfo", obj);

                 //设置session的有效期为10秒

                 session.setMaxInactiveInterval(10);  

                 //页面转发

                 response.sendRedirect("user.jsp");

             }

             else {

                 //页面重定向到登录页面

                 response.sendRedirect("index.jsp");

             }

        }

        else {

            //验证码不正确

            request.setAttribute("error_code", "验证码不匹配");

            request.getRequestDispatcher("index.jsp").forward(request, response);

        }

    }    

    /**

     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

     */

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // TODO Auto-generated method stub

        doGet(request, response);

    }

}

(6)数据库查询的交互层:AuthorServlet.java文件。

package com.servlet;

import java.io.IOException;

import java.util.List;

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 com.dao.AuthorDao;

import com.entity.Author;

/**

 * Servlet implementation class AuthorServlet

 */

@WebServlet("/AuthorServlet")

public class AuthorServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    /**

     * @see HttpServlet#HttpServlet()

     */

    public AuthorServlet() {

        super();

        // TODO Auto-generated constructor stub

    }

    /**

     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

     */

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // TODO Auto-generated method stub

        //设置编码方式

         request.setCharacterEncoding("utf-8");

         //查询用户列表

         AuthorDao ad = new AuthorDao();

         //将Dao层中的结果放入list中

         List<Author> list = ad.queryAuthorList();

         request.setAttribute("authorList", list);

         //请求转发的方式将查询结果放入request中,再将超链接直接访问AuthorServlet就将信息显示出来了。

         request.getRequestDispatcher("uselist.jsp").forward(request, response);

    }

    /**

     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

     */

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // TODO Auto-generated method stub

        doGet(request, response);

    }

}

(7)定义一个AuthorDao类实现查询数据库和检验登录的用户名和密码。

//用于检验登录页面所填入信息是否正确

package com.dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import com.entity.Author;

public class AuthorDao {

    public Author check(String username ,int password)

    {

        Author obj = null ;

        try {

                DBConnection db = new DBConnection();

                //获取数据库连接

                Connection conn = db.getConn();

                //设置要执行的数据库语句

                String sql = "select *from furnitures where name = ? and id = ?";

                PreparedStatement ps =  conn.prepareStatement(sql);

                //设置用户名和密码放入sql语句

                ps.setString(1, username);

                ps.setInt(2, password);

                //执行sql查询语句 , 并将执行结果放入结果集中

                ResultSet rs = ps.executeQuery();

                //用户名和密码都正确

                if(rs.next()) {

                    //新创建一个obj 将查询结果放入

                    obj = new Author();

                    obj.setId(rs.getInt(1));

                    obj.setName(rs.getString(2));

                    obj.setPrice(rs.getInt(3));

                    obj.setNum(rs.getInt(4));

                    obj.setDates(rs.getString(5));

                    obj.setStyle(rs.getString(6));

                }

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } 

        return obj;

  }

    public List<Author> queryAuthorList(){

        Author obj = null;

        //定义一个list集合,用于存放查询结果

        List<Author> list = new ArrayList<Author>() ;

        try {

            DBConnection db = new DBConnection();

            //获取数据库连接

            Connection conn = db.getConn();

            //设置数据库要查询的语句

            String sql = "select *from furnitures ";

            PreparedStatement ps = conn.prepareStatement(sql);

            //执行数据库查询语句,并将查询结果放入结果集

            ResultSet rs = ps.executeQuery();

            //利用循环将obj放入list集合中

            while(rs.next()) {

                obj = new Author();

                obj.setId(rs.getInt(1));

                obj.setName(rs.getNString(2));

                obj.setPrice(rs.getInt(3));

                obj.setNum(rs.getInt(4));

                obj.setDates(rs.getString(5));

                obj.setStyle(rs.getString(6));

                //将obj加入到list

                list.add(obj); 

            }  

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return list;

    }

}

(8)定义一个验证码生成CodeServlet类,用于生成验证码。

package com.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 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 javax.servlet.http.HttpSession;

@WebServlet("/CodeServlet")

public class CodeServlet extends HttpServlet{

    //定义验证码的源码

    private static final String str ="abcdefghijklmnopqrstuvwxyaABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";

    //定义随机数

    //随机生成四个字符

    public String getStr()

    {

        String s = "";

        int len = str.length();

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

            s+=str.charAt(random.nextInt(len));

        }

        return s;

    }

    //随机颜色

    public Color getColor() {

        int red = random.nextInt(256);

        int green = random.nextInt(256);

        int blue = random.nextInt(256);

        Color color = new Color(red,green,blue);

        return color;

    }

    @Override

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

        // TODO Auto-generated method stub

        //生成验证码图片

        //画板

        BufferedImage image = new BufferedImage(70,20,BufferedImage.TYPE_INT_RGB );

        //画笔

        Graphics pen =  image.getGraphics();

        //矩形

        pen.fillRect(0, 0, 70, 20);

        //字体

        pen.setFont(new Font("微软雅黑",Font.BOLD,20));

        //获取4个字符

        String code = getStr();

        //绘制图片

        for(int i=0;i<code.length();i++) {

            pen.setColor(getColor());

            pen.drawString(String.valueOf(code.charAt(i)), i*15+5, 20);;

        }

        //response对象绘制图片到页面,Servle输出流进行图片的输出

        ServletOutputStream sos = resp.getOutputStream();

        ImageIO.write(image, "png", sos);

        sos.flush();

        sos.close();

        //验证码放入session

        HttpSession session = req.getSession();

        session.setAttribute("sCode", code);

    }

    @Override

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

        // TODO Auto-generated method stub

        doPost(req, resp);

    }

}

(9)创建DBConnectoin.java类用户获取数据库连接。(我用的是mysql)

//获取数据库连接

package com.dao;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class DBConnection {

    private static String username="填入自己的数据库名";

    private static String password="填入自己的数据库密码";

    private static String driver = "com.mysql.jdbc.Driver";

    private static String url="jdbc:mysql://localhost:3306/已经创建数据库名";

    private Connection conn;

    static {

        try {

            //加载驱动,捕获异常

            Class.forName(driver);

        } catch (ClassNotFoundException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

    public DBConnection () throws SQLException {

        //连接数据库

        conn = DriverManager.getConnection(url,username,password);

    }

    //用于获取conn

    public Connection getConn() {

        return conn;

    }

    public void setConn(Connection conn) {

        this.conn = conn;

    } 

}

三、页面

(1)登录页面

(2)数据查询页面

(3)查询结果显示页面

关于“怎么实现输入框旁边那个数字验证码?用jsp实现”的内容今天就到这,感谢各位的阅读,大家可以动手实际看看,对大家加深理解更有帮助哦。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!