Spring MVC 的理解

1.如何用xml配置的方式配置Spring MVC 的controller:

        1)配置handle,映射请求

        2)处理映射器将bean的name作为url 进行查找,需要在配置handler时制定url的name

        3)配置simpleControllerHandlerAdapter ,是一个处理器适配器,所有处理器适配器都要实现HandlerAdapter接口,这个是为了完成对hellocontroller类的handlerRequest方法发调用。

        4)配置视图解析器InternalResourceViewResolver

        5)实现controller接口,handlerRequest是controller接口必须实现的方法,controller通过调用此方法来处理请求,入参是httpservletRequest和httpServletResponse,需要返回一个ModleAndView对象。


2.基于注解的方式实现controller,从spring2.5版本开始。

@controller,@requestMapping

RequestMappingHandlerAdapter是用来完成对@RequestMapping标注方法的调用


3.详解DispatchServlet的工作流程

1)初始化文件上传解析器

2)初始化本地化解析器

3)初始化主题解析器

4)初始化处理器映射器,将请求映射到处理器

5)初始化处理器适配器

6)初始化处理器异常解析器,如果执行过程中遇到异常将交给HandlerExceptionResolver来解析

7)初始化请求到试图名称解析器

8)初始化视图解析器,通过viewResolver解析逻辑视图名到具体视图实现

9)初始化flash映射管理器


4.每种组件的细节

1)本地化解析器

2)主题解析器

3)处理器映射器

4)处理器适配器

5)处理器异常解析器

6)视图名称解析器

7)视图解析器

8)文件上传解析器

9)FlashMap映射管理器



5.MVC底层框架的机制

前端servlet接收到用户请求之后,通常会对用户的请求进行简单预处理,例如解析,封装参数等,然后通过反射来创建controller实例,并调用controller的制定方法(实现controller接口的是handleRequest方法,而如果是用注解的方式的话可以是任意方法来处理用户请求。

当servlet拦截请求后,它如何知道创建哪个controller接口的实例呢?分两种情况,如果是注解的方式的话呢,通过xml配置;如果是注解的方式的话呢,根据注释@RequestMapping描述hello请求对应的方法,这样也可以让框架知道创建哪个controller接口的实例并调用哪个方法处理请求。


6.Spring MVC执行的流程

1)用户向服务器发送请求,请求被spring的前端控制器DispatchServlet截获

2)DispatchSevlet对请求的URL(统一资源定位符)进行解析,得到URI(请求资源标识符),然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象,包括Handler对象以及Handler对象对应的拦截器,这些对象会被封装到一个HandlerExecutionChain对象当中返回

3)DispatchServlet根据获得的Handler,选择一个合适的HandlerAdapter。HandlerAdapter的设计符合面向对象中的单一职责原则,代码架构清晰,便于维护,最重要的是,代码可复性高。HandlerAdapter会被用于处理多种Handler,调用Handler实际处理请求的方法,例如hello方法。

4)提取请求中的模型数据,开始执行Handler(controller),在填充Handler的入参过程中,根据配置,Spring将帮你做一些额外的工作。

消息转换:将请求消息,如(Json,xml等数据)转换成一个对象,将对象转换为指定 的响应信息。

数据转换:对请求消息进行数据转换,如String转换为Integer,Double等。

数据格式化:对请求消息进行数据格式化,如将字符串转换成格式化数字或者格式化日期等。

数据验证:验证数据的有效性(长度,格式等),验证结果存储到BindingResult或者Error中。

5)Handler执行完成后,向DispatchServlet返回一个ModelAndView对象,ModelAndView对象当中应该包含视图名或视图名和模型。

6)根据返回的ModleAndView对象,选择一个适合的ViewResolver(视图解析器)返回给DispatchServlet。

7)ViewResolver结合Model和View来渲染视图。

8)将视图渲染结果返回给客户端。

开发者并不需要关心这些对象是如何工作的,只需要在Handler当中完成对请求的业务处理即可。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值