(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的执行过程