分析

  1. LoginServlet
  1. @WebServlet("/loginServlet")
  2. public class LoginServlet extends HttpServlet {
  3. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  4. //设置request编码
  5. request.setCharacterEncoding("utf-8");
  6. //获取参数
  7. String username = request.getParameter("username");
  8. String password = request.getParameter("password");
  9. String checkcode = request.getParameter("checkcode");
  10.  
  11. //判断验证码是否正确
  12. HttpSession session = request.getSession();
  13. //获取验证码的值
  14. String checkCode_session = (String) session.getAttribute("checkCode");
  15. //一获取完,就立马删除,以保证验证码的一次性
  16. session.removeAttribute("checkCode");
  17. if (checkCode_session!=null&&checkCode_session.equalsIgnoreCase(checkcode)){//忽略大小写比较
  18. //验证码正确
  19. //1.判断验证码和密码是否一致
  20. if ("zhangsan".equals(username)&&"123".equals(password)){//完善是需要调用userDao查询数据库的
  21. //登陆成功
  22. //1.存储用户信息
  23. session.setAttribute("user",username);
  24. //2.重定向success.jsp
  25. response.sendRedirect(request.getContextPath()+"/success.jsp");
  26.  
  27. }else {
  28. //登陆失败
  29. //1.存储信息到request域中
  30. request.setAttribute("login_error","用户名或密码 不正确");
  31. //2.转发
  32. request.getRequestDispatcher("/login.jsp").forward(request,response);
  33. }
  34.  
  35. }else {
  36. //验证码不正确
  37. //1.存储信息到request域中
  38. request.setAttribute("cc_error","验证码不正确");
  39. //2.转发
  40. request.getRequestDispatcher("/login.jsp").forward(request,response);
  41. }
  42. }
  43.  
  44. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  45. this.doPost(request, response);
  46. }
  47. }

验证码类Servlet

  1. @WebServlet("/checkCodeServlet")
  2. public class CheckCodeServlet extends HttpServlet {
  3. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  4. int width=100;
  5. int height=50;
  6. BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
  7. Graphics g = image.getGraphics();
  8. g.setColor(Color.green);
  9. g.drawRect(0,0,width,height);
  10. g.setColor(Color.yellow);
  11. g.fillRect(0,0,width-1,height-1);
  12.  
  13. String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  14. Random random=new Random();
  15. g.setColor(Color.magenta);
  16.  
  17. StringBuilder sb = new StringBuilder();
  18. for (int i=1;i<=4;i++){
  19. int index = random.nextInt(str.length());
  20. char ch=str.charAt(index);
  21. g.drawString(ch+"",i*width/5,height/2);
  22. sb.append(ch);
  23. }
  24. String checkCode_session = sb.toString();
  25. HttpSession session=request.getSession();
  26. session.setAttribute("checkCode",checkCode_session);
  27.  
  28. System.out.println("验证码是 : " + checkCode_session);
  29.  
  30. //画干扰线
  31. g.setColor(Color.green);
  32. for (int i = 0; i < 16; i++) {
  33. int x1=random.nextInt(width);
  34. int x2=random.nextInt(width);
  35. int y1=random.nextInt(height);
  36. int y2=random.nextInt(height);
  37. g.drawLine(x1,y1,x2,y2);
  38. }
  39. ImageIO.write(image,"jpg",response.getOutputStream());
  40. }
  41.  
  42. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  43. this.doPost(request, response);
  44. }
  45. }

login.jsp

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>login</title>
  5. <script>
  6. window.onload=function () {
  7. var img = document.getElementById('img');
  8. img.onclick=function () {
  9. var date=new Date().getTime();
  10. // img.src="/session/checkCodeServlet?"+date
  11. this.src="/session/checkCodeServlet?time="+date
  12. }
  13. }
  14. </script>
  15. <style>
  16. div{
  17. color: red;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <form action="/session/loginServlet">
  23. <table>
  24. <tr>
  25. <td>用户名</td>
  26. <td><input type="text" name="username"></td>
  27. </tr>
  28. <tr>
  29. <td>密码</td>
  30. <td><input type="password" name="password"></td>
  31. </tr>
  32. <tr>
  33. <td>验证码</td>
  34. <td><input type="text" name="checkcode"></td>
  35. </tr>
  36. <tr>
  37. <td colspan="2"><img id="img" src="/session/checkCodeServlet"></td>
  38. </tr>
  39. <tr>
  40. <td colspan="2"><input type="submit" value="登录"></td>
  41. </tr>
  42. </table>
  43. </form>
  44.  
  45. <div><%= request.getAttribute("login_error")==null?"":request.getAttribute("login_error")%></div>
  46. <div><%= request.getAttribute("cc_error")==null?"":request.getAttribute("cc_error")%></div>
  47.  
  48. </body>
  49. </html>

success.jsp

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>登录成功</title>
  5. </head>
  6. <body>
  7.  
  8. 欢迎登录,<h1><%=request.getSession().getAttribute("user") %></h1>
  9. </body>
  10. </html>

session+验证码 学习的更多相关文章

  1. 网站启动SSL, http变为https后,session验证码错误解决方法

    网站启动SSL, http变为https后,session验证码错误解决方法   最近公司需要后台启动安全证书,证书安装完毕后,后台老提示 验证码错误,经过几天的研究,此问题已经得到有效解决,现把方法 ...

  2. django学习之- 动态验证码学习

    实例:通过前台和后台,实现用户登录页面动态图片验证码校验,图片验证码部分使用Pillow模块实现,作为单独学习部分记录. 前端: <!DOCTYPE html> <html lang ...

  3. ASP.NET图片验证码学习!

    1. 新建一个Validate.aspx,然后在Validate.aspx.cs编写代码: using System; using System.Collections; using System.C ...

  4. .Net Core Session验证码

    1.验证码帮助类 namespace IdeaCore.Services.Common { public class ValidateCodeService : IValidateCodeServic ...

  5. node(4)express 框架 EJS模板,cookie, session的学习

    一.EJS 概述:前端咱们使用过的一个模板套路,是underscore的套路.接下来EJS它属于后台工程师人的模板. https://www.npmjs.com/package/ejs 官网地址 特点 ...

  6. think php 登录 (session+验证码)

    ..........表单页面 <!DOCTYPE html> {__NOLAYOUT__} <html lang="en"> <head> &l ...

  7. php,session验证码不一致慢半拍

    这种问题遇到过一次,后来忘了怎么解决了,所以做下笔记 输出的$_SESSION['code']之所以比图片慢了‘一帧’,这也纯属正常情况因为输出的图片是一个连接一次调用,而echo $_SESSION ...

  8. 会话控制:cookie和session基础学习笔记

    在多次HTTP连接间维护用户与同一用户发出的不同请求之间关联的情况称为维护一个会话(session) 我们可以简单理解为浏览器的开关. 其实对cookie和session也是主要为curd操作 coo ...

  9. 一个简单的session传值学习

    a.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

随机推荐

  1. svn 巧用,如果遇到问题解决不了,而上一个版本可以正常使用,则可以查记录

    svn 巧用,如果遇到问题解决不了 1.svn上一个版本可以正常使用的情况下 2.查看历史 3. 丢失的代码复制回来即可

  2. Spring AOP增强(Advice)

    Sring AOP通过PointCut来指定在那些类的那些方法上织入横切逻辑,通过Advice来指定在切点上具体做什么事情.如方法前做什么,方法后做什么,抛出异常做什么. Spring中有两种方式定义 ...

  3. [SQL 高级查询运算符的用法 UNION (ALL),EXCEPT(ALL),INTERSECT(ALL) ]

    今天看到 三个查询运算符,给大家分享分享 为此我建立了两张表分别为 Articles 和  newArticles 我建立的时候,只建立了一张表 Articles   ,表 newArticles 是 ...

  4. pyqt5 工具栏文字图片同时显示

    import sys from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QApplication from PyQt5.QtGu ...

  5. java源码-ReentrantLock源码分析-2

    继续上篇ReentrantLock分析如何唤醒线程: 当调用lock.unlock()方法最终调用AQS类中的release方法,开始释放锁 tryRelease(1)方法在Sync对象中实现,首先会 ...

  6. 利用java执行shell脚本

    BPMN中存在由系统执行的脚本任务,shell脚本任务也是该系统任务脚本中的一种,利用的也是由java执行shell脚本. 代码中的ProcessBuilder类,为java.lang.Process ...

  7. 使用 WebStorm alt+f2 快速打开浏览器测试的一点bug

    这个bug是涉及到中英文文件名的问题(不涉及到路径名): Case 1: 中文文件名 当打开alt+f2快捷方式打开含有中文名的html文件时,路径名直接变为localhost,所以找不到要打开的文件 ...

  8. JAVA_day2_运算符

    Java运算符 一.算术运算符 ++ 和 -- 既可以出现在操作数的左边,也可以出现在右边,但结果不同 1.++在左边,a先自增1再赋值给b int a=3 int b=++a 2.++在右边,先赋值 ...

  9. CentOS7中yum配置

    1.打开centos的yum文件夹 输入命令cd  /etc/yum.repos.d/ 2.用wget下载repo文件 输入命令wget  http://mirrors.aliyun.com/repo ...

  10. Linux手册页惯用的节名

    节 大写 描述 name NAME 显示命令名和一段简短的描述 synopsis SYNOPSIS 命令的语法 confi guration CONFI GURATION 命令配置信息 descrip ...