使用三层架构完成登录注册

代码分层的好处

1.对于复杂的系统,分层让代码结构清晰,便于开发人员对系统进行整体的理解、把握。如果代码没有分层,把逻辑都写在一个方法里面的代码就好比是一本没有目录的文档,要找出其中某一节都要对全文遍览一次。

2.基于第一点,如果代码层次分明,则便于开发人员维护。系统基本的架构可以通过工具(如动软代码生成器)自动生成代码。当数据库发生改变时,只需通过生成器重新生成代码,然后改动业务层中的部分代码即可。假设使用三层架构模式开发系统时,开发人员可以通过自己的判断来确定哪一层需要改动。

3.好的架构一旦写好,那么不管UI层怎么变都可以使用,比如开始使用Winform开发的后来变成web了,但是架构的代码不用变,只是对界面表现进行改动(譬如使用三层架构开发,逻辑层和数据访问层不变,只是UI层需要做变动)。管理好代码,使用户界面逻辑(UI)与业务逻辑(BLL)和数据访问代码(DAL)分割开来,这样才能在将来需要的时候把应用程序迁移到浏览器上。这也应该算是可移植性的体现吧。

4.开发人员可以节省更多的时间去注重业务的实现,而不必过多考虑数据库的连接、访问等其它问题。

一,创建项目和创建数据库

在src中创建四个包

使用三层架构完成登录注册_第1张图片

创建好数据库

使用三层架构完成登录注册_第2张图片

在JDBC中写出数据库的链接

 private static Connection con=null;
    public static Connection getCon() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/school?useSSL=false&serverTimezone=UTC","root","root");
        System.out.println(con);
        return con;
    }

    public static void close(ResultSet rs, PreparedStatement ps,Connection con){
        try {
            if (rs!=null){
                rs.close();
            }
            if (ps!=null){
                ps.close();
            }
            if (con!=null){
                con.close();
            }
        } catch (Exception e){
            e.printStackTrace();
        }
    }

在bean中把数据库的工具类写出来

使用三层架构完成登录注册_第3张图片

在dao包里写出数据库的查询和增加

public class UserDao {
    Connection con = null;
    PreparedStatement pst = null;
    ResultSet rs = null;

    public User login(String username, String password) {
        User login = null;
        try {
//            1.加载数据库驱动
            con = JDBCUtil.getCon();
//            3.定义登录的sql语句
            String sql = "select * from t_user where username=? and password=?";
//            4.获取预处理对象
            pst = con.prepareStatement(sql);
//            5.传参
            pst.setObject(1, username);
            pst.setObject(2, password);
            //            6.执行代码
            rs = pst.executeQuery();
//            7.解析结果集
            if (rs.next()) {
                login = new User();
                int uid = rs.getInt("uid");
                login.setUid(uid);
                login.setPassword(rs.getString("username"));
                login.setPassword(rs.getString("password"));
                login.setPhone(rs.getInt("phone"));
                login.setAddress(rs.getString("address"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            JDBCUtil.close(rs,pst,con);
        }
        return login;
    }
}

增加(这里我是先查询数据库,如果注册的账号存在,这注册失败跳转到cunzai。jsp的页面中)

public class Userzheng {
    Connection con=null;

    PreparedStatement ps=null;

    ResultSet rs=null;

    public boolean Cun(String username){
        boolean bb = false;
        try {
            con = JDBCUtil.getCon();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        if (con != null) {
            String sql = "select * from t_user where username=?";
        try {
                ps = con.prepareStatement(sql);
                ps.setObject(1, username);
                rs = ps.executeQuery();
                while (rs.next()) {
                    bb = true;
                    break;
                }
            } catch(Exception e){
                e.printStackTrace();
            } finally{
                JDBCUtil.close(rs, ps, con);
            }
        }return bb;
    }

    public boolean zheng(String username,String password,String phone,String address){

        boolean aa=false;

        if(!Cun(username)){
            try {
                try {
                    con = JDBCUtil.getCon();//加载驱动
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
                //定义sql语句
                String sql="insert into t_user(username,password,phone,address)values(?,?,?,?)";
                //获取预处理对象
                ps = con.prepareStatement(sql);
                ps.setString(1,username);
                ps.setString(2,password);
                ps.setString(3,phone);
                ps.setString(4,address);

                //受影响的行赋值给nn
                int nn = ps.executeUpdate();
                if (nn>0){
                    aa=true;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                JDBCUtil.close(rs, ps, con);
            }

        } return aa;//返回boolean的值,判断是否添加成功
        }
}

在service包中完成最后的代码应用

登录


@WebServlet("/Login")

public class Login extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        1.设置请求和响应的编码格式,以及响应格式
       request.setCharacterEncoding("utf-8");//设置请求的编译格式为中文
       response.setCharacterEncoding("utf-8");//设置响应的编译格式为中文
       response.setContentType("text/html;charset=UTF-8");//以什么样的格式来响应
//       2.获取请求的参数
        String username= request.getParameter("username");//根据表单的name属性获取用户名输入的值
        String password = request.getParameter("password");
        System.out.println(username);
        System.out.println(password);
        UserDao userDao= new UserDao();
        User login = userDao.login(username, password);
        if (login!=null){
            response.sendRedirect("zhuye.jsp");
        }else {
            response.sendRedirect("shibai.jsp");
        }
    }
}

注册

@WebServlet("/zhuce")
public class Zhuce extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");//设置请求的编译格式为中文
        response.setCharacterEncoding("utf-8");//设置响应的编译格式为中文
        response.setContentType("text/html;charset=UTF-8");//以什么样的格式来响应
        String username= request.getParameter("username");//根据表单的name属性获取用户名输入的值
        String password = request.getParameter("password");
        String phone = request.getParameter("phone");
        String address = request.getParameter("address");
        Userzheng uz=new Userzheng();
        boolean cun;//数据库是否存在用户
        boolean zj;//数据量是否添加成功
        cun= uz.Cun(username);
        zj= uz.zheng(username, password,phone,address);
        if (cun){//如果存在,就跳转到指定的页面
            response.sendRedirect("cunzai.jsp");
        }
        else {//不存在就,就跳转到注册成功的页面
            response.sendRedirect("zhucecg.jsp");
        }

    }
}

你可能感兴趣的:(架构,servlet,java)