热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Servlet+JDBC实现登陆功能的小例子(带验证码)

这篇文章主要介绍了Servlet+JDBC实现登陆功能的小例子(带验证码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

案例需求:访问带有验证码的登录页面login.jsp用户输入用户名,密码以及验证码。如果用户名和密码输入有误,跳转登录页面,提示:用户名或密码错误如果验证码输入有误,跳转登录页面,提示:验证码错误如果全部输入正确,则跳转到主页success.jsp,显示:用户名,欢迎您分析

步骤

文件树展示


1.配置文件和jar包在上个案例均有配置过,需要改的有:User类新增验证码成员变量,数据库增加了一个验证码字段(无用,只是为了UserDao包把查找到的数据值导入到User类不出错)。

2.登陆界面

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


  
  
  



  
    
用户名
密码
验证码
<%=request.getAttribute("cc_error") == null &#63; "" : request.getAttribute("cc_error")%>
<%=request.getAttribute("login_error") == null &#63; "" : request.getAttribute("login_error") %>

3.验证码,画了个验证码,每次都把随机数加入session中以便进行对比

package Test;

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;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

@WebServlet("/checkCodepic")
public class CheckCodepic extends HttpServlet {
  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    int width=100;
    int height=50;
    //创建图片对象
    BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

    //美化图片
    //创建画笔
    Graphics g = image.getGraphics();
    //画笔颜色
    g.setColor(Color.pink);
    //画个矩形,填充为粉红色
    g.fillRect(0,0,width,height);
    //给矩形加边框
    g.setColor(Color.blue);
    g.drawRect(0,0,width-1,height-1);
    //写字母或数字
    g.setColor(Color.green);
    String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    Random rd=new Random();
    StringBuilder sb=new StringBuilder();
    for(int i=1;i<=4;i++){
      int index = rd.nextInt(str.length());
      char c = str.charAt(index);
      sb.append(c);
      g.drawString(c+"",width/5*i,height/2);
    }
    String checkCode_session = sb.toString();
    //将验证码存入session
    req.getSession().setAttribute("checkCode_session",checkCode_session);
    //加干扰线
    g.setColor(Color.blue);
    for(int i=1;i<=10;i++){
      int x1 = rd.nextInt(width);
      int x2 = rd.nextInt(width);
      int y1 = rd.nextInt(height);
      int y2 = rd.nextInt(height);
      g.drawLine(x1,y1,x2,y2);
    }

    //输出展示
    ImageIO.write(image,"jpg",resp.getOutputStream());
  }

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    this.doPost(req,resp);
  }
}

4.loginServlet类,用来判断验证码和用户名密码是否正确,注意先判断验证码;注意重定向和请求转发的不同,还有session的应用。

package Test;

import Test.dao.UserDao;
import Test.userclass.User;
import org.apache.commons.beanutils.BeanUtils;

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 java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //设置request编码
    request.setCharacterEncoding("utf-8");
    //获取参数
//    String username = request.getParameter("username");
//    String password = request.getParameter("password");
//    String checkCode = request.getParameter("checkCode");
//    User user=new User();
//    user.setUsername(username);
//    user.setPassword(password);
//    user.setCheckCode(checkCode);
    Map parameterMap = request.getParameterMap();
    User user=new User();
    try {
      BeanUtils.populate(user,parameterMap);
    } catch (IllegalAccessException e) {
      e.printStackTrace();
    } catch (InvocationTargetException e) {
      e.printStackTrace();
    }
    UserDao userDao=new UserDao();
    //先判断验证码是否正确
    String checkCode_session = (String)request.getSession().getAttribute("checkCode_session");
    request.getSession().removeAttribute("checkCode_session");
    if(checkCode_session!=null && checkCode_session.equalsIgnoreCase(user.getCheckCode())){//忽略大小写
      //如果正确,判断用户名密码是否正确
      User login = userDao.login(user);
      if(login!=null){
        //登陆成功,存储用户信息
        request.getSession().setAttribute("username",login.getUsername());
        //重定向到success.jsp
        response.sendRedirect(request.getContextPath()+"/success.jsp");

      }else{//登陆失败,转发到登陆界面
        request.setAttribute("login_error","用户名或密码不正确");
        request.getRequestDispatcher("/login.jsp").forward(request,response);

      }
    }else{ //如果不正确,转发到登陆界面
      request.setAttribute("cc_error","验证码不正确");
      request.getRequestDispatcher("/login.jsp").forward(request,response);

    }
  }

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.doPost(request, response);
  }
}

5.成功登陆界面

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


  



  

<%=request.getSession().getAttribute("username")%>,欢迎您

结果

登陆界面


验证码错误情况


用户名或密码不正确情况


成功登陆

到此这篇关于Servlet+JDBC实现登陆功能的小例子(带验证码)的文章就介绍到这了,更多相关Servlet+JDBC 登陆内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • Lodop中特殊符号打印设计和预览样式不同的问题解析
    本文主要解析了在Lodop中使用特殊符号打印设计和预览样式不同的问题。由于调用的本机ie引擎版本可能不同,导致在不同浏览器下样式解析不同。同时,未指定文字字体和样式设置也会导致打印设计和预览的差异。文章提出了通过指定具体字体和样式来解决问题的方法,并强调了以打印预览和虚拟打印机测试为准。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了Svn和Maven的使用说明,包括版本控制和构建工具的功能和优势。同时提供了一个相关链接,链接中详细介绍了SvnMaven的使用方法和注意事项。通过学习和使用SvnMaven,开发人员可以更好地进行代码管理、软件开发和协作开发,提高项目管理的效率和质量。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
author-avatar
小花诸葛_630
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有