• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    JSP实现登录功能之添加验证码

    jsp登陆验证,网页登陆验证带验证码校验,登录功能之添加验证码

    part_1:专门用于生成一个验证码图片的类:VerificationCode.Java

    package cn.mike.javase.test; 
    import java.awt.Color; 
    import java.awt.Font; 
    import java.awt.Graphics2D; 
    import java.awt.image.BufferedImage; 
    import java.io.File; 
    import java.io.FileNotFoundException; 
    import java.io.FileOutputStream; 
    import java.io.IOException; 
    import java.io.OutputStream; 
    import java.util.Random; 
    import javax.imageio.ImageIO; 
    import org.junit.Test; 
    /** 
     * @author : Administrator 
     * @function : 这是用来测试随机生成验证码图片的类; 
     */ 
    public class VerificationCode { 
      /** 
       * 单元测试,试一下能不能自动生成验证码图片 
       */ 
      // 这个函数是单元测试时使用的,这里private一下外面就调用不到了; 
      /* @Test */ 
      /* public */private void test_fun() { 
        VerificationCode vc = new VerificationCode(); 
        BufferedImage image = vc.getImage(); 
        try { 
          // 生成验证码图片,并保存到指定的路径 
          VerificationCode.output(image, new FileOutputStream(new File( 
              ".\\image\\vcode_2.jpg"))); 
        } catch (FileNotFoundException e) { 
          e.printStackTrace(); 
        } 
        // 将随机生成的文本内容输出到控制台,用于校验 
        System.out.println(vc.getText()); 
      } 
      private int w = 70;// 宽 
      private int h = 35;// 高 
      private String text;// 文本内容(验证码字符串) 
      private Random r = new Random(); 
      private String[] fontNames = { "宋体", "华文楷体", "黑体", "微软雅黑", "楷体_GB2312" }; 
      // 随机字符集合中不包括0和o,O,1和l,因为这些不易区分 
      private String codes = "23456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYXZ"; 
      // 验证码图片的背景色:白色 
      private Color bgColor = new Color(255, 255, 255); 
      /** 
       * 返回一个验证码图片buffer对象:BufferedImage 
       */ 
      public BufferedImage getImage() { 
        BufferedImage image = createImage(); 
        // 获取绘图环境(画笔工具) 
        Graphics2D g2 = (Graphics2D) image.getGraphics(); 
        // sb : 用来保存验证码字符串文本内容 
        StringBuilder sb = new StringBuilder(); 
        for (int i = 0; i  4; ++i) {// 随机生成4个字符 
          String s = randomChar() + ""; 
          sb.append(s); 
          float x = i * 1.0F * w / 4; 
          g2.setFont(randomFont()); 
          g2.setColor(randomColor()); 
          g2.drawString(s, x, h - 5); 
        } 
        this.text = sb.toString();// 记录验证码文本内容 
        drawLine(image);// 画干扰线 
        return image; 
      } 
      /** 
       * @return 获取验证码文本内容 
       */ 
      public String getText() { 
        return text; 
      } 
      /** 
       * @param image 
       * @param out 
       *      将文本写到指定的输出流。比如本测试中FileOutputStream指定的保存路径 
       */ 
      public static void output(BufferedImage image, OutputStream out) { 
        try { 
          ImageIO.write(image, "jpeg", out); 
        } catch (IOException e) { 
          e.printStackTrace(); 
        } 
      } 
      private void drawLine(BufferedImage image) { 
        Graphics2D g2 = (Graphics2D) image.getGraphics(); 
        for (int i = 0; i  3; ++i) {// 画3条干扰线 
          int x1 = r.nextInt(w); 
          int y1 = r.nextInt(h); 
          int x2 = r.nextInt(w); 
          int y2 = r.nextInt(h); 
          g2.setColor(Color.BLUE); 
          g2.drawLine(x1, y1, x2, y2); 
        } 
      } 
      private Color randomColor() { 
        int red = r.nextInt(150); 
        int green = r.nextInt(150); 
        int blue = r.nextInt(150); 
        return new Color(red, green, blue); 
      } 
      private Font randomFont() { 
        int index = r.nextInt(fontNames.length); 
        String fontName = fontNames[index]; 
        int style = r.nextInt(4); 
        int size = r.nextInt(5) + 24; 
        return new Font(fontName, style, size); 
      } 
      private char randomChar() { 
        int index = r.nextInt(codes.length()); 
        return codes.charAt(index); 
      } 
      private BufferedImage createImage() { 
        BufferedImage image = new BufferedImage(w, h, 
            BufferedImage.TYPE_INT_RGB); 
        Graphics2D g2 = (Graphics2D) image.getGraphics(); 
        g2.setColor(this.bgColor); 
        g2.fillRect(0, 0, w, h); 
        return image; 
      } 
    }

    part_2:登录界面:Login.jsp

    %@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
    % 
      String path = request.getContextPath(); 
      String basePath = request.getScheme() + "://" 
          + request.getServerName() + ":" + request.getServerPort() 
          + path + "/"; 
    %> 
    !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    html> 
      head> 
        base href="%=basePath%>"> 
        title>My JSP 'Login.jsp' starting page/title> 
        meta http-equiv="pragma" content="no-cache"> 
        meta http-equiv="cache-control" content="no-cache"> 
        meta http-equiv="expires" content="0"> 
        meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
        meta http-equiv="description" content="This is my page"> 
        !-- 
      link rel="stylesheet" type="text/css" href="styles.css"> 
      --> 
        script type="text/javascript"> 
      function _change_verity_code() { 
        var imgElem = document.getElementById("img_src"); 
        //添加一个请求参数a是因为,通常浏览器都有缓存,点击换一张的时候没反应,所以加一个请求参数,获取当前请求时间,可以精确到毫秒,所以每次请求的参数都不同,所以浏览器有缓存也不妨碍; 
        imgElem.src = "/ServletDemoProject/servlet/GetVerificationCodeServlet?a=" 
            + new Date().getTime(); 
      } 
    /script> 
      /head> 
      % 
        String fdbkMsg = (String) request.getAttribute("fdbkMsg"); 
        if (null == fdbkMsg) { 
          fdbkMsg = ""; 
        } 
      %> 
      % 
        Boolean logedIn = (Boolean) session.getAttribute("logedIn"); 
        if (null == logedIn) { 
          logedIn = false; 
        } else if (logedIn) { 
          //如果在本次会话已经登陆,直接重定向到success-page-1 
          response 
              .sendRedirect("/ServletDemoProject/LOGIN-DEMO/success-page-1.jsp"); 
        } 
      %> 
      % 
        String username = ""; 
        Cookie[] cookies = request.getCookies(); 
        if ((null != cookies)  (cookies.length > 0)) { 
          for (Cookie c : cookies) { 
            if ("admin".equals(c.getValue())) { 
              username = "admin"; 
              break; 
            } 
          } 
        }//end if-condition 
      %> 
      body> 
        br> 
        div align="center"> 
          请登录: 
          br> 
          form action="/ServletDemoProject/servlet/LoginVerificationServlet" 
            method="post"> 
            div> 
              用户名: 
              input type="text" name="username" value="%=username%>" /> 
              br> 
            /div> 
            div> 
              密  码: 
              input type="password" name="password" /> 
              br> 
            /div> 
            div> 
              验证码: 
              input type="text" name="code_text" size="3" /> 
              img src="/ServletDemoProject/servlet/GetVerificationCodeServlet" 
                id="img_src" /> 
              a href="javascript:_change_verity_code()">换一张/a> 
              br> 
            /div> 
            div> 
              font color='red'>%=fdbkMsg%>/font> 
              br> 
            /div> 
            div> 
              input type="submit" value="提交" /> 
              br> 
            /div> 
          /form> 
        /div> 
      /body> 
    /html> 

    part_3:处理登录校验的servlet :LoginVerificationServlet.java

    package cn.mike.servlet.test_1212; 
    import java.awt.image.BufferedImage; 
    import java.io.IOException; 
    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
    import cn.mike.javase.test.VerificationCode; 
    public class GetVerificationCodeServlet extends HttpServlet { 
      private static final long serialVersionUID = -3520994675366100452L; 
      public void doGet(HttpServletRequest request, HttpServletResponse response) 
          throws ServletException, IOException { 
        // 1.新建一个VerificationCode类; 
        VerificationCode vc = new VerificationCode(); 
        // 2.从VerificationCode类中获取BufferedImage对象; 
        BufferedImage bufImage = vc.getImage(); 
        // 3.同时获取验证码中的文本内容,并放到session域中, 用于校验; 
        String code_text = vc.getText(); 
        request.getSession().setAttribute("code_text", code_text); 
        // 4.将生成的图片输出到客户端浏览器 
        VerificationCode.output(bufImage, response.getOutputStream()); 
      }// end method-doGet 
      public void doPost(HttpServletRequest request, HttpServletResponse response) 
          throws ServletException, IOException { 
        // do same as GET-method : 
        doGet(request, response); 
      }// end method-doPost 
    } 

    part_4:成功登陆后的提示界面1:success-page-1.jsp

    %@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
    % 
      String path = request.getContextPath(); 
      String basePath = request.getScheme() + "://" 
          + request.getServerName() + ":" + request.getServerPort() 
          + path + "/"; 
    %> 
    !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    html> 
      head> 
        base href="%=basePath%>"> 
        title>My JSP 'success-page-1.jsp' starting page/title> 
        meta http-equiv="pragma" content="no-cache"> 
        meta http-equiv="cache-control" content="no-cache"> 
        meta http-equiv="expires" content="0"> 
        meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
        meta http-equiv="description" content="This is my page"> 
        !-- 
      link rel="stylesheet" type="text/css" href="styles.css"> 
      --> 
      /head> 
      % 
        String username = (String) session.getAttribute("username"); 
        if (null == username) { 
          //如果username为空值,说明不是通过正常渠道来的,转发到Login页面; 
          request.setAttribute("fdbkMsg", "别想走后门进来,赶紧登录!"); 
          request.getRequestDispatcher("/LOGIN-DEMO/Login.jsp").forward( 
              request, response); 
        } 
      %> 
      body> 
        br> 
        %=username%>已经成功登陆。 
        br> 
        font>您可以选择浏览:/font> 
        br> 
        a href="/ServletDemoProject/LOGIN-DEMO/success-page-2.jsp">点这儿有精彩./a> 
        br> 
        a href="/ServletDemoProject/LOGIN-DEMO/success-page-2.jsp">点这儿更精彩./a> 
        br /> 
        a href="/ServletDemoProject/LOGIN-DEMO/success-page-2.jsp">你敢点这儿吗./a> 
        br /> 
      /body> 
    /html> 

    part_5:成功登陆后的提示界面1:success-page-2.jsp

    %@ page language="java" import="java.util.Date" pageEncoding="UTF-8"%> 
    %@ page language="java" import="java.text.SimpleDateFormat"%> 
    % 
      String path = request.getContextPath(); 
      String basePath = request.getScheme() + "://" 
          + request.getServerName() + ":" + request.getServerPort() 
          + path + "/"; 
    %> 
    !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    html> 
      head> 
        base href="%=basePath%>"> 
        title>My JSP 'success-page-2.jsp' starting page/title> 
        meta http-equiv="pragma" content="no-cache"> 
        meta http-equiv="cache-control" content="no-cache"> 
        meta http-equiv="expires" content="0"> 
        meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
        meta http-equiv="description" content="This is my page"> 
        !-- 
      link rel="stylesheet" type="text/css" href="styles.css"> 
      --> 
      /head> 
      % 
        String username = (String) session.getAttribute("username"); 
        if (null == username) { 
          request.setAttribute("fdbkMsg", "呵呵嗒,这里是你来的地方吗?快登陆!"); 
          //转发到登录界面: 
          request.getRequestDispatcher("/LOGIN-DEMO/Login.jsp").forward( 
              request, response); 
        } 
        SimpleDateFormat sDateFormat = new SimpleDateFormat("a"); 
        Date today = new Date(); 
        String am_pm_str = sDateFormat.format(today); 
        String am_pm_str_in_chinese = ""; 
        if ("am".equalsIgnoreCase(am_pm_str)) { 
          am_pm_str_in_chinese = "上午"; 
        } else 
          am_pm_str_in_chinese = "下午"; 
        // set null; 
        sDateFormat = null; 
        today = null; 
        am_pm_str = null; 
      %> 
      body> 
        br /> 
        font>b>%=username%>%=am_pm_str_in_chinese%>好,能来到页面2真不简单./b> 
        /font> 
      /body> 
    /html> 

    以上所述是小编给大家介绍的JSP实现登录功能之添加验证码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    您可能感兴趣的文章:
    • js实现登录注册框手机号和验证码校验(前端部分)
    • JSP + Servlet实现生成登录验证码示例
    • js实现登录验证码
    • JavaScript登录验证码的实现
    • H5+css3+js搭建带验证码的登录页面
    上一篇:jsp登陆校验演示 servlet、login、success
    下一篇:简单实现jsp分页
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    JSP实现登录功能之添加验证码 JSP,实现,登录,功能,之,添加,