毕业设计外文文献—Spring Boot的Web应用程序.docx
附录A外文翻译一原文局部F. Gutierrez, Pro Spring Boot 2Web Applications with Spring BootNowadays, the web is the main channel for any type of application-from desktop to mobile devices, from social and business applications to games, and from simple content to streaming data. With this is mind, Spring Boot can help you easily develop the next generation of web applications.This chapter shows you how to create Spring Boot web applications with ease. You have already learned, with some examples in earlier chapters, what you can do with the web. You learned that Spring Boot makes it easier to create web apps with a few lines of code and that you don't need to worry about configuration files or look for an application server to deploy your web application. By using Spring Boot and its auto-» configuration, you can have an embedded application server, such as Tomcat, Nettie, Undertow, or Jetty, which makes your app very distributable and portable.Spring MVCLet's start talking about the Spring MVC technology and some of its features. Remember that the Spring Framework consists of about 20 modules or technologies, and the web technology is one of them. For the web technology, the Spring Framework has the spring-web, spring-web mvc, spring-web flux, and spring-web socket modules. The spring-web module has basic web integration features, such as multipart file upload functionality, initialization of the Spring container (by using servlet listeners), and a web-oriented application context. The spring-mvc module (a.k.a., the web server module) contains all the Spring MVC (Model-View-Controller) and REST services implementations for web applications. These modules provide many features, such as very powerful JSP tag libraries, customizable binding and validation, flexible model transfer, customizable handler and view resolution, and so on.The Spring MVC is designed around the org.springframework.web.servlet. DispatcherServlet class. This servlet is very flexible and has a very robust functionality that you won't find in any other MVC web framework out there. With the DispatcherServlet, you have several out-of-the-box resolutions strategies, including view resolvers, locale resolvers, theme resolvers, and exception handlers. In other words, the DispatcherServlet take a request and redirect it to the right handler (the class marked with the Controller or RestController and the methods that use the RequestMapping annotations) and the right view (your JSPs).Spring Boot MVC Auto-Configuration附录B外文翻译一译文局部Spring Boot的Web应用程序如今,网络是任何类型应用程序的主要渠道,从桌面到移动设备,从社交和商业 应用程序到游戏,从简单内容到流数据。有了这个想法,Spring Boot可以帮助您 轻松开发下一代Web应用程序。本文将介绍如何轻松创立Spring Boot Web应用程序。已经通过前面一些例如了 解了可以使用Web做什么。了解到Spring Boot可以更轻松地使用几行代码创立 Web应用程序,并且无需担忧配置文件或寻找应用程序服务器来部署Web应用 程序。通过使用Spring Boot及其自动配置,可以拥有一个嵌入式应用程序服务 器,如Tomcat, Nettie, Undertow或Jetty,这使得应用程序可以非常易于分发和 移植。Spring MVC现在开始讨论Spring MVC技术及其一些功能。请记住,Spring Framework包含 大约20个模块或技术,Web技术就是其中之一。对于Web技术,Spring Framework 具有 spring-web, spring-webmvc, spring-webflux 和 spring-websocket 模块。spring-web模块具有基本的Web集成功能,例如多局部文件上载功能,Spring容 器的初始化(通过使用servlet侦听器)和面向Web的应用程序上下文。spring- mvc模块(也就是Web服务器模块)包含Web应用程序的所有Spring MVC (模 型-视图-控制器)和REST服务实现。这些模块提供了许多功能,例如非常 强大的JSP标记库,可自定义的绑定和验证,灵活的模型传输,可自定义的处理 程序和视图分辨率等。Spring MVC 是围绕 org.springframework.web.servlet 设计的。DispatcherServlet 类。这个servlet非常灵活,并且具有非常强大的功能,在任何其他MVC Web框 架中都找不到。使用DispatcherServlet,您可以使用多种开箱即用的解析策略, 包括视图解析器,区域设置解析器,主题解析器和异常处理程序。换句话说, DispatcherServlet接受 请求并将其重定向到正确的处理程序(标记为 ©Controller 或RestController 的类以及使用RequestMapping 注释的方法)。 Spring Boot MVC 自动配置通过将 spring-boot-starter-web 依赖项添加到 pom.xml 或 build.gradle 文件,可以 轻松创立Web应用程序。这种依赖提供了所有必需的spring-web jar和一些额外 的 jar,例如 tomcat-embed*和 jackson (用于 JSON 和 XML)。这意味着 Spring Boot使用SpringMVC模块的强大功能,并提供所有必要的自动配置,以创立正 确的Web基础结构,例如配置DispatcherServlet,提供默认值(除非您覆盖它), 设置嵌入式Tomcat服务器(所以你可以在没有任何应用程序容器的情况下运行 应用程序)等等。自动配置会将以下功能添加到Web应用程序中:静态内容支持。这意味着您可以添加静态内容,如导演中的HTML, JavaScript, CSS,媒体等等 named/static (默认情况下)或/public, / resources 或 / META-INF /资源,应该在您的类路径或当前directory.Spring Boot选择它并根据请求提供它 们o你可以通过修改来轻松改变这一点pattern或 spring.resources.static-locations 属性。Spring Boot 和 Web 应用程序的一个很酷的 功能如果你创立一个index.html文件,Spring Boot会为它提供服务自动无需注册 任何其他bean或需要额外的组态。 消息转换器。如果您使用常规的SpringMVC应用程序,您需要获得ISON 响应。创立必要的配置(XML或JavaConfig)将 消息转换成bean, Spring Boot默认添加此支持,因此您不必这样做;这意味着您默认获得JSON格式(由 于spring-boot-starter-web提供的Jackson库作为依赖项)。如果Spring Boot自动 配置发现您在类路径中有Jackson XML扩展,它会将XML MessageConverter 聚合到转换器,这意味着您的应用程序可以根据您的内容类型请求 (application/son 或 application/xml) 进行服务。JSON序列化程序和反序列化程序。如果你想对JSON的序列化/反序列化有更 多的控制,Spring Boot提供了一种简单的方法来创立你自己的,通过从 JsonSerializer<T>n JsonDeserializer<T>扩展,并使用JsonComponent 注释你的 类,以便它可以注册用法。Spring Boot的另一个特色是杰克逊的支持;默认情况 下,Spring Boot 将日期字段序列化为 2018-05-01T23: 31: 38.141 +0000,但您 可以通过更改spring.jackson.date-format = yyyy-MM-dd属性来更改此默认行为 (您可以应用任何日期格式图案);上一个值生成输出,例如2018-05-01。路径匹配和内容协商。Spring MVC应用程序实践之一是能够响应任何后缀以 表示内容类型响应及其内容协商。如果您有/ api / todo.json或/api/todo.pdf之类 的内容,贝I将 content-type 设置为 application / json 和 application / pdf;所以响应 分别是JSON格式或PDF文件。换句话说,Spring MVC执行.*后缀模式匹配, 例如/ api / todo.*. Spring Boot默认禁用此功能。 您仍然可以使用 spring.mvc.contentnegotiation.favor-parameter = true 属性添加参数的功能(默认为 false);所以你可以做/api/todo? format = xmlo (format是默认参数名称;当然, 您可以使用 spring.mvc.contentnegotiation.parameter-name = myparam 更改它。 这 会触发 content-type 至U application / xml。错误处理。Spring Boot使用/error映射创立一个白色标记页面以显示所有全局 错误。您可以通过创立自己的自定义页面来更改行为。您需要在 src/main/resources/public/error/位置创立自定义 HTML 页面,以便创立 500.html 或 404.html页面。如果要创立RESTful应用程序,Spring Boot将以JSON格式响 应。当您使用 ContorllerAdvice <ExceptionHandler 注释时,Spring Boot 还支 持Spring MVC来处理错误。您可以通过实现ErrorPageRegistrar并将其声明为 Spring bean 来注册自定义 ErrorPageso模板引擎支持。Spring Boot 支持 FreeMarker, Groovy 模板,Thymeleaf 和 Mustacheo 当您包含 spring-boot-starter-template engine依赖项时,需要 Spring Boot自动配置来启用和添加所有必需的视图解析器和文件处理程序。默认情况 下,Spring Boot 会查看 src/main/resources/template/路径。Spring Boot Web自动配置还提供了许多其他功能。现在,只关注Servlet技术, 但很快就进入了 Spring Boot系列的最新成员:WebFluxoSpring Boot Web:创立 App为了更好地理解Spring Boot如何与Web应用程序一起工作以及Spring MVC模 块的强大功能,您将创立一个暴露RESTful API的ToDo应用程序。这些是要求: 创立具有以下字段和类型的ToDo域模型:id (字符串),description (字符串), completed (布尔),创立(日期与时间),修改(日期与时间)。创立RESTful API,提供基本的CRUD (创立,读取,更新,删除)操作。使用 最常见的 方法:POST, PUT, PATCH, GET 和 DELETE。创立一个处理多个ToD。状态的存储库。目前,内存存储库就足够了。在有错误请求或提交新ToDo时没有必填字段时添加错误处理程序。唯一的必 填字段是描述。所有请求和响应都应采用JSON格式。Artifact: todo-in-memoryName: todo-in-memoryDependencies: Web, Lombok选择Lombok依赖项有助于轻松创立域模型类,并消除样板设置器,getter和其 他覆盖。您可以选择Maven或Gradle作为工程类型;按Generate Project按钮并下 载ZIP文件。解压缩并将其导入您喜欢的IDE。一些最好的IDE是STS, IntelliJ IDEA和VSCode我推荐其中一个IDE用于代码完成功能,它可以帮助您查看要 添加到代码中的方法或参数。Domain Model:域模型根据需求,您需要创立ToDo域模型类显示ToD。类,其中包含所有必填字段。 它还使注释,这是一个Lombok注释,它生成一个默认构造函数(如果 没有),以及所有setter, getter和覆盖(如toString方法),以使类更清晰。另请 注意,该类在某些字段中包和?018也很 注释;这些注释用于我们 稍后进行的验证。默认构造函数具有字段初始化,因此很容易创立ToD。实例。Fluent API:生成器接下来让我们创立一个帮助创立ToDo实例的Fluent API类。您可以在此类中 看到创立带有描述或具有特定ID的ToDo的工厂。存储库:CommonRepository <T>是用于创立一个具有公共持久性操作的接口。此接口是通用的,因此很容易 使用任何其他实现,使repo成为可扩展的解决方案。有一个通用接口可以用作任何其他持久性实现的基础。当然,您可以随时更改 这些签名。这只是关于如何创立可扩展内容的例如。ToDoRepository :存储库创立一个实现CommonRepository <T>接口的具体类。记住规范;目前,只需让 内存中的ToDo显示CommonRepository <T>接口的实现。查看代码并进行分析。 这个类使用的是一个包含所有ToDo的哈希。所有操作都简化了哈希的性质, 使其易于实现。ToDoValidationErrorBuilder:验证接下来,让我们创立一个验证类,公开应用程序中的任何可能的错误,例如没有 描述的ToDoo请记住,在ToDo类中,ID和description字段标记为NotNull。 description字段有一个额外的NotBlank注释,以确保它永远是空的,显示 ToDoValidationError类,它保存任何请求产生的任何错误。它使用一个额外的 JsonInclude注释,它表示即使errors字段为空,也必须包含它。Controller:创立控制器现在,是时候创立RESTful API并使用之前的所有类。您可以创立ToDoController 类,在其中可以看到所有SpringMVC功能,注释,配置端点的方式以及如何处 理错误。, RestControllero Spring MVC 提供©Controller 和RestController 来表达请求 映射,请求输入,异常处理等。所有功能都依赖于这些注释,因此无需扩展或实 现特定于接口的接口。 RequestMapping。此批注将请求映射到控制器方法。有几个属性可以匹配URL, 方法(GET, PUT, DELETE等),请求参数,标头和媒体类型。它可以在 类级别(共享映射)或在特定端点映射的方法级别使用。在这种情况下,它标有 “/api”,表示所有方法都有此前缀。 Autowired。构造函数使用 Auto wired注释,这意味着它注入了 CommonRepository <ToDo>实现。该注释可以省略;从版本4.3开始,Spring会自 动注入任何声明的依赖项。, GetMappingo这是RequestMapping批注的快捷变体,对 GET方法很 有用。 GetMapping 相当于RequestMapping (value = "/ todo”, method 二RequestMethod.GET)。 PatchMappingo这是RequestMapping注释的快捷方式变体;在这个类中,它 标记为ToDo已完成。 DeleteMapping这是RequestMapping注释的快捷方式变体;它用于删除 ToDoo有两种重载方法:deleteToDo, 一个接受String,另一个接收ToDo实例。 Path Variable o当您声明包含URL表达式模式的端点时,此批注很有用;在这 种情况下,”/api/tod。/id”,其中ID必须与方法参数的名称匹配。RequestBodyo此批注向主体发送请求。通常,当您提交表单或特定内容时, 此类接收JSON格式ToDo,然后 MessageConverter将JSON反序列化为ToDo 实例;这是由Spring Boot及其自动配置自动完成的,因为它默认注册 MappingJackson2 MessageConverteroResponseEntity <T> 此类返回完整响应,包括 标头,并通过 MessageConverters 转换主体并将其写入 响应。ResponseEntity <T>类 支持流畅的API,因此很容易创立响应。 ResponseStatuso通常,当方法具有void返回类型(或null返回值)时,将使 用此批注。此批注将发回响应中指定的 状态代码。 Valido此注释验证传入数据,并用作方法的参数。要触发验证器,必须使用 NotNulh NotBlank和其他注释来注释要验证的数据。在这种情况下,ToDo 类在ID和description字段中使用这些注释。如果验证器发现错误,它们将被收 集在Errors类中(在这种情况下,spring-webmvcjar附带的hibernate验证器已注 册并用作全局验证器;您可以创立自己的自定义验证并覆盖Spring Boot的默认 值)。然后,您可以检查并添加必要的逻辑以发回错误响应。 ExceptionHandlero Spring MVC自动声明异常的内置解析器,并添加对此批 注的支持。在这种情况下, ExceptionHandler在此控制器类中声明(或者您可 以在ControllerAdvice拦截器中使用它),并且任何异常都会重定向到 handleException方法。如果需要,您可以更具体。例如,您可以拥有 DataAccessException并通过方法进行处理。在类中有一个接受两个 方法的方法:POST和PUTo RequestMapping 可以接受多个 方法,因此很容易分配一个方法来处理它们(例如, RequestMapping ( value = "/ todo ”, method = RequestMethod.POST , RequestMethod.PUT)o我们已经覆盖了所有这个应用程序的必要要求,所以是 时候运行它并查看结果。App:运行现在,您已准备好运行ToDo应用程序并对其进行测试。如果您使用的是IDE (STS 或 IntelliJ),那么可以右键单击主应用程序类(TodoInMemoryApplication.java) 并选择“运行操作”。如果您使用的编辑器没有这些功能,您可以通过翻开终端 窗口并执行命令来运行Todo应用程序。SpringInitializr ( s:/start.spring.io)始终提供您选择的工程类型包装器(Maven 或Gradle包装器),因此无需预安装Maven或Gradle。Spring Boot Web应用程序的默认设置之一是它配置了嵌入式Tomcat服务器,因 此您可以轻松运行应用程序而无需将其部署到应用程序Servlet容器。默认情况 下,它选择端口 8080。App :调试测试ToD。应用程序应该非常简单。此测试是通过命令或特定客户端进行的。如 果您正在考虑单元测试或集成测试,我将在另一章中解释。这里我们将使用cURL 命令。默认情况下,此命令带有任何UNIX OS风格,但如果您是Windows用户, 那么可以从 s: 下载。第一次运行时,ToD。应用程序不应该有任何ToDo。您可以通过在另一个终端中 执行以下命令来确保这一点.curl -i : / localhost: 8080 / api / todo您应该看到 类似于此输出的内容: /1.1 200Content-Type: application / json; charset = UTF-8转移编码:分块日期:2018年5月2日星期三,格林威治标准时间22:10:19您的目标是/叩i / todo端点,如果您查看清单4-7, getToDos方法将返回 ResponseEntity <Iterable <ToDo »,它是 ToDo 的集合。默认响应是 JSON 格式(请参阅Content-Type标头)。响应是发送回 标头和status.Next,让我们 使用以下命令添加一些ToDoocurl -i -X POST -H uContent-Type: application / jsonn -d' "description”: "阅读 Pro Spring Boot 第 2 版 Book“ ' : / localhost: 8080 / api / todo在命令中,post (-XPOST)和data (-d)是JSON格式。您只发送说明字段。有 必要添加具有正确内容的标头(-H),并指向/api/todo端点。执行命令后。您将返回读取ToD。的位置标题。位置公开您刚刚创立的待办事项的IDo此响应 由createToDo方法生成。添加至少另外两个ToDo,以便我们可以获得更多数据。 该命令使用-X PUT并且需要id字段(我们可以从先前POST的位置标头或访问 /api/todo端点获取它)。如果你查看所有ToDo,你就有了一个修改过的ToDo。 接下来,让我们完成ToDo。该命令正在使用由setCompleted方法处理的-XPATCH。 如果您查看位置链接,那么ToD。完成的字段现在是真的。如果此ToD。已完成, 那么可以将其删除。curl -i -X DELETE : / localhost: 8080 / api / todo / 2d051 b67-7716-4ee6-9c45-Ide939fa579fcURL命令具有-X DELETE,由deleteToDo方法处理,将其从哈希中删除。如果 你看看所有的ToDo,你现在应该比以前少一个。400 状态代码(错误请求)以及错误和 errorMessage(由 ToDoValidationErrorBuilder 类构建)响应。使用以下命令。curl -i -X POST -H uContent-Type: application /json" : / localhost: 8080 / api / todo此命令正在发布但没有数据,并且正在响应错误消息。这来自ExceptionHandler 注释和handleException方法。所有错误(不同于描述为空白)都由此方法处理, 您可以继续测试更多ToD。或修改一些验证注释以查看它们的工作原理。注意如 果您没有cURL命令或无法安装它,那么可以使用任何其他REST客户端。例如 PostMan 或 Insomnia。如果您喜欢命令行,那么 ie ( s:/ ie.org)是另一 个不错的选择;它使用PythonoSpring Boot Web:覆盖默认值Spring Boot Web自动配置设置默认为运行Spring Web应用程序。在本文中,我 将向您展示如何覆盖其中的一些。您可以通过创立自己的配置(XML或JavaConfig)和/或使用应用程序来覆盖Web 默认值。属性或yml文件。Server Overriding默认情况下,嵌入式Tomcat服务 器在端口: 8080上启动,但您可以使用该属性轻松更改它。Spring的一个很酷的功能是你可以应用SpEL (Spring Expression Language)并将 它应用于这些属性。例如,在创立可执行jar (./mvnw包或/gradlewbuild)时, 可以在运行应用程序时传递一些参数。这个表达式意味着如果你传递-port参数, 它就会获取该值;如果没有,它设置为8282.这只是你可以用SpEL做的一小部 分。Web applications can be created easily by adding the spring-boot-starter-web dependency to your pom.xml or build gradle file. This dependency provides all the necessary spring-web jars and some extra ones, such as tomcat-embed* and jackson (for JSON and XML). This means that Spring Boot uses the power of the Spring MVC modules and provides all the necessary auto-configuration for creating the right web infrastructure, such as configuring the DispatcherServlet, providing defaults (unless you override it), setting up an embedded Tomcat server (so you can run your application without any application containers), and more.Auto-configuration adds the following features to your web application.Static content support. This means that you can add static content, such as HTML, JavaScript, CSS, media, and so forth, in a directory named /static (by default) or /public, /resources, or /META-INF/ resources, which should be in you classpath or in your current directory. Spring Boot picks it up and serves them upon request. You can change this easily by modifying the spring.mvc. static-path-« pattern or the spring.resources, static-locations properties. One of the cool features with Spring Boot and web applications is that if you create an index.html file, Spring Boot serves it automatically without registering any other bean or the need for extra configuration. Message Converters. If you are using a regular Spring MVC application and you want to get a JSON response, you need to create the necessary configuration (XML or Java Config) for the Message Converters bean. Spring Boot adds this support by default so you don't have to; this means that you get the JSON format by default (due to the Jackson libraries that the spring-rboot-starter-web provides as dependencies). And if Spring Boot auto-configuration finds that you have the Jackson XML extension in you classpath, it aggregates an XML MessageConverter to the converters, meaning that your application can server based on your content-type request, either application/son or application/xml. 二yyyy-MM-dd property (you can apply any date format pattern); the previous value generates the output, such as 2018-05-01. Path matching and content negotiation. One of the Spring MVC application practices is the ability to respond to any suffix to represent the content-type response and its content negotiation. If you have something like/api/todo.json or /api/todo.pdf, the content-type is set to application/son and application/pdf; so the response is JSON format or a PDF file, respectively. In other words, Spring MVC performs .* suffix pattern matching, such as / api/todo.*. Spring Boot disables this by default. You can still use a feature where you can add a parameter, by using the spring.mvc.contentnegotiation.favor-parameter=true property (false by default); so you can do something like /api/todo?format=xml. (format is the default parameter name; of course, you can change it with spring.mvc.contentnegotiation.parameter- name=myparam). This triggers the content-type to application/xml. Error handling. Spring Boot uses /error mapping to create a white labeled page to show all the global errors. You can change the behavior by creating you