SpringMVC的工作流程

(1)考察目标

主要考察对springmvc中前端控制器和三大组件的理解,以及接收到请求后所进行的处理。

(2)题目分析

执行过程分析

1)用户向服务器发送请求,请求被Spring 前端控制器 DispatcherServlet捕获;

2)DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;

3)DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)

4)提取Request中的模型数据,填充Handler入参,开始执行Handler(也就是我们自己写的Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

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

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

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

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

5)Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;

\6. )根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;

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

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

Springmvc的优点

1)它是基于组件技术的。全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java组件。并且和Spring提供的其他基础结构紧密集成。

2)不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的)

3)可以任意使用各种视图技术,而不仅仅局限于JSP。比如:PDF,Excel

4)支持各种请求资源的映射策略

5)它是易于扩展的

(3)应用场景

通过本题的题目分析小节的介绍,我们在实际开发中遇到问题就可以结合上述分析迅速找到答案。

例如:

遇到请求没有被控制器方法接收到,可以检查RequestMapping映射和请求URL

遇到请求参数没有传递到控制器方法,可以检查参数是否按照要求编写

遇到控制器方法正常执行,但是没有视图显示(比如404错误),可以检查视图解析器是否配置

(4)总结

本题考察的是:

1)springmvc中前端控制器和三大组件的理解

2)springmvc的执行过程

点击此处
隐藏目录