Java实现登录与注册页面

用java实现的登录与注册页面,实现了客户端(浏览器)到服务器(Tomcat)再到后端(servlet程序)数据的交互。这里在注册页面加入了验证码验证。

注册的html代码,页面非常丑!!请见谅。。

<body>
<fieldset id="">
  <legend>注册页面</legend>
  <form action="/day02/register2" method="post" id="form" ">
    <table>
      <tr>
        <td>用户名:</td>
        <td><input type="text" name="userName" /><span id="span1"></span></td>
      </tr>
      <tr>
        <td>
          密码:
        </td>
        <td>
          <input type="password" name="password" />
        </td>
      </tr>
      <tr>
        <td>
          确认密码:
        </td>
        <td>
          <input type="password" name="repassword" />
          <span id="span2"></span>
        </td>

      </tr>
      <tr id="tr4">
        <td>
          性别:
        </td>
        <td>
          <input type="radio" name="sex" value="男" />男
          <input type="radio" name="sex" value="女" />女
          <span id="span3"></span>
        </td>
      </tr>
      <tr>
        <td>爱好:</td>
        <td>
          <input type="checkbox" name="hobby" value="唱" />唱
          <input type="checkbox" name="hobby" value="跳" />跳
          <input type="checkbox" name="hobby" value="rap" />rap
          <input type="checkbox" name="hobby" value="篮球" />篮球
          <span id="span4"></span>
        </td>
      </tr>
      <tr>
        <td>国籍:</td>
        <td>
          <select name="country" id="country">
            <option value="none">--请选择国籍--</option>
            <option value="中国">中国</option>
            <option value="韩国">韩国</option>
            <option value="日本">日本</option>
            <option value="美国">美国</option>
          </select>
          <span id="span5"></span>
        </td>
      </tr>
      <tr>
        <td>自我评价:</td>
        <td>
          <textarea rows="10px" cols="20px" id="textarea" name="describe" ></textarea>
        </td>
      </tr>
    <tr>
        <td>
          验证码:
        </td>
        <td>
          <input type="text" name="check"/>
          <img src="/day02/demo" id="img" onclick="checkImg()" style = "cursor: pointer">
          <a href="javascript:void(0);" onclick="checkImg()">换一张</a>
        </td>
      </tr>
    </table>
    <input type="submit" id="btn2" value="提交" />
    <input type="button" id="btn1" value="验证" />
  </form>

</fieldset>
</body>
<script type="text/javascript">
  function checkImg() {
    var img = document.getElementById("img");
    img.src ="/day02/demo?"+new Date().getTime()

  }
</script>

注册页面截图

这里需要注意的是我用的是Tomcat服务器,因为它其中没有mysql驱动,所以需要手动添加到Tomcat的lib目录下。

还有在web.xml中添加了全局配置主要是为了项目中需要改编码的方便

<context-param>
        <param-name>encode</param-name>
        <param-value>UTF-8</param-value>
    </context-param>

这里是生成验证码的程序,在我的上篇文章有详细讲解

@WebServlet(urlPatterns = "/demo")
public class CheckImg extends HttpServlet {
    //复写HttpServlet中的doGet方法
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
            IOException{
        //准备一张画纸,将验证码中的数字字母写到这张画纸中
        int width = 120;
        int height = 30;
        BufferedImage bufi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        //这里面的width、height、就是这张画纸的长宽。BufferedImage.TYPE_INT_RGB就是这张画纸基于
        //RGB三原色来进行画
        //获取一个画笔对象,给图片上画画
        Graphics2D g = (Graphics2D) bufi.getGraphics();
        //设置画笔颜色
        g.setColor(Color.WHITE);
        //将这个颜色填充到整个画纸
        g.fillRect(0,0,width,height);
        //定义图片上可以写什么数据
        String data = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890";
        //定义书写在画纸上的起始位置
        int x =15;
        int y =25;
        //定义一个随机数
        Random r = new Random();
        //创建一个字符串缓冲区
        StringBuilder sb = new StringBuilder();
        //定义一个循环给画纸上写四个数
        for(int i = 0; i < 4; i++){
            //从data中随机获取一个下标的数据
            char c = data.charAt(r.nextInt(data.length()));
            sb.append(c+"");
            //随机生成画笔的颜色,RGB三原色随机在0-256中随机生成
            g.setColor(new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256)));
            //设置字体
            g.setFont(new Font("黑体",Font.BOLD,26));
            double theta =(30 - (r.nextInt(60)))*Math.PI/180;
            g.rotate(theta,x,24);
            //设置数据旋转
            //g.rotate((20)*Math.PI/180,x,y);

            //将数据写到画纸上
            g.drawString(c+"",x,y);
            g.rotate(-theta,x,24);
            //设置完旋转要调回,防止数据旋转的看不到
            //g.rotate(-((20)*Math.PI/180),x,y);
            //每写完一个调整下一个数据写的位置
            x += 25;
        }
        HttpSession session = req.getSession();
        session.setAttribute("checkNum",sb.toString());
        //添加线类型的干扰信息
        for(int i = 0; i < 15 ; i++){
            //同样设置线的颜色
            g.setColor(new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256)));
            //开始划线,这里需要的四个参数中前两个是线开头的左边,后边两个是线结束的坐标
            g.drawLine(r.nextInt(width),r.nextInt(height),r.nextInt(width),r.nextInt(height));
        }
        //添加点类型干扰信息
        for (int i = 0 ; i < 150 ; i++){
            //设置点的颜色
            g.setColor(new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256)));
            //开始画点,实质上这是画椭圆,将上半轴半径,左半轴半径设置为0就可以看成是一个点
            g.drawOval(r.nextInt(width),r.nextInt(height),0,0);
        }

        //这个时候并没有在这张纸上书写任何内容,但是已经可以像客户端响应请求了
        ImageIO.write(bufi, "jpg", resp.getOutputStream());
    }
}

这是注册页面的代码。

@WebServlet(urlPatterns = "/register2")
public class Register extends HttpServlet {
    //

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取在web.xml中的配置的全局属性
        String encode = req.getServletContext().getInitParameter("encode");
        //为了防止乱码设置编码
        req.setCharacterEncoding(encode);
        resp.setContentType("text/html;charset="+encode);
        //获得请求过来的资源
        String userName = req.getParameter("userName");
        String password = req.getParameter("password");
        String repassword = req.getParameter("repassword");
        String sex = req.getParameter("sex");
        String[] hobby = req.getParameterValues("hobby");
        String country = req.getParameter("country");
        String describe = req.getParameter("describe");
        //这里将获取到的请求数据都在控制台上打印了一遍
        //看是否拿到了这些数据
        System.out.println(userName);
        System.out.println(password);
        System.out.println(repassword);
        System.out.println(sex);
        System.out.println(hobby[0]);
        System.out.println(country);
        System.out.println(describe);
        //这里只加了简单的判断,判断帐号是否填写,以及两次密码是否一致
        //判断信息是否填写
        if(userName==null||password==null||repassword==null||sex==null||hobby==null||country==null||describe==null){
            resp.getWriter().write("所有的数据都不能为空,请重新<a href = '/day02'>填写</a>");
            return;
        }
        //判断两次密码是否一致
        if(!password.equals(repassword)){
            resp.getWriter().write("两次密码输入不一致,请重新<a href = '/day02'>填写</a>");
            return;
        }
         //判断验证码输入是否正确
         if(!checkImg.equalsIgnoreCase(check)){
            resp.getWriter().write("验证码输入错误");
            return;
        }
        try {
            //加载MySQL的数据库驱动
            Class.forName("com.mysql.jdbc.Driver");
            //这里我在数据库中添加了一个名为day02的数据库
            String url = "jdbc:mysql:///day02";
            //默认是系统管理员的账户
            String user = "root";
            //这里你自己设置的数据库密码
            String passw = "xxxxxx";
            //获取到数据库的连接
            Connection connection = DriverManager.getConnection(url, user, passw);
            //获取到执行器
            Statement stmt = connection.createStatement();
            //需要执行的sql语句
            String sql = "insert into users values (null,'"+userName+"','"+password+"','"+repassword+"','"+sex+"','"+ Arrays.toString(hobby)+"','"+country+"','"+describe+"')";
            //建议打印一下sql语句,放在数据库中看是否能将数据添加到数据库中
            System.out.println(sql);
            //执行sql语句
            int i = stmt.executeUpdate(sql);
            //添加成功上边这个执行器就会返回1
            if(i==1){
                resp.getWriter().write("注册成功,请<a href = '/day02/login.html'>登录</a>");
            }else{
                resp.getWriter().write("注册失败,请返回重新<a href = '/day02/'></a>");
            }
            stmt.close();
            connection.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

登录页面,同样非常丑。就是简单的三个input标签

登录页面的html代码

<body>
<form action="login">
    用户名:<input type="text" name="user"><br/>
    密码:<input type="password" name="password"><br/>
    <input type="submit" name="提交">
    <a href="/register2" rel="external nofollow" >注册</a>
</form>
</body>

登录页面的java代码,因为只有帐号密码,就只和数据库中的帐号密码进行判断

@WebServlet(urlPatterns = "/login")
public class login extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //先获取到全局配置中的设置的编码
        String encode = req.getServletContext().getInitParameter("encode");
        //设置请求和响应的编码
        req.setCharacterEncoding(encode);
        resp.setContentType("text/html;charset="+encode);
        try {
            //从登录页面拿到用户输入的用户名
            String name = req.getParameter("user");
            //从登录页面拿到用户输入的密码
            String pwd = req.getParameter("password");
            //还是在控制台上输出看是否拿到的帐号密码
            System.out.println("用户名:" +name);
            System.out.println("密码:"+ pwd);
            //下边就是加载数据库的过程
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql:///day02";
            String user = "root";
            String password = "xxxxxxx";
            String sql = "select * from users where userName = '"+name+"'";
            String sql2 = "select * from users where password = '"+pwd+"'";
            Connection conn = DriverManager.getConnection(url, user, password);
            //这里我选择是创建了两个执行器,如果一个执行器执行两个sql语句。就会出现异常
     
            Statement stmt = conn.createStatement();
            Statement stmt2 =conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            ResultSet rs2 = stmt2.executeQuery(sql2);
            //判断用户输入的帐号是否在数据库中
            if (rs.next()){
                System.out.print("用户名:" + rs.getString("userName") + "\t");
            }else{
                resp.getWriter().write("对不起你帐号名有误,请<a href='/day02'>注册</a>");
            }
            //通过了帐号的判断,就对密码进行判断,同样是判断密码是否与数据库中的密码匹配
            if(rs2.next()){
                resp.getWriter().write("登录成功,点击跳转<a href='http://www.baidu.com'>首页</a>");
                System.out.print("密码:" + rs.getString("password") + "\t");
            }else{
                resp.getWriter().write("对不起你密码有误,请<a href='/day02'>注册</a>");
            }

        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

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

(0)

相关推荐

  • 基于IO版的用户登录注册实例(Java)

    今天学的是用户登录注册功能. 4个包: itcast.cn.user包 User.java 用户类,描述用户基本信息,包括成员变量,无参构造函数,带参构造(可有可无).get和set方法 package itcast.cn.day22; /* * 用户基本描述包类 */ public class User { private int userName; private int passWord; public User(){ super(); } public User(int userName

  • Java实现多用户注册登录的幸运抽奖

    本文实例为大家分享了Java实现简单幸运抽奖的具体代码,供大家参考,具体内容如下 代码模块: User类: package test1; public class User { private String userName; private String password; private int vipID; public User(String userName,String password,int vipID) { this.userName = userName; this.pass

  • Java实现简单登录注册

    本文实例为大家分享了Java实现简单登录注册的具体代码,供大家参考,具体内容如下 一.登录 1. 内容介绍 定义一个内置的账号和密码,写好账号输入.密码输入.随机验证码生成.验证码输入方法(3个输入方法没有使用重载)以及账号密码验证码比较方法.调用这些方法实现简单的控制台登录. 2. 思路解析 方法调用.优先判断验证码,在判断账号最后判断密码. 3. 代码实现 import java.util.Random; import java.util.Scanner; public class Logi

  • Java+mysql用户注册登录功能

    最近刚刚开始学习mysql,所以就写了这个很基本的用户注册登录的功能来练练手.虽然这个很简单,但是我还是看到了自己学习的进步,很开心.哈哈哈. 这里要注意数据表的建立: 直接上代码吧,里面注释很详细了. package client; import java.sql.*; import java.util.*; public class Client { /** * 用以实现用户的注册和登录 */ private static String username;//用户登录注册的姓名 privat

  • Java简易登录注册小程序

    登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的地方,详见其它博客. 功能介绍:简单的登录注册系统,使用了数据库sqlserver.单例模式.正则表达式以及图形化开发等知识. 1.在登录界面,可以登录或者注册用户. 注册用户界面,按照正则表达式规定的格式要求来输入信息,若有误,则重新输入. 2.点击注册,首先连接SQLserver数据库,连接成功则会判断该用户名是否已经存在,若存在,则给出提示.反之则进行注册. 3.登录界面,点击登录按钮时,首先与数据库

  • Java如何优雅的实现微信登录注册

    目录 引言 问题分析 解决思路 方案实现 最后 引言 今天我们来聊一聊微信登录注册遇到的一些事儿. 在我们的业务系统中,一个用户在系统中肯定会有一个唯一标识,并且这个唯一标识一般是从系统外部获取的,而不是系统自动生成的,例如:手机号或者身份证. 我们在微信的场景下(微信公众号H5或者小程序),对于用户的唯一标识一般都是手机号或者openid.在正常情况下,我们遇到的都是一个用户只有一个微信号,一个微信号绑定了一个手机号,所以我们就认为三者的关系如下: 但是,理想很丰满,现实很骨感,我们遇到的情况

  • JavaWeb实现用户登录与注册功能

    本文实例为大家分享了JavaWeb实现用户登录与注册的具体代码,供大家参考,具体内容如下 所用知识 客户端:HTML CSS JS (JQuery) 服务器:JAVA基础  JSP   Servlet  JDBC  Tomcat 数据库:MySQL 用到的Jar包 druid数据库连接池  dbutils JDBC数据库操作工具  MySQL jar包 实现效果基本为注册用户,注册成功将数据写入数据库,登录过程查看数据库中是的用户名,密码是否匹配,匹配跳转到登录成功页面,失败返回登录页面. 思路

  • JavaWeb实战之用Servlet+JDBC实现用户登录与注册

    一.前言 使用到的技术栈: (1)JDBC (2)Servlet (3)MySQL 二.准备工作 (1)书城用户数据库与表创建 (2)编写用户类对象JavaBean (3)编写JdbcUtils对数据库进行交互(使用德鲁伊数据库连接池) (4)编写web层 最终编写好的第二阶段登陆注册文件结构为 dao中定义了基础的操作数据库代码,具体功能有 1.Insert.update.delete(修改) 2.查询一个对象(返回一个对象) 3.查询一个数组对象(数组返回多个对象) 4.返回某一个特定值对象

  • JAVA简单实现MD5注册登录加密实例代码

    开发环境:jdk1.7,eclipse 框架:springmvc,mybatis 工具:maven 以下代码复制即可实现MD5加密 创建一个mave项目,加web.不懂得可以搜索一下就有了. 注册用户的JSP页面代码如下. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PU

  • JavaWeb实现用户登录与注册功能(服务器)

    本文实例为大家分享了JavaWeb实现用户登录与注册功能的具体代码,供大家参考,具体内容如下 用到的知识 客户端:HTML CSS JS (JQuery) 服务器:JAVA基础  JSP   Servlet  JDBC  Tomcat 数据库:MySQL 用到的Jar包 druid数据库连接池  dbutils JDBC数据库操作工具  MySQL jar包 总体结构: 客户端数据库部分网址 思路: 服务器部分采用JavaEE三层架构 (1).表现层:通俗讲就是展现给用户的界面,即用户在使用一个

随机推荐