使用IDEA基于MVC和分层模式完成登录和注册

MVC(Model View Controller)

1.概念
MVC模式中,M是指业务模型,V是指用户界面,C则是控制器。其中,View的定义比较清晰,就是用户界面。

M:Model模型。完成具体的业务操作,e.g:查询数据库,封装对象

V:view视图。JSP、PHP、.Net、HTML等来进行数据展示

C:Controller控制器。 Servlet  1.获取View的请求   2.调用模型将数据交给视图进行展示

JSP(Java Server Pages)

1.概念

JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

    JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
    JSP是Servlet的扩展,在没有JSP之前,就已经出现了Servlet技术。Servlet是利用输出流动态生成HTML页面,包括每一个HTML标签和每个在HTML页面中出现的内容。

 一、数据库与表的创建(启动php和使用navict)

使用IDEA基于MVC和分层模式完成登录和注册_第1张图片

-- 判断存在即删除数据库
drop database if exists mydb;
-- 创建数据库
create database mydb;
-- 使用数据库
use mydb;
-- 删除重复的表
drop table if exists t_user;
-- 创建t_user表
create table t_user(
uid int primary key auto_increment,
username varchar(20),
password varchar(20),
phone varchar(11),
address varchar(50)
);
-- 新增
insert into t_user(username,password,phone,address)values('张三','666','18965423548','南阳');
insert into t_user(username,password,phone,address)values('李四','333','18754263548','许昌');
insert into t_user(username,password,phone,address)values('小美','123','18565234759','信阳');
-- 查询
#select * from t_user where username=? and password=?
select * from t_user;

二、创建web项目,导入jar包

使用IDEA基于MVC和分层模式完成登录和注册_第2张图片

1.创建与表名相似的实体类放在bean包

​​​​package com.chen.bean;

public class User {
    private Integer uid;
    private String username;
    private String password;
    private String phone;
    private String address;
    //无参构造函数
    public User() {
    }
    //set和get方法
    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;
    }
    //toString方法

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", phone='" + phone + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

 2.web中的jsp

index.jsp页面


  
    第一个Web项目
  
  
  

欢迎学习Java Web!

去登录

使用IDEA基于MVC和分层模式完成登录和注册_第3张图片

login.jsp(登录页面 )



    登录页


登录

账户:
密码:
    没有账号?点击登录

使用IDEA基于MVC和分层模式完成登录和注册_第4张图片

zhuye.jsp页面 



    主页


欢迎来到主页!

error.jsp(错误页面 )



    错误页


出错啦!

返回登录

使用IDEA基于MVC和分层模式完成登录和注册_第5张图片

register.jsp页面(注册页面)



    注册页


进行注册

账户:
密码:
电话:
地址:
    已有账号?点击注册

 使用IDEA基于MVC和分层模式完成登录和注册_第6张图片

3.使用JDBC完成登录

util包中的工具类JDBCUtil抽取公共的部分写入静态方法中便于调用

package com.chen.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

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 password="root";
    private static Connection con = null;
    /**
     * 获得数据库连接对象
     */
    public static Connection getCon(){
        try{
            //1.加载驱动包
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获得数据库连接对象
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC","root","root");
        }catch(Exception e){
            //异常打印
            e.printStackTrace();
        }
        return con;
    }
    //方法重载
    public static void close(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();
        }
    }
    public static void close(PreparedStatement pstm,Connection con){
        try{
            if(pstm!=null){
                pstm.close();
            }
            if(con!=null){
                con.close();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

dao包

UserDao接口

package com.chen.dao;

import com.chen.bean.User;

public interface UserDao {
    User login(String username, String password);
    int register(User user);
}

impl包中的UserDaoImpl类继承接口进行查询和新增操作并封装到实体类中(登录和注册)

package com.chen.dao.impl;

import com.chen.bean.User;
import com.chen.dao.UserDao;
import com.chen.util.JDBCUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class UserDaoImpl implements UserDao {
    private Connection con = null;//数据库连接对象
    private PreparedStatement pstm = null;//预处理对象
    private ResultSet rs = null;//结果集对象
    private int row =0;
    User login = null;

    @Override
    public User login(String username, String password) {
        try {
            con= JDBCUtil.getCon();
            //3.定义sql语句
            String sql = "select * from t_user where username=? and password=?";
            //4.获取预处理对象
            pstm = con.prepareStatement(sql);
            //5.传参
            pstm.setObject(1, username);
            pstm.setObject(2, password);
            //6.执行sql
            rs = pstm.executeQuery();
            //7.结果集处理
            if (rs.next()) {
                login = new User();
                //从结果集中获取数据,然后封装到实体类对象中
                int uid = rs.getInt("uid");
                login.setUid(uid);
                login.setUsername(rs.getString("username"));
                login.setPassword(rs.getString("password"));
                login.setPhone(rs.getString("phone"));
                login.setAddress(rs.getString("address"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            {
                //8.关闭资源
                JDBCUtil.close(rs,pstm,con);
            }
            return login;
        }
    }

    @Override
    public int register(User user) {
        try{
            con= JDBCUtil.getCon();
            //定义sql语句
            String sql = "insert into t_user(username,password,phone,address)values(?,?,?,?)";
            //获取预处理对象
            pstm = con.prepareStatement(sql);
            //传参
            pstm.setObject(1,user.getUsername());
            pstm.setObject(2,user.getPassword());
            pstm.setObject(3,user.getPhone());
            pstm.setObject(4,user.getAddress());
            //执行sql
            row = pstm.executeUpdate();
        }catch(Exception e){
           e.printStackTrace();
        }finally {
            JDBCUtil.close(pstm,con);
        }
        return row;
    }
}

3.注解配置

servlet包

Login页面

package com.chen.servlet;

import com.chen.bean.User;
import com.chen.dao.UserDao;
import com.chen.dao.impl.UserDaoImpl;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@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");//设置响应的格式为:文本/html;中文编码

        //2.获取请求参数
        String username = request.getParameter("username");//根据表单的name属性获取用户输入的值
        String password = request.getParameter("password");
        System.out.println(username);
        System.out.println(password);

        //3.业务处理-JDBC 给予用户名和密码 返回用户对象
        UserDao userDao = new UserDaoImpl();//spring框架自动注入
        User login = userDao.login(username, password);

        //4.判断业务处理结果,给前端做出响应
        if(login!=null){
            //登录成功
            response.sendRedirect("zhuye.jsp");
        }else{
            //登录失败
            response.sendRedirect("error.jsp");
        }
    }
}

Register页面

package com.chen.servlet;

import com.chen.bean.User;
import com.chen.dao.UserDao;
import com.chen.dao.impl.UserDaoImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/register")
public class Register 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");//设置响应的编码格式
        //2.获取请求参数
        String username = request.getParameter("username");//根据表单的name属性获取用户输入的值
        String password = request.getParameter("password");
        String phone = request.getParameter("phone");
        String address = request.getParameter("address");
        //封装到User对象中
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        user.setPhone(phone);
        user.setAddress(address);
        //打印输出
        System.out.println(user);
        //JDBC操作
        UserDao userDao = new UserDaoImpl();
        int row = userDao.register(user);
        //3.做出响应
        if(row>0){
            //注册成功
            response.sendRedirect("login.jsp");
        }else{
            //注册失败
            response.sendRedirect("register.jsp");
        }
    }
}

运行后控制台打印日志信息 

使用IDEA基于MVC和分层模式完成登录和注册_第7张图片

登录后的控制台打印登录信息

 

注册后控制台日志打印注册信息

 使用IDEA基于MVC和分层模式完成登录和注册_第8张图片

  查询表格,注册成功

 使用IDEA基于MVC和分层模式完成登录和注册_第9张图片

你可能感兴趣的:(mybatis,spring,maven)