理解MVC设计架构以及通过jsp、servlet访问数据库,前后端交互实现简单的注册、登录

2023-11-05


前言

经过大概6周的时间刷完Java SE、Java 也叫Jakarta 雅加达的课程,收获满满,从最开始的变量、关键字、条件语句、数组、线性表、栈、队列、二叉树、红黑树到类、接口、集合、IO流、注解、反射、网络编程、到NIO、JDBC、再到EE的内置对象、作用域、状态保存、Servlet、Listener、Filter,这一路唯一的感觉就是我以前了解的Java只是个简介罢了!JVM,多线程、并发编程、继承、多态、还有更重要的面向对象的思想是更值得推敲的东西,本文只是对近6周学的一个小总结,后续会不断完善项目。也希望大家能看到最后,相信你一定有收获!


一、项目搭建

本次是实现简单的注册、登录并简单展示功能,仅适用初学者,深知bug很多,大佬勿喷。
项目整体架构及实现如下
在这里插入图片描述

实现逻辑
在这里插入图片描述

二、业务逻辑

1.注册

部分代码如下:

 public int save(User user) {
        // sql语句
        String sql ="insert into user(username,password) value(?,?)";
        Connection conn =null;
        PreparedStatement statement=null;
        conn = getConn();
        if(conn==null){
            return 0;
        }
        try {
            // 判断是否存在
            int byUsername = findByName(user);
            if (byUsername!=0){
                return 0;
            }
            statement = conn.prepareStatement(sql);
            statement.setString(1,user.getUsername());
            statement.setString(2,user.getPassword());
            // 返回受影响的行数
            return statement.executeUpdate();

        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            closeAll(conn,statement,null);
        }
        return 0;
    }
    public int findByName(User user){
            String sql ="select username from user where username=? ";
            Connection conn =null;
            PreparedStatement statement=null;
            ResultSet resultSet=null;
            conn = getConn();
            if(conn==null){
                return 0;
            }
            try {
                boolean next=false;
                statement = conn.prepareStatement(sql);
                statement.setString(1,user.getUsername());
                resultSet = statement.executeQuery();
                if (resultSet==null){
                    return 0;
                }
                next= resultSet.next();
                if(next){
                    return 1;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            finally {
                closeAll(conn,statement,resultSet);
            }
            return 0;
    }

2.登录

部分代码如下:

    public int loginFind(User user) {
        // sql语句
        String sql ="select username,password from user where username=? and password=?";
        Connection conn =null;
        PreparedStatement statement=null;
        ResultSet resultSet=null;
        // 获取连接
        conn = getConn();
        if(conn==null){
            return 0;
        }
        try {
            boolean next=false;
            //  获取资源
            statement = conn.prepareStatement(sql);
            statement.setString(1,user.getUsername());
            statement.setString(2,user.getPassword());
            resultSet = statement.executeQuery();
            if (resultSet==null){
                return 0;
            }
            // 找到返回 1
            next= resultSet.next();
            if(next){
                return 1;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            closeAll(conn,statement,resultSet);
        }
        return 0;
    }

3.basedao

package com.jess.dao;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * @author Jess
 * @date 2021/10/24
 */
public class BaseDao {
    public static Connection getConn() {
        Context ctx = null;
        try {
            ctx = new InitialContext();
            // 资源获取
            DataSource dataSource =
                    (DataSource) ctx.lookup("java:comp/env/dataSource/mysql/manage");
            return dataSource.getConnection();
        } catch (NamingException | SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void closeAll(Connection connection, Statement statement, ResultSet resultSet) {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

三、效果展示

1、注册

在这里插入图片描述

2、注册

在这里插入图片描述

3、登录成功

在这里插入图片描述

4、显示信息

在这里插入图片描述


四、总结

本文主要是对最近所学知识的一个总结和运用,下面我简单介绍一下业务逻辑

1、jsp 通过表单提交的数据–>get 、post方法向浏览器发送请求,

2、servlet负责解析请求存到内存,(request,respose)------service 作为属性为servlet提供服务,servlet 解析完数据以对象的形式存入内存。

3、service负责业务逻辑的处理,分别调用不同方法处理不同的业务dao层作为属性为service提供属性,

4、dao层通过上层传入的数据直接操作数据库

五、心得体会

本文还缺少很多很多模块,离真实的项目还有很长的距离,比如:没有编写接口dao层,规范性不够,代码实现的耦合性也太高了,很多常量为定义,登录密码未加密,jsp页面也为放到WEB-INF下,可以直接访问,jsp页面也没有试验异步刷新,前端页面也未处理,直接简单的找了两张图片等,但是,很适合初学者了解其中原理,请看上面的总结。
看到这里的宝贝,希望能给个免费的点赞,谢谢大家。还有如果想要全部原码的可以在下方留言或者私信,希望我们可以互相交流,一起进步!



这一路一定会有不如意,一定会有各种为什么,一定也有让你失望、又或者羡慕的人,想一想,你和其他人又不同为什么一定要和别人一样呢。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

理解MVC设计架构以及通过jsp、servlet访问数据库,前后端交互实现简单的注册、登录 的相关文章

随机推荐

  • AR联机初探+官方项目代码解析

    学AR也有一小段时间了 今天给大家分享一下如何让两部以上的设备查看到相同的增强现实景象 在这里作者就以苹果官方的示例来进行解析 一定要把代码下载了和文章对照着看 不然会懵 官方项目代码地址 https developer apple com
  • 前后端连接超时设置

    在application properties中添加 server servlet session timeout 60 单位为秒 在前端添加 ajax timeout 6000 6秒钟 url xxxxxxxxx type post su
  • mxnet for java_如何为mxnet安装R包?

    我曾经使用过R中的 mxnet 软件包 我有一个旧的安装 我可以在R 3 4x中使用它 但现在我想切换到最新的R版本 R 3 5本地 我很乐意在rstudio上使用它 Cloud 包裹在CRAN上 不是吗 现在我尝试按照包裹的说明page
  • 关于microsoft Store被删除了重新下载的问题

    分享一条连接 https jingyan baidu com article 4ae03de3b59d223eff9e6b39 html 另外补充一点 microsoftStore无法联网问题 https www pianshen com
  • 大数据是如何影响何改变我们生活的?

    大数据是如何影响何改变我们生活的 网上一则违法广告 普通市民可能一瞥而过 如今却逃不过重庆工商情报信息工作平台的 法眼 这正是因为重庆市工商局运用大数据 云计算 互联网 等技术手段 在全国工商系统率先建立的重庆工商情报信息工作平台 同样 重
  • 十分钟搭建一个EFK集群

    快速部署搭建ELK ELK 介绍 环境信息 架构 二进制部署 一 系统初始化 二 elasticsearch安装 所有节点 三 filebeat安装使用 四 nginx安装 五 kibana 安装 六访问elasticsearch出现yel
  • 卡方分布的latex代码

    网上没找到答案 自己看了一些还是mathcal字体比较像 最终选择mathcal字体 LaTeX LaTeX LATE X代码 编译示例 mathcal X 2 4 X
  • 深度理解取余/取模运算,你得知道这些...

    大家在日常编程或者学习中都会经常接触到取余 取模运算 那么计算机中取余 取模运算究竟是怎么定义的 读完本篇文章 相信你一点会有很大收获 文章目录 step 1 你可能不知道的四种 取整 方式 1 1 C语言中本质是 向0取整 1 2 flo
  • SpaCy下载及安装

    1 官网给的命令快速安装基本没用 结果就是一直拒绝你的连接 官网 https spacy io 官网是说用下面的两行命令就能够快速安装并使用spacy了 第一行命令是可以很快就成功 但是第二行就来坑了 报错如下图 报错内容是 request
  • 虚拟机的一些命令

    cd 目录名 cd 上一层目录 cd 回到跟目录 ls 当前目录下的内容 ls 目录名 指定目录下的内容 ls a 当前目录下的内容 隐藏内容 ls l 详细列出指定目录或者当前目录下的内容 pwd 查看当前所在的目录 创建目录 mkdir
  • kafka 由于网络原因,最后报错打开的文件过多 (org.apache.zookeeper.ClientCnxn)停止结束服务,求教! --- 采坑

    kafka 运行好好地 今天一用发现有一台服务停了 最后查看日志发现为网络原因 打开文件过多 代理停止 求教大佬解决方案 2019 05 01 17 59 08 224 INFO Socket error occurred 192 168
  • 开关电源基础03:正激和反激开关电源拓扑(1)-正激拓扑

    说在开头 关于薛定谔的波动方程 2 全新的量子理论诞生不到一年 很快面临着粒子和波动的内战 矩阵力学从直接观测到的原子谱线出发 引入矩阵的数学工具 建立了整个新力学的大厦 它强调观测到的分立性 跳跃性 同时又坚持以数学为唯一导向 不为日常生
  • 2016.6.5 计算机网络考试要点第一章之计算机网络性能

    1 8计算机网络性能指标 1 速率 比特率或数据率 比特是计算机中数据量的单位 也是信息论中使用的信息量的单位 意思是 一个二进制数字 因此一个比特就是二进制数字中的一个1或0 当数据率较高时 就可以用kb s k 10的3次方 千 Mb
  • Scanner类中next和nextLine方法的区别

    Scanner类中next和nextLine方法的区别 nextInt next nextDouble 从左往右扫描数据 在扫描到第一个有效字符之前会自动过滤结束标记符 扫描结束标记是 空格 tab键 回车符 不会过滤回车符 nextLin
  • MVC综合案例

    pojo Dept package com qf webpro pojo import java io Serializable public class Dept implements Serializable private int d
  • lua 协同程序(coroutine)

    本文主要是根据菜鸟教程的lua协同程序 coroutine 优化出来的文章 对于网上的lua协同程序的文章 觉得菜鸟教程里的lua协同程序 coroutine 比较完善 但还是有一些地方没有说清楚 对于像我这样的新手学习起来 还是不能完全解
  • python学习之Python count()函数详解

    大家好 依旧是你们的萧萧啊 Python中的count 函数是一种非常常用的方法 用于统计某个元素在列表 元组或字符串中出现的次数 它的使用非常简单 只需要传入要统计的元素作为参数即可 在本篇博客中 我将详细介绍count 函数的用法 并且
  • 数据结构1.1线性表的实现(顺序存储结构)

    一 1 顺序表的优点 1 存储空间连续 方便随时访问 2 结构简单 易于理解 3 易于尾插或尾删和修改 2 顺序表的缺点 1 顺序存储空间容易溢出 不便扩充 2 插入和删除必须移动大量元素 二 顺序表的定义 1 数组静态分配 一开始就定下大
  • RocksDB介绍:一个比LevelDB更彪悍的引擎

    关于LevelDB的资料网上还是比较丰富的 如果你尚未听说过LevelDB 那请稍微预习一下 因为RocksDB实际上是在LevelDB之上做的改进 本文主要侧重在架构上对RocksDB对LevelDB改进的地方做个简单介绍并添加一些个人的
  • 理解MVC设计架构以及通过jsp、servlet访问数据库,前后端交互实现简单的注册、登录

    文章目录 前言 一 项目搭建 二 业务逻辑 1 注册 2 登录 3 basedao 三 效果展示 1 注册 2 注册 3 登录成功 4 显示信息 四 总结 五 心得体会 前言 经过大概6周的时间刷完Java SE Java 也叫Jakart