珠海企业建站,沈阳注册公司,学校网站建设考评办法,网络营销活动策划文章目录 一、错误处理机制1.1 默认1.2 自定义 二、嵌入式容器 一、错误处理机制
1.1 默认
错误处理的自动配置都在ErrorMvcAutoConfiguration中#xff0c;两大核心机制#xff1a; ● 1. SpringBoot 会自适应处理错误#xff0c;响应页面或JSON数据 ● 2. SpringMVC的错… 文章目录 一、错误处理机制1.1 默认1.2 自定义 二、嵌入式容器 一、错误处理机制
1.1 默认
错误处理的自动配置都在ErrorMvcAutoConfiguration中两大核心机制 ● 1. SpringBoot 会自适应处理错误响应页面或JSON数据 ● 2. SpringMVC的错误处理机制依然保留MVC处理不了才会交给boot进行处理 规则
解析一个错误页 a. 如果发生了500、404、503、403 这些错误 ⅰ. 如果有模板引擎默认在 classpath:/templates/error/精确码.html ⅱ. 如果没有模板引擎在静态资源文件夹下找 精确码.html b. 如果匹配不到精确码.html这些精确的错误页就去找5xx.html4xx.html模糊匹配 ⅰ. 如果有模板引擎默认在 classpath:/templates/error/5xx.html ⅱ. 如果没有模板引擎在静态资源文件夹下找 5xx.html如果模板引擎路径templates下有 error.html页面就直接渲染
1.2 自定义
最佳实战 ● 前后分离 ○ 后台发生的所有错误ControllerAdvice ExceptionHandler进行统一异常处理。 ● 服务端页面渲染 ○ 不可预知的一些HTTP码表示的服务器或客户端错误 ■ 给classpath:/templates/error/下面放常用精确的错误码页面。500.html404.html ■ 给classpath:/templates/error/下面放通用模糊匹配的错误码页面。 5xx.html4xx.html ○ 发生业务错误 ■ 核心业务每一种错误都应该代码控制跳转到自己定制的错误页。 ■ 通用业务classpath:/templates/error.html页面显示错误信息。
页面JSON可用的Model数据如下
二、嵌入式容器
Servlet容器管理、运行Servlet组件Servlet、Filter、Listener的环境一般指服务器。
首先 ● SpringBoot 默认嵌入Tomcat作为Servlet容器。 ● 自动配置类是ServletWebServerFactoryAutoConfiguration
1.我们可以先看ServletWebServerFactoryAutoConfiguration的条件注解 AutoConfiguration(after {SslAutoConfiguration.class}
)
AutoConfigureOrder(-2147483648)
ConditionalOnClass({ServletRequest.class})
ConditionalOnWebApplication(type Type.SERVLET
)
EnableConfigurationProperties({ServerProperties.class})
Import({ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class, EmbeddedTomcat.class, EmbeddedJetty.class, EmbeddedUndertow.class})2.它会帮我们自动导入服务器但是又有个前提比如我们点进去EmbeddedTomcat。 ConditionalOnClass({Servlet.class, Tomcat.class, UpgradeProtocol.class})ConditionalOnMissingBean(value {ServletWebServerFactory.class},search SearchStrategy.CURRENT)static class EmbeddedTomcat {EmbeddedTomcat() {}BeanTomcatServletWebServerFactory tomcatServletWebServerFactory(ObjectProviderTomcatConnectorCustomizer connectorCustomizers, ObjectProviderTomcatContextCustomizer contextCustomizers, ObjectProviderTomcatProtocolHandlerCustomizer? protocolHandlerCustomizers) {TomcatServletWebServerFactory factory new TomcatServletWebServerFactory();factory.getTomcatConnectorCustomizers().addAll(connectorCustomizers.orderedStream().toList());factory.getTomcatContextCustomizers().addAll(contextCustomizers.orderedStream().toList());factory.getTomcatProtocolHandlerCustomizers().addAll(protocolHandlerCustomizers.orderedStream().toList());return factory;}}又会有一些条件注解就是当我们导入tomat包之后这些注解才会生效才会导入tomat其他两个同理。这里以tomat为例。 3.同时我们可以看到有一个TomcatServletWebServerFactory 服务器工厂可以点进去有一个获得web服务器的函数下边new了一个tomcat我们可以向上看看是哪个函数调用 就知道是什么时候创建web服务器了 可以看到是ServletWebServerApplicationContext 该类的createWebServer()函数调用了该函数也就是web服务器的一个ioc容器 4.可以继续向上看我们可以看到是onRefresh函数调用了也就是当刷新时会调用该函数创建web服务器。
总结就是web服务器的ioc容器在onRefresh的时候会调用创建web服务器的方法。而创建web服务器又是由WebServerFactory工厂来搞定的该工厂会根据我们导入了什么依赖来确定要创建什么服务器。默认EmbeddedTomcat会给容器中放一个 TomcatServletWebServerFactory导致项目启动自动创建出Tomcat。
实战 ● 修改server下的相关配置就可以修改服务器参数 ● 通过给容器中放一个ServletWebServerFactory来禁用掉SpringBoot默认放的服务器工厂实现自定义嵌入任意服务器。