登录

  • 登录
  • 忘记密码?点击找回

注册

  • 获取手机验证码 60
  • 注册

找回密码

  • 获取手机验证码60
  • 找回
毕业论文网 > 外文翻译 > 计算机类 > 计算机科学与技术 > 正文

Spring Web MVC外文翻译资料

 2023-08-30 11:25:24  

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


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配置下的查看解析器。

1.2.9语言环境

Spring的架构大

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


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

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

企业微信

Copyright © 2010-2022 毕业论文网 站点地图