springMVC 初始化过程及执行过程

初始化过程

解析web.xml文件,获取监听和servlet配置

servletContextListener初始化,并通过观察者模式监听filer和servlet的初始化和销毁

初始化DispatchServlet,执行父类HttpServlet的init方法

执行initServletBean初始化HttpServletBean

执行initWebApplicationContext,初始化WebApplicationContext

执行initFrameworkServlet,初始化FrameworkServlet

之后执行DispatchServlet的onReFresh和initStrategies方法

自定义springMVC

根据配置文件扫描路径,获取扫描路径下所有类全限定类名

扫描有@controller或@restController等注解的类,并实例化,并获取注解对应url

扫描类的方法中有@getMapping,@postMapping等注解的方法,获取对应url

创建一个handler,包括类的信息和方法信息和拼接的url以及方法参数信息paramIndexMapping

解析方法参数名及类型到handler中

检查有没有对该请求的拦截器,有的话也存到handler中

建立url和method之间的映射关系(map缓存起来) handlerMapping.add(handler);

springMVC请求过程

用户请求DispatchServlet
DispatchServlet根据请求路径调用具体HandlerMapping返回一个HandlerExcutionChain(Handler+拦截器)
DispatchServlet调用HandlerAdapter适配器,HandlerAdapter调用具体的Handler处理业务
Handler处理结束返回一个具体的ModelAndView给适配器,适配器将ModelAndView给DispatchServlet
DispatchServlet把视图名称给ViewResolver视图解析器
ViewResolver返回一个具体的视图给DispatchServlet(在解析出View视图对象的过程中会判断是否重定向、是否转发等,不同的情况封装的是不同的 View实现)
渲染视图,展示给用户

handlerMapping和HandlerAdapter

controller有多种实现方式

1.增加@controller和@requestMapping注解

2.实现Controller接口,重写handleRequest方法

3.实现HttpRequestHandler,重写handleRequest方法

HandlerMapping将controller以BeanNameUrlHandlerMappingRequestMappingHandlerMapping等方式封装为handler

DispatchServlet通过请求获取handler时,获取的是HandlerExcutionChain

HandlerExcutionChain需要通过反射的方式获取以哪种方式执行object类型的handler

因此需要HandlerAdapter识别object类型的handler具体是哪种类型(RequestMappingHandlerAdapter,HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter

再解析handler为request和response,servlet执行完成后返回modelAndView

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值