带着萌新看springboot源码06
这节来说个大家都比较熟悉的东西,就是servlet三大组件,servlet、filter、listener,再说说springboot的内置tomcat。
也许还会说一下tomcat的运行原理,还有,springboot不是不支持jsp吗(是因为嵌入式tomcat的原因),那我就让springboot支持jsp,其他的还是一样。
比较长,可能要分为两节。
1.servlet配置
想必大家不会陌生servlet配置,写个类继承HttpServlet,然后在原来的web.xml文件中配置<servlet-name><servlet-class>还有配置servlet的映射路径<servlet-mapping>,忘记的小伙伴就回头看看啊。
现在的springboot配置servlet,也差不多,写个servlet,但是记住,springboot不能直接识别servlet,需要借助一个工具ServletRegistrationBean(xxxBean在学spring的时候应该很常见,本质上还是一个Bean,但是有能够生产bean的能力,类似一个简单的工厂类)

我们接着随意找个配置类(我图方便,就在那个main方法的主配置类加了),加入如下代码:

ok,就这样,然后运行,浏览器输入网址

2.配置Filter
配置和上面差不多,写个Filter实现类,利用FilterRegistrationBean往容器里添加filter


然后运行springboot,输入xxxxx/hehe就行了

3.配置listener
listener最容易,因为前面两个还有配置url映射,这个listener不用配。写个listener,利用ServletListenerRegistrationBean添加到容器里。


启动和关闭应用就能看到结果:


最后的就是注意ServletListenerRegistrationBean这个类要传入泛型,打开这个类,可以看到我们可以定制监听器的类型

4,简单说说嵌入式servlet容器(springboot默认当然是用tomcat)
springboot应用和以前的ssm等应用最大的不同是,springboot可以打成jar包,然后在装有java运行环境的电脑,就能用java -jar xxx.jar就能够直接运行一个springboot应用,非常方便,但是缺点是不支持jsp;
而ssm、ssh等的就要达成war包,然后在新的电脑上配置java环境,下载tomcat,再配置tomcat和java的版本,然后才能部署应用,运行,emmmm....估计要很久!
造成这种结果的最大原因就是springboot装的是小tomcat(咳咳,这是我自己为了方便理解才说的,标准称呼是嵌入式servlet容器,英文全程:EmbeddedServletContainer),以下假如看到小tomcat,就要理解是嵌入式servlet容器啊(EmbeddedServletContainer),这么长的单词一定要记下来,因为后面会有更长的.....
首先简单说说servlet容器种类。常见的Tomcat(springboot默认),Jetty(适用于长连接,比如聊天这种),Undertow(不支持jsp,但是并发性能非常好),各有优势。
打开pom配置文件,可以看到

然后将tomcat变为jetty就可以了,maven就会自动帮你下载对应的jar包

运行springboot,控制台输出如下所示,你就成功了。

到这里,springboot配置servlet三大组件以及切换嵌入式servlet容器就讲完了,接下来干什么想必都很清楚,当然是怎么修改容器的默认配置以及运行原理啊!
不知道大家有没有发现上图端口是8081(默认8080),在配置文件是怎么配置的(以前说过,估计很多人都知道),为什么会起作用?我能不能用@Bean的方式修改容器默认参数呢?以及其中的运行原理?当然,也会带着大家一起走走从主配置类开始,通过一个run方法,逐渐的就运行容器的过程。
后面还会说说不用嵌入式servlet容器的方式,我就用我外界下载的tomcat和springboot应用一起用,并且还支持jsp。
带着萌新看springboot源码06的更多相关文章
- 带着萌新看springboot源码8(spring ioc源码 完)
上一节说到实例化了所有的单实例Bean,后面还有一步遍历 12.完成容器刷新(finishRefresh();) 那个和生命周期有关的后置处理器类型是LifecycleProcessor:监听器原理我 ...
- 带着萌新看springboot源码05
上一节走了一遍从浏览器发出请求到得到向页面的流程,基本的功能是已经实现了.但是现在啊,我想自定义一个拦截器(拦截器可以做用户登录验证,如果登录了,就让你通过,如果没有登录,就重定向登录页面),这里就不 ...
- 带着萌新看springboot源码8(spring ioc源码上)
emmm.....这次先不说springboot原理,先好好回顾一下以前的注解版spring原理,先把spring原理了解清晰了,再看springboot原理更容易. 要说起spring,最重要的就是 ...
- 带着萌新看springboot源码03
上一节讲到了快速新建一个springboot应用,以及springboot的自动配置类起作用的时机,并且一起看了一个自动配置类的源码. 这一节我们来粗略看看当用户在浏览器输入一个url,怎么样返回一个 ...
- 带着萌新看springboot源码12(启动原理 下)
先继续接上一篇,那个启动原理还有一点没说完. 6. afterRefresh(context, applicationArguments); 看这个名字就知道,应该就是ioc容器刷新之后的一些操作了, ...
- 带着萌新看springboot源码11(springboot启动原理 源码上)
通过前面这么多讲解,springboot原理应该也大概有个轮廓了,一些基本的配置,从客户端url到controller(配置一些要用的组件,servlet三大组件,处理器映射器,拦截器,视图解析器这些 ...
- 带着萌新看springboot源码10(springboot+JdbcTemplate+druid)
上一节把springboot和jdbcTemplate大概用法说了一下,以及大概看了一下源码,还说了加载sql文件时的原理. 这一节来看看自动注入JdbcTemplate的原理,顺便用一用Druid数 ...
- 带着萌新看springboot源码09(springboot+JdbcTemplate)
emmm.....常规开局,继续说一下废话,前面简单的说了一下spring的ioc容器创建原理(花了不少时间去看了别人的博客+查了不少资料+自己的理解),相信大家对ioc容器有了一个初步的认识了. s ...
- 带着萌新看springboot源码04
继续开头说些废话,我也不知道什么鬼,每次写着写着经常会写到其他地方去了,太容易分神了. 这次说一下springboot对于springmvc的大概整个流程,以请求动态网页为例 . 1.梳理一下spri ...
随机推荐
- react组件中刷新组件小技巧
在开发过程中,经常遇到组件数据无法更新,例如:当你用同一个表格展示不同数据的时候,当点击第5页后,再点击另外一份数据时发现还在第五页,并没有回到第一页. 怎么能让一个组件每次数据不一样时都重新加载呢, ...
- tomcat部署项目启动采坑之UnknownHostException
在一台新服务器上,把war包部署在tomcat上,很普通的很简单的一个活,但我踩到一个大坑. 需要组件tomcat8,mysql5.7,mosqquito1.5,centos7,war包,把组件都装好 ...
- opencv imwrite保存图片花屏的问题
问题:在项目中用opencv的imwrite保存图片出现花屏的问题,如下图: 思路:1. 因为项目中的图像数据(float类型,0-255)是在GPU中,保存的话:可以用CPU保存图片,也可以用GP ...
- PS2键盘扫描码:通码与断码
键盘扫描码(实用于标准PC的101.102和104 键的键盘),按下发送通码,弹起发送断码. 说明: 第一类按键,通码为1字节,断码为 0xF0+通码 形式.如A键,其通码为 0x1C,断码为 0xF ...
- Jenkins pipeline job 根据参数动态获取触发事件的分支
此文需要有Jenkins pipeline job 的简单使用经验 场景 我们日常的测试函数, 一般是不能仅仅在本地跑的,还需要一个公共的跑测试的环境,作为合并新的PR的依据. 如果用Jenkins ...
- 把.zip文件转化为.tar.gz文件
工作中正好用到上传tar.gz文件,没有现成的转换工具,就写了方法转换 #encoding: utf-8import osimport tarfileimport zipfileimport osim ...
- 对于Python turtle的学习笔记
进一步地,我尝试学习了Python 的其中一个非常重要的函数库——turtle库 这是一个用于python绘图的函数库,方便又好用! 对于它的安装,现在我们所用的python 3的系统运用到的指令是: ...
- React Native搭建开发环境 之 --走过的坑
React Native是使用JavaScript和React编写原生移动应用 我的开发平台是基于windows系统,所以只支持android,要是想开发ios系统,那就只能考虑使用沙盒环境 接下来就 ...
- QEMU KVM Libvirt手册(11): Managing Storage
When managing a VM Guest on the VM Host Server itself, it is possible to access the complete file sy ...
- JavaScript 功能类 Url.js
简书原文 这个类的主要目的是为了方便平时编码中的Url类型的数据操作 Github 全局名称 全局名称是由源码的最后一行代码确定的,默认为Url,如存在相同名称的对象会抛出异常: 可以通过 requi ...