最新要闻
- 热门:512GB售价8999元:雷克沙发布新款CFexpress Type-B存储卡
- 今日热闻!459元 腾达发布首款面板AP:10秒下载一部电影
- 2023央视3·15晚会第一曝 “泰国香米”竟是香精勾兑!渉事公司食品许可证已失效
- 全球快消息!hdr和sdr区别_hdr
- 快消息!SteamDeck升级OLED屏无望:V社称难度比预想中更高
- 焦点播报:俄式风味!秋林格瓦斯:12瓶到手24元 0脂低糖
- 微星推出G2712电竞显示器:170Hz高刷、1ms响应
- 全球消息!“史诗级产品”!GPT-4来了:看图玩梗考律师 能力超90%人类
- 世界消息!偷工减料!南京蜜雪冰城频繁改标签过期继续用 被责令整改
- 网易云音乐会员不再支持车机版 车上听歌要加钱
- 天天滚动:U20国足队长出局后一夜没睡:裁判对中国队不公
- 焦点观察:中国土豪花109万元购买《CS:GO》AK47野荷皮肤 网友吐槽太丑
- 长安深蓝SL03行驶中自燃 车尾冒出明火和浓烟
- 世界看热讯:上海网红餐厅火烧云吃出异物:店家称没吃出问题就算了
- 【世界速看料】充电慢犯法!iPhone 15若限制充电速度或违反欧盟法律
- 当前观点:词典笔迎来第三代!阿尔法蛋AI词典笔T20图赏
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
day04-实现SpringBoot底层机制
实现SpringBoot底层机制
Tomcat底层启动分析+Spring容器初始化+Tomcat关联Spring容器
1.任务1-创建Tomcat,并启动
(1)创建一个Maven项目,修改pom.xml文件:我们需要自己创建Tomcat对象,因此在引入的场景启动器中排除SpringBoot内嵌的Tomcat,并引入tomcat依赖库
spring-boot-starter-parent org.springframework.boot 2.5.3 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.apache.tomcat.embed tomcat-embed-core 8.5.75
(2)创建LiSpringApplication.java
(资料图)
package com.li.lispringboot;import org.apache.catalina.startup.Tomcat;/** * @author 李 * @version 1.0 */public class LiSpringApplication { //创建tomcat对象,并关联spring容器,然后启动tomcat public static void run() { try { //创建tomcat对象 Tomcat tomcat = new Tomcat(); //设置默认端口-9090 tomcat.setPort(9090); //启动,就会在指定端口监听 tomcat.start(); //等待请求接入 System.out.println("======9090端口等待请求接入======"); tomcat.getServer().await(); } catch (Exception e) { e.printStackTrace(); } }}
(3)LiMainApp
package com.li.lispringboot;/** * @author 李 * @version 1.0 */public class LiMainApp { public static void main(String[] args) { //启动LiSpringBoot项目/程序 LiSpringApplication.run(); }}
(4)测试启动main方法,后台输出如下:
打开浏览器,访问9090端口,页面一片空白,因为这时候还没有接入其他组件。
2.任务2-创建Spring容器
(1)创建Monster.java,做一个测试bean
package com.li.lispringboot.bean;/** * @author 李 * @version 1.0 */public class Monster {}
(2)创建HelloController.java,做一个测试Controller
package com.li.lispringboot.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * @author 李 * @version 1.0 */@RestControllerpublic class HelloController { @RequestMapping("/hello") public String Hello() { return "Hello,I"m HelloController!"; }}
(3)创建LiConfig.java,作为Spring的配置文件
package com.li.lispringboot.config;import com.li.lispringboot.bean.Monster;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;/** * @author 李 * @version 1.0 * 配置类-作为Spring的配置文件 * 这里有一个问题,容器怎么知道要扫描哪些包? */@Configuration@ComponentScan("com.li.lispringboot")//指定要配置类扫描哪些包public class LiConfig { //注入Bean-Monster对象到Spring容器 @Bean public Monster monster() { return new Monster(); }}
(4)LiWebApplicationInitializer.java
package com.li.lispringboot;import org.springframework.web.WebApplicationInitializer;import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;import org.springframework.web.servlet.DispatcherServlet;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRegistration;/** * @author 李 * @version 1.0 * LiWebApplicationInitializer容器初始化类的任务: * 1.创建spring容器 * 2.加载/关联spring容器的配置-按照注解方式 * 3.完成spring容器配置的bean的创建,依赖注入 * 4.创建前端控制器(DispatcherServlet),让其持有spring容器 * 5.这的onStartup()方法是tomcat来调用,并把ServletContext对象传入 */public class LiWebApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { System.out.println("onStartup ..."); //加载-Spring Web Application Configuration AnnotationConfigWebApplicationContext ac = new AnnotationConfigWebApplicationContext(); //在ac中注册配置类LiConfig ac.register(LiConfig.class); ac.refresh();//完成bean的创建和配置 /* 创建注册非常重要的前端控制器-DispatchServlet 让 DispatchServlet持有spring容器-ac 这样就可以进行映射分发 */ DispatcherServlet dispatcherServlet = new DispatcherServlet(ac); //返回ServletRegistration.Dynamic对象 ServletRegistration.Dynamic registration = servletContext.addServlet("app", dispatcherServlet); //设置前端控制器的加载顺序(这里设置为当tomcat启动时,就加载) registration.setLoadOnStartup(1); //设置前端控制器拦截所有请求,并进行分发处理 registration.addMapping("/"); }}
3.任务3-将Tomcat和Spring容器关联,并启动Spring容器
(1)修改LiSpringApplication,将tomcat和Spring容器关联
package com.li.lispringboot;import org.apache.catalina.startup.Tomcat;/** * @author 李 * @version 1.0 */public class LiSpringApplication { //创建tomcat对象,并关联spring容器,然后启动tomcat public static void run() { try { //创建tomcat对象 Tomcat tomcat = new Tomcat(); /* 1.让tomcat能够将请求转发到SpringWeb容器,因此需要关联 2."/liboot" 就是我们的项目的 application context,即原来配置tomcat时的项目名称 3."D:\\IDEA-workspace\\li-springboot" 指定项目的路径 */ tomcat.addWebapp("/liboot", "D:\\IDEA-workspace\\li-springboot"); //设置默认端口-9090 tomcat.setPort(9090); //启动,就会在指定端口监听 tomcat.start(); //等待请求接入 System.out.println("======9090端口等待请求接入======"); tomcat.getServer().await(); } catch (Exception e) { e.printStackTrace(); } }}
(2)在LiMainApp.java中重新启动项目,在浏览器中访问测试Controller,访问成功:
3.1注意事项和细节
如果启动时报异常,如下:
严重: Servlet [jsp] in web application [/liboot] threw load() exception java.lang.ClassNotFoundException: org.apache.jasper.servlet.JspServlet
解决方案是:引入对应版本的 Jasper包即可。
org.apache.tomcat tomcat-jasper 8.5.75
关键词:
-
day04-实现SpringBoot底层机制
实现SpringBoot底层机制Tomcat底层启动分析+Spring容器初始化+Tomcat关联Spring容器1 任务1-创建Tomcat...
来源: day04-实现SpringBoot底层机制
焦点报道:有监督学习——支持向量机、朴素贝叶斯分类
当前动态:Windows 下 JNA 调用动态链接库 dll
Java并发小结02
【新视野】区块链技术入门教程 - Decert
热门:512GB售价8999元:雷克沙发布新款CFexpress Type-B存储卡
今日热闻!459元 腾达发布首款面板AP:10秒下载一部电影
2023央视3·15晚会第一曝 “泰国香米”竟是香精勾兑!渉事公司食品许可证已失效
快播:第130篇:BOM(window对象)
全球快消息!hdr和sdr区别_hdr
快消息!SteamDeck升级OLED屏无望:V社称难度比预想中更高
焦点播报:俄式风味!秋林格瓦斯:12瓶到手24元 0脂低糖
微星推出G2712电竞显示器:170Hz高刷、1ms响应
全球消息!“史诗级产品”!GPT-4来了:看图玩梗考律师 能力超90%人类
世界消息!偷工减料!南京蜜雪冰城频繁改标签过期继续用 被责令整改
环球速递!火山引擎数智平台 VeDI 帮助智能投影仪更懂用户需求
天天观察:【学习日志】Java基本数据类型的自动装箱和拆箱
焦点滚动:智能制造 | AIRIOT智慧工厂管理解决方案
看热讯:iOS转场之present与dismiss的使用
网易云音乐会员不再支持车机版 车上听歌要加钱
天天滚动:U20国足队长出局后一夜没睡:裁判对中国队不公
焦点观察:中国土豪花109万元购买《CS:GO》AK47野荷皮肤 网友吐槽太丑
长安深蓝SL03行驶中自燃 车尾冒出明火和浓烟
世界看热讯:上海网红餐厅火烧云吃出异物:店家称没吃出问题就算了
当前速读:Linux LVM磁盘分区管理
环球今头条!记录--前端实现电子签名(web、移动端)通用
新动态:GPT-4 重磅发布,用户直呼:强得离谱
【聚看点】Python处理Unicode字符时出现中文乱码的情况
世界今亮点!go开发入门篇之go语言
【世界速看料】充电慢犯法!iPhone 15若限制充电速度或违反欧盟法律
当前观点:词典笔迎来第三代!阿尔法蛋AI词典笔T20图赏
每日播报!旧车置换宝马新车?4S店销售“张伟”骗了13位车主200余万元
【世界播资讯】国内喝星巴克的人越来越少了引热议:至少30元/杯、国人消费理智、竞争加剧
焦点简讯:电影《红海行动2》今年开拍:前作票房超36亿 网友“自来水”安利
【全球快播报】10999元起 LG gram Style轻薄本开售:轻至999g
天天新动态:HTML/XML字符转义对照表
环球新消息丨易基因:高通量测序后的下游实验验证方法——ChIP-seq篇|干货系列
焦点观察:爬虫-requests
记一次运气非常好的服务器渗透经历
【环球快播报】Chrome高级调试技巧
《黑暗荣耀2》演员被查有无校园暴力 空姐名场面是CG
【世界报资讯】《暗黑破坏神4》终极版宣传片发布:花100美元提前4天玩 还送坐骑等
当前最新:六分钟泡出武汉热干面 原汁味道!大汉口速食热干面大促:2.5元/袋
全球热议:借车给朋友车祸致人死亡!车主被判担责三成
实现内屏自动开合!魅族新折叠屏手机专利公布
全球简讯:外网信息搜集
每日热门:这啥?竟能让羊毛党无能狂怒!|无感验证还不快来体验
全球快讯:02.SQL
通过随机数Random 和 redis的incr每次增加一的原子性来动态绑定队列
uniapp,常用工具函数
天天讯息:2023年3月15日商丘嘉盛纸业A级箱板纸价格下调
每日信息:扫码点餐索要手机号违法吗?消保委暗访奶茶店和快餐店
全球热讯:山航就中国俄航等调侃信息发声明:不认同不符合客观事实的内容
东方甄选被曝养殖虾当野生虾卖 官方回应:被供应商骗了
【世界快播报】三星回应Galaxy S23 Ultra拍月亮“造假”:未进行任何图像叠加处理
世界聚焦:不给友商留机会 GPT-4大量技术细节不再公开:安全更重要
天天观焦点:CentOS 7 安装 YApi
易基因:染色质免疫共沉淀测序(ChIP-seq)的数据挖掘思路 |干货系列
fabric使用
当前简讯:企业微信对接openai实现chatgpt3.5聊天机器人
焦点快报!濒死恒星演化成超新星前一幕被韦伯捕捉:壮观至极!
全球热议:OpenAI还在烧钱 但开发者已经利用GPT挣钱了:还是国产的
FIFA官宣2026世界杯改制:48队分为12个组 赛事总场次增至104场
环球即时:合肥发布新能源汽车消费补贴政策:最高补贴5000元
环球动态:真不用羡慕油车了!特斯拉V4超级充电桩落地:最高功率350kW
全球快资讯:VMware安装虚拟机时提示错误"Failed to install the hcmon driver."解决办法
环球即时看!C# || 批量翻译工具 || 百度翻译api || 读取.cs文件内容 || 正则表达式筛选文件
这是一篇纯讲SQL语句优化的文章!!!| 博学谷狂野架构师
消息!前端架构工作
【全球速看料】Linux进程通信 | 管道与FIFO
全球微速讯:智动力:目前暂未涉及6G通信网络相关领域
焦点速讯:你支持吗?快递不告而放或最高可罚3万 直接放菜鸟也不接受?
【天天速看料】哪吒汽车跟进90天保价 哪吒S 1160增程小版限时17.98万元
林依晨和郑元畅在一起过吗?林依晨和郑元畅参加的综艺节目叫什么?
泰坦尼克号是真实的故事吗?泰坦尼克号的男女主角叫什么?
前锋燃气灶质量怎么样?燃气灶十大品牌排行榜
iis是什么软件?iis在哪里打开?
aspx文件是什么?aspx文件怎么打开?
Prime95烤机教程
观点:成人崩溃就在一瞬间 外卖小哥酒后误上高速 电量跑光痛哭不止
全球今头条!生产环境触目惊心!汕头知名橄榄菜企业被连夜查处:线上平台火速下架
播报:全周期订单数突破35万!魅族20系列无界超前订圆满结束
湖南邵阳疑似挖出龙化石?当地回应:或为天然石头
世界视点!Model Y行驶中刹车变硬 车主:售后说是常态化事情
GPT-4上线:史上最强大多模态语言模型,堪称最强人工智能,目前OpenAI付费升级GPT-4平台已崩溃
观点:报复性消费来了:我国网上零售额月均破万亿元
16岁女孩将挑战珠峰 父亲众筹50万 回应来了:女儿想法
奔驰EQC刚买半年驱动电机就被烧毁 车主质疑4S店故意欺诈
环球新动态:电机品牌排行榜_电机品牌
环球速递!文盘Rust -- 安全连接 TiDB/Mysql
自从用了 EasyExcel,导入导出 Excel 更简单了!
浅谈var,let,const
今日最新!Maven学习笔记3:在idea中使用Maven
全球播报:玩家最喜欢的复古游戏TOP5:《俄罗斯方块》排第二
环球快资讯:程序员也危险了!GPT-4十秒即可生成一个网站
焦点消息!ChatGPT升级为GPT-4 会看图懂幽默 细思极恐
充电慢、续航差、反馈无门!bZ3X首批车主公开致信广汽丰田董事长
不接董事长电话1次罚1万元 公司回应:合不合法你说了不算
项目构建node-sass源码报错 SyntaxError:Unexpectedtoken"?"
前端设计模式——命令模式