• 两种方法实现带验证码的用户登录


    带验证码的登录效果图

    登录成功时,记录用户名和访问次数

    登录失败,弹出错误提示

    方法一:应用request对象获取表单数据实现登录操作

    代码结构:

    index.jsp源码及详解:

    <form name="form1" method="POST" action="check.jsp">

    当表单被提交时,数据会被提交到check.jsp中去,此处表单的提交实在js的mycheck()方法中完成的。

    String intsum=intmethod+""+intmethod2+intmethod3+intmethod4;此处+""是为了将int数据类型转为String类型。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    
    <html>
    <head>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>登录页面</title>
    </head>
    <script type="text/javascript">
    function mycheck(){//定义mycheck()方法
        if(form1.UserName.value==""){
            alert("用户名不能为空!");
            form1.UserName.focus();
            return;
        }
        if(form1.PWD.value==""){
            alert("密码不能为空!");
            form1.PWD.focus();
            return;
        }
        if(form1.yanzheng.value==""){
            alert("验证码不能为空!");
            form1.yanzheng.focus();
            return;
        }
        form1.submit();
    }
    </script>
    <body>
    <form name="form1" method="POST" action="check.jsp">
    用户名:<input name="UserName" type="text"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;码:<input name="PWD" type="password"><br><br>
    验证码:<input name="yanzheng" type="text" size="8">
    <%
    //获取0~9的随机数
    int intmethod=(int)((((Math.random())*11))-1);
    int intmethod2=(int)((((Math.random())*11))-1);
    int intmethod3=(int)((((Math.random())*11))-1);
    int intmethod4=(int)((((Math.random())*11))-1);
    //加入""是为了让int类型转为String类型。
    //int类型和字符串类型相加,为字符串类型.
    String intsum=intmethod+""+intmethod2+intmethod3+intmethod4;
    %>
    <input type="hidden" name="vcode" value="<%=intsum%>">
    <img src="num/<%=intmethod%>.gif">
    <img src="num/<%=intmethod2%>.gif">
    <img src="num/<%=intmethod3%>.gif">
    <img src="num/<%=intmethod4%>.gif">
    <br>
    <br>
    <input name="Submit" type="button" class="submit1" value="登录" onClick="mycheck()">
    &nbsp;
    <!-- type="reset" 重置表单 -->
    <input name="Submit2" type="reset" class="submit1" value="重置">
    </form>
    </body>
    </html>

     check.jsp源码及详解:

    此处有两种页面的跳转方式

    • jsp中: response.sendRedirect("main.jsp");
    • js中:window.location.href='index.jsp';

    使用requst.getParameter("name值")获取表单提交的数据

    使用session.setAttribute("name", name),是将name保存到session范围内“name”变量中。

    使用session.getAttribute("name")是从name中取出之前保存的数据。

    response.sendRedirect("目标路径");实现页面的跳转。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <%
    //设置编码方式,防止中文乱码
    request.setCharacterEncoding("UTF-8");
    //使用requst.getParameter("")获取表单提交的数据
    String name=request.getParameter("UserName");
    String password=request.getParameter("PWD");
    String yanzheng=request.getParameter("yanzheng");
    String message;
    
    if(!yanzheng.equals(request.getParameter("vcode"))){
        message="验证码输入有误";
    }else if(name.equals("mr")&&password.equals("123456")){
       message="登录成功";
       //将name保存到session范围内“name”变量中,使用get方法可获取name
        session.setAttribute("name", name);
        //成功页面跳转
        response.sendRedirect("main.jsp");
    }else{
        message="用户名或密码错误!";
    }
    %>
    <script>
    alert("<%=message %>");
    //在js中实现页面的跳转
    //当输入信息有误时,重新跳转到登陆界面
    window.location.href='index.jsp';
    
    </script>
    <title>验证中...</title>
    </head>
    <body>
    </body>
    </html>

    main.jsp的源码及详解:

    巧妙使用session.setAttribute()和session.getAttribute()实现页面计数。

    session.getAttribute("name").toString():由于get方法返回的是Object类型,将其赋值给String类型需要进行强制类型转换或调用toString()方法。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>登录成功!</title>
    </head>
    <body>
    用户名:<%=session.getAttribute("name").toString() %>
    <%int number=0;
      if(session.getAttribute("number")==null){
          number=1;
      }else{
          number=Integer.parseInt(session.getAttribute("number").toString());
          number=number+1;
      }
      out.print("您是第"+number+"次访问");
      session.setAttribute("number", number);
    %>
    </body>
    </html>

     方法二:应用JavaBean获取表单数据实现登录操作

     代码结构

    javaBean代码:

    JavaBean规范:

    (1)JavaBean 类必须是一个公共类,并将其访问属性设置为 public  ,如: public class user{ …}
    (2)JavaBean 类必须有一个空的构造函数:类中必须有一个不带参数的公用构造器,例如:public User() {…}

    (3)一个javaBean类不应有公共实例变量,类变量都为private  ,如: private int id;

     ( 4 )javaBean属性是具有getter/setter方法的成员变量。

    package com.wgh;
    
    public class UserBean {
        private String name="";
        private String pwd="";
        private String yanzheng="";
        private String vcode="";
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPwd() {
            return pwd;
        }
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
        public String getYanzheng() {
            return yanzheng;
        }
        public void setYanzheng(String yanzheng) {
            this.yanzheng = yanzheng;
        }
        public String getVcode() {
            return vcode;
        }
        public void setVcode(String vcode) {
            this.vcode = vcode;
        }
        
        
    }

    index.jsp源码

    <form name="form1" method="POST" action="check.jsp">

    当表单被提交时,数据会被提交到check.jsp中去,此处表单的提交实在js的mycheck()方法中完成的。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>正在登录</title>
    </head>
    <script type="text/javascript">
    function mycheck(){
        if(form1.name.value==""){
            alert("用户名不能为空!");
            form1.name.focus();
            return;
        }
        if(form1.pwd.value==""){
            alert("密码不能为空!");
            form1.PWD.focus();
            return;
        }
        if(form1.yanzheng.value==""){
            alert("验证码不能为空!");
            form1.yanzheng.focus();
            return;
        }
        form1.submit();
    }
    </script>
    <body>
    <form name="form1" method="POST" action="check.jsp">
    用户名:<input name="name" type="text"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;码:<input name="pwd" type="password"><br><br>
    验证码:<input name="yanzheng" type="text" size="8">
    <%
    int intmethod=(int)((((Math.random())*11))-1);
    int intmethod2=(int)((((Math.random())*11))-1);
    int intmethod3=(int)((((Math.random())*11))-1);
    int intmethod4=(int)((((Math.random())*11))-1);
    String intsum=intmethod+""+intmethod2+intmethod3+intmethod4;
    %>
    <input type="hidden" name="vcode" value="<%=intsum%>">
    <img src="num/<%=intmethod%>.gif">
    <img src="num/<%=intmethod2%>.gif">
    <img src="num/<%=intmethod3%>.gif">
    <img src="num/<%=intmethod4%>.gif">
    <br>
    <br>
    <input name="Submit" type="button" class="submit1" value="登录" onClick="mycheck()">
    &nbsp;
    <input name="Submit2" type="reset" class="submit1" value="重置">
    </form>
    </body>
    </html>

    check.jsp源码

    <jsp:useBean id="user" scope="page" class="com.wgh.UserBean" type="com.wgh.UserBean"> 实例化javaBean对象,对象名为user

    <jsp:setProperty name="user" property="*"/> 设置user对象的值,将表单中的数据写入javabean中去。使用property="*"要保证表单中各元素的name值与javabean中定义的属性名保持一致。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <jsp:useBean id="user" scope="page" class="com.wgh.UserBean" type="com.wgh.UserBean">
    <jsp:setProperty name="user" property="*"/>
    </jsp:useBean>
    <title>用户名与密码验证中...</title>
    </head>
    <body>
    <%
    String yanzheng=user.getYanzheng();
    String name=user.getName();
    String pwd=user.getPwd();
    String vcode=user.getVcode();
    String message;
    if(!yanzheng.equals(vcode)){
        message="验证码输入有误!";
    }else if(name.equals("mr")&&pwd.equals("123456")){
        message="登陆成功";
        session.setAttribute("name", user.getName());
        response.sendRedirect("main.jsp");
    }else{
        message="用户名或密码错误!";
    }
    %>
    <script>
    alert("<%=message%>")
    window.location.href('index.jsp');
    </script>
    
    
    </body>
    </html>

    main.jsp源码

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>登录成功!</title>
    </head>
    <body>
    用户名:<%=session.getAttribute("name")%>
    <%int number=0;
      if(session.getAttribute("number")==null){
          number=1;
      }else{
          number=Integer.parseInt(session.getAttribute("number").toString());
          number=number+1;
      }
      out.print("您是第"+number+"次访问");
      session.setAttribute("number", number);
    %>
    </body>
    </html>
  • 相关阅读:
    不用服务器也能跑的框架wojilu
    PLI 到 COBOL 的转换数据类型 【不搞Mainframe的可能看不懂,冷门的语言】
    我记录网站综合系统 技术原理解析[8:ActionChecker流程]
    纪念VB.NET君
    我记录网站综合系统 技术原理解析[7:CSS类]
    我记录网站综合系统 技术原理解析[10:PermissionChecker流程]
    我记录网站综合系统 技术原理解析[6:内容初始化处理]
    我记录网站综合系统 技术原理解析[9:HttpMethodChecker流程]
    怎么打败腾讯[纯讨论]
    VisualStudio2012新特性[路边社通稿]
  • 原文地址:https://www.cnblogs.com/colintz/p/10555679.html
Copyright © 2020-2023  润新知