`
netment
  • 浏览: 58786 次
文章分类
社区版块
存档分类
最新评论

Spring-mvc 的处理流程

阅读更多
请求的分发

请求首先到达DispatcherServlet,应用服务器会根据Web应用中web.xml文件定义的url映射将相应的请求分发到DispatcherServlet中

请求的处理

DispatcherServlet会查找相应的HandlerMapping接口的实现类,调用其中的方法:HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception,该方法会返回一个HandlerExecutionChain。返回的HandlerExecutionChain中包含了零个或者是多个Interceptor和一个处理请求的Handler。DispatcherServlet会调用Interceptor中的preHandle() 方法。然后处理Handler,这个Handler相当于Struts中Action,在SpringMVC中默认的实现是Controller接口,是具体处理请求的代码所驻留的地方。事实上HandlerExecutionChain中的getHandler()返回的是一个Object类型。DispatcherServlet不会直接调用getHandler()返回对象中的方法,DispatcherServlet会查找相应的HandlerAdapter,然后具体通过HandlerAdapter来调用getHandler()返回的handler对象中的方法。就是说我们可以实现自己的HandlerAdapter然后通过IoC注入到DispatcherServlet中,从而可以实现一套自定义的控制器。随后DispatcherServlet会调用Interceptor中的postHandle()方法。

视图的处理

DispatcherServlet会期望Hander返回一个ModelAndView,DispatcherServlet会根据所返回的ModelAndView对象所包含的信息进行视图的渲染。起具体出来流程如下:

首先DispatcherServlet会根据LocaleResolver来识别请求中的Locale,开发人员可以自己实现LocaleResolver接口,然后通过IoC注入到DispatcherServlet中,然后DispatcherServlet会判断ModelAndView中是否已经包含了接口View的具体实现,如果包含了,则直接调用View中的方法render(Map model, HttpServletRequest request, HttpServletResponse response)。如果不包含,则说明该ModelAndView只是包含了View的名称引用,DispatcherServlet会调用ViewResolver中的resolveViewName(String viewName, Locale locale)来解析其真正的视图。该方法会返回一个View的具体实现。

视图的渲染

Spring支持多种视图技术,其中比较常用的包括有Jstl视图,Veloctiy视图,FreeMarker视图等。对Jstl视图的渲染Spring是通过JstlView这个类具体实现的。事实上其最终的渲染是交给容器来做的,Spring只是通过RequestDispatcher实现了服务器内部请求的Forward。而对于模板视图,如Veloctiy和FreeMarker等,Spring会初始化其相应的模板引擎,由模板引擎生成最终的Html页面然后在合并到Response的输出流中。

异常的处理

如果在Hander中处理请求是抛出异常,DispatcherServlet会查找HandlerExceptionResolver接口的具体实现,该接口定义了一个方法:

ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex),实现类需要实现该方法以便对异常进行处理,最后该方法需要返回一个ModelAndView。

SpringMVC的一些总结
灵活的Interceptor,通过Interceptor我们可以在一个请求处理前和请求处理完成之后做相应的操作,通过Interceptor机制,我们可以做authentication, logging, and filtering等。
良好的表单支持,在SpringMVC的Controller继承体系结构中,其具体的子类对表单(Form)提供了良好的支持。能够很好的支持单个表单的显示、修改、提交操作。同时也提供了表单的分步提交。
可定制的数据绑定(Data Binding)。
多视图技术的支持,SpringMVC同时支持Jstl, Velocity 等多中视图技术,但是这同时也会引出一个问题,因为各种视图技术都有自己的一套方法来处理国际化,例如Jstl和Velocity处理国际化的方式就很不相同。因此在多个视图技术并存的应用中,国际化也是一个需要注意的问题。
其Handler(控制器)作为Bean定义在Spring容器中,因此能享受容器带来的服务。
Handler(控制器)具有良好的可测试性。
分享到:
评论

相关推荐

    网上书城 spring-mvc

    Spring-MVC是Spring框架的一部分,专门用于处理Web层的业务,提供了一种声明式编程模型,极大地简化了Java Web开发。 在本项目中,Spring-MVC扮演着核心角色,负责处理HTTP请求,调度控制器,以及数据绑定和验证。...

    spring-mvc-官方中文文档

    Spring MVC 提供了丰富的功能,包括请求处理、视图解析、数据绑定、异常处理等,旨在简化 Web 开发流程。 1. **Spring MVC 概述**:Spring MVC 是基于 Spring 框架构建的,它遵循 MVC 设计模式,将业务逻辑、数据和...

    最全最经典spring-mvc教程

    错误处理和异常处理也是Spring MVC中的重要部分,通过@ControllerAdvice和@ExceptionHandler可以全局处理异常,提供统一的错误页面。 最后,测试是任何应用程序开发的重要环节。Spring MVC提供了MockMVC,可以在不...

    spring-mvc-showcase

    这有助于理解 Spring MVC 的工作流程。 "spring-mvc-showcase" 还涵盖了数据绑定、表单验证、国际化、异常处理等高级特性。例如,使用 @ModelAttribute 注解可以将请求参数自动绑定到 Controller 方法的参数上,而 ...

    translation-spring-mvc-4-documentation, Spring MVC 4.2.4 RELEASE 中文文档完整翻译稿.zip

    DispatcherServlet作为整个流程的起点,它是Spring MVC的前端控制器,负责接收HTTP请求,然后根据配置的映射规则将请求分发到相应的处理器。 控制器是处理用户请求并返回相应视图的组件,通常由实现了Controller...

    基于spring-MVC的在线测试系统(客观题)

    该在线测试系统是一个使用Spring-MVC框架构建的简单示例,旨在模拟实际的在线考试环境,尤其是处理客观题型。Spring-MVC是Spring框架的一部分,它提供了模型-视图-控制器(MVC)的设计模式,使得开发人员能够更有效...

    spring.jar spring-webmvc-struts.jar spring-webmvc.jar

    3. **Spring MVC**:学习Spring MVC的架构,包括DispatcherServlet、Controller、Model、View、ModelAndView等概念,以及请求处理流程。 4. **Struts集成**:如果使用了spring-webmvc-struts.jar,需要了解如何在...

    Spring-mvc-showcase

    1. **Maven 构建系统**:Spring-mvc-showcase 使用 Maven 进行项目构建和管理,通过在 pom.xml 文件中定义依赖关系,可以轻松地集成 Spring MVC 及其相关库,如 Spring Core、Spring Web MVC、Jackson JSON 处理库等...

    mdeinum-pro-spring-mvc-code

    在深入源码之前,我们需要了解Spring MVC的基本流程:从HTTP请求到DispatcherServlet,再到HandlerMapping找到合适的处理器,接着由HandlerAdapter处理,最后由ViewResolver返回响应视图。在这个过程中,Spring MVC...

    spring-mvc-helloworld

    总的来说,`spring-mvc-helloworld` 项目是一个很好的起点,可以帮助开发者了解如何设置 Spring MVC 项目,配置服务器,以及如何处理 HTTP 请求。通过深入学习和实践,可以掌握更多高级特性,如拦截器、异常处理、...

    spring-mvc.rar_spring mvc

    通过学习这个压缩包中的内容,初学者可以了解Spring MVC的基本架构,理解各组件如何协同工作,并逐步掌握Web应用的开发流程。同时,交流和讨论是学习过程中的重要部分,可以促进理解和解决问题的能力。

    Spring-MVC+Spring-IOC+Spring-JdbcTemple

    1. **Spring MVC的请求处理流程**:从DispatcherServlet开始,如何通过HandlerMapping找到对应的Controller,再到HandlerAdapter执行方法,最后由ViewResolver返回视图。 2. **Spring Bean的生命周期**:了解Bean的...

    spring-mvc-demo.zip

    总结,"spring-mvc-demo.zip"是一个实践性的学习资源,它涵盖了Spring MVC的基本概念、核心组件和工作流程。通过分析和运行这个项目,开发者可以更直观地理解和掌握Spring MVC的运用,进一步提升自己的Web开发技能。

    spring-mvc-test-sample-master.zip_spring mvc_springmvc-test

    11. **Spring MVC Test Framework**:这是一个专门用于测试Spring MVC应用程序的工具,它允许在没有服务器的情况下测试控制器,极大地简化了测试流程。 在深入研究压缩包内的源代码时,我们可以关注以下几点: - *...

    spring-mvc-demo

    **Spring MVC 框架详解** ...通过研究这个项目,你可以深入理解 Spring MVC 的工作原理,包括请求处理、视图渲染以及如何编写测试用例来验证功能。同时,这个项目也可以作为模板,帮助你快速构建自己的 Web 应用程序。

    spring-mvc-04-master.zip

    通过分离业务逻辑、视图呈现和控制流程,Spring MVC使得应用程序结构更加清晰,便于维护和扩展。 二、Spring MVC核心组件 1. DispatcherServlet:作为Spring MVC的前端控制器,负责接收所有请求,并根据配置分发到...

    maven spring-mvc demo

    在Spring MVC中,JSP可以作为视图模板,由Controller处理完请求后返回。 - **META-INF**:这是一个标准的Java存档(JAR)文件夹,包含元数据,如MANIFEST.MF文件,用于记录JAR文件的属性和依赖。 - **WEB-INF**:这...

    spring-mvc-mybatis

    在现代Java Web开发中,Spring MVC和MyBatis是两个非常重要的框架,它们分别负责控制层和数据访问层的处理。Spring MVC作为Spring框架的一部分,提供了强大的MVC(Model-View-Controller)架构支持,而MyBatis则是一...

    基于Spring-mvc的在线投稿网站的设计与实现-广东药科大学毕业论文.doc

    3. **架构设计**:利用Spring-MVC的组件,如DispatcherServlet负责请求分发,ModelAndView处理视图和模型数据,Controller实现业务逻辑,Service层处理业务逻辑,DAO层操作数据库。 **三、系统实现** 1. **环境搭建...

    spring-mvc的例子

    项目名称“spring-mvc-showcase”暗示这是一个示例或演示项目,可能会包含各种Spring MVC的功能示例,如RESTful API、表单处理、异常处理、国际化、视图解析、拦截器、模型绑定等。开发者可以通过这个项目学习和理解...

Global site tag (gtag.js) - Google Analytics