JavaWeb——MVC架构模式
一、概述:
MVC(Model View Controller)是软件工程中的一种 软件架构模式 ,它把软件系统分为模型、视图和控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时不需要重新编写业务逻辑。
M代表Model模型层,具体功能如下:
1.存放和数据库对应的实体类以及一些用于存储非数据库表完整相关的VO对象;
2.存放一些对数据进行逻辑运算操作的一些业务处理代码;
V代表view视图层,具体功能如下:
1.存放一些视图文件相关的代码,例如html、css以及js等;
2.在前后端分离的项目中,后端已经没有视图文件,该层次已经衍化成独立的前端项目;
C代表Controller控制层,具体功能如下:
1.接收客户端请求,获得请求数据;
2.将准备好的数据响应给客户端;
二、MVC模式下项目中的常见包:
M:
1.实体类包(pojo /entity /bean):专门存放和数据库对应的实体类和一些VO对象;
2.数据库访问包(dao/mapper):专门存放对数据库不同表格CURD方法封装的一些类;
3.服务包(service):专门存放对数据进行业务逻辑运算的一些类;
C:
控制层包(controller);
V:
1.web目录下的视图资源html、css、js、img等
2.前端工程化后,在后端项目中已经不存在了;
三、项目搭建:
项目结构:
1.数据库准备:创建schedule_system数据库并执行如下语句
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 8;
DROP TABLE IF EXISTS `sys_schedule`;
CREATE TABLE `sys_schedule`(
`sid` int NOT NULL AUTO_INCREMENT,
`uid` int NULL DEFAULT NULL,
`title` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0908_ai_Ci NULL DEFAULT NULL,
`completed` int(1) NULL DEFAULT NULL,
PRIMARY KEY(`sid`)USING BTREE
)ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = Utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user`(
`uid` int NOT NULL AUTO_INCREMENT
`username` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`user_pwd` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY(`uid`)USING BTREE,
UNIQUE INDEX `username`(`username`)USING BTREE
)ENGINE = InnoDB CHARACTER SET =utf8mb4 COLLATE=utf8mb4 0900_ai_ci ROW_FORMAT =Dynamic;
INSERT INTO `sys_user` VALUES(1,'zhangsan','e10adc3949ba59abbe56e057f20f883e');
INSERT INTO `sys_user` VALUES(2,'lisi','e10adc3949ba59abbe56e057f20f883e');
SET FOREIGN_KEY_CHECKS = 1;
2.pojo包处理:使用lombok处理getter、setter、equals、hashcode、构造器
lombok使用步骤:
(1)检查idea是否已经安装lombok插件
(2)检查是否勾选enable,annotation,processing
(3)导入lombok依赖,在实体类上添加注解
package com.atguigu.schedule.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@AllArgsConstructor//添加带有全部参数的构造器
@NoArgsConstructor//添加无参构造器
@Data//添加getter、setter、equals、hashcode
public class SysUser implements Serializable{private Integer uid;private String username;private String userPwd;
}
package com.atguigu.schedule.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class SysSchedule implements Serializable{private Integer sid;private Integer uid;private String title;private Integer completed;
}
3.dao包的处理:dao类用于定义针对表格的CURD的方法
每张数据表都应该对应一个dao类,该dao类专门用于封装对该数据表的操作内容
(1).创建BaseDao对象
package com.atguigu.schedule.dao;
import com.atguigu.schedule.util.JDBCUtil;
import java.lang.reflect.Field;
import java.sql.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
public class BaseDao{//公共的查询方法 返回的是单个对象public <T>T baseQueryObject(Class<T> clazz, String sql,Object ... args){T t = null;Connection connection = JDBCUtil.getConnection();PreparedStatement preparedStatement = null;ResultSet resultSet = null;int rows = 0;try{// 准备语句对象preparedStatement = connection.prepareStatement(sql);//设置语句上的参数for(int i=0;i<args.length;i++){preparedStatement.setObject(i +1,args[i]);}// 执行 查询resultSet = preparedStatement.executeQuery();if(resultSet.next()){t = (T) resultSet.getobject(1);}}catch(Exception e){e.printStackTrace();}finally {if(null != resultSet){try{resultSet.close();}catch(SQLException e){e.printStackTrace();}}if(null != preparedStatement){try{preparedStatement.close();}catch(SQLException e){e.printStackTrace();}}JDBCUtil.releaseConnection();}return t;}//公共的查询方法 返回的是对象的集合public <T> List<T> baseQuery(Class clazz,String sql,Object ... args){List<T> list =new ArrayList<>();Connection connection = JDBCUtil.getConnection();PreparedStatement preparedStatement = null;ResultSet resultSet = null:int rows = 0;try {// 准备语句对象preparedStatement = connection.prepareStatement(sql);//设置语句上的参数for(int i=0;i<args.length;i++){preparedStatement.setObject(i +1,args[i]);}// 执行 查询resultSet = preparedStatement.executeQuery();ResultSetMetaData metaData = resultSet.getMetaData();int columnCount = metaData.getColumnCount();//将结果集通过反射封装成实体类对象while(resultSet.next()){//使用反射实例化对象Object obj = clazz.getDeclaredConstructor().newInstance();for(int i=1;i<=columnCount;i++){String columnName = metaData.getColumnLabel(i);Object value = resultSet.getObject(columnName);//处理datetime类型字段和java.util.Data转换问题if(value.getClass().equals(LocalDateTime.class)){value = Timestamp.valueOf((LocalDateTime) value);}Field field=clazz.getDeclaredField(columnName);field.setAccessible(true);field.set(obj,value);}list.add((T)obj);}} catch (Exception e){e.printStackTrace();}finally {if(null != resultSet){try{resultSet.close();}catch(SQLException e){e.printStackTrace();}}if(null != preparedStatement){try{preparedStatement.close();}catch(SQLException e){e.printStackTrace();}}JDBCUtil.releaseConnection();}return list;}// 通用的增删改方法public int baseUpdate(String sql,Object ... args){//获取连接Connection connection = JDBCUtil.getConnection();PreparedStatement preparedStatement = null;int rows =0;try {// 准备语句对象preparedStatement=connection.prepareStatement(sql);//设置语句上的参数for(int i=0;i<args.length;i++){preparedStatement.setObject(i+1,args[i]);}//执行 增删改executeUpdaterows = preparedStatement.executeUpdate();// 释放资源(可选)}catch(SQLException e){e.printStackTrace();}finally{if(null != preparedstatement){try{preparedStatement.close();}catch(SQLException e){throw new RuntimeException(e);}}JDBCUtil.releaseConnection();}return rows;}
}
(2).dao层所有接口:
package com.atguigu.schedule.dao;
public interface SysUserDao {
}
package com.atguigu.schedule.dao;
public interface SysScheduleDao{
}
(3).dao层所有实现类:
package com.atguigu.schedule.dao.impl;
importcom.atguigu.schedule.dao.BaseDao;
import com.atguigu.schedule.dao.SysUserDao;
public class SysUserDaoImpl extends BaseDao implements SysUserDao {
}
package com.atguigu.schedule.dao.impl;
import com.atguigu.schedule.dao.BaseDao;
import com.atguigu.schedule.dao.SysScheduleDao;
public class SysScheduleDaoImpl extends BaseDao implements SysScheduleDao{
}
4.service包处理
(1)接口:
package com.atguigu.schedule.service;
public interface SysUserService{
}
package com.atguigu.schedule.service;
public interface SysScheduleService{
}
(2)实现类:
package com.atguigu.schedule.service.impl;
import com.atguigu.schedule.service.SysUserService;
public class SysUserServiceImpl implements SysUserService{
}
package com.atguigu.schedule.service.impl;
import com.atguigu.schedule.service.SysScheduleService;
public class SysScheduleServiceImpl implements SysScheduleService{
}
5.controller包处理:
(1)BaseController:
package com.atguigu.schedule.controller;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;
public class BaseController extends HttpServlet {@Overrideprotected void service(HttpServletRequest reg, HttpServletResponse resp) throws ServletException,IOException{String requestURI =reg.getRequestURI();String [] split = requestURI.split("/");String methodName = split[split.length-1];Class clazz = this.getClass();try{Method method = clazz.getDeclaredMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);method.setAccessible(true);method.invoke(this,req,resp);}catch(Exception e){e.printStackTrace();}}
}
(2)多个处理器继承BaseController:
package com.atguigu.schedule.controller;
import jakarta.servlet.annotation.WebServlet;
@WebServlet("/user/*")
public class UserController extends BaseController{
}
package com.atguigu.schedule.controller;
import jakarta.servlet.annotation.WebServlet;
@WebServlet("/schedule/*")
public class SysScheduleControllerextends BaseController{
6.加密工具类的使用:
package com.atguigu.schedule.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public final class MD5Util {public static String encrypt(String strSrc){try{char hexChars[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};byte[]bytes = strSrc.getBytes();MessageDigest md = MessageDigest.getInstance("MD5");md.update(bytes);bytes = md.digest();int j= bytes.length;char[] chars = new char[j * 2];int k = 0;for(int i=0;i<bytes.length;i++){byte b= bytes[i];chars[k++]= hexChars[b >>> 4 & 0xf];chars[k++]= hexChars[b & 0xf];}return new String(chars);} catch (NoSuchAlgorithmException e){e.printStackTrace();throw new RuntimeException("MD5加密出错!!!");}}
}
7.注册业务的处理:
(1)controller:
package com.atguigu.schedule.controller;
import com.atguigu.schedule.pojo.SysUser;
import com.atguigu.schedule.service.SysUserService;
import com.atguigu.schedule.service.impl.SysUserServiceImpl;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import iava.io.IOException;
@WebServlet("/user/*")
public class SysUserController extends BaseContoller{private SysUserService userService = new SysUserServiceImpl();protected void regist(HttpServletRequest reg, HttpServletResponse resp) throws ServletException,IOException{//1 接收客户端提交的参数String username = reg.getParameter("username");String userPwd = reg.getParameter("userPwd");//2 调用服务层方法,完成注册功能//将参数放入一个SysUser对象中,在调用regist方法时传入SysUser sysUser = new SysUser(null,username,userPwd);int rows = userService.regist(sysUser);//3 根据注册结果(成功 失败)做页面跳转if(rows>0){resp.sendRedirect("/registSuccess.html");}else{resp.sendRedirect("/registFail.html");}}
} }
(2)service:
package com.atguigu.schedule.service;
import com.atguigu.schedule.pojo.SysUser;
public interface SysUserService {int regist(SysUserregistUser);
}
package com.atguigu.schedule.service.impl;
import com.atguigu.schedule.dao.SysUserDao ;
import com.atguigu.schedule.dao.impl.SysUserDaoImpl;
import com.atguigu.schedule.pojo.SysUser;
import com.atguigu.schedule.service.SysUserService;
import com.atguigu.schedule.util.MD5Util;
public class SysUserServiceImpl implements SysUserService{private SysUserDaouserDao = new SysUserDaoImpl();@Overridepublic int regist(SysUser sysUser){//将用户的明文密码转换为斋文码sysUser.setUserPwd(MD5Util.encrypt(sysUser.getUserPwd()));//调用DAO层的方法将sysUser信息存入数据库return userDao.addSysUser(sysUser);}
}
(3)DAO:
package com.atguigu.schedule.dao;
import com.atguigu.schedule.pojo.SysUser;
public interface SysUserDao {int addSysUser(SysUser sysUser);
}
package com.atguigu.schedule.dao.impl;
import com.atguigu.schedule.dao.BaseDao;
import com.atguigu.schedule.dao.SysUserDao;
import com.atguigu.schedule.pojo.SysUser;
public class SysUserDaoImpl extends BaseDao implements SysUserDao {@Overridepublic int addSysUser(SysUser sysUser){String sql ="insert into sys_user values(DEFAULT,?,?)";return baseUpdate(sql,sysUser.getUsername(),sysUser.getUserPwd());}
}
8.登录业务处理
(1)controller
package com.atguigu.schedule.controller;
import com.atquigu.schedule.pojo.SysUser;
import com.atguigu.schedule.service.SysUserService;
import com.atguigu.schedule.service.impl.SysUserServiceImpl;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import iakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/user/*")
public class SysUserController extends BaseContoller {private SysUserService userService =new SysUserServiceImpl();protected void login(HttpServletRequest reg, HttpServletResponse resp) throws ServletException,IOException{//1.接收用户名和密码String username = req.getParameter("username");String userPwd = reg.getParameter("userPwd");//2.调用服务层方法,根据用户名查询用户信息SysUser loginUser = userService.findByUsername(username);if(null == loginuser){//跳转到用户名有误提示页resp.sendRedirect("/loginusernameError.html");}else if(!M5Util.encrypt(userPwd).equals(loginuser.getUserPwd())){//3 判断密码是否匹配//跳转到密码有误提示页resp.sendRedirect("/loginUserPwdError.html");}else{//4 跳转到首页resp.sendRedirect("/showSchedule.html");}}
}
(2)service
package com.atguigu.schedule.service;
import com.atguigu.schedule.pojo.SysUser;
public interface SysUserservice {SysUser findByUsername(String username);
}
package com.atquigu.schedule.service.impl;
import com.atguigu.schedule.dao.SysUserDao;
import com.atguigu.schedule.dao.impl.SysUserDaoImpl;
import com.atguigu.schedule.pojo.SysUser;
import com.atguigu.schedule.service.SysUserService;
import com.atguigu.schedule.util.MD5Util;
public class SysUserServiceImpl implements SysUserService{private SysUserDao userDao = new SysUserDaoImpl();@Overridepublic SysUser findByUsername(String username){// 调用服务层方法,继续查询return userDao.findByUsername(username):}
}
(3)dao
package com.atguigu.schedule.dao;
import com.atguigu.schedule.pojo.SysUser;
public interface SysUserDao {SysUser findByUsername(String username);
}
package com.atguigu.schedule.dao.impl;
import com.atguigu.schedule.dao.BaseDao;
import com.atguigu.schedule.dao.SysUserDao;
import com.atguigu.schedule.pojo.SysUser;
import java.util.List;
public class SysUserDaoImpl extends BaseDao implements SysUserDao{@Overridepublic SysUser findByUsername(String username){String sql ="select uid,username, user_pwd userPwd from sys_user where username = ?";List<SysUser> userList = baseQuery(SysUser.class, sql, username);return null != userList&& userlist.size()>8? userList.get(0):null;}
{
相关文章:

JavaWeb——MVC架构模式
一、概述: MVC(Model View Controller)是软件工程中的一种 软件架构模式 ,它把软件系统分为模型、视图和控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户…...

Excel求和方法之
一 SUM(),选择要相加的数,回车即可 二 上面的方法还不够快。用下面这个 就成功了 三 还有一种一样快的 选中之后,按下Alt键和键(即Alt)...

Windows Server 域控制服务器安装及相关使用
目录 1.将客户机加入域 2.安装域控制器 3.新建域用户 4.设置用户登录时间,账户过期时间 5.软件分发 编辑 6.换壁纸 7.OU与GPO的概念 域为集中控制,拿下域控是拿下目标的关键 以Windows Server 2022为例 1.将客户机加入域 前提:客…...

linux基础命令(超级详细)
Linux 系统提供了丰富的命令行工具,用于各种文件操作、系统管理和网络配置等任务。以下是一些常用的 Linux 基础命令: 一、 文件和目录操作 1. ls: 列出目录内容 ls 列出当前目录的文件和目录 ls -l 以长格式列出文件和目录,包…...

大模型笔记之-XTuner微调个人小助手认知
前言 使用XTuner 微调个人小助手认知 一、下载模型 #安装魔搭依赖包 pip install modelscope新建download.py内容如下 其中Shanghai_AI_Laboratory/internlm2-chat-1_8b是魔搭对应的模型ID cache_dir/home/aistudio/data/model’为指定下载到本地的目录 from modelscope im…...

用TensorFlow实现线性回归
说明 本文采用TensorFlow框架进行讲解,虽然之前的文章都采用mxnet,但是我发现tensorflow提供了免费的gpu可供使用,所以果断开始改为tensorflow,若要实现文章代码,可以使用colaboratory进行运行,当然&#…...

IT计算机软件系统类毕业论文结构指南:从标题到结论的全景视角
一、背景 在快速发展的IT和人工智能领域,毕业论文不仅是学术研究的重要成果,也展示了学生掌握新技术和应用的能力。随着大数据和智能系统的复杂性增加,毕业设计(毕设)的论文章节安排变得尤为关键。一个结构清晰、内容详…...

leetcode27:移除元素(正解)
移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作…...

docker部署nginx--(部署静态文件和服务)
文档参考 1、http://testingpai.com/article/1649671014266 2、下载nginx docker pull nginx:alpine 然后启动nginx, docker run --rm -it -p 9192:80 nginx:alpine /bin/sh 关闭容器后,自动删除该容器 进入后,启动nginx, nginx进行curl h…...

websocket的介绍及springBoot集成示例
目录 一、什么是Websocket 二、Websocket特点 三、WebSocket与HTTP的区别 四、常见应用场景 五、SpringBoot集成WebSocket 1. 原生注解 2. Spring封装 一、什么是Websocket WebSocket 是一种在单个 TCP 连接上进行 全双工 通信的协议,它可以让客户端和服务器…...

软件测试-自动化测试
自动化测试 测试人员编写自动化测试脚本,维护并解决自动化脚本问题 自动化的主要目的就是用来进行回归测试 回归测试 常见面试题 ⾃动化测试能够取代人工测试吗? ⾃动化测试不⼀定⽐人工测试更能保障系统的可靠性,⾃动化测试是测试⼈员手…...

Linux 安装TELEPORT堡垒机
一、查看官方文档 堡垒机官网地址:走向成功 - Teleport,高效易用的堡垒机 (一)官网资源链接 -》Teleport 在线文档 (二)手动下载安装包 二、压缩包下载和安装 (一)加压下载的安装…...

【14】即时编译器的中间表达形式
中间表达形式(IR) 编译器一般被分为前端和后端。 前端会对输入的程序进行词法分析、语法分析和语义分析,然后生成中间表达形式(IR);后端对IR进行优化,生成目标代码 不考虑解释执行的话…...

Mysql(三)---增删查改(基础)
文章目录 前言1.补充1.修改表名1.2.修改列名1.3.修改列类型1.4.增加新列1.5.删除指定列 2.CRUD3.新增(Create)3.1.单行插入3.2.指定列插入3.3.多行插入 4.数据库的约束4.1.约束的分类4.2.NULL约束4.3.Unique约束4.4.Default 默认值约束4.5.PRIMARY KEY:主键约束4.6.…...

Dialog实现原理分析
在 Android 中,对话框(Dialog)是一种非常常见的用户界面组件,用于向用户提供额外的信息或者请求用户的确认。Android 提供了几种不同类型的对话框,例如简单的消息对话框 (AlertDialog)、进度条对话框 (ProgressDialog)…...

21.1 基于Netty实现聊天
21.1 基于Netty实现聊天 一. 章节概述二. `Netty`介绍三. 阻塞与非阻塞1. 阻塞与非阻塞简介2. BIO同步阻塞3. NIO同步非阻塞4. AIO异步非阻塞IO5. 异步阻塞IO(用的极少)6. 总结四. Netty三种线程模型1. 单线程模型2. 多线程模型3. 主从线程模型五. 构建Netty服务器************…...

尼卡音乐 v1.0.5 — 全新推出的免费音乐听歌软件
尼卡音乐是一款全新推出的免费音乐听歌软件,无需注册登录,打开即拥有全部功能。聚合了六大音源曲库、歌单、排行榜,支持在线试听、无损下载以及高清MV播放。资源全、无广告、更新快,适合寻找高品质音乐体验的用户。 拿走的麻烦评…...

Scratch深潜:解锁递归与分治算法的编程之门
亮眼标题:“Scratch深潜:解锁递归与分治算法的编程之门” 在编程的世界里,递归和分治算法是解决问题的强大工具。Scratch,这款广受儿童和初学者欢迎的图形化编程语言,以其独特的拖拽式编程块,激发了无数年…...

【1.0】vue3的创建
【1.0】vue3的创建 【一】vue3介绍 vue2的所有东西,vue3都兼容 vue3中写js代码由两种,组合式和配置项 配置项api,就是vue2的写法,将数据放进data,方法放进methods等 export default{data(){return {}},methods:…...

刷刷前端手写题
闭包用途 闭包 闭包让你可以在一个内层函数中访问到其外层函数的作用域 防抖 描述 前面所有触发都被取消,最后一次执行,在规定时间之后才会触发,也就是说如果连续快速的触发,用户操作频繁,但只会执行一次 。 常用场…...

论文解读:LONGWRITER: UNLEASHING 10,000+ WORD GENERATION FROM LONG CONTEXT LLMS
摘要 现象:当前的大预言模型可以接受超过100,000个tokens的输入,但是却难以生成超过2000个token的输出。 原因:监督微调过程(SFT)中看到的样本没有足够长的样本。 解决方法: Agent Write,可以将长任务分解为子任务&a…...

一文了解Ansible原理以及常见使用模块
ansible使用手册 1. 简述 Ansible 是一种开源的自动化工具,主要用于配置管理、应用程序部署和任务自动化。 它使用简单的 YAML 语言来定义自动化的任务【playbook】,使得配置和部署变得更加直观和易于管理。 基于SSH协议连接到远程主机来执行指令。 2…...

JavaEE从入门到起飞(九) ~Activiti 工作流
工作流 当一道流程逻辑需要用到多个表单的提交和多个角色的审核共同完成的时候,就可以使用工作流。 工作流一般使用的是第三方技术,也就是说别人帮你创建数据库表和service层、mapper层,你只需要注入工具接口即可使用。 原理:一…...

微服务的保护
一、雪崩问题及解决方案 1.雪崩问题 微服务之间,一个微服务依赖多个其他的微服务。当一个微服务A依赖的一个微服务B出错时,微服务A会被阻塞,但其他不依赖于B的微服务不会受影响。 当有多个微服务依赖于B时,服务器支持的线程和并…...

2024前端面试题-网络篇
1.跨域问题 同源策略:需要协议、域名、端口号相同跨域原因:不符合同源策略便会产生跨域问题解决跨域:JSONP、配置代理、通过CORS解决 2.RPC和HTTP的区别 主要区别是序列化和反序列化,RPC通过二进制高效传输,HTTP是j…...

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——6.vector
1.杨辉三角 . - 力扣(LeetCode) 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<int>> arr;int i 0;int j 0;for (i…...

设计模式---简单工厂模式
简单工厂模式(Simple Factory Pattern) 是一种创建型设计模式,它定义了一个工厂类,通过这个工厂类可以创建不同类型的对象。简单工厂模式的主要目的是将对象的创建逻辑集中在一个地方,简化客户端的代码,使得…...

Vue | Vue 中的 refInForde 用法
refInFor:如果你在渲染函数中给多个元素都应用了相同的 ref 名,那么 $refs.myRef 会变成一个数组。 vue中的refInFor属性是Vue框架中用于在循环渲染的元素上设置引用的一种方式。 在Vue中,ref属性通常用于给元素或子组件注册引用信息&am…...

【原创】java+swing+mysql房屋租赁管理系统设计与实现
个人主页:程序员杨工 个人简介:从事软件开发多年,前后端均有涉猎,具有丰富的开发经验 博客内容:全栈开发,分享Java、Python、Php、小程序、前后端、数据库经验和实战 文末有本人名片,希望和大家…...

Django 中render、redirect 和 HttpResponse的区别
在 Python 的 Web 框架 Django 中,render, redirect 和 HttpResponse 是用于处理 HTTP 响应的不同函数,它们各自有不同的用途: HttpResponse: HttpResponse 是 Django 中最基本的响应对象,用于返回给客户端的 HTTP 响应…...