java-springmvc 01
springmvc也是在spring framework中的,不是一个单独的项目
MVC就是和Tomcat有关。
01.MVC启动的第一步,启动Tomcat(这个和springboot的run方法启动Tomcat有关)
02.SpringMVC中,最为核心的就是DispatcherServlet,在启动Tomcat的过程中:
- Tomcat会先创建DispatcherServlet对象(这一步在手写springboot框架中已经写到,Tomcat在启动的时候会启动DispatcherServlet)
- 然后调用DispatcherServlet对象的init()
DispatcherServlet对象的init()
01.DispatcherServlet类的init()
public class DispatcherServlet extends FrameworkServlet {//DispatcherServlet中没有init方法,在父类中找
}
HttpServletBean类
@Overridepublic final void init() throws ServletException {// 解析 init-param 并封装只 pvs 中(xml)PropertyValues pvs = new ServletConfigPropertyValues(getServletConfig(), this.requiredProperties);if (!pvs.isEmpty()) {try {// 将当前的这个 Servlet 类转化为一个 BeanWrapper,从而能够以 Spring 的方法来对 init-param 的值进行注入BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(this);ResourceLoader resourceLoader = new ServletContextResourceLoader(getServletContext());bw.registerCustomEditor(Resource.class, new ResourceEditor(resourceLoader, getEnvironment()));initBeanWrapper(bw);// 属性注入bw.setPropertyValues(pvs, true);}catch (BeansException ex) {if (logger.isErrorEnabled()) {logger.error("Failed to set bean properties on servlet '" + getServletName() + "'", ex);}throw ex;}}// Let subclasses do whatever initialization they like.// 初始化Servlet,创建Spring容器initServletBean();}
DispatcherServlet 继承 httpservletbean
02.FrameworkServlet
public static final Class<?> DEFAULT_CONTEXT_CLASS = XmlWebApplicationContext.class;
03.initServletBean
protected final void initServletBean() throws ServletException {getServletContext().log("Initializing Spring " + getClass().getSimpleName() + " '" + getServletName() + "'");if (logger.isInfoEnabled()) {logger.info("Initializing Servlet '" + getServletName() + "'");}long startTime = System.currentTimeMillis();try {this.webApplicationContext = initWebApplicationContext();// 空方法,无实现·initFrameworkServlet();}catch (ServletException | RuntimeException ex) {logger.error("Context initialization failed", ex);throw ex;}if (logger.isDebugEnabled()) {String value = this.enableLoggingRequestDetails ?"shown which may lead to unsafe logging of potentially sensitive data" :"masked to prevent unsafe logging of potentially sensitive data";logger.debug("enableLoggingRequestDetails='" + this.enableLoggingRequestDetails +"': request parameters and headers will be " + value);}if (logger.isInfoEnabled()) {logger.info("Completed initialization in " + (System.currentTimeMillis() - startTime) + " ms");}}
04initWebApplicationContext
protected WebApplicationContext initWebApplicationContext() {// 获得ContextLoaderListener存的父容器WebApplicationContext rootContext =WebApplicationContextUtils.getWebApplicationContext(getServletContext());WebApplicationContext wac = null;if (this.webApplicationContext != null) {// 获得子容器wac = this.webApplicationContext;if (wac instanceof ConfigurableWebApplicationContext) {ConfigurableWebApplicationContext cwac = (ConfigurableWebApplicationContext) wac;if (!cwac.isActive()) {// 如果没有设置父容器 spring doGetBeanif (cwac.getParent() == null) {cwac.setParent(rootContext);}// 配置并且加载子容器configureAndRefreshWebApplicationContext(cwac);}}}if (wac == null) {// 从servlet上下文根据<contextAttribute>名字从域里面获取wac = findWebApplicationContext();}if (wac == null) {// xml会在这里创建wac = createWebApplicationContext(rootContext);}//refreshEventReceived 它会在容器加载完设置为true (通过事件onApplicationEvent)// springboot在这初始化组件if (!this.refreshEventReceived) {synchronized (this.onRefreshMonitor) {onRefresh(wac);}}if (this.publishContext) {// 将当前容器放到servlet域中, 可以再创建子容器String attrName = getServletContextAttributeName();getServletContext().setAttribute(attrName, wac);}return wac;}
相关文章:
java-springmvc 01
springmvc也是在spring framework中的,不是一个单独的项目 MVC就是和Tomcat有关。 01.MVC启动的第一步,启动Tomcat(这个和springboot的run方法启动Tomcat有关) 02.SpringMVC中,最为核心的就是DispatcherServlet&…...
SecuPress Pro 专业级WordPress网站安全防护插件优化版
下载地址:SecuPress Pro 专业版.zip SecuPress Pro:专业的WordPress安全解决方案 如果您没有时间进行每周扫描,SecuPress Pro将是您的理想选择。SecuPress Pro提供了所有SecuPress Free的功能,同时还增加了一些高级选项ÿ…...
linux 查看nginx日志
在 Linux 系统中,查看 Nginx 日志通常涉及以下几个步骤: 确定日志文件位置:Nginx 的日志文件通常位于 /etc/nginx/logs 或 /var/log/nginx。具体位置取决于您在安装 Nginx 时的配置。 查看访问日志:Nginx 的访问日志默认命名为 a…...
iOS - 多线程-GCD-队列组
文章目录 iOS - 多线程-GCD-队列组1. 队列组1.1 基本使用步骤 iOS - 多线程-GCD-队列组 开发过程中,有时候想实现这样的效果 多个任务并发执行所有任务执行完成后,进行下一步处理(比如回到主线程刷新UI) 1. 队列组 可以使用GC…...
1052. 【NOIP2016备赛】方阵操作(square)
1052. 【NOIP2016备赛】方阵操作(square) (Input: square.in, Output: square.out) 时间限制: 1 s 空间限制: 256 MB 题目描述 小 Z 给你一个 n n 的方阵,要求你完成 Q 次操作: 1. 1 i j k,将 ai,j 修改为 k。 2. 2 i j,交…...
Python打怪升级(4)
在计算机领域常常有说"合法"和"非法"指的是:是否合理,是否有效,并不是指触犯了法律。 random.randint(begin,end) 详细讲解一下这个random是指模板,也就是别人写好的代码直接来用,在Python当中,…...
2024年【危险化学品生产单位安全生产管理人员】考试题库及危险化学品生产单位安全生产管理人员考试报名
题库来源:安全生产模拟考试一点通公众号小程序 危险化学品生产单位安全生产管理人员考试题库参考答案及危险化学品生产单位安全生产管理人员考试试题解析是安全生产模拟考试一点通题库老师及危险化学品生产单位安全生产管理人员操作证已考过的学员汇总,…...
动态IP与静态IP的区别,你选对了吗?
在互联网世界中,IP地址是每台设备在网络上的唯一标识。这些地址可以是动态的,也可以是静态的。对于非专业人士来说,理解这两者之间的区别可能会有些困难。本文旨在深入探讨动态IP和静态IP的主要差异,帮助读者根据自己的需求做出明…...
jasypt组件死锁bug案例分享
事故描述 1、上午9.55发布了一个Apollo动态配置参数; 2、片刻后,服务器接口开始出现大量的超时告警,似乎是某资源被耗尽不足分配; 3、正值业务请求高峰的上午十点(平台上午10点会有一些活动会拉一波用户流量&#x…...
golang上传文件到ftp服务器
之前有个业务需要把文件上传到ftp服务器,写了一个上传ftp的功能 package ftpimport "context"type Client interface {// UploadFile 上传文件UploadFile(ctx context.Context, opt *UploadFileOpt) error }type UploadFileOpt struct {Data […...
数据治理和数据管理 傻傻分不清楚?
互联网时代,数据,这一无形资产,已成为现代企业的核心竞争力。如何高效地管理和利用数据,成为企业关注的焦点。在这个过程中,数据治理(Data Governance)和数据管理(Data Management&a…...
linux磁盘原理
在linux系统中,对磁盘进行管理与windows系统类似,都要先分区,格式化,创建文件系统,挂载目录,数据写入...
react 使用WEB3.0控件开发包 V3.0接入海康威视摄像头
1、下载官方安装包: 2、安装官方插件 3、引入文件 在public/index 中引入监控依赖,这三个文件可以在下载的官方demo中找到 4、react 中使用 useEffect(() > { const ipInfo :[192.168.xxxx];//初始化摄像头const WebVideoCtrl window.WebVideoCtrl…...
数据可视化———Tableau
基本认识: 维度:定性—字符串文本,日期和日期时间等等 度量:定量—连续值,一般属于数值 数据类型: 数值 日期/日期时间 字符串 布尔值 地理值 运算符 算数运算符:加减乘除,%取余,…...
【黑马头条】-day12项目部署和发布-jenkins
文章目录 1 持续集成2 软件开发模式2.1 瀑布模式2.2 敏捷开发2.2.1 迭代开发2.2.2 增量开发 3 Jenkins3.1 Jenkins安装3.1.1 导入镜像3.1.2 配置3.1.3 初始化设置 3.2 插件安装3.3 服务器环境准备3.3.1 Docker安装配置3.3.2 Git安装配置3.3.3 Maven安装配置 3.4 Jenkins工具配置…...
学习操作系统路线
操作系统 简介 本课程为计算机专业学生量身定制,补足计算机操作系统相关知识,查漏补缺,也可用于考研复习。内容包括:操作统概述、进程管理、内存管理、文件管理、输入/输出管理等章节。内容力求精炼、重点突出、条理清晰、深入浅…...
uniapp微信小程序(商城项目)
最近,闲来无事,打算学一下uniapp小程序 于是在跟着某站上学着做了一个小程序,主要是为了学uniapp和vue。某站黑马优购 完成的功能主要有:首页、搜索、分类和购物车。 有人问了为什么没有登录、和添加订单呢?问的很好…...
Linux的自动化脚本:使用crul命令下载文件,实现断点续传
目录 一、要求 二、解决思路 (一)curl工具可以进行文件传输,可以实现手动断点续传 1、使用 --range 选项: 2. 使用 --continue-at 选项: (二)编写shell脚本调用curl命令,实现自…...
Golang | Leetcode Golang题解之第46题全排列
题目: 题解: func permute(nums []int) [][]int {var (n len(nums)dfs func(vals []int) // 已选择数 排列为vals 后续回溯继续选择 直至选完ans [][]int)dfs func(vals []int) {//边界if len(vals) n {ans append(ans, vals)}//转移 枚举选哪个f…...
MySQL数据表记录删操作
删除操作 作用删除表里的记录行(都是整行整行的删除的) 1.单表的删除 语法: delete from 表名 where 要删除的记录筛选条件; 案例:删除员工编号大于203的员工信息 delete from employees where employee_id>203; 2.多表…...
Python浅谈清朝秋海棠叶版图
1、清朝疆域概述: 清朝是我国最后一个封建王朝,其始于1616年建州女真部努尔哈赤建立后金,此后统一女真各部、东北地区。后又降服漠南蒙古,1644年入关打败农民起义军、灭南明,削三藩,复台湾。后又收外蒙&am…...
Linux之线程管理
目录 第1关:创建线程 任务描述 相关知识 使用pthread_create函数创建线程 编程要求 答案: 第2关:线程挂起 任务描述 相关知识 使用pthread_join挂起线程 编程要求 答案: 第3关:线程终止 任务描述 相关知识 使用pthread…...
.net反射(Reflection)
文章目录 一.概念:二.反射的作用:三.代码案例:四.运行结果: 一.概念: .NET 反射(Reflection)是指在运行时动态地检查、访问和修改程序集中的类型、成员和对象的能力。通过反射,你可…...
白平衡简介
文章目录 白平衡的概念白平衡的调节常见的白平衡模式 白平衡的概念 白平衡是指摄影、摄像和显示技术中的一项重要概念,用于调节图像中的白色或中性灰色的色彩,使其看起来在不同光源条件下都是准确的白色或灰色。白平衡的主要目的是确保图像的色彩准确性…...
centos7.9下安装SVN服务
一、安装subversion yum install -y subversion #安装svn mkdir -p /data/svnrepos/java #自定义svn仓库位置/data/svnrepos,自定义一个项目叫svn(这里新建目录) svnadmin create /data/svnrepos/java #创建一…...
iStat Menus for Mac:强大的系统监控工具
iStat Menus for Mac是一款功能强大的系统监控工具,专为Mac用户设计,旨在帮助用户全面了解电脑的运行状态,提高电脑的性能和稳定性。 iStat Menus for Mac v6.73 (1239)中文版下载 该软件可以实时监测CPU使用率、内存占用、网络速度、硬盘活动…...
NumPy 1.26 中文官方指南(四)
附加文件 术语表 原文:numpy.org/doc/1.26/glossary.html (n,) 括号中跟着逗号的数字表示一个具有一个元素的元组。尾随逗号将一个元素元组与括号n区分开。 -1 在维度入口中,指示 NumPy 选择长度,以保持数组元素总数不变。 >>> n…...
Python flask
Flask 是一个用 Python 编写的轻量级 Web 应用框架。它被设计为易于使用和扩展,使其成为构建简单网站到复杂的、动态的 web 应用程序的理想选择。以下是 Flask 的一些基本组件和概念: 主要组件 Flask:框架本身,提供基本的功能来处…...
2-token生成
Token是密码学中的一个概念,可以用作身份验证凭证。在计算机领域中,token可以是一个字符串,用于标识用户的身份和权限。当用户进行身份验证时,他们通常会收到一个token,以便在将来的请求中用作凭证。 在互联网应用程序…...
Flutter 上架如何解决 ITMS-91053 问题
最近,我的 Flutter App 发布到 TestFlight 后,就会收到一封邮件:The uploaded build for YOUR APP has one or more issues. 上面的邮件主要是说,我的 App 缺少了调用 API 的声明,以前从来没看到过,上网一查…...
PgSQL的登录相关(Ubuntu22.04)
一 将用户设为密码登录方式 1 修改用户的密码 sudo -u postgres psql -c "ALTER USER yuhui WITH PASSWORD xinmima;" 2 修改配置,指定用户yuhui使用密码登录 sudo vi /etc/postgresql/16/main/pg_hba.conf local all postgres …...
ThingsBoard处理设备上报的属性并转换为可读属性
一、前言 二、案例 1、AI生成JSON数据体 2、将json数据体直接通过遥测topic发送查看效果 3、可查看目前整个数据都在一起 编辑 4、配置附规则链路 5、对msg的消息值,进行数据的转换,并从新进行赋值。 6、规则链路关联关系 7、再次通过MQTT发送遥…...
03-JAVA设计模式
设计模式GOF23 GOF23是指由设计模式经典名著《Design Patterns: Elements of Reusable Object-Oriented Software》(中译本名为《设计模式——可复用面向对象软件的基础》)的四位作者Erich Gamma、Richard Helm、Ralph Johnson、以及John Vlissides提出…...
Aws Nat Gateway
要点 NAT网关要能访问外网,所以需要部署在有互联网网关的Public子网中。 关键: NAT网关创建是选择子网,一定要选择公有子网(有互联网网关子网) 特别注意: 新建nat网关的时候,选择的子网一定…...
SLICEM是如何将查找表配置为分布式RAM/移位寄存器的
1.首先说SliceM和SliceL如何配置为ROM的 一个SLICE包含4个六输入查找表,因此每个查找表就能存储64bit的数据,要实现128bit的ROM,只需要通过两个LUT就可实现,具体如下表: 2.如何配置成为分布式RAM SLICEM中的LUT如下图ÿ…...
Echarts-知识图谱
Echarts-知识图谱 demo地址 打开CodePen 效果 思路 1. 生成根节点 2. 根据子节点距离与根节点的角度关系,生成子节点坐标,进而生成子节点 3. 从子节点上按角度生成对应的子节点 4. 递归将根节点与每一层级子节点连线核心代码 定义节点配置 functio…...
Scala 05 —— 函数式编程底层逻辑
Scala 05 —— 函数式编程底层逻辑 该文章来自2023/1/14的清华大学交叉信息学院助理教授——袁洋演讲。 文章目录 Scala 05 —— 函数式编程底层逻辑函数式编程假如...副作用是必须的?函数的定义函数是数据的函数,不是数字的函数如何把业务逻辑做成纯函…...
在 Node.js 中配置代理 IP 采集文章
不说废话,直接上代码: const http require(http); const https require(https);// 之后可以使用 http 或 https 模块发起请求,它们将自动使用配置的代理 // 代理ip:https://www.kuaidaili.com/?refrg3jlsko0ymg const proxy …...
ESLlint重大更新后,使用旧版ESLint搭配Prettier的配置方式
概要 就在前几天,ESLint迎来了一次重大更新,9.0.0版本,根据官方文档介绍,使用新版的先决条件是Node.js版本必须是18.18.0、20.9.0,或者是>21.1.0的版本,新版ESLint将不再直接支持以下旧版配置(非扁平化…...
springcloud Ribbon的详解
1、Ribbon是什么 Ribbon是Netflix发布的开源项目,Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的框架。 2、Ribbon能干什么 LB负载均衡(Load Balance)是什么?简单的说就是将用户的请求平摊的分配到多个服务上,从而达…...
超级好用的C++实用库之Des加解密
概述 DES(Data Encryption Standard,数据加密标准)是一种历史悠久的对称密钥加密算法,由IBM公司在1970年代设计,并于1977年被美国国家标准局选作联邦资料处理标准。DES使用56位密钥对64位的数据块进行操作,…...
关于MCU核心板的一些常见问题
BGA植球与焊接(多涂焊油): 【BGA芯片是真麻烦,主要是植锡珠太麻烦了,拆一次就得重新植】https://www.bilibili.com/video/BV1vW4y1w7oNvd_source3cc3c07b09206097d0d8b0aefdf07958 / NC电容一般有两种含义࿱…...
【C++杂货铺】多态
目录 🌈前言🌈 📁多态的概念 📁 多态的定义及实现 📂 多态的构成条件 📂 虚函数 📂 虚函数重写 📂 C11 override 和 final 📂 重载,覆盖(重写…...
(学习日记)2024.04.20:UCOSIII第四十八节:各文件功能概览
写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…...
数据结构-二叉树-堆(二)
一、建堆的时间复杂度问题 1、除了向上调整建堆,我们还可以向下调整建堆。不能在根上直接开始向下调整。这里的条件就是左右子树必须都是大堆或者小堆。我们可以倒着往前走,可以从最后一个叶子开始调整。但是从叶子开始调整没有意义。所以我们可以从倒数…...
身份证二要素核验介绍及使用方法
一、身份证二要素核验简介及重要性 身份证二要素核验是一种重要的身份验证技术,它在现代社会中发挥着至关重要的作用,特别是在涉及个人信息安全和隐私保护的领域。通过身份证二要素核验,我们可以有效地确认个人身份的真实性,从而…...
探索 去中心化的Web3.0
随着区块链技术的日益成熟和普及,Web3(Web 3.0)已经成为一个无法忽视的趋势。Web3不仅仅是一个技术概念,更是一个去中心化、透明、用户数据拥有权归还给用户的互联网新时代。在这篇文章中,我们将深入探讨Web3技术的核心…...
递归的层序遍历
最近遇到一个业务需求:一颗依赖树,其实就是一颗递归树,如何一层一层的数据放在一起,可以近似理解为二叉树的层序遍历。 业务理解为递归树的层序遍历 代码示例: public class RecursionErgodic {public static void…...
pytest使用 pytest-rerunfailures 插件实现失败用例重跑功能
使用 pytest 进行测试时,你可以通过安装并配置 pytest-rerunfailures 插件来实现失败用例重跑功能。以下是一个示例说明: 假设你有一个测试文件 test_example.py 包含如下测试用例: import pytestpytest.mark.parametrize("num",…...
2024/4/23 C++day1
有以下定义,说明哪些量可以改变哪些不可以改变? const char *p; 指针可以改变 值不可以改变 const (char *) p; 语法错误 char *const p; 指针不可以改变 值可以改变 const char* const p; 指针和值…...
MongoDB聚合运算符:$toHashedIndexKey
MongoDB聚合运算符:$toHashedIndexKey 文章目录 MongoDB聚合运算符:$toHashedIndexKey语法举例角度的双曲正切 $toHashedIndexKey计算并返回输入表达式的哈希值,其使用的哈希函数与MongoDB创建哈希索引相同。哈希函数将键值或字符串映射到固定…...
Python项目实战,用Python实现2048游戏
目录 写在前言项目介绍项目思路环境搭建项目实现初始化Python类初始化游戏窗口定义游戏棋盘和方块移动和合并游戏主循环 进一步探索 写在前言 hello,大家好,我是一点,专注于Python编程,如果你也对感Python感兴趣,欢迎…...
“Postman 中文版使用教程:如何切换到中文界面?”
Postman 的很好用的接口测试软件。但是,Postman 默认是英文版的,也不支持在软件内切换为中文版。很多同学的英语并不是很好,看到一堆的英文很是头痛。 今天我们来介绍下:切换到 Postman 中文版的方法。想要学习更多的关于 Postma…...
2.下载爬取的保存在text文件中的格式为MP4的视频url
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、url的保存格式二、MP4视频获取 一、url的保存格式 爬取的视频名字和url保存在text文件中,每一个视频都是一个单独的text,其中text的文件…...
KVF-Admin:基于Spring Boot、MyBatis、Shiro与Layui的轻量级快速开发框架
KVF-Admin:基于Spring Boot、MyBatis、Shiro与Layui的轻量级快速开发框架 摘要: 随着信息技术的飞速发展,软件开发的高效性和便捷性成为了开发者的追求。KVF-Admin作为一款轻量级的快速开发框架,集成了Spring Boot、MyBatis、Shi…...
004 验证码注册
文章目录 ResourcesConfig.javaUserController.javaUser.javaUserServiceImpl.javaIUserService.javaMsgUtils.javaServerResult.javaFshopAppApplication.javaServletInitializer.javauser.sqlUserMapper.xmlapplication.yamllogin.htmllogin.jsindex.htmlindex.jspom.xml Res…...
【Typora】两边空白区域过多解决方案
出现情况 两边空白区域过多 解决方案 1、点击软件上面 文件,选择 偏好设置 2、点击 外观,点击 打开主题文件夹 3、注意要修改的文件对应你软件主题的选择(我选择的主题是 Github,下面文件选择就是 github.css) 4、搜…...
C++创建多级文件夹函数
有时候难免要创建多级文件夹,那么除了传统的一级一级创建外,还有一个API函数可以一次性完成创建功能,这个函数就是如下: 包含的头文件以及lib. #include “dbghelp.h” #pragma comment(lib,“dbghelp.lib”) MakeSureDirectoryPathExists(); 语法: BOOL IMAGEAPI MakeSureDi…...
Find My资讯|苹果设备在修复期间可以保持启用“Find My“功能
iOS 17.5 中有一项名为"维修状态"的新功能,可让送修的设备保持启用"查找我的"(Find My)功能。此前,用户在送修设备时必须禁用跟踪设备位置的"查找我的"功能,但iOS 17.5发布后࿰…...
JetBrains DataGrip v2024.1 激活版 (多引擎数据库管理开发)
JetBrains系列软件安装目录 一、JetBrains IntelliJ IDEA v2024.1 安装教程 (Java集成开发IDE) 二、JetBrains WebStorm v2024.1 激活版 (JavaScript集成开发IDE) 三、JetBrains PhpStorm v2024.1 安装教程 (PHP集成开发IDE) 四、JetBrains PyCharm Pro v2024.1 安装教程 (…...
3.5.6及更高版本的mybatis-plus-generator如何禁止生成Controller代码
如何禁止生成controller?需要两个地方同时配置才行,缺一不可: 1、必须在strategyConfig的builder中设置controllerBuilder().disable() 2、必须在packageConfig的builder中设置pathInfo(Collections.singletonMap(OutputFile.controller, nul…...
2024-5-7——摘樱桃 II
2024-5-7 题目来源我的题解方法一 记忆化搜索方法二 动态规划方法三 动态规划空间优化 题目来源 力扣每日一题;题序:1463 我的题解 题解参考灵神的解析 方法一 记忆化搜索 因为两个机器人是同时进行,理论上到达某一行的时间是相同的&…...