广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >jsp实现简单图片验证码功能
  • 983
分享到

jsp实现简单图片验证码功能

2024-04-02 19:04:59 983人浏览 安东尼
摘要

本文实例为大家分享了jsp实现简单图片验证码的具体代码,供大家参考,具体内容如下 一、实现的功能分析 (1)在登陆页面加验证码的功能,起到一定的安全性。在输入正确的验证码,用户名和密

本文实例为大家分享了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;


@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    
    public LoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    
    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);
        }
    }    
    
    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;


@WebServlet("/AuthorServlet")
public class AuthorServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    
    public AuthorServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    
    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);
         
         
    }

    
    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";
    
    //定义随机数
    private Random random = new Random();
    
    //随机生成四个字符
    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)查询结果显示页面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: jsp实现简单图片验证码功能

本文链接: https://www.lsjlt.com/news/138553.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • jsp实现简单图片验证码功能
    本文实例为大家分享了jsp实现简单图片验证码的具体代码,供大家参考,具体内容如下 一、实现的功能分析 (1)在登陆页面加验证码的功能,起到一定的安全性。在输入正确的验证码,用户名和密...
    99+
    2022-11-13
  • 简单实现Java验证码功能
    今晚看到网上有关验证码的实现的代码,很早就想写一个了,感觉验证码挺有意思的,于是就写了一个,然而后来一直加载不出图片。尝试了很多方法,后来终于解决了,原来是我项目里面的 web.xml中没有部署servlet的映射,web.xml如下图:运...
    99+
    2023-05-31
    java 验证码 ava
  • JS实现图片验证码功能
    本文实例为大家分享了JS实现图片验证码功能的具体代码,供大家参考,具体内容如下 以下代码可以直接copy运行,不需要引入jquery.jar 1. html代码 <%@ pag...
    99+
    2022-11-13
  • Java实现图片验证码功能
    简介 在实现登录功能时,一般为了安全都会设置验证码登录,为了防止某个用户用特定的程序暴力破解方式进行不断的尝试登录。常见验证码分为图片验证码和短信验证码,还有滑动窗口模块和选中指定物...
    99+
    2022-11-13
  • Android 简单的实现滑块拼图验证码功能
    目录实现过程:接下来我们对这个库进行介绍:实现滑块拼图验证码功能之前已经写过一篇了,上一篇使用的是自定义控件的方式实现这个功能,主要还是想让童鞋们知其然更知其所以然,还没看的童鞋可以...
    99+
    2022-11-11
  • JSP页面实现验证码校验功能
    目录验证码校验分析生成验证码测试验证码校验验证码测试验证码校验添加验证码刷新在网页页面的使用中为防止“非人类”的大量操作和防止一些的信息冗余,增加验证码校验是...
    99+
    2022-11-13
    JSP验证码 JSP验证码校验 JSP页面验证码
  • JS如何实现图片验证码功能
    本篇内容主要讲解“JS如何实现图片验证码功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS如何实现图片验证码功能”吧!1. html代码<%@ page langu...
    99+
    2023-06-30
  • SpringBoot整合kaptcha实现图片验证码功能
    目录栗子配置文件SpringBoot项目中pom.xml文件项目代码项目结构SpringBootVerifyCodeApplication.javaVerifyCodeConfig....
    99+
    2022-11-13
  • springboot图片验证码功能模块怎么实现
    本篇内容主要讲解“springboot图片验证码功能模块怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot图片验证码功能模块怎么实现”吧!具体效果如下:工具类该工具类为生...
    99+
    2023-06-30
  • java制作简单验证码功能
    本文实例为大家分享了java制作简单验证码的具体代码,供大家参考,具体内容如下在这里我们需要用到java的画笔工具,所以我们需要导入以下包import="java.util.*,java.awt.*,java.awt.image.*,jav...
    99+
    2023-05-30
    java 验证码
  • springboot图片验证码功能模块
    目录前言:第一步:工具类第二步:图片生成:整合到springboot项目中:前言: 大家好!我是小小!今天我们用五分钟来用springboot实现我们常用的图形验证码功能模块! 用户...
    99+
    2022-11-13
  • vue实现图片滑动验证功能
    图片滑动验证,是目前比较常见的验证方式,主要目的是防止用户利用机器人自动注册、登录、灌水。 目前vue技术日趋成熟,已经有专门针对图片滑动验证功能的插件了。具体使用方式如下: 1....
    99+
    2022-11-13
  • vue 实现左滑图片验证功能
    目录前言一、安装二、使用前言 众所周知,网页中滑动图片验证一直是各大网站、移动端的主流校验方式,其主要作用是为了区分人和机器以及为了防止机器人程序暴力登录或攻击从而设置的一种安全保护...
    99+
    2023-05-14
    vue 左滑图片验证 vue 图片验证 vue 左滑验证
  • SpringSecurity实现添加图片验证功能
    目录本章内容思路方案怎么将字符串变成图片验证码kaptcha这么玩hutool这么玩传统web项目过滤器方式认证器方式总结下前后端分离项目基于过滤器方式基于认证器方式本章内容 Spr...
    99+
    2023-01-04
    Spring Security添加图片验证 Spring Security图片验证
  • 非常简单的Python识别图片验证码实现过程
    很久之前,分享过一次Python代码实现验证码识别的办法。 当时采用的是pillow+pytesseract,优点是免费,较为易用。但其识别精度一般,若想要更高要求的验证码识别,初学...
    99+
    2022-11-12
  • jquery怎么实现一个简单的验证码功能
    随着网络的不断发展,验证码已经成为了互联网中不可或缺的一部分。验证码通常用于防止网站被恶意攻击,防止机器人恶意注册和发送垃圾信息等。本文将介绍如何利用jquery实现一个简单的验证码。一、什么是验证码验证码,全称为“ Completely ...
    99+
    2023-05-14
  • 基于Hutool的图片验证码功能模块实现
    目录简介Hutool名称的由来基于Hutool的图片验证码功能模块实现1.背景2.方案设计2.1 方案步骤2.2 Hutool工具类引入2.5 方案交互图3.模块编写4.接口测试简介...
    99+
    2022-11-13
    Hutool图片验证码 Hutool图片验证码
  • 怎么用Springboot +redis+Kaptcha实现图片验证码功能
    这篇文章主要介绍了怎么用Springboot +redis+Kaptcha实现图片验证码功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Springboot +redis+Kaptc...
    99+
    2023-06-29
  • android实现一个图片验证码倒计时功能
    1.如图所示,要实现一个验证码的倒计时的效果                &n...
    99+
    2023-05-30
    android 验证码 倒计时
  • vue实现简单图片上传功能
    本文实例为大家分享了vue实现简单图片上传的具体代码,供大家参考,具体内容如下 就是给自己留个参照,有什么不合理的地方请大家指出来,然后调整 1.效果展示 2.html相关的代码展...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作