分层模式登录和注册

一、代码的分层

1、概述一个好的层次划分不仅可以能使代码结构更加清楚,还可以使项目分工更加明确,可读性大大提升,跟回家有利于后期的维护和升级。从另一个角度来看,好的代码分层架构,应该使可以很好的匹配上单一职责原则的。这样就可以降低层与层之间的依赖,还能最大承兑的复用各层的逻辑。

2、分层的好处高内聚:分层的设计可以简化系统设计,让不同的层专注做某一模块的事低耦合:层与层之间通过接口或API来交互,依赖方不用知道被依赖方的细节复用:分层之后可以做到很高的复用扩展性:分层架构可以让我们更容易做横向扩展如果系统没有分层,当业务规模增加或流量增大时我们只能针对整体系统来做扩展。分层之后可以很方便的把一些模块抽离出来,独立成一个系统。

3、建包\n我们需要建三个包,分别是:bean、dao、utildao层(数据访问层)这里与数据库进行数据的访问,service则是业务逻辑层,与数据访问层进行数据的交互,而controller则是控制层对前端的请求进行处理和响应。bean包(实体类)里面都是实体类,更加方便的对数据进行操作。uitl包(工具包)则是对经常用到的方法 进行封装。

二、首页的编写

在web项目下建一个index.jsp项目,用来编写首页我在首页设置两个超链接实现页面跳转,分别指向登录页面和注册页面。如图下所示:20e2cc4f59314f54a7912b97090fc5b9.jpg

 <html>

  <head>

    <title>Java Web</title>

  </head>

  <body>

    <a href="Login.jsp"><h2>去登录</h2></a>

    <a href="Enroll.jsp"><h2>去注册</h2></a>

  </body>

</html>

 三、前端登录页面的编写在登录页面中我们需要用到JDBC连接数据库进行数据查询操作(判断用户输入的账号密码是否正确首先我们在web项目下建一个Login.jsp项目,用来编写登录页面

<html>

<head>

    <title>登录</title>

</head>

<style type="text/css">

    .login-card {

        width: 300px;

        margin: 0 auto;

        padding: 20px;

        border: 1px solid #ccc;

        border-radius: 10px;

        background-color: #e8e8e8;

        box-shadow: 2px 2px 10px #ccc;

    }



    .card-header {

        text-align: center;

        margin-bottom: 20px

    }



    .card-header .log {

        margin: 0;

        font-size: 24px;

        color: black;

    }



    .form-group {

        margin-bottom: 15px;

    }



    label {

        font-size: 18px;

        margin-bottom: 5px;

    }



    input[type="text"], input[type="password"] {

        width: 100%;

        padding: 12px 20px;

        font-size: 16px;

        border: 1px solid #ccc;

        border-radius: 4px;

        box-sizing: border-box;

        transition: 0.5s;

    }



    input[type="submit"] {

        width: 100%;

        background-color: #333;

        color: white;

        padding: 14px 20px;

        margin: 8px 0;

        border: none;

        border-radius: 4px;

        cursor: pointer;

    }



    input[type="submit"]:hover {

        background-color: #ccc;

        color: black;

    }



</style>

<body>

<div class="login-card">

    <div class="card-header">

        <div class="log">登录</div>

    </div>

    <form action="login" method="post">

        <div class="form-group">

            <label for="user">账号:</label>

            <input required="" name="user" id="user" type="text">

        </div>

        <div class="form-group">

            <label for="pwd">密码:</label>

            <input required="" name="pwd" id="pwd" type="password">

        </div>

        <div class="form-group">

            <input value="登录" type="submit">&nbsp;&nbsp;&nbsp;

            <a href="Enroll.jsp">没有账号?去注册</a>

        </div>

    </form>

</div>



</body>

</html>

四、前端注册页面的编写在注册页面中我们需要用到JDBC连接数据库进行数据的添加操作(通过servlet获取浏览器发出请求中的数据添加到数据库中)在实现添加数据之前我们先在web项目下建一个Enroll.jsp项目实现注册页面的代码如下:

<html>

<head>

    <title>注册账号</title>

</head>

<style type="text/css">

    .login-card {

        width: 300px;

        margin: 0 auto;

        padding: 20px;

        border: 1px solid #ccc;

        border-radius: 10px;

        background-color: #e8e8e8;

        box-shadow: 2px 2px 10px #ccc;

    }



    .card-header {

        text-align: center;

        margin-bottom: 20px

    }



    .card-header .log {

        margin: 0;

        font-size: 24px;

        color: black;

    }



    .form-group {

        margin-bottom: 15px;

    }



    label {

        font-size: 18px;

        margin-bottom: 5px;

    }



    input[type="text"], input[type="password"] {

        width: 100%;

        padding: 12px 20px;

        font-size: 16px;

        border: 1px solid #ccc;

        border-radius: 4px;

        box-sizing: border-box;

        transition: 0.5s;

    }



    input[type="submit"] {

        width: 100%;

        background-color: #333;

        color: white;

        padding: 14px 20px;

        margin: 8px 0;

        border: none;

        border-radius: 4px;

        cursor: pointer;

    }



    input[type="submit"]:hover {

        background-color: #ccc;

        color: black;

    }



</style>

<body>

<div class="login-card">

    <div class="card-header">

        <div class="log">注册</div>

    </div>

    <form action="enroll" method="post">

        <div class="form-group">

            <label for="zhangh">添加账号:</label>

            <input required="" name="zhangh" id="zhangh" type="text">

        </div>

        <div class="form-group">

            <label for="pwd">设置密码:</label>

            <input required="" name="pwd" id="pwd" type="password">

        </div>

        <div class="form-group">

            <label for="dell">添加电话:</label>

            <input required="" name="dell" id="dell" type="text">

        </div>

        <div class="form-group">

            <label for="address">添加地址:</label>

            <input required="" name="address" id="address" type="text">

        </div>

        <div class="form-group">

            <input value="注册" type="submit">&nbsp;&nbsp;&nbsp;

            <a href="Login.jsp">已有账号?去注册</a>

        </div>

    </form>

</div>



</body>

</html>

五、异常页面的编写我们在web项目下建一个Error.jsp

<html>
<head>
    <title>404</title>
</head>
<body>
<H2>出错了</H2>
<a href="Login.jsp">返回登录界面</a>
</body>
</html>

六、web.xml配置Servlet类 

   <!--配置Servlet类-->

    <servlet>

        <!-- 起别名 -->

        <servlet-name>login</servlet-name>

        <!-- servlet类所在的位置:类的全类名就是 包名.类名 -->

        <servlet-class>com.hp.Servlet.Login</servlet-class>

    </servlet>

    <!-- Servlet类的映射:Servlet用来处理哪个请求 -->

    <servlet-mapping>

        <servlet-name>login</servlet-name>

        <url-pattern>/login</url-pattern>

    </servlet-mapping>

七、在bean包下建立一个user实体类user实体类中的代码如下:

public class User {

    private Integer uid;

    private String username;

    private String password;

    private String phone;

    private String address;



    public Integer getUid() {

        return uid;

    }



    public void setUid(Integer uid) {

        this.uid = uid;

    }



    public String getUsername() {

        return username;

    }



    public void setUsername(String username) {

        this.username = username;

    }



    public String getPassword() {

        return password;

    }



    public void setPassword(String password) {

        this.password = password;

    }



    public String getPhone() {

        return phone;

    }



    public void setPhone(String phone) {

        this.phone = phone;

    }



    public String getAddress() {

        return address;

    }



    public void setAddress(String address) {

        this.address = address;

    }



    @Override

    public String toString() {

        return "User{" +

                "uid=" + uid +

                ", username='" + username + '\'' +

                ", password='" + password + '\'' +

                ", phone='" + phone + '\'' +

                ", address='" + address + '\'' +

                '}';

    }

}

八、在Util包下实现JDBC连接方法在Util包下建一个JDBCUtil类JDBCUtil类中实现 获取连接 和 关闭资源 的代码如下:

public class JDBCUtil {

    private static String driver = "com.mysql.cj.jdbc.Driver";

    private static String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";

    private static String user = "root";

    private static String pwd = "123456";

    private static Connection con = null;

    //测试

    public static void main(String[] args) {

        System.out.println(getCon());

    }

    //获取数据库连接方法

    public static Connection getCon(){

        try {

            //加载驱动

            Class.forName(driver);

            //获取连接

            con = DriverManager.getConnection(url, user, pwd);

        } catch (Exception e) {

            e.printStackTrace();

        }

        //返回连接

        return con;

    }



    //关闭资源方法

    public static void loginClose(ResultSet rs, PreparedStatement pstm, Connection con){

        try {

            if (rs!=null){

                rs.close();

            }

            if (pstm!=null){

                pstm.close();

            }

            if (con!=null){

                con.close();

            }

        }catch (Exception e){

            e.printStackTrace();

        }

    }

}

九、实现数据库的操作首先我们在dao包下建一个UserDao接口类,用来实现登录和注册功能。UserDao接口类中的代码如下:

public interface UserDao {
    //登录方法
    public User login(String username, String password);
 
    //注册方法
    public int enroll(User user);
}

然后我们在dao包先再建一个DaoImpl包,再impl包内建一个UserDaoImpl类,用来实现数据库的操作。\n\nUserDaoImpl类中的代码如下/**

 * 数据库数据类

 */

public class UserDaoImpl implements UserDao {

    //数据库连接对象

    Connection con = null;//连接对象

    //预处理对象

    PreparedStatement pstm = null;//与处理对象

    //结果集对象

    ResultSet rs = null;//结果集对象

    int row ;//受影响的行数

    //实例化对象

    User register = null;



    //数据库登录操作

    public User login (String username,String password){

        User login = null;

        //下面的代码完成的事情: 需要用户名和密码 返回一个user对象

        try {

            //调用util包下的jdbc连接方法

            con = JDBCUtil.getCon();

            //编写SQL语句

            String sql = "select * from t_user where username = ? and password = ?";

            //预处理SQL语句对象

            pstm = con.prepareStatement(sql);

            //传参

            pstm.setObject(1,username);

            pstm.setObject(2,password);

            //获取结果集对象 ,获取结果

            rs = pstm.executeQuery();

            if (rs.next()){

                //实例化对象

                login = new User();

                //获取结果及对象 把数据传入User对象中

                login.setUsername(rs.getString("username"));

                login.setPassword(rs.getString("password"));

            }

        }catch (Exception e){

            e.printStackTrace();

        }finally {

            //调用关闭资源方法

            JDBCUtil.loginClose(rs,pstm,con);

        }

        //返回User结果

        return login;

    }



    //数据库注册操作

    @Override

    public int enroll(User register) {

        //下面的代码完成的事情: 获取用户输入的数据添加到数据库中

        try {

            //调用util包下的jdbc连接方法

            con = JDBCUtil.getCon();

            //编写SQL语句

            String sql = "insert into t_user(username,password,phone,address) values(?,?,?,?);";

            //预处理SQL语句对象

            pstm = con.prepareStatement(sql);

            //传参

            pstm.setObject(1,register.getUsername());

            pstm.setObject(2,register.getPassword());

            pstm.setObject(3,register.getPhone());

            pstm.setObject(4,register.getAddress());

            //获取结果集对象 ,获取结果

            row = pstm.executeUpdate();

        }catch (Exception e){

            e.printStackTrace();

        }finally {

            //调用关闭资源的方法

            JDBCUtil.loginClose(null,pstm,con);

        }

        //返回受影响的行数

        return row;

    }

}

十、登录的业务处理在Servlet包下建一个Login类用来处理登录业务Login类内的代码如下:

/**
 * 登录类
 */
public class Login extends HttpServlet {
    //数据库连接对象
    Connection con = null;
    //预处理对象
    PreparedStatement pstm = null;
    //结果集对象
    ResultSet rs = null;
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Login...get");
        doPost(request, response);
    }
 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Login...post");
        //1.从请求中获取用户提交的参数(数据)
        request.setCharacterEncoding("UTF-8");//设置请求的编码格式为中文
        String user = request.getParameter("user");//根据表单的name属性获取用户输入的值
        String pwd = request.getParameter("pwd");//根据表单的name属性获取用户输入的值
 
        System.out.println(user);
        System.out.println(pwd);
 
        //2.业务处理
        //调用数据库类
        UserDaoImpl userDao =new UserDaoImpl();
        //传参
        User user1 = userDao.login(user,pwd);
 
        //判断是否有该账号
        if (user1!=null){
            //登录成功跳转登录首页
            response.sendRedirect("ShouYe.jsp");
        }else {
            //登录失败跳转错误页面
            response.sendRedirect("Error.jsp");
        }
 
    }
}

十一、注册的业务处理在Servlet包下建一个Enroll类用来处理登录业务Enroll类内的代码如下:

/**
 * 注册类
 */
//设置当前类用来处理 /enroll 的请求
@WebServlet("/enroll")
public class Enroll extends HttpServlet {
    //数据库连接对象
    Connection con = null;
    //预处理对象
    PreparedStatement pstm = null;
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("enroll...get");
        //调用doPost方法
        doPost(request, response);
    }
 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("enroll...post");
        //设置请求的编码格式为UTF-8格式
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        //设置以文本或网页的形式响应
        response.setContentType("text/html;charset=UTF-8");//已什么样的格式(文本/网页)响应
 
        //从请求中获取用户提交的参数(数据)
        String zhangh = request.getParameter("zhangh");
        String pwd = request.getParameter("pwd");
        String dell = request.getParameter("dell");
        String address = request.getParameter("address");
 
        //实例化对象
        User enroll = new User();
        //给实体类user 赋值
        enroll.setUsername(zhangh);
        enroll.setPassword(pwd);
        enroll.setPhone(dell);
        enroll.setAddress(address);
 
        //实现UserDao接口的UserDaoImpl类
        UserDao userDao = new UserDaoImpl();
        //调用子类接口的enroll方法 返回受影响的行数
        int row = userDao.enroll(enroll);
 
        //判断受影响的行数大于零注册成功
        if (row>0){
            //注册成功 跳转登录页面
            response.sendRedirect("Login.jsp");
        }else {
            //注册失败 跳转错误页面
            response.sendRedirect("Error.jsp");
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值