Spring MVC体系结构外文翻译资料

 2022-08-19 04:08

英语原文共 590 页,剩余内容已隐藏,支付完成后下载完整资料


Spring MVC体系结构

在本章中,您将深入了解Spring MVC的内部原理,并仔细研究org.springframework.web.servlet. DispatcherServlet。你将开始学习如何传入请求由servlet处理,以及如何确定哪些组件在请求中扮演角色处理。在确定了这些组件之后,您将深入角色和功能不同的组件和这些组件的不同实现。你也会学到如何配置org.springframework.web.servlet.DispatcherServlet,部分通过检查默认配置。

DispatcherServlet请求处理工作流

在前一章中,您了解了前端控制器在Model 2 MVC模式中扮演的重要角色。前端控制器负责将传入的请求分派给正确的处理程序并准备响应,以便将其呈现为用户希望看到的内容。Spring MVC中前端控制器的角色由org.springframework.web.servlet来扮演。

.DispatcherServlet。这个servlet使用几个组件来完成它的角色。所有这些组件都表示为接口,可用于一个或多个实现。下一节将探索这些组件在请求处理工作流中扮演的一般角色并将介绍接口的不同实现。

笔记 我们有目的的使用术语handler。这个 DispatcherServlet非常灵活且可定制,它可以处理更多类型的处理程序,而不是org.springframework.web.servlet.mvc.Controller接口或org.springframework.stereotype.Controller控制类 。

工作流

请求处理工作流的高级概述如图4-1所示。

图4-1 请求处理工作流

在前面的章节中,您了解了分离关注点的重要性。在Spring框架中,也应用了相同的规则。许多支持组件被设计为具有可扩展性和关注点分离的接口。尽管图4-1中的高级概述是正确的,但是在幕后发生了更多的事情。图4-2显示了请求处理工作流的更完整视图。

图4-2 请求处理工作流

图4-2提供了DispatcherServlet中请求处理工作流的全局概述。以下部分将放大此流中的不同步骤。

准备请求

在DispatcherServlet开始调度和处理请求之前,它首先对请求进行一些准备和预处理。servlet首先确定并公开当前java.util.Locale对于当前请求,使用org.springframework.web.servlet.LocaleResolver。接下来,它在org.springframework.web.context.request.RequestContextHolder. 这使得框架代码可以轻松地访问当前请求,而不是传递它。

接下来,servlet将构造一个所谓的org.springframework.web.servlet.FlashMap. 它通过调用org.springframework.web.servlet.FlashMapManager,它将尝试解析输入FlashMap。此映射包含在上一个请求中显式存储的属性。通常,当重定向到下一页时使用此选项。这一主题将在第五章深入讨论。

接下来,检查传入请求是否为多部分HTTP请求(在进行文件上载时使用)。如果是的话,请求被包装在org.springframework.web.multipart.multipartttpservletrequest通过org.springframework.web.multipart. MultipartResolver。之后,请求就可以发送到正确的处理程序了。图4-3显示了请求处理工作流第一部分的流程图。

图4-3请求处理流的开始

确定HandlerExecutionChain

分派请求涉及到几个组件(参见图4-4)。当请求准备好发送时,DispatcherServlet将咨询一个或多个org.springframework.web.servlet.HandlerMapping实现来确定哪个处理程序可以处理请求。如果找不到处理程序,则会将HTTP 404响应发送回客户端。HandlerMapping返回org.springframework.web. servlet. HandlerExecutionChain(您将在下一节中了解更多信息)。确定处理程序后,servlet将尝试查找组织.springframeworkSPRING MVC ARCHITECTURE.web.servlet.HandlerAdapter实际执行找到的处理程序。如果找不到合适的手持式适配器,则javax.servlet.ServletException被抛出。

图4-4发送请求

执行HandlerExecutionChain

为了处理请求,DispatcherServlet使用HandlerExecutionChain来确定要执行什么。这个类保存对需要调用的实际处理程序的引用;但是,它也(可选地)引用org.springframework.web.servlet.HandlerInterceptor在处理程序执行之前(preHandle方法)和之后(postHandle方法)执行的实现。这些拦截器可用于应用横切功能(有关本主题的更多信息,请参阅第6章)。如果代码执行成功,将再次调用拦截器;最后,在需要时,将呈现视图(参见图4-5)。

图4-5处理请求

处理程序的执行委托给在上一步中确定的所选HandlerAdapter。它知道如何执行选定的处理程序,以及如何将响应转换为org.springframework.web.servlet.ModelAndView. 如果返回的ModelAndView中没有视图,则org.springframework.web.servlet.RequestToViewNameTranslator根据传入请求生成视图名称。

处理异常

当处理请求期间引发异常时,DispatcherServlet将参考配置的org.springframework.web.servlet. handlerExceptionResolver以处理引发的异常。解析器可以将异常转换为显示用户的视图。例如,如果存在与数据库错误相关的异常,则可以显示一个指示数据库已关闭的页。如果异常没有被解决,它将被重新抛出并由servlet容器处理,这通常会导致HTTP 500响应代码(内部服务器错误)。图4-6显示了请求处理工作流的这一部分。

图4-6异常处理

渲染视图

如果在请求处理工作流期间选择了视图,DispatcherServlet将首先检查它是否是视图引用(如果视图是java.lang.String语言). 如果是,配置的org.springframework.web.servlet.ViewResolver是为了解决对实际视图的引用org.springframework.web.servlet.View实施。如果没有视图而无法解决,则javax.servlet.ServletException被扔了。图4-7显示了视图呈现过程。

图4-7视图呈现过程

结束进程

无论是否存在异常,每个传入的请求都将通过请求处理流的此步骤。如果HandlerExecutionChain可用,则调用拦截器的afterCompletion方法。只有成功调用preHandle方法的侦听器才会调用其afterCompletion方法。接下来,这些拦截器按调用其预处理方法的相反顺序执行。这模仿了在servlet过滤器中看到的行为,其中第一个被调用的过滤器也是最后一个被调用的过滤器。最后,DispatcherServlet使用Spring框架中的事件机制来触发org.springframework.web.context.support.RequestHandledEvent(见图4-8)。您可以创建和配置org.springframework.context.ApplicationListener以接收和记录这些事件。

图4-8完成处理

请求处理摘要

DispatcherServlet是使用Spring MVC处理请求的关键组件。它还具有高度的灵活性和可配置性。这种灵活性来自于这样一个事实:servlet使用许多不同的组件来完成其角色,这些组件被表示为接口。表4-1概述了请求处理工作流中涉及的所有主要组件类型。

表4-1用于请求处理工作流的DispatcherServlet组件

组件类型

描述

org.springframework.web.multipart.

处理多部分文件上载的策略接口

org.springframework.web.servlet.

locale解析和修改策略

org.springframework.web.servlet.

主题化分辨率和修改解释器的策略

org.springframework.web.servlet. HandlerMapping

主题化分辨率和修改解释器的策略

org.springframework.web.servlet. HandlerAdapter

处理程序对象类型执行处理程序的策略

org.springframework.web.servlet. HandlerExceptionResolver

处理处理程序执行期间引发的异常的策略

org.springframework.web.servlet. RequestToViewNameTranslator

当处理程序返回none时确定视图名称的策略

org.springframework.web.servlet. ViewResolver

将视图名称转换为实际视图实现的策略

org.springframework.web.servlet. FlashMapManager

模拟flash示波器的策略

在接下来的部分中,您将看到如何配置DispatcherServlet。您还将进一步了解各种组件的不同实现。

调度员

像任何一个servlet一样org.springframework.web.servlet.DispatcherServlet需要进行配置,以便web容器可以引导和映射servlet。这样,它将能够处理请求。配置DispatcherServlet是一个双向过程。首先,您需要告诉容器加载一个servlet并将其映射到一个或多个Urlpatterns。

引导之后,servlet使用org.springframework.web.content.WebApplicationContext来配置自身。servlet将尝试从这个应用程序上下文中检测所需的组件,如果找不到,它将使用某种默认值(在大多数情况下)。

启动DispatcherServlet

Servlet3.0规范引入了几个用于配置和注册Servlet的选项:

选项1:使用web.xml文件(见清单4-1)。

选项2:使用网络-片段.xml(见清单4-2)。

选择3:美国javax.servlet.ServletContainerInitializer(见清单4-3)。

选项4:示例应用程序使用Spring3.1,因此您可以通过实现org.springframework.web.WebApplicationInitializer接口。

DispatcherServlet需要一个WebApplicationContext,它应该包含使DispatcherServlet能够自我配置的所有bean。默认情况下,DispatcherServlet将创建org.springframework.web.context.sup

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[410018],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。