全面接管SpringMVC
添加@EnableWebMvc
web开发
- 技巧
– 禁用模板引擎的缓存
– 页面修改以后,ctrl+9,更新页面,重新编译 - 拦截器 登录检查
–
配置嵌入式Servelet容器
- 长连接
- Undertow(不支持JSP)
- 默认支持:
– Tomcat(默认 )
– Jetty
– Undertow
自动配置
EmbeddedServletContainerAutoConfiguration
步骤
- SpringBoot 根据导入的依赖情况,给容器中添加相应的EmbeddedServletContainerFactory[TomcatEmbeddedServletContainerFactory]
- 容器中某个组件要创建对象就会惊动后置处理器;EmbeddedServletContainerCustomizerBeanPostProcessor;
只要是嵌入式的servlet容器工厂,后置处理器就工作 - 后置处理器,从容器中获取所有的EmbeddedServletContainerCustomizer,调用定制器的定制方法
嵌入式Servlet容器启动原理
获取嵌入式的Servlet容器工厂
- SpringBootq启动运行run方法
- refreshContext(context);SpringBoot刷新IOC容器【创建IOC容器对象,并初始化容器,创建容器中的每一个组件】;如果是web应用创建AnnotationConfigEmbeddedWebApplicationContext,否则:AnnotationConfigApplicationContext
- refresh(context);**刷新刚才创建好的ioc容器;
- onRefresh(); web的ioc容器重写了onRefresh方法
- webioc容器会创建嵌入式的Servlet容器;createEmbeddedServletContainer();
- 获取嵌入式的Servlet容器工厂:**EmbeddedServletContainerFactory containerFactory = getEmbeddedServletContainerFactory();从ioc容器中获取EmbeddedServletContainerFactory 组件;TomcatEmbeddedServletContainerFactory创建对象,后置处理器一看是这个对象,就获取所有的定制器来先定制Servlet容器的相关配置;
- 使用容器工厂获取嵌入式的Servlet容器:this.embeddedServletContainer = containerFactory .getEmbeddedServletContainer(getSelfInitializer());
- 嵌入式的Servlet容器创建对象并启动Servlet容器;
先启动嵌入式的Servlet容器,再将ioc容器中剩下没有创建出的对象获取出来;
IOC容器启动创建嵌入式的Servlet容器
9、使用外置的Servlet容器
嵌入式Servlet容器:应用打成可执行的jar
优点:简单、便携;
缺点:默认不支持JSP、优化定制比较复杂(使用定制器【ServerProperties、自定义EmbeddedServletContainerCustomizer】,自己编写嵌入式Servlet容器的创建工厂【EmbeddedServletContainerFactory】);
外置的Servlet容器:外面安装Tomcat—应用war包的方式打包;
步骤
1)、必须创建一个war项目;(利用idea创建好目录结构)
2)、将嵌入式的Tomcat指定为provided;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
3)、必须编写一个SpringBootServletInitializer的子类,并调用configure方法
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
//传入SpringBoot应用的主程序
return application.sources(SpringBoot04WebJspApplication.class);
}
}
4)、启动服务器就可以使用;
原理
jar包:执行SpringBoot主类的main方法,启动ioc容器,创建嵌入式的Servlet容器;
war包:启动服务器,服务器启动SpringBoot应用【SpringBootServletInitializer】,启动ioc容器;