SpringBoot2
文章平均质量分 54
SpringBoot2相关内容
煎丶包
这个作者很懒,什么都没留下…
展开
-
SpringBoot启动过程源码解析
SpringBoot启动过程创建SpringApplication流程主程序类会调用SpringApplication.run()方法创建一个SpringApplication传入主程序类,SpringApplication调用有参构造器,初始化相关的属性。然后还判断当前应用的类型获取SpringApplication的一些应用初始化器获取一些应用监听器判断哪个是主程序类,会从堆栈中找到包含main方法的那个类运行SpringApplicationSpringApplicat原创 2021-06-20 14:44:42 · 160 阅读 · 0 评论 -
嵌入式Servlet容器
切换嵌入式Servlet容器SpringBoot应用启动发现当前是Web应用,Web应用会创建一个Web版的ioc容器 ServletWebServerApplicationContextServletWebServerApplicationContext 启动的时候会寻找 ServletWebServerFactory,即Servlet的Web服务器工厂Servlet,用来生产出Web服务器。SpringBoot底层默认有很多的WebServer工厂,如TomcatServletWebServerF原创 2021-06-16 14:48:23 · 144 阅读 · 0 评论 -
SpringBoot中注入Web原生组件(Servlet、Filter、Listener)
一、使用Servlet API注入Web原生组件使用@ServletComponentScan(value = "srpingboot2.admin")来指定原生Servlet组件都放在哪里使用@WebServlet(urlPatterns = "/my")来声明一个Servlet,会直接响应,不会经过Spring的拦截器使用@WebFilter(urlPatterns={"/css/*","/images/*"})来声明一个过滤器使用@WebListener来声明一个监听器二、使用Reg原创 2021-06-16 10:34:40 · 251 阅读 · 0 评论 -
异常处理流程及原理
异常处理流程执行目标方法,目标方法运行期间有任何异常都会被catch捕获,并标志当前请求结束,dispatchException抛出异常进入视图解析流程,并渲染页面,发生异常时,参数mv为空,传入捕获的异常dispatchException处理handler发生的异常,处理完成返回ModelAndView(1)遍历所有的HandlerExceptionResolvers,找到可以处理当前异常的解析器来解析异常(2)调用resolveException解析异常,传入request原创 2021-06-15 14:26:29 · 1146 阅读 · 0 评论 -
异常处理自动配置原理
异常处理自动配置ErrorMvcAutoConfiguration自动配置类自动配置了处理规则,给容器中注册了多种组件errorAttributes组件,类型为DefaultErrorAttributes。这个组件定义错误页面中可以包含哪些数据basicErrorController组件,类型为BasicErrorController。处理默认/error路径的请求,new一个id为error的ModelAndView对象来响应页面error组件,类型为View。响应的是默认错误原创 2021-06-15 09:27:29 · 124 阅读 · 0 评论 -
文件上传流程及参数解析原理
实现文件上传功能@Slf4j@Controllerpublic class FormTestController { @GetMapping("/form_layouts") public String form_layouts() { return "form/form_layouts"; } @PostMapping("/upload") public String upload(@RequestParam("email") Strin原创 2021-06-14 16:33:53 · 808 阅读 · 0 评论 -
拦截器的执行时机和原理
拦截器原理根据当前请求,找到HandlerExecutionChain执行链,执行链可以处理当前请求的handler方法以及handler方法的所有拦截器先来顺序执行所有拦截器的preHandle方法(1)如果当前拦截器preHandle返回为true,说明放行,则执行下一个拦截器的preHandle方法(2)如果当前拦截器preHandle返回为false,说明不放行,则倒序执行所有已经执行了的拦截器的afterCompletion如果任何一个拦截器返回false,就直接跳出,不会执行目标方原创 2021-06-14 14:01:14 · 735 阅读 · 0 评论 -
视图解析器与视图源码分析
视图解析原理流程目标方法处理的过程中,所有的数据都会被保存在ModelAndViewContainer里面,包括数据和视图地址。方法的参数如果是一个自定义类型对象,它会封装请求参数,也会重新保存ModelAndViewContainer中。任何目标方法执行完成以后都会返回ModelAndView,里面包含了数据和视图地址执行processDispatchResult方法处理派发结果,响应页面(1)调用render(mv,request,response)进行页面渲染逻辑原创 2021-06-13 15:39:47 · 132 阅读 · 0 评论 -
【Web响应处理】内容协商原理
内容协商原理根据客户端接收能力的不同,返回不同媒体类型的数据。改变请求头中Accept字段,告诉服务器客户端可以接收的数据类型。判断当前响应头中是否已经有确定的媒体类型,如果有就使用之前确定的媒体类型使用contentNegotiationManager内容协商管理器,默认使用基于请求头的策略,来获取客户端支持接收的内容类型,即获取请求头中的Accept字段的值获取服务器能够产生的媒体类型。循环遍历所有当前系统的MessageConverter,找到支持操作当前对象的消息转换器原创 2021-06-13 08:51:42 · 245 阅读 · 2 评论 -
【Web响应处理】ReturnValueHandler原理
ReturnValueHandler原理目标方法执行完,会返回Person对象@Controllerpublic class ResponseTestController { @ResponseBody @GetMapping("/getperson") public Person getPerson() { Person person = new Person(); person.setUserName("张三"); perso原创 2021-06-11 04:38:13 · 732 阅读 · 0 评论 -
【Web请求处理】自定义Converter原理
自定义Converter原理```java@Configuration(proxyBeanMethods = false)public class WebConfig { @Bean public WebMvcConfigurer webMvcConfigurer() { return new WebMvcConfigurer() { @Override public void addFormatters(Format原创 2021-06-10 14:26:43 · 102 阅读 · 0 评论 -
【Web请求处理】自定义对象参数解析原理
自定义对象参数解析原理请求参数可以封装到自定义对象参数中 @PostMapping("/saveuser") public Person saveUser(Person person) { return person; }提交表单数据<form action="/saveuser" method="post"> 姓名:<input name="userName" value="zhangsan"/> 年龄:<inp原创 2021-06-10 13:43:27 · 157 阅读 · 1 评论 -
【Web请求处理】请求参数与基本注解的使用
请求参数与基本注解@PathVariable动态获取请求路径中的参数值 @RequestMapping("/car/{id}/owner/{username}") public Map<String,Object> getCar(@PathVariable("id") Integer id, @PathVariable("username") String name,原创 2021-06-09 21:44:08 · 260 阅读 · 0 评论 -
【Web请求处理】Model和Map参数解析原理
Model和Map参数解析原理Map、Model参数里面的数据会被放在request请求域中RedirectAttributes重定向携带数据ServletResponse响应数据Map、Model类型的参数,会使用ModelAndViewContainer这个参数解析器,返回mavContainer.getModel(),实际上返回的是BindingAwareModelMap,它既是Model也是MapMap、Model类型的参数都是用同一个对象来处理参数的值执行完目标方法之后,会得原创 2021-06-09 21:31:56 · 521 阅读 · 1 评论 -
【Web请求处理】Servlet API参数解析原理
Servlet API参数解析原理Servlet APIWebRequestServletRequestMultipartRequestHttpSessionjavax.servlet.http.PushBuilderPrincipalInputStreamReaderHttpMethodLocaleTimeZoneZoneIdServletRequestMethodArgumentResolver 参数解析器支持以上的参数@Override public boolean原创 2021-06-09 20:57:19 · 127 阅读 · 0 评论 -
【Web请求处理】请求参数解析处理的原理
请求参数处理的原理doDispatch()方法会调用getHandler()方法在HandlerMapping中找到能处理当前请求的Handler,即找到当前请求能被Controller层中的哪个方法处理然后调用getHandlerAdapter()方法为当前Handler找到一个适配器HandlerAdaptergetHandlerAdapter()方法会遍历所有的适配器,从中找到支持的适配器RequestMappingHandlerAdapter适配器支持标注了@RequestMappi原创 2021-06-08 20:50:00 · 152 阅读 · 0 评论 -
【Web请求处理】请求映射处理的源码分析
请求映射处理1、REST风格REST风格支持使用HTTP请求方式动词来表示对资源的操作WebMvcAutoConfiguration自动配置类中已经配置了OrderedHiddenHttpMethodFilterOrderedHiddenHttpMethodFilter会获取post请求里面的隐藏域_method的值OrderedHiddenHttpMethodFilter默认关闭,需要手动开启spring: mvc: hiddenmethod: filter:原创 2021-06-08 10:16:48 · 194 阅读 · 0 评论 -
【Web】静态资源规则与定制化
一、静态资源访问1、静态资源目录静态资源放在类路径下:/static/public/resources/META-INF/resources静态资源的映射是/**,即拦截根目录下的所有的请求。请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。如果按照静态资源的路径也没有找到,则响应404页面2、静态资源访问前缀可以修改访问静态资源的前缀spring: mvc: static-path-pattern: /res/**也可以修原创 2021-06-07 21:58:21 · 180 阅读 · 3 评论 -
SpringBoot自动配置源码分析
一、引导加载自动配置类@SpringBootApplication注解相当于@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan这三个注解的整合@SpringBootConfiguration这个注解也使用了@Configuration标注,代表当前是一个配置类@ComponentScan包扫描,指定扫描哪些注解@EnableAutoConfiguration这个注解也是一个合成注解@AutoConfigura原创 2021-06-04 22:01:37 · 140 阅读 · 1 评论 -
SpringBoot底层注解详解
一、@Configuration注解1、基本使用自定义配置类/** * 1、@Configuration 告诉SpringBoot这是一个配置类,相当于一个xml配置文件 * * 2、配置类里面使用 @Bean 标注在方法上 来给容器注册组件,默认是单实例的 * * 3、配置类本身也是一个组件 */@Configuration(proxyBeanMethods = true)public class MyConfig { @Bean public User user0原创 2021-06-03 22:01:41 · 347 阅读 · 1 评论