基于WEB开发的大学生网上交流网站外文翻译资料

 2022-11-12 19:29:49

Spring Web MVC

1.1. Introduction

Spring Web MVC is the original web framework built on the Servlet API and included in the Spring Framework from the very beginning. The formal name 'Spring Web MVC' comes from the name of its source module spring-webmvc but it is more commonly known as 'Spring MVC'.

Parallel to Spring Web MVC, Spring Framework 5.0 introduced a reactive stack, web framework whose name Spring WebFlux is also based on its source module spring-webflux. This section covers Spring Web MVC.

1.2. DispatcherServlet

Spring MVC, like many other web frameworks, is designed around the front controller pattern where a central Servlet, the DispatcherServlet, provides a shared algorithm for request processing while actual work is performed by configurable, delegate components. This model is flexible and supports diverse workflows.

The DispatcherServlet, as any Servlet, needs to be declared and mapped according to the Servlet specification using Java configuration or in web.xml. In turn the DispatcherServlet uses Spring configuration to discover the delegate components it needs for request mapping, view resolution, exception handling, and more.

1.2.1. Context Hierarchy

DispatcherServlet expects a WebApplicationContext, an extension of a plain ApplicationContext, for its own configuration. WebApplicationContext has a link to the ServletContext and Servlet it is associated with. It is also bound to the ServletContext such that applications can use static methods on RequestContextUtils to look up the WebApplicationContext if they need access to it.

For many applications having a single WebApplicationContext is simple and sufficient. It is also possible to have a context hierarchy where one root WebApplicationContext is shared across multiple DispatcherServlet (or other Servlet) instances, each with its own child WebApplicationContext configuration. See Additional Capabilities of the ApplicationContext for more on the context hierarchy feature.

1.2.2. Special Bean Types

The DispatcherServlet delegates to special beans to process requests and render the appropriate responses. By 'special beans' we mean Spring-managed, Object instances that implement WebFlux framework contracts. Those usually come with built-in contracts but you can customize their properties, extend or replace them.

1.2.3. Web MVC Config

Applications can declare the infrastructure beans listed in Special Bean Types that are required to process requests. The DispatcherServlet checks the WebApplicationContext for each special bean. If there are no matching bean types, it falls back on the default types listed in DispatcherServlet.properties.

In most cases the MVC Config is the best starting point. It declares the required beans in either Java or XML, and provides a higher level configuration callback API to customize it.

1.2.4. Servlet Config

WebApplicationInitializer is an interface provided by Spring MVC that ensures your implementation is detected and automatically used to initialize any Servlet 3 container. An abstract base class implementation of WebApplicationInitializer named AbstractDispatcherServletInitializer makes it even easier to register the DispatcherServlet by simply overriding methods to specify the servlet mapping and the location of the DispatcherServlet configuration.

Each filter is added with a default name based on its concrete type and automatically mapped to the DispatcherServlet.

The isAsyncSupported protected method of AbstractDispatcherServletInitializer provides a single place to enable async support on the DispatcherServlet and all filters mapped to it. By default this flag is set to true.

Finally, if you need to further customize the DispatcherServlet itself, you can override the createDispatcherServlet method.

1.2.5. Processing

Same in Spring WebFlux

The DispatcherServlet processes requests as follows:

The WebApplicationContext is searched for and bound in the request as an attribute that the controller and other elements in the process can use. It is bound by default under the key.

The locale resolver is bound to the request to enable elements in the process to resolve the locale to use when processing the request (rendering the view, preparing data, and so on). If you do not need locale resolving, you do not need it.

The theme resolver is bound to the request to let elements such as views determine which theme to use. If you do not use themes, you can ignore it.

If you specify a multipart file resolver, the request is inspected for multiparts; if multiparts are found, the request is wrapped in a MultipartHttpServletRequest for further processing by other elements in the process. See Multipart resolver for further information about multipart handling.

An appropriate handler is searched for. If a handler is found, the execution chain associated with the handler (preprocessors, postprocessors, and controllers) is executed in order to prepare a model or rendering. Or alternatively for annotated controllers, the response may be rendered (within the HandlerAdapter) instead of returning a view.

If a model is returned, the view is rendered. If no model is returned, (may be due to a preprocessor or postprocessor intercepting the request, perhaps for security reasons), no view is rendered, because the request could already have been fulfilled.

The HandlerExceptionResolver beans declared in the WebApplicationContext are used to resolve exceptions thrown during request processing. Those exception resolvers allow customizing the logic to address exceptions. See Exceptions for more details.

The Spring DispatcherServlet also supports the return of the last-modification-date, as specified by the Servlet API. The process of determining the last modification date for a specific request is straightforward: the DispatcherServlet looks

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


Spring Web MVC

1.1 介绍

Spring Web MVC是构建在Servlet API上的最初的Web框架,从一开始就包含在Spring框架中。 正式名称“Spring Web MVC”来自其源模块spring-webmvc的名称,但它通常被称为“Spring MVC”。与Spring Web MVC并行,Spring Framework 5.0引入了一个反应堆栈,Web框架,其名称Spring WebFlux也基于它的源模块spring-webflux。

1.2 DispatcherServlet

像许多其他Web框架一样,Spring MVC围绕前端控制器模式进行设计,其中中央Servlet DispatcherServlet为请求处理提供共享算法,而实际工作由可配置委托组件执行。 该模型非常灵活,支持多种工作流程。

作为任何Servlet,DispatcherServlet需要根据Servlet规范使用Java配置或在web.xml中进行声明和映射。 DispatcherServlet依次使用Spring配置来发现它在请求映射,查看解析,异常处理等方面所需的委托组件。

1.2.1 上下文层次结构

DispatcherServlet需要一个WebApplicationContext(一个普通的ApplicationContext的扩展)用于其自己的配置。 WebApplicationContext有一个指向它所关联的ServletContext和Servlet的链接。 它也绑定到ServletContext,以便应用程序可以使用RequestContextUtils上的静态方法查找WebApplicationContext是否需要访问它。

对于具有单个WebApplicationContext的许多应用程序来说,这是简单而充分的。 也可以有一个上下文层次结构,其中一个根WebApplicationContext通过多个DispatcherServlet(或其他Servlet)实例共享,每个实例都有其自己的子WebApplicationContext配置。 有关上下文层次结构功能的更多信息,请参阅ApplicationContext的其他功能。

1.2.2 特殊实体类型

DispatcherServlet委托特殊的bean来处理请求并呈现适当的响应。 “特殊bean”是指实现WebFlux框架协议的Spring管理的对象实例。 那些通常带有内置合同,但您可以自定义其属性,扩展或替换它们。

1.2.3 Web MVC配置

应用程序可以声明处理请求所需的特殊Bean类型中列出的基础架构Bean。 DispatcherServlet检查每个特殊bean的WebApplicationContext。 如果没有匹配的bean类型,它将回退到DispatcherServlet.properties中列出的默认类型。

在大多数情况下,MVC配置是最好的起点。 它用Java或XML声明所需的bean,并提供更高级别的配置回调API来定制它。

1.2.4 Servlet配置

WebApplicationInitializer是Spring MVC提供的一个接口,它确保您的实现被检测到并自动用于初始化任何Servlet 3容器。 一个名为AbstractDispatcherServletInitializer的WebApplicationInitializer的抽象基类实现使得通过简单重写方法来指定Servlet映射和DispatcherServlet配置的位置来更容易注册DispatcherServlet。

每个过滤器都会根据其具体类型添加一个默认名称,并自动映射到DispatcherServlet。

AbstractDispatcherServletInitializer的isAsyncSupported受保护方法提供了一个位置来启用DispatcherServlet上的异步支持以及映射到它的所有过滤器。 默认情况下,该标志被设置为true。

最后,如果您需要进一步自定义DispatcherServlet本身,则可以覆盖createDispatcherServlet方法。

1.2.5 处理

DispatcherServlet按如下方式处理请求:

在请求中搜索并绑定WebApplicationContext,作为控制器和进程中其他元素可以使用的属性。

语言环境解析程序绑定到请求以启用进程中的元素来解析处理请求(呈现视图,准备数据等)时要使用的语言环境。如果你不需要区域解析,你不需要它。

主题解析器必须使请求等元素决定使用哪个主题。如果你不使用主题,你可以忽略它。

如果您指定了多部分文件解析器,则将检查请求中的多部分;如果找到多部分,则将请求封装在MultipartHttpServletRequest中,以供进程中的其他元素进一步处理。有关多部分处理的更多信息,请参阅多部分解析器。

搜索适当的处理程序。如果找到处理程序,则会执行与处理程序(预处理程序,后处理程序和控制器)关联的执行链以准备模型或渲染。或者,对于注释的控制器,响应可以呈现(在HandlerAdapter内)而不是返回视图。

如果返回模型,则呈现视图。如果没有返回模型(可能是由于预处理程序或后处理程序拦截了请求,可能出于安全原因),则不会呈现视图,因为请求可能已经被满足。

WebApplicationContext中声明的HandlerExceptionResolver bean用于解决请求处理期间抛出的异常。这些异常解析器允许定制逻辑来解决异常。有关更多详情,请参阅例外。

Spring DispatcherServlet还支持返回最后修改日期,正如Servlet API所指定的那样。确定特定请求的最后修改日期的过程很简单:DispatcherServlet查找适当的处理程序映射并测试找到的处理程序是否实现LastModified接口。如果是这样,则LastModified接口的long getLastModified(request)方法的值将返回给客户端。

您可以通过将Servlet初始化参数(init-param元素)添加到web.xml文件中的Servlet声明来自定义单个DispatcherServlet实例。请参阅下表以获取支持的参数列表。

1.2.6 拦截

所有HandlerMapping实现都支持处理程序拦截器,当您想要将特定功能应用于某些请求时(例如,检查委托人),该拦截器非常有用。拦截器必须使用三种方法来实现org.springframework.web.servlet包中的HandlerInterceptor,这些方法应该提供足够的灵活性来执行各种预处理和后处理:

preHandle(..) - 在执行实际处理程序之前

postHandle(..) - 处理程序执行后

afterCompletion(..) - 在完成请求完成后

preHandle(..)方法返回一个布尔值。您可以使用此方法来中断或继续处理执行链。当此方法返回true时,处理程序执行链将继续;当它返回false时,DispatcherServlet假定拦截器本身已经处理请求(并且例如呈现适当的视图)并且不继续执行执行链中的其他拦截器和实际处理器。

有关如何配置拦截器的示例,请参阅MVC配置一节中的拦截器。您也可以通过单个HandlerMapping实现上的setter直接注册它们。

请注意,postHandle对于在HandlerAdapter和postHandle之前写入和提交响应的@ResponseBody和ResponseEntity方法不太有用。这意味着对响应进行任何更改都为时已晚,例如添加额外的标题。对于这种场景,您可以实现ResponseBodyAdvice,并将其声明为Controller Advice bean或直接在RequestMappingHandlerAdapter上进行配置。

1.2.7 异常

如果在请求映射期间发生异常或从请求处理程序(如@Controller)抛出异常,则DispatcherServlet委托HandlerExceptionResolver bean链来解决异常并提供替代处理,这通常是错误响应。

解析器链

您可以通过在Spring配置中声明多个HandlerExceptionResolver bean并根据需要设置它们的顺序属性来形成异常解析链。 order属性越高,异常解析器定位的越晚。

HandlerExceptionResolver的合约指定它可以返回:

指向错误视图的ModelAndView。

如果在解析器中处理异常,则为Empty ModelAndView。

如果异常未解决,则返回null,供后续解析器尝试使用;如果异常仍然在最后,它可以冒泡到Servlet容器。

MVC Config自动为默认的Spring MVC异常声明内置的解析器,为@ResponseStatus注释的异常声明和支持@ExceptionHandler方法。您可以自定义该列表或将其替换。

容器错误页面

如果任何HandlerExceptionResolver未解决异常并因此传播,或者响应状态设置为错误状态(即4xx,5xx),则Servlet容器可能会在HTML中呈现默认错误页面。

鉴于上述情况,当异常冒泡时,或者响应具有错误状态时,Servlet容器在容器内将ERROR分派到配置的URL(例如“/ error”)。 然后由DispatcherServlet处理,可能将其映射到一个@Controller,该实现可以通过模型返回一个错误视图名称或呈现JSON响应

1.2.8 查看分辨率

Spring MVC定义了ViewResolver和View接口,使您可以在浏览器中呈现模型,而无需将您绑定到特定的视图技术。 ViewResolver提供了视图名称和实际视图之间的映射。 View在交付给特定视图技术之前处理数据的准备。

通过声明多个解析器bean来链接视图解析器,并在必要时通过设置order属性来指定排序。 请记住,订单属性越高,视图解析器在链中的位置越晚。

ViewResolver的合约指定它可以返回null来指示无法找到视图。 但是,对于JSP和InternalResourceViewResolver,确定JSP是否存在的唯一方法是通过RequestDispatcher执行分派。 因此,必须始终将InternalResourceViewResolver配置为视图解析程序的整体顺序中的最后一个。

配置视图分辨率就像将ViewResolver bean添加到Spring配置一样简单。 MVC Config为View Resolvers提供了一个专用的配置API,并且还用于添加无逻辑的View Controller,这些View Controller无需控制器逻辑即可用于HTML模板渲染。

重定向

视图名称中的特殊重定向:前缀允许您执行重定向。 UrlBasedViewResolver(和子类)将此识别为需要重定向的指令。 视图名称的其余部分是重定向URL。

实际效果与控制器返回RedirectView的效果相同,但现在控制器本身可以简单地按逻辑视图名称操作。 逻辑视图名称(如redirect:/ myapp / some / resource)将相对于当前的Servlet上下文重定向,而名称(如redirect:http://myhost.com/some/arbitrary/path)将重定向到绝对URL。

请注意,如果控制器方法使用@ResponseStatus进行注释,则注释值优先于RedirectView设置的响应状态。

转发

对于最终由UrlBasedViewResolver和子类解析的视图名称,也可以使用特殊的forward:前缀。 这会创建一个执行RequestDispatcher.forward()的InternalResourceView。 因此,对于InternalResourceViewResolver和InternalResourceView(对于JSP),此前缀不起作用,但如果使用其他视图技术,但仍希望强制转发资源以由Servlet / JSP引擎处理,可能会有所帮助。 请注意,您也可以链接多个视图解析器。

内容协商

ContentNegotiatingViewResolver不会自行解析视图,而是委托给其他视图解析器,并选择类似于客户端请求的视图。该表示可以从Accept报头或查询参数确定,例如, “/路径?格式= PDF”。

ContentNegotiatingViewResolver通过将请求媒体类型与ViewResolvers关联的View支持的媒体类型(也称为Content-Type)进行比较来选择适当的View来处理请求。具有兼容Content-Type的列表中的第一个视图将表示返回给客户端。如果ViewResolver链无法提供兼容视图,则会查看通过DefaultViews属性指定的视图列表。后一个选项适用于单例视图,该视图可以呈现当前资源的适当表示,而不管逻辑视图名称如何。 Accept头可能包含通配符,例如text / *,在这种情况下,其内容类型为text / xml的View是兼容匹配。

有关配置详细信息,请参阅MVC配置下的查看解析器。

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


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

您需要先支付 30元 才能查看全部内容!立即支付

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