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

2023-11-09

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)

-- 判断存在即删除数据库
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包

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页面

<html>
  <head>
    <title>第一个Web项目</title>
  </head>
  <body>
  <h2>欢迎学习Java Web!</h2>
  <a href="login.jsp">去登录</a>
  </body>
</html>

login.jsp(登录页面 )

<html>
<head>
    <title>登录页</title>
</head>
<body>
<h2>登录</h2>
<!--action是表单要提交的地址 method表单提交的方式 -->
<form action="login" method="post">
    账户:<input type="text" name="username" value=""> <br>
    密码:<input type="password" name="password" value=""> <br>
    <input type="submit" value="登录">&nbsp;&nbsp;&nbsp;
    <a href="register.jsp">没有账号?点击登录</a>
</form>
</body>
</html>

zhuye.jsp页面 

<html>
<head>
    <title>主页</title>
</head>
<body>
<h2>欢迎来到主页!</h2>
</body>
</html>

error.jsp(错误页面 )

<html>
<head>
    <title>错误页</title>
</head>
<body>
<h2>出错啦!</h2>
<a href="login.jsp">返回登录</a>
</body>
</html>

register.jsp页面(注册页面)

<html>
<head>
    <title>注册页</title>
</head>
<body>
<h2>进行注册</h2>
<!--action是表单要提交的地址 method表单提交的方式 -->
<form action="register" method="post">
    账户:<input type="text" name="username" value=""> <br>
    密码:<input type="password" name="password" value=""> <br>
    电话:<input type="text" name="phone" value=""> <br>
    地址:<input type="text" name="address" value=""> <br>
    <input type="submit" value="注册">&nbsp;&nbsp;&nbsp;
    <a href="login.jsp">已有账号?点击注册</a>
</form>
</body>
</html>

 

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");
        }
    }
}

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

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

 

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

 

  查询表格,注册成功

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用IDEA基于MVC和分层模式完成登录和注册 的相关文章

随机推荐

  • git中的SSL certificate problem: unable to get local issuer certificate错误的解决办法

    git中的SSL certificate problem unable to get local issuer certificate错误的解决办法 我们在使用git初始化一个项目时 尤其是通过git submodule update in
  • 左程云老师算法课笔记(一)

    前言 仅记录学习笔记 如有错误欢迎指正 最近 有点忙 也有点懈怠 还是要加油加油 共勉 一 排序 异或 交换律 a b b a 结合律 a b c a c b 1 1 0 0 0 0 1 0 1 0 1 1 不进位相加 所以交换a b 的值
  • 恶意代码动态分析

    目录 实验一 问题 实验环境 实验思路 实验过程 实验二 问题 实验环境 实验思路 实验过程 实验三 问题 实验环境 思路 实验过程 实验四 问题 实验环境 实验思路 实验过程 实验一 使用动态分析技术来分析lab03 01 exe文件中发
  • HTML5超科幻个人主页

    在线演示地址 http me cpwl site 备用地址 http cpwl sinaapp com 部分截图 视频演示 http www iqiyi com w 19rtceudmh html 视频下载 http pan baidu c
  • 什么是向上管理(向上管理是HRBP的必备技能)

    向上管理是指管理者与上级领导进行有效沟通 推动管理者和团队实现目标 确保公司发展和组织运作的稳定性 作为HRBP 向上管理是必备的技能 它可以帮助HRBP更好地理解组织战略和上级领导的期望 有效地协调和解决问题 从而实现自己的职责和使命 本
  • URL中划线和下划线的区别

    url中的中划线dash和下划线underscore的区别 百度对URL中下划线和连字符是基本上同样处理的 而谷歌对下划线和连字符处理的区别比较大 综合来说 URL使用连字符对于提升关键词排名是有意义的 谷歌官方对于使用连字符还是下划线问题
  • 添加包和删除包&俯视角渲染&改变中心锚点的位置

    文章目录 如何添加包和删除包 如何俯视角渲染 如何改变中心锚点的位置 如何添加包和删除包 如何俯视角渲染 将z轴遮挡变为y轴遮挡 y轴为1表示以y轴为对比尺度 每个物体中心点y轴大的将会被中心点y轴小的物体遮掩 如何改变中心锚点的位置 把图
  • [附源码]java毕业设计网络身份认证技术及方法

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 SSM mybatis Ma
  • 2022华中杯B

    B题总体来说比较简单 另外今年的美赛和上一年的电工杯分别有一道关于股市这方面的题 根据其主体部分可以将其归为预测这个大类上面 本题只要选择合适的模型 总体来说还是比较简单的 但对本题进行预测时 肯定不能直接使用给出的数据 需要对数据进行预处
  • Fiddler使用手册之SSL证书的问题

    首先下载Fiddler 官网5 0版本是免费的 安装设置 Tools options HTTPS Connections 按下图设置勾选 确保一致 点击确定后 关闭重新打开软件 这时候就已经开始抓电脑的包了 如果想抓手机的包需要让手机如下设
  • Linux常用命令合集(一)

    cd 切换目录 gt cd 切换到父级目录 gt cd tmp 切换到 tmp目录 gt cd 切换到当前用户的家目录 ls命令 查看文件与目录的命令 list 的缩写 gt ls l 列出长数据串 包含文件的属性与权限数据等 gt ls
  • C++中模板类的声明和实现分离问题

    有两种方法 第1种 使用 tpp 文件实现类模板的接口与实现的文件分离 在 h文件中放接口 在 tpp文件中放实现 但这种方法得在 h文件中 类的定义下面通过 include包含 tpp 文件 如下 testTemplateClass h文
  • 解决windows的挖矿木马

    问题描述 阿里云服务器报有采矿木马 登录服务器后发现CPU满负荷 无法安装阿里云的安全客户端 安装火绒杀毒软件后 杀毒软件也无法运行 提示文件无法找到 通过任务管理器关闭可疑的svchost exe后 马上就创建了一个新的svchost e
  • ssh命令行远程连接服务器跑程序新手教程

    1 ssh远程连接服务器 2 服务器端配置conda环境 3 上传程序到服务器 4 跑程序 5 修改程序 1 用ssh远程连接服务器 打开命令行 cmd ssh 服务器名称 服务器网址 然后按Enter键 输入密码 注意输入的密码不会在屏幕
  • nginx rewrite二级目录跳转带斜线

    内网地址为http IP1 80 wbalone 外网地址为http IP2 88 wbalone 此时 内外网端口不一致 如果访问外网地址时 输入的为http IP2 88 wbalone 则会跳转为http IP2 80 wbalone
  • 算法高级(28)-递归、分治、动态规划、贪心、回溯、分支限界几大相似算法比较

    在学习算法的过程中 递归 分治 动态规划 贪心 回溯 分支限界这些算法有些类似 都是为了解决大问题 都是把大问题拆分成小问题来解决 但她们之间还是有一些不同之处的 我来给同学们整理一下 一 算法思想 1 递归算法 recursion alg
  • 基于jdk11/jdk8 + Spring全家桶开发的微服务中后台快速开发平台

    项目简介 基于jdk11 jdk8 SpringCloudAlibaba SpringCloud SpringBoot 开发的微服务中后台快速开发平台 专注于多组户 SaaS架构 解决方案 亦可作为普通项目 非SaaS架构 的基础开发框架使
  • Zabbix---2 监控主机CPU使用率

    一 监控CPU空闲率 在添加主机时 由于已经链接了Template OS Linux by Zabbix agent模板 该模板还链接了Template Module Linux CPU by Zabbix agent等若干个其他模板 Te
  • MapStruct、BeanUtils性能比较

    一 MapStruct是什么 MapStruct是一款对象转换工具 主要是用于实体对象 VO DTO之间的转换 同样BeanUtils也是这个作用 二 原理 1 BeanUtils原理 反射 是在运行阶段 至于反射为什么慢 后续我了解再补充
  • 使用IDEA基于MVC和分层模式完成登录和注册

    MVC Model View Controller 1 概念 MVC模式中 M是指业务模型 V是指用户界面 C则是控制器 其中 View的定义比较清晰 就是用户界面 M Model模型 完成具体的业务操作 e g 查询数据库 封装对象 V