吃透 Spring 系列—Web部分
目录
◆ Spring整合web环境
- Javaweb三大组件及环境特点
- Spring整合web环境的思路及实现
- Spring的web开发组件spring-web
◆ web层MVC框架思想与设计思路
◆ Spring整合web环境
- Javaweb三大组件及环境特点
在Java语言范畴内,web层框架都是基于Javaweb基础组件完成的
| 组件 | 作用 | 特点 |
| Servlet | 服务端小程序,负责接收客户端请求并作出响应的 | 单例对象,默认第一次访问创建,可以通过配置指定服务器启动就创建,Servlet创建完毕会执行初始化init方法。每个Servlet有一个service方法,每次访问都会 |
| Filter | 过滤器,负责对客户端请求进行过滤操作的 | 单例对象,服务器启动时就创建,对象创建完毕执行init方法,对客户端的请求 |
| Listener | 监听器,负责对域对象的创建和属性变化进行监听的 | 根据类型和作用不同,又可分为监听域对象创建销毁和域对象属性内容变化的,根据监听的域不同,又可以分为监听Request域的,监听Session域的,监听ServletContext域的 |
- Spring整合web环境的思路及实现
在进行Java开发时要遵循三层架构+MVC,Spring操作最核心的就是Spring容器,web层需要注入Service,service层需要注入Dao(Mapper),web层使用Servlet技术充当的话,需要在Servlet中获得Spring容器

web层代码如果都去编写创建AnnotationConfigApplicationContext的代码,那么配置类重复被加载了,Spring容器也重复被创建了,不能每次想从容器中获得一个Bean都得先创建一次容器,这样肯定是不允许。
所以,现在的诉求很简单,如下:
● ApplicationContext创建一次,配置类加载一次;
● 最好web服务器启动时,就执行第1步操作,后续直接从容器中获取Bean使用即可;
● ApplicationContext的引用需要在web层任何位置都可以获取到。
针对以上诉求给出解决思路,如下:
● 在ServletContextListener的contextInitialized方法中执行ApplicationContext的创建。或在Servlet的init方法中执行ApplicationContext的创建,并给Servlet的load-on-startup属性一个数字值,确保服务器启动Servlet就创建;
● 将创建好的ApplicationContext存储到ServletContext域中,这样整个web层任何位置就都可以获取到了
- Spring的web开发组件spring-web
开发如下:
先导入Spring-web的坐标:

在web.xml中去配置ContextLoaderListener,并指定配置文件的位置

在Servlet中直接使用

如果核心配置类使用的是注解形式的,那么Spring容器AnnotationConfigWebApplicationContext,如下配置方式

◆ web层MVC框架思想与设计思路
Java程序员在开发一般都是MVC+三层架构,MVC是web开发模式,传统的Javaweb技术栈实现的MVC如下

原始Javaweb开发中,Servlet充当Controller的角色,Jsp充当View角色,JavaBean充当模型角色,后期Ajax异步流行后,在加上现在前后端分离开发模式成熟后,View就被原始Html+Vue替代。原始Javaweb开发中,Service充当Controller有很多弊端,显而易见的有如下几个:
| Servlet作为Controller的问题 | 解决思路和方案 |
| 每个业务功能请求都对应一个Servlet | 根据业务模块去划分Controller |
| 每个Servlet的业务操作太繁琐 | 将通用的行为,功能进行抽取封装 |
| Servlet获得Spring容器的组件只能通过客户端代码去获取,不能优雅的整合 | 通过Spring的扩展点,去封装一个框架,从原有的Servlet完全接 |
负责共有行为的Servlet称之为前端控制器,负责业务行为的JavaBean称之为控制器Controller
来源:黑马程序员新版Spring零基础入门到精通,一套搞定spring全套视频教程(含实战源码)
相关文章:
吃透 Spring 系列—Web部分
目录 ◆ Spring整合web环境 - Javaweb三大组件及环境特点 - Spring整合web环境的思路及实现 - Spring的web开发组件spring-web ◆ web层MVC框架思想与设计思路 ◆ Spring整合web环境 - Javaweb三大组件及环境特点 在Java语言范畴内,web层框架都是基于J…...
JAVA后端服务端与移动端客户端高精度时间同步思路
一、脑补 在Chrome--->Network----> Timing中可以查看一个请求在各个阶段所花费的时间。 Timing中各个字段的意思发: 1、Queueing:从增加到等待处理队列到实际开始处理的时间间隔——浏览器也有线程机制,所有的请求不能同时发送&…...
nsd的资料
nsd是一款开源的DNS服务器应用。 近期参与项目过程中,涉及到DNS业务,结果被打的满头包。 虽然在校学习时就知道DNS协议,但从业这么多年,对于DNS协议的理解其实一直处于一知半解的状态。 当前处理问题时,接触到了nsd&am…...
关于Maven中pom.xml文件不报错但无法导包解决方法
问题 我的pom文件没有报红,但是依赖无法正常导入。 右下角还总出现这种问题。 点开查看报错日志。大致如下 1) Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator: method <init>()V no…...
使用决策树分类
任务描述 本关任务:使用决策树进行分类 相关知识 为了完成本关任务,你需要掌握:1.使用决策树进行分类 使用决策树进行分类 依靠训练数据构造了决策树之后,我们可以将它用于实际数据的分类。在执行数据分类时,需要…...
STM32H563烧录后无法擦除
STM32H563烧录后无法擦除,使用STM32CubeProgrammer连接后显示如下图所示。...
2023最新最全【Adobe After Effection 2023】下载安装零基础教程【附安装包】
AE2023下载点这里 教学 1.鼠标右击【Ae2023(64bit)】压缩包选择(win11系统需先点击“显示更多选项”)【解压到 Ae2023(64bit)】。 2.打开解压后的文件夹,鼠标右击【Set-up】选择【以管理员身份运行】。 3.点击【文件夹图标】,…...
【Spring之底层核心架构概念解析】
文章目录 一、BeanDefinition二、BeanDefinitionReader2.1、AnnotatedBeanDefinitionReader2.2、XmlBeanDefinitionReader 五、ClassPathBeanDefinitionScanner六、BeanFactory七、ApplicationContext7.1、AnnotationConfigApplicationContext7.2、ClassPathXmlApplicationCont…...
手把手带你创建一个自己的GPTs
大家好,我是五竹。 最近GPT又进行了大升级,这一下又甩了国内AI几条街,具体更新了哪些内容之前的一篇文章中其实已经说过了:ChatGPT 王炸升级!更强版 GPT-4 上线! 其中最重要的一点就是支持自定义GPT&…...
Vue 组件+es6箭头函数+路由
一、组件 1、让网页或局部页实现复用,包括js(vue)功能 组件(Component)是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素, …...
Clickhouse学习笔记(5)—— ClickHouse 副本
Data Replication | ClickHouse Docs 副本的目的主要是保障数据的高可用性,即使一台 ClickHouse 节点宕机,那么也可以从其他服务器获得相同的数据 注意: clickhouse副本机制的实现要基于zookeeperclickhouse的副本机制只适用于MergeTree f…...
ELMo模型、word2vec、独热编码(one-hot编码)的优缺点进行对比
下面是对ELMo模型、word2vec和独热编码(one-hot编码)的优缺点进行对比: 独热编码(One-hot Encoding): 优点: 简单,易于理解。适用于词汇表较小的场景。 缺点: 高维度…...
FFmpeg简介1
适逢FFmpeg6.1发布,准备深入学习下FFmpeg,将会写下系列学习记录。 在此列出主要学习资料,后续再不列,感谢这些大神的探路和分享,特别是雷神,致敬! 《FFmpeg从入门到精通》 《深入理解FFmpeg》 …...
2352 智能社区医院管理系统JSP【程序源码+文档+调试运行】
摘要 本文介绍了一个智能社区医院管理系统的设计和实现。该系统包括管理员、护工和医生三种用户,具有社区资料管理、药品管理、挂号管理和系统管理等功能。通过数据库设计和界面设计,实现了用户友好的操作体验和数据管理。经过测试和优化,系…...
高教社杯数模竞赛特辑论文篇-2023年B题:多波束测线布设(附获奖论文及MATLAB代码实现)(续)
目录 5.3.3 模拟退火对测线布设仿真检验 5.3.4 开角、坡度的灵敏度分析...
【fast2021论文导读】 Learning Cache Replacement with Cacheus
文章:Learning Cache Replacement with Cacheus 导读摘要: 机器学习的最新进展为解决计算系统中的经典问题开辟了新的、有吸引力的方法。对于存储系统,缓存替换是一个这样的问题,因为它对性能有巨大的影响。 本文第一个贡献,确定了与缓存相关的特征,特别是,四种工作负载…...
在 React 中选择使用 JSX 或 JavaScript
在 React 中选择使用 JSX 或 JavaScript JSX vs. JavaScriptReact Component Lifecycle JSX 是 React 最常用的语法之一,它允许我们在 HTML 中嵌入 JavaScript 语句和表达式。但是,如果我们不需要 JSX 又该怎么办呢?让我们一起来了解一下 J…...
Halcon WPF 开发学习笔记(4):Halcon 锚点坐标打印
文章目录 专栏前言锚点二次开发添加回调函数辅助Model类 下集预告 专栏 Halcon开发 博客专栏 WPF/HALCON机器视觉合集 前言 Halcon控件C#开发是我们必须掌握的,因为只是单纯的引用脚本灵活性过低,我们要拥有Halcon辅助开发的能力 锚点开发是我们常用的…...
【从0到1设计一个网关】性能优化---使用Disruptor提供缓冲区
文章目录 什么是缓冲区队列Disruptor高性能的原因Disruptor实战注:学习这篇文章之前推荐先对Disruptor的使用有了解,否则我的代码中即使有非常详细的注释你也并不能理解这些注释的作用,以及为什么我要需要这样子编写代码。 同时,这将会是网关系列最后一篇文章,由于文章写的…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
