WEB后端复习——MVC、SSM【含登录页面代码】

MVC(Model-View-Controller)是一种软件设计模式,用于将应用程序分解为三个相互关联的组件:模型(Model)、视图(View)和控制器(Controller)。这种模式在构建用户界面和图形界面应用程序时特别有用,它促进了代码的模块化和可维护性。
以下是MVC模式中每个组件的简要描述:
1. **模型(Model)**:
   - 模型是应用程序的核心,代表应用程序的数据和业务逻辑
   - 它管理应用程序的状态和数据,并实现所有的业务规则。
   - 模型不直接与用户界面交互,它通过控制器接收用户的输入和数据请求。
2. **视图(View)**:
   - 视图是用户界面的一部分,负责展示数据(模型)给用户,并接收用户的输入。
   - 它从模型中获取数据,并定义数据的呈现方式。
   - 视图应该尽可能简单,不包含任何业务逻辑。
3. **控制器(Controller)**:
   - 控制器是模型和视图之间的中介,它接收用户的输入并调用模型进行相应的更新。
   - 它还负责选择视图来显示模型的数据,并处理用户的交互。
   - 控制器解释用户的输入,并转换这些输入为对模型的操作或对视图的更新。
MVC模式的工作流程通常如下:
1. 用户与视图交互,发送请求。
2. 控制器接收请求,并决定调用哪个模型来处理请求。
3. 模型根据请求执行业务逻辑,并可能更新其状态。
4. 控制器选择合适的视图来显示模型的数据。
5. 视图呈现数据给用户。
MVC模式的主要优点包括:
- **代码分离**:业务逻辑、数据和用户界面被分离,使得代码更易于管理和维护。
- **可扩展性**:由于组件之间的低耦合,可以独立地修改或替换模型、视图和控制器。
- **可复用性**:模型和控制器可以在不同的视图上复用,视图可以在不同的模型上复用。
- **测试友好**:由于业务逻辑和数据与用户界面分离,可以更容易地进行单元测试。
MVC模式被广泛用于Web应用程序开发,特别是在Java的Spring框架、ASP.NET MVC、Ruby on Rails等Web开发框架中。


SSM框架是指Spring、SpringMVC和MyBatis这三个开源框架的集合,它们通常一起使用来构建复杂的Java Web应用程序。每个框架都承担着不同的角色:
1. **Spring**:Spring是一个轻量级的Java企业级应用开发框架,主要提供IoC(控制反转)和AOP(面向切面编程)的支持。Spring框架的核心功能是提供依赖注入(DI),这使得应用程序的组件更加模块化,易于测试和重用。Spring还提供了对事务管理、数据访问、消息传递、安全性等企业服务的支持。
2. **SpringMVC**:SpringMVC是Spring框架的一部分,专门用于构建Web应用程序的MVC(模型-视图-控制器)模式实现。它分离了应用程序的输入、处理和输出,使得代码更加清晰和易于维护。SpringMVC处理HTTP请求并将它们映射到特定的处理器方法,这些方法通常返回模型和视图,以呈现给用户。
3. **MyBatis**:MyBatis是一个持久层框架,它提供了对数据库的操作支持。MyBatis使用简单的XML或注解用于配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects)映射成数据库中的记录。MyBatis的主要特点是灵活,它允许开发者自己编写SQL,从而提供了更好的性能和可定制性。
SSM框架的结合使用,可以提供一种分层架构,其中:
- Spring负责管理应用程序的业务逻辑和依赖注入。
- SpringMVC负责处理Web层的请求和响应。
- MyBatis负责数据访问层的操作,即与数据库的交互。
这种分层架构有助于提高代码的可读性、可维护性和可扩展性。SSM框架是构建大型Java Web应用程序的流行选择,因为它结合了三个框架的最佳特性,提供了一个强大、灵活且易于使用的开发环境。
 


Spring框架的三个核心技术是IoC(控制反转)、DI(依赖注入)和AOP(面向切面编程)。下面是这三个技术的简述:
1. **IoC(控制反转)**:
   - 控制反转是一种设计原则,它将对象创建和依赖管理的控制权从程序代码转移到外部容器(在Spring中是Spring容器)。
   - 通过IoC,开发者不再直接在代码中创建对象和配置依赖,而是通过配置文件或注解来描述这些关系,由Spring容器负责对象的创建和依赖的注入。
   - IoC有助于减少代码的耦合度,提高代码的可测试性和可维护性。
2. **DI(依赖注入)**:
   - 依赖注入是IoC的一种实现方式,它允许将依赖的对象通过构造函数、工厂方法或属性设置注入到另一个对象中。
   - Spring通过DI来管理应用程序中的对象依赖关系,使得开发者可以专注于业务逻辑,而不必担心对象的创建和依赖问题。
   - DI有助于实现模块化和可重用的组件,同时也使得单元测试更加容易。
3. **AOP(面向切面编程)**:
   - 面向切面编程是一种编程范式,它允许开发者将横切关注点(如日志、事务、安全等)与业务逻辑分离。
   - AOP通过切面(Aspect)来定义横切关注点,并通过通知(Advice)将这些关注点织入到程序的指定位置(连接点,Join Point)。
   - Spring AOP提供了一种声明式的方式来管理横切关注点,从而减少了代码的重复性和复杂性,提高了代码的可维护性。
总结来说,IoC和DI使得依赖管理更加灵活和可配置,而AOP则提供了在不修改核心业务逻辑的情况下,将横切关注点织入到应用程序中的能力。这三个核心技术共同构成了Spring框架的核心优势,使得它成为开发企业级Java应用程序的流行选择。
 


【登录操作】

①业务逻辑层(模型)建立 JavaBean类 User【GET SET方法 无参构造方法】

public class User {private String username;private String password;public User() {}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;}

②接口类 UserDao 

public interface UserDao {void saveUser(User user);ArrayList<User> selectUser();
}

③接口实现 UserDaoimpl

3.1实现数据库链接

public class UserDaoimpl  implements UserDao{//先接入JDBCprivate static String driver = "com.mysql.jdbc.Driver";private static String dbUrl = "jdbc:mysql://localhost:3306/db";private static String dbUser = "root";private static String dbpsw="123456";//无参构造法public UserDaoimpl(){}//获取Connectionpublic Connection getConnection(){Connection con = null;try {Class.forName(driver);con = DriverManager.getConnection(dbUrl,dbUser,dbpsw);}catch (Exception e){e.printStackTrace();}return con;}
}

3.2实现保存用户信息功能(在impl类中继续添加方法)

    @Overridepublic void saveUser(User user) {Connection con =null;PreparedStatement stmt =null;try {con.setAutoCommit(false);con = getConnection();String sql = "insert into user (username,password) values (?,?)";stmt = con.prepareStatement(sql);stmt.setString(1,user.getUsername());stmt.setString(2,user.getPassword());stmt.execute();con.commit();} catch (Exception e){try {con.rollback();}catch (SQLException s){s.printStackTrace();}finally {try {stmt.close();con.close();}catch (Exception e){e.printStackTrace();}}}}

3.3查询所有用户信息

    @Overridepublic ArrayList<User> selectUser() {Connection con= null;PreparedStatement pstm =null;ResultSet rs = null;ArrayList<User> users =new ArrayList<>();try {con = getConnection();String sql = "select * from User";pstm = con.prepareStatement(sql);rs = pstm.executeQuery();User user =new User();while (rs.next()){user.setUsername(rs.getString(1));user.setPassword(rs.getString(2));users.add(user);}rs.close();pstm.close();con.close();} catch (SQLException e) {throw new RuntimeException(e);}return users;}
}

④Servlet类

@WebServlet("/login")
public class Http extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String name = req.getParameter("username");String psw = req.getParameter("password");User user = new User();UserDao userDao =new UserDaoimpl();ArrayList<User> users = userDao.selectUser();//实现登录功能//实现条件查询方法 与查询类似只需更改sql语句//用getParameter接受到的name psw与数据库中的一致if (name.equals(users.get(0).getUsername())&&psw.equals(users.get(0).getPassword())){req.setAttribute("username",name);//携带name返回req.getRequestDispatcher("/welcome.jsp").forward(req,resp);//跳转至welcome页 请求转发携带信息return;}else {resp.sendRedirect("/login.jsp");//重定向不携带信息}}
}

⑤表单提交

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><form action="login" name="1" ><input type="text" placeholder="name" name="username"><br><input type="password" name="password" placeholder="psw"><br><button type="submit" value="login">denglu</button></form></body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/11593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人学导论实验1—CoppeliaSim 平台介绍及初步使用BJTU

1. 实验内容分析 对实验内容的理解及关键点&#xff1a; 理解这个实验的关键点在于理解如何使用CoppeliaSim和MATLAB来控制和操作机器人。需要熟悉这两个工具的基本操作&#xff0c;例如如何加载场景、如何修改机器人参数、如何使用MATLAB客户端程序来控制机器人等。此外&#…

Docker 部署 Prometheus 实现一个极简的 QPS 监控

背景 : Prometheus 是近年来最流行的开源监控框架, 其功能强大且易于使用, 拥有各种主流后端语言(Java/Go/Python/Node.js等)与各种场景(如web handler/ k8s/Nginx/MySQL等)的客户端, 并自带图形化显示页面。分享一个快速入门Prometheus 的教程, 实现一个极简的, 后端开发需要特…

Nginx-基础-基础配置-Location

Location 参数匹配模式 参数匹配方式匹配模式说明注意事项精准匹配普通字符串匹配用于标准uri前&#xff0c;要求请求字符串与uri精准匹配&#xff0c;成功则立即处理&#xff0c;nginx停止搜索其他匹配。~正则匹配正则表达式匹配用于正则uri&#xff0c;表示uri包含正则表达…

使用 Docker 轻松部署 Spring Boot 应用

当今软件开发领域&#xff0c;Docker 和 Spring Boot 的组合已成为开发和部署应用程序的黄金标准。在这篇博客中&#xff0c;我们将详细探讨如何将 Spring Boot 应用容器化并使用 Docker 进行部署&#xff0c;确保你的部署过程既高效又可靠。 引言 Docker 提供了一个标准化的…

基于SSM的理发店会员管理系统的设计和实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的理发店会员管理系统的设计和实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0…

Docker安装达梦数据库

1.确保已安装Docker 可参考&#xff1a;Linux安装Docker-CSDN博客 2.上传dm镜像并导入安装包 可以从&#xff1a;产品下载 | 达梦数据库下载dm镜像&#xff0c;如下图&#xff1a; docker load -i dm8_20230808.tar 3.导入后查看镜像 docker images 4.启动容器 docker run …

图的概念、性质和存储与简单遍历

前置知识&#xff1a;树的基本概念及性质 为了保证学习效果&#xff0c;请保证已经掌握前置知识之后&#xff0c;再来学习本章节&#xff01;如果在阅读中遇到困难&#xff0c;也可以回到前面章节查阅。 学习目标 掌握图的基本概念掌握图的一些性质 图的概念 基本概念 图 (…

Pytorch如何计算网络参数

方法一. 利用pytorch自身 PyTorch是一个流行的深度学习框架&#xff0c;它允许研究人员和开发者快速构建和训练神经网络。计算一个PyTorch网络的参数量通常涉及两个步骤&#xff1a;确定网络中每个层的参数数量&#xff0c;并将它们加起来得到总数。 以下是在PyTorch中计算网…

如何在 CloudFlare 里屏蔽/拦截某个 IP 或者 IP 地址段

最近除了接的 CloudFlare 代配置订单基本很少折腾自己的 CloudFlare 配置了,今天给大家简单的讲解一下如何在 CloudFlare 里屏蔽/拦截 IP 地址和 IP 地址段,虽然明月一直都很反感针对 IP 的屏蔽拦截,但不得不说有时候还是很有必要的。并且,既然可以拦截屏蔽 IP 自然也可以但…

鸿蒙内核源码分析(VFS篇) | 文件系统和谐共处的基础

基本概念 | 官方定义 VFS&#xff08;Virtual File System&#xff09;是文件系统的虚拟层&#xff0c;它不是一个实际的文件系统&#xff0c;而是一个异构文件系统之上的软件粘合层&#xff0c;为用户提供统一的类Unix文件操作接口。由于不同类型的文件系统接口不统一&#x…

Flink HA模式下JobManager切换时发送告警

资源&版本信息 Flink版本1.14.6 运行平台&#xff1a;K8s HA使用ZK&#xff08;使用K8s的ETC应该是一个道理&#xff09; 详解Flink HA原理 Flink启动时会创建HighAvailabilityServices提供HA和相关基础服务&#xff0c;其中包括leaderRetrievalService和LeaderElecti…

搜索引擎的设计与实现(二)

目录 3 搜索引擎的基本原理 3.1搜索引擎的基本组成及其功能 l.搜索器 (Crawler) 2.索引器(Indexer) 3.检索器(Searcher) 4.用户接口(UserInterface) 3.2搜索引擎的详细工作流程 4 系统分析与设计 4.1系统分析 4.2系统概要设计 4.2系统实现目标 前面内容请移步 搜索引…

Rust 语言不支持 goto 语句

一、Rust 不提供 goto 语句 Rust 语言并没有提供 goto 语句。goto 语句在很多现代编程语言中已经不再被推荐使用&#xff0c;因为它可能导致代码的流程变得难以跟踪和理解&#xff0c;特别是在复杂的程序中。Rust 语言设计者选择了更加结构化和可预测的控制流语句&#xff0c;…

关于C++多态的复习总结

多态 简介: 面向对象的三大特性之一&#xff0c;多态顾名思义即具有多种形态&#xff0c;即去执行某个行为时&#xff0c;当不同的对象去执行时会产生不同的状态 构成多态的条件 条件一 必须通过基类&#xff08;父类&#xff09;的指针或者引用调用虚函数&#xff08;函数…

宁夏银川市起名专家的老师颜廷利:死神(死亡)并不可怕,可怕的是...

在中国优秀传统文化之中&#xff0c;汉语‘巳’字与‘四’同音&#xff0c;在阿拉伯数字里面&#xff0c;通常用‘4’来表示&#xff1b; 湖南长沙、四川成都、重庆、宁夏银川最靠谱最厉害的起名大师的老师颜廷利教授指出&#xff0c;作为汉语‘九’字&#xff0c;倘若是换一个…

FreeRTOS中断管理

FreeRTOS中断管理 基于STM32_stm32 freertos 按键中断-CSDN博客 更加详情请看以上链接↑ 中断优先级 任何中断的优先级都大于任务! 在我们的操作系统,中断同样是具有优先级的,并且我们也可以设置它的优先级,但是他的优先 级并不是从 0~15 ,默认情况下它是从 5~15 ,…

[ACTF新生赛2020]SoulLike

没见过的错误&#xff1a; ida /ctg目录下的hexrays.cfg文件中的MAX_FUNCSIZE64 改为 MAX_FUNCSIZE1024 然后就是一堆数据 反正就是12个字符 from pwn import * flag"actf{" k0 for n in range(12):for i in range(33,127):pprocess("./SoulLike")_flag…

94.二叉树的中序遍历

刷算法题&#xff1a; 第一遍&#xff1a;1.看5分钟&#xff0c;没思路看题解 2.通过题解改进自己的解法&#xff0c;并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步&#xff0c;下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

Python爬虫入门:网络世界的宝藏猎人

今天阿佑将带你踏上Python的肩膀&#xff0c;成为一名网络世界的宝藏猎人&#xff01; 文章目录 1. 引言1.1 简述Python在爬虫领域的地位1.2 阐明学习网络基础对爬虫的重要性 2. 背景介绍2.1 Python语言的流行与适用场景2.2 网络通信基础概念及其在数据抓取中的角色 3. Python基…

今日总结2024/5/13

今日学习了01背包求具体方案的方法 Acwing.12 背包问题求具体方案 由于背包是从小到大枚举物品&#xff0c;只能从后往前判断是从哪个状态递推过来的&#xff0c;而该题要求按字典序顺序输出字典序最小的最优方案 因此要将物品从大到小枚举&#xff0c;判断时从小到大判断是…