springmvc源码分析

springmvc(一) springmvc框架原理分析和简单入门程序

China☆狼群 提交于 2020-03-11 10:16:35
      springmvc这个框架真的非常简单,感觉比struts2还更简单,好好沉淀下来学习~                       --WH 一、什么是springmvc?       我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交道,而前面刚写的mybatis跟hibernate一样,与数据库打交道在dao层的另一个框架,而今天所要讲解的springmvc是在web层的另一个框架。       springmvc全名是spring web mvc,springmvc是spring的一个模块,并且看名字即可知道,springmvc是一个基于mvc设计模式的前端web框架。       mvc:m(model模型)、v(view视图)、c(control控制)       mvc的运用概念图            二、springmvc的入门程序       通过这个来快速了解springmvc大概的开发流程,其实通过上面的mvc分析图,差不多就知道了如何开发了。重点就是三步。         1、在web.xml中配置一个serlvet,用来控制,         2、编写一个handler(controller)类,用来做业务处理。       

深入源码分析SpringMVC执行过程

拈花ヽ惹草 提交于 2020-02-25 19:18:51
本文主要讲解 SpringMVC 执行过程,并针对相关源码进行解析。 首先,让我们从 Spring MVC 的四大组件: 前端控制器(DispatcherServlet)、处理器映射器(HandlerMapping)、处理器适配器(HandlerAdapter)以及视图解析器(ViewResolver) 的角度来看一下 Spring MVC 对用户请求的处理过程,过程如下图所示: SpringMVC 执行过程 用户请求发送到 前端控制器 DispatcherServlet 。 前端控制器 DispatcherServlet 接收到请求后,DispatcherServlet 会使用 HandlerMapping 来处理, HandlerMapping 会查找到具体进行处理请求的 Handler 对象 。 HandlerMapping 找到对应的 Handler 之后,并不是返回一个 Handler 原始对象,而是一个 Handler 执行链(HandlerExecutionChain),在这个执行链中包括了拦截器和处理请求的 Handler。HandlerMapping 返回一个执行链给 DispatcherServlet。 DispatcherServlet 接收到执行链之后,会 调用 Handler 适配器去执行 Handler 。 Handler 适配器执行完成 Handler

【 SpringMVC 源码分析 】- 1 SpringMVC 原理

房东的猫 提交于 2020-02-24 07:48:50
1 SpringMVC 原理 1.1 SpringMVC 的运行流程 用户发送请求至前端控制器DispatcherServlet DispatcherServlet收到请求调用HandlerMapping处理器映射器。 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 DispatcherServlet通过HandlerAdapter处理器适配器调用处理器 执行处理器(Controller,也叫后端控制器)。 Controller执行完成返回ModelAndView HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet DispatcherServlet将ModelAndView传给ViewReslover视图解析器 ViewReslover解析后返回具体View DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。 DispatcherServlet响应用户。 1.2 回顾Servet知识 来源: CSDN 作者: 不知所起 一往而深 链接: https://blog.csdn.net/weixin_42112635/article/details/104458262

SpringMVC - 9 - 数据绑定(DataBinder)-1:数据类型转换(ConversionService)、自定义数据类型转换(ConversionServiceFactoryBean)

左心房为你撑大大i 提交于 2020-02-15 12:38:23
视频 : https://www.bilibili.com/video/av49996848?p=34 《SpringMVC类型转换、数据绑定详解[附带源码分析]》 - https://www.cnblogs.com/fangjian0423/p/springMVC-databind-typeconvert.html 文章目录 # 流程图 # 数据转换 # 几个需要注意的对象 # 自定义类型转换器 # 流程图 # 数据转换 # 几个需要注意的对象 # 自定义类型转换器 或者 另外,如果既要类型类型转换,又要 格式化 需要把 ConversionServiceFactoryBean 升级一下 升级成下面的子类,具体看下一篇 - 下一篇 来源: CSDN 作者: LawssssCat 链接: https://blog.csdn.net/LawssssCat/article/details/104312463

SpringMvc

孤街醉人 提交于 2020-01-28 23:44:09
三层结构介绍 表现层 : * 也就是我们常说的web 层。它负责接收客户端请求,向客户端响应结果,通常客户端使用http 协议请求web 层,web 需要接收 http 请求,完成 http 响应。 * 表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。 * 表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。 * 表现层的设计一般都使用 MVC 模型。(MVC 是表现层的设计模型,和其他层没有关系) 业务层 : * 也就是我们常说的 service 层。它负责业务逻辑处理,和我们开发项目的需求息息相关。web 层依赖业务层,但是业务层不依赖 web 层。 * 业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的, 事务应该放到业务层来控制) 持久层 : * 也就是我们是常说的 dao 层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。通俗的讲,持久层就是和数据库交互,对数据库表进行曾删改查的。 SpringMvc是什么? SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 SpringFrameWork

SpringMVC之拦截器的源码浅析

孤人 提交于 2020-01-22 20:41:49
   SpringMVC是目前流行的Web框架之一。今天主要是对SpringMVC中拦截器做了一个浅析。 之前分析的DispatcherServlet类中在做doDispatcher,会有HandlerExectionChain对象, 其中getHandler函数,获取的是一个HandlerExecutionChain对象 它包含了handlerMethod(即是Controller层对应@RequestMapping注解的函数)和interceptors集合。 根据handlerMethod找到对应的HandlerAdapter. 然后,调用HandlerExecutionChain的applyPreHandler方法。然后执行HandlerAdapter的核心方法handler方法,执行完后,执行PostHandler方法, 不管是否执行成功,都会执行HandlerExecutionChain的applyAfterCompletion方法。   拦截器有分为前置拦截和后置拦截以及完成后拦截, 后置拦截和完成后拦截的区别是方法执行后,在DispatcherServlet渲染视图之前拦截, 而完成后拦截,是请求处理完成,并且渲染视图后进行拦截。   以下是HandlerExecutionChain的applyPreHandle、applyPostHandle

SpringMVC拦截器详解

淺唱寂寞╮ 提交于 2020-01-19 08:06:00
拦截器是每个Web框架必备的功能,也是个老生常谈的主题了。 本文将分析SpringMVC的拦截器功能是如何设计的,让读者了解该功能设计的原理。 重要接口及类介绍 1. HandlerExecutionChain类   由HandlerMethod和Interceptor集合组成的类,会被HandlerMapping接口的getHandler方法获取。 2. HandlerInterceptor接口      SpringMVC拦截器基础接口。  3. AbstractHandlerMapping   HandlerMapping的基础抽象类。 4. AsyncHandlerInterceptor   继承HandlerInterceptor的接口,额外提供了afterConcurrentHandlingStarted方法,该方法是用来处理异步请求。当Controller中有异步请求方法的时候会触发该方法。 楼主做过测试,异步请求先支持preHandle、然后执行afterConcurrentHandlingStarted。异步线程完成之后执行preHandle、postHandle、afterCompletion。 有兴趣的读者可自行研究。 5. HandlerInterceptorAdapter   实现AsyncHandlerInterceptor接口的抽象类

SpringMVC源码阅读:拦截器

纵然是瞬间 提交于 2020-01-17 05:20:09
1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看 SpringMVC源码阅读入门 ,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring4.3.7)分析,弄清楚SpringMVC如何完成视图解析的 2.源码分析 在 SpringMVC源码阅读:拦截器 分析 过doDispatch的运行过程,这里再分析一遍 回到DispatcherServlet类的doDispatch方法,看看doDispatch如何获取ModelAndView HandlerMapping根据request获得HandlerExecutionChain 根据HandlerExecutionChain获取HandlerAdapter HandlerAdapter根据request,response和HandlerExecutionChain调用handle方法返回ModelAndView 然后交由 processDispatchResult 处理 1023行检测从doDispatch方法运行到此是否有异常 1037行根据ModelAndView渲染视图 1259根据视图名称解析成View对象 1282行调用AbstractView的render方法进行渲染 点进去,这里以解析ftl做测试 301行创建包含动态值和静态属性的Map

SpringMVC执行流程

非 Y 不嫁゛ 提交于 2020-01-15 13:01:20
一、springMvc概念 springMvc是基于servlet的web框架,其简化了web程序的开发 二、springMvc请求流程 在阅读时不妨可以带着几个问题阅读: 1.我们通常在浏览器输入的接口怎么由DispatcherServlet调到具体的Handler的(就是我们自己开发的Controller类) 2.编写Controller的形式有哪几种? springMvc重要组件: 之所以先说这几个组件,是因为只要了解了这几个组件后你便可以对springMvc请求流程有个大致的清晰认识了。(Handler就是我们写的Controller) HandlerMapping HandlerAdapter ViewResolver View HandlerExceptionResolver HandlerInterceptor DisPatcher作为一个主流程入口,看一下DispatcherServlet结构 DispatcherServlet为了简洁,省去了很多方法跟属性 public class DispatcherServlet extends FrameworkServlet { //定义了默认策略名字 private static final String DEFAULT_STRATEGIES_PATH = "DispatcherServlet.properties";

SpringMVC系列(一)执行流程

和自甴很熟 提交于 2020-01-13 18:03:07
文章目录 doDispatch()方法 getHandler(HttpServletRequest request) getHandlerAdapter(Object handler) processDispatchResult() 本系列结合源码(基于springboot2.1.4),分析springmvc的执行流程。 先上一个完整的流程图,借用网络上的: 我们知道,前端发起的请求首先到tomcat,最终执行的是servlet,springmvc实现了一个servlet,叫做 DispatcherServlet ,其继承关系如下: 假设发起一个get请求,这时,servlet中的doGet方法会执行,最终执行到DispatcherServlet,链路如下: FrameworkServlet#doGet(HttpServletRequest request, HttpServletResponse response)  --》FrameworkServlet#processRequest(HttpServletRequest request, HttpServletResponse response)   --》DispatcherServlet#doService(HttpServletRequest request, HttpServletResponse response)