zoukankan      html  css  js  c++  java
  • 完成用户登录注册功能

    一,需求分析

    整体分析框架如下图,需要的包也如下图,它们放在src下

    所有的需求如下图所示,

    1,我们创建一个名为day12的数据库,其中创建了一个users表

    2,在myeclipse中我们新建一个名为day12_user的web项目,

    3,在src下我们创建了如下几个java包:

                       com.itheima.damain    实体类包,          其中包括 User类

                       com.itheima.dao          接口包    ,        其中包括 UserDao接口

                       com.itheima.dao.impl   接口实现类包,    其中包括  UserDaoImpl实现类

                       com.itheima.service     接口包                 其中包括service接口

                       com.itheima.service.impl  接口实现类包    其中包括service接口实现类

                       com.itheima.utils           工具包            其中包括一般的关闭,连接数据库的函数 

                       com.itheima.exception    异常包

                       com.itheima.web.servlet    servlet包       包括loginServlet和registerServlet

    首先是主页main.jsp

    <body>
             <h1>欢迎来到主页</h1>
           <form action="/day12_user/login.jsp"  method = "post">
                  <input  type = "submit"   value = "登陆"   >
           </form>
           <form action="/day12_user/register.jsp"   method = "post">
                 <input  type = "submit"   value= "注册">
           </form>
    </body>

    对于登陆板块,选择登陆按钮,进入login.jsp

    <body>
          <form action="/day12_user/demo1"   method= "post">
               用户名:<input   type = "text"   name = "username"  ><br>
                密码:<input   type = "password"   name = "password"   ><br>
                  <input type = "submit" value = "登陆"><br>
          </form>
    </body>

    web.xml如下图所示

    <servlet>
        <servlet-name>loginServlet</servlet-name>
        <servlet-class>com.itheima.web.servlet.loginServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>registerServlet</servlet-name>
        <servlet-class>com.itheima.web.servlet.registerServlet</servlet-class>
      </servlet>
    
    
      <servlet-mapping>
        <servlet-name>loginServlet</servlet-name>
        <url-pattern>/demo1</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>registerServlet</servlet-name>
        <url-pattern>/demo2</url-pattern>
      </servlet-mapping>    

    关于user用户的板块,com.itheima.damain    实体类包,          其中包括 User类,源码如下文所示

    //实体bean,用于封装数据
    public class User {
          private    int id;
          private    String username;
          private    String password;
          private    String email;
          private    Date birthday;
        
          public User(String username, String password, String email, Date birthday) {
            super();
            this.username = username;
            this.password = password;
            this.email = email;
            this.birthday = birthday;
        }    
        public User() {
            // TODO Auto-generated constructor stub
        }
        public int getId() {
            return id;
        }
        public String getUsername() {
            return username;
        }    
        public String getPassword() {
            return password;
        }
        public String getEmail() {
            return email;
        }
        public Date getBirthday() {
            return birthday;
        }    
    }

    com.itheima.web.servlet    servlet包       包括loginServlet和registerServlet

    loginservlet的源码如下图所示,只写一个完整源码,其他的servlet类似

    package com.itheima.web.servlet;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Random;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.itheima.damain.User;
    import com.itheima.service.impl.UserService;
    import com.itheima.service.impl.UserServiceImpl;
    
    @SuppressWarnings("serial")
    public class loginServlet extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
           //设置编码模式
    request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //获取表单数据, 并将表单数据存入到login函数中 String name = request.getParameter("username"); String pwd = request.getParameter("password"); //处理业务逻辑,实现login 方法,里面涉及到finduser方法 UserService us = new UserServiceImpl();// User u = us.login(name,pwd); //分发转向 if(u!=null){ out.write("<br/>欢迎你,登陆成功,3秒跳转首页"); request.setAttribute("u", u.getUsername()); request.getRequestDispatcher("/success.jsp").forward(request, response); }else{ //实现刷新功能 out.write("用户名或密码错误,请重新登陆"); response.setHeader("refresh", "1;url=/day12_user/login.jsp"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

    上面是登陆成功后的主页,其源码为success.jsp

    <body>
       <h1>这是主页</h1>
          欢迎  ${u} ,来到主页      
    </body>

    对于loginservlet中,有一句代码进行解析

    //处理业务逻辑,实现login 方法,里面涉及到finduser方法

     UserService us = new UserServiceImpl(); 这句是创建父接口指向子类对象
     User u = us.login(name,pwd);    


    com.itheima.service     接口包                 其中包括Userservice接口,
    com.itheima.service.impl  接口实现类包              其中包括UserserviceImpl接口实现类
    userService源代码如下
    public interface UserService {
         //根据用户和密码实现登陆
          public   User  login(String name,String pwd);
          //注册
          public  int register(User user);
    }
    
    
    UserServiceImpl实现类源码如下:
    package com.itheima.service.impl;
    
    import com.itheima.damain.User;
    import com.itheima.dao.UserDao;
    import com.itheima.dao.impl.UserDaoImpl;
    
    public class UserServiceImpl  implements UserService{  
          // 实现用户登录的方法
        public User login(String name,String pwd) {
            // TODO Auto-generated method stub
         //用实现类来指向父类的接口
             UserDao dao = new  UserDaoImpl();
             return   dao.finduser(name,pwd);
        }
        public int register(User user) {
            // TODO Auto-generated method stub
             UserDao dao = new  UserDaoImpl();
             return  dao.adduser(user);
        }
    }
    UserDao接口源码如下
    public interface UserDao {    
        // 查找用户
         public  User finduser(String name,String password);
        // 添加用户
         public  int  adduser(User user);
    }
    UserDaoImpl源码如下:
    package com.itheima.dao.impl;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.text.SimpleDateFormat;
    
    import com.itheima.damain.User;
    import com.itheima.dao.UserDao;
    import com.itheima.utils.DBUtils;
    
    /**
     * 数据访问层对于方法的实现
     * @author zjf-pc
     *
     */
    public class UserDaoImpl  implements UserDao{
    /**
     * 查找用户的实现方法
     */
        public User finduser(String name,String password) {
            // TODO Auto-generated method stub
           Connection conn = null;
           PreparedStatement ps = null;
           ResultSet rs = null;
           User u = null;
             try {
                conn = DBUtils.getConnection();
                //找到与浏览器中getConnection输入用户名和密码一致的sql语句,并保存在rs中
                String sql = "select * from users where username= ? and password = ?";
                ps = conn.prepareStatement(sql);
                ps.setString(1,name);
                ps.setString(2, password);
                //得到sql中的结果
                rs = ps.executeQuery();
                while(rs.next())
                {
                    //新创建一个user对象,将rs中的属性均赋值给user对象
                    //如果之前的rs内容为空的话,那么此时返回的u也为null
                    u = new User();
                    u.setId(rs.getInt(1));
                    u.setUsername(rs.getString(2));
                    u.setPassword(rs.getString(3));
                    u.setEmail(rs.getString(4));
                    u.setBirthday(rs.getDate(5));
                }
            } catch (Exception e) {
              e.printStackTrace();
            }finally{
             DBUtils.closeAll(rs, ps, conn);
            }     
            return u;
        }
    /**
     * 添加用户的实现方法
     */
        public int adduser(User user) {
            // TODO Auto-generated method stub
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            int i =0;
            try{
                conn = DBUtils.getConnection();
                //向数据库库表中插入一行语句如下
                String sql = "insert  into  users(username,password,email,birthday)values(?,?,?,?);";
                ps = conn.prepareStatement(sql);
                ps.setString(1, user.getUsername());
                ps.setString(2, user.getPassword());
                ps.setString(3, user.getEmail());
                SimpleDateFormat sdf = new  SimpleDateFormat("yyyy-MM-DD");
                ps.setString(4, sdf.format(user.getBirthday()));
               //将数据更新到表中
                i =  ps.executeUpdate();
                } catch (Exception e) {
                e.printStackTrace();
                }finally{
                 DBUtils.closeAll(rs, ps, conn);
                }
                 return i;
        }
        public UserDaoImpl() {
            super();
            // TODO Auto-generated constructor stub
        }    
    }

     对于用户注册板块,register.jsp如下图所示

    <body>
          <h1>用户注册页面</h1>
          <form action="/day12_user/demo2"  method = "post">
            用户名:<input  type = "text"  name = "username"/><br>
            密码: <input  type = "password" name = "password"/><br>
            邮箱:<input type = "text" name = "email"/><br>
            出生日期:<input type = "text" name = "birthday"/><br>
            <input type = "submit"  value = "注册"><br>
          </form>
    </body>

    //web.xml中对应的是这个,那么相应的registerServlet会在下文看到
    <servlet-mapping> <servlet-name>registerServlet</servlet-name> <url-pattern>/demo2</url-pattern> </servlet-mapping>
     
    registerServlet源码如下文所示
    public class registerServlet extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
             //设置编码模式
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            int i =0;
            //获取表单数据
                   String name =  request.getParameter("username");
                   String pwd =  request.getParameter("password");
                   String email =  request.getParameter("email");
                   String birthday =  request.getParameter("birthday");
                   SimpleDateFormat sdf = new  SimpleDateFormat("yyyy-MM-DD"); 
                try {
                  //将获取到的表单数据封装到u中
                  User   u = new User(name,pwd,email, sdf.parse(birthday));
                  UserService us = new  UserServiceImpl();//这在上文有解析
                 //对封装在u中的数据进行注册,使其记录在数据库表中
                  i = us.register(u);//这也在上文有解析
                  if(i!=0)
                  {
                     out.write("注册成功,信息如下:<br>");
                     out.write("<br>姓名:"+u.getUsername());
                     out.write("<br>邮箱:"+u.getEmail());
                     out.write("<br>出生日期:"+sdf.format(u.getBirthday()));    
                   }else {
                     out.write("注册信息不成功");
                    }  
                } catch (Exception e) {
                   e.printStackTrace();
                }
            
            //处理业务逻辑
            //分发转向
        }
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
                doGet(request, response);
          }
    }



  • 相关阅读:
    I2S波形解析
    F407整点原子I2C波形解码
    WAVE格式文件说明
    ADC结构体初始化成员
    这次,我是真的想吐槽MDK
    I2S源程序(正点原子F407探索者)
    强制类型转换
    嵌套结构体的初始化
    lua 元方法 __index
    lua pairs 与 ipairs
  • 原文地址:https://www.cnblogs.com/zjf-293916/p/6653863.html
Copyright © 2011-2022 走看看