SpringBoot默认的错误机制 根据请求头中的信息判断,如果是浏览器就返回一个错误页面,如果是其他客户端,就返回一个json数据
浏览器错误页面 1. 原理:ErrorMvcAutoConfiguration:错误处理的自动配置在容器添加了所需组件。 DefaultErrorAttributes:把错误信息添加到错误响应中,使其可以在页面上显示错误数据(时间戳、状态码、错误信息等) BasicErrorController:处理默认/error请求。识别发送请求的是浏览器(决定前往哪个错误页面)还是其他客户端 ErrorPageCustomizer:系统出现错误以后来到error请求进行处理 DefaultErrorViewResolver:错误视图解析器,判断是否存在错误页面的引擎模板,如果用就调用,没有就调用默认页面 2. 自定义 1)、有模板引擎的情况下;error/状态码.html; (4xx、5xx)。错误发生后,系统会寻找对应的错误页面,即状态码.html 2)、没有模板引擎(模板引擎找不到这个错误页面),静态资源文件夹下找; 3)、以上都没有错误页面,就是默认来到SpringBoot默认的错误提示页面;
定制错误的json数据
配置嵌入式Servlet容器
定制和修改Servlet容器的相关配置: (1)application.properties中配置 (2)编写一个EmbeddedServletContainerCustomizer(嵌入式的Servlet容器的定制器),来修改Servlet容器的配置,并用@Bean添加到容器中。//Customizer:定制器注册Servlet三大组件【Servlet、Filter、Listener】:SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,所以我们要自定义就要手动地把组件添加到容器. @Bean//注册Servlet: public ServletRegistrationBean myServlet(){ ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet"); return registrationBean; } @Bean//注册Filter: public FilterRegistrationBean myFilter(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new MyFilter()); registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet")); return registrationBean; } @Bean//注册Listener: public FilterRegistrationBean myFilter(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new MyFilter()); registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet")); return registrationBean; }总结用法:先创建自己所需的Servelet、Linstener、Filter对象类,之后在有@Config注解的类中把以上的@Bean组件写进去即可。
配置其他服务器:引入依赖
原理以后再学
使用外置Servelet容器 1. 方法: 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)、启动服务器就可以使用; 2. 原理以后再学