带着萌新看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 ...
随机推荐
- SpringCloud使用Prometheus监控(基于Eureka)
本文介绍SpringCloud使用Prometheus,基于Eureka服务发现. 1.Prometheus介绍 在之前写过两篇有关Prometheus使用的文章,如下: <SpringBoot ...
- 我对PMO的理解(持续更新)
PMO的价值 为项目管理提供方法上的指导,对项目的实施过程提供监督.评价. PMO应该从哪方面着手建立管理体系 如何量化工作 如何考评工作 如何激励员工 如何进行人工.成本核算 如何进行进度跟踪与控制 ...
- 图论之最短路径floyd算法
Floyd算法是图论中经典的多源最短路径算法,即求任意两点之间的最短路径. 它可采用动态规划思想,因为它满足最优子结构性质,即最短路径序列的子序列也是最短路径. 举例说明最优子结构性质,上图中1号到5 ...
- TCP 三次握手、四次挥手
三次握手:(主要是server.client相互同步系列号) SYN:同步序列号 ACK:确认序列号 第一次握手:client 向server 发送SYN,seq=x,申请同步client端序列号,c ...
- python学习笔记(5)
.................................................................................................... ...
- Java中死锁的定位与修复
死锁应该可以说是并发编程中比较常见的一种情况,可以说如果程序产生了死锁那将会对程序带来致命的影响:所以排查定位.修复死锁至关重要: 我们都知道死锁是由于多个对象或多个线程之间相互需要对方锁持有的锁而又 ...
- /usr/lib/python2.7/site-packages/requests/__init__.py:80: RequestsDependencyWarning: urllib3 (1.22) or chardet (2.2.1) doesn't match a supported version! RequestsDependencyWarning)
[root@iZwz9bhan5nqzh979qokrkZ ~]# ansible all -m ping /usr/lib/python2.7/site-packages/requests/__in ...
- Mybatis中的Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 找不到Mapper.xml文件的问题
1 首先在配置mapper-locations的时候: classpath: 只在现有目录下寻找配置文件 classpath*: 在现有的项目目录下和依赖的jar包下寻找xml配置文件
- 推荐自学JAVA开发的三本书
---------------------------------------------------------------------------------------------------- ...
- 怎么用JQUERY设置div背景图片?
平常,在css里,我们写成 { background:url(....) ; } 如果需要写脚本, 则 function(){ .....; $(....).css("background- ...