Spring framework 5 마스터하기, Part 1 : Spring MVC

Spring MVC는 Java 웹 애플리케이션을 빌드하기위한 Spring 프레임 워크의 전통적인 라이브러리입니다. 완전한 기능을 갖춘 Java 웹 애플리케이션 및 RESTful 웹 서비스를 구축하기위한 가장 인기있는 웹 프레임 워크 중 하나입니다. 이 튜토리얼에서는 Spring MVC에 대한 개요를 얻고 Spring Boot, Spring Initializr 및 Thymeleaf를 사용하여 Java 웹 애플리케이션을 빌드하는 방법을 학습합니다.

다운로드 코드 다운로드이 자습서에서 예제 응용 프로그램의 소스 코드를 가져옵니다. Steven Haines가 JavaWorld 용으로 생성

Spring Initializr를 사용한 Spring Boot

Spring Boot 및 Spring Initializr를 사용하여 Spring MVC 웹 애플리케이션을 빠르게 랙에 넣을 것입니다. 빌드 할 애플리케이션 유형에 대한 입력이 주어지면 Spring Initializr는 가장 일반적인 종속성과 기본값을 사용하여 기본 Spring Boot 애플리케이션을 설정하고 구성합니다. 또한 사용자 정의 종속성을 추가 할 수 있으며 Spring Initializr는이를 포함하고 관리하여 타사 소프트웨어 및 Spring과의 버전 호환성을 보장합니다. Spring Boot 애플리케이션은 런타임 환경을 제공 할 필요없이 독립형으로 실행됩니다.

이 경우 웹 애플리케이션을 빌드하고 있으므로 Spring Boot는 앱 런타임의 일부로 Tomcat을 자동으로 포함하고 구성합니다. Maven POM 파일에 H2 데이터베이스 드라이버를 추가하여 앱을 사용자 지정할 수도 있습니다. 그러면 Spring Boot는 DataSource애플리케이션 컨텍스트에 내장 된 데이터베이스와 인스턴스 를 자동으로 생성합니다 . 종속성이 설정되면 Spring Boot는 애플리케이션에 대한 기본 구성을 제공합니다. 물론 원하는 경우 구성을 변경할 수 있지만 Spring Boot 덕분에 우리는 완전히 구성되고 작동하는 애플리케이션을 즉시 사용할 수 있습니다.

종속성을 선택하고 구성한 후에는 해당 선택 사항을 Spring Initializr에 전달하여 기본 Spring Boot 프로젝트를 포함하는 다운로드 가능한 ZIP 파일을 제공합니다.

H2 데이터베이스 엔진이있는 Spring MVC

H2 임베디드 데이터베이스에 데이터를 유지하는 기본 Spring MVC 웹 애플리케이션을 만드는 것으로 시작합니다.

1 단계. 앱 설정 및 구성

에서 봄 Initializr로 이동 start.spring.io 및 선택 Java 및 봄 부팅 2.0.X와 메이븐 프로젝트 생성 (이 글을 쓰는 시점에서 2.0.3) X 최신 봄 부팅 버전입니다. Spring Web MVC 5를 구현할 수 있도록 Spring Boot 2.x를 선택했는지 확인하십시오. Spring Boot 1.4 및 Spring Boot 1.5는 Spring 4를 구현합니다.

웹 주소와 일치하는 형식으로 그룹 이름을 com.geekcap.javaworld입력하고 (예 :) 이슈 이름을 입력합니다 spring5mvc-example. 그림 1은 내 구성을 보여줍니다.

스티븐 헤인즈

웹앱에 종속성을 추가하려면 종속성 검색 텍스트 필드에 쉼표로 구분 된 종속성 목록을 입력 하거나 전체 버전 으로 전환을 클릭합니다 . 정식 버전 으로 전환을 클릭하여 더 쉬운 경로를 선택하겠습니다 . 종속성은 코어, 웹 및 템플릿 엔진과 같은 그룹으로 나뉩니다. 이 예에서는 웹-> 웹, 템플릿 엔진-> Thymeleaf, SQL-> JPA 및 SQL-> H2 확인란을 선택합니다 . 각 선택 항목이 애플리케이션에 추가되는 내용은 다음과 같습니다.

  • 웹 : Spring MVC 및 Tomcat
  • Thymeleaf : Thymeleaf 웹 템플릿 엔진
  • JPA : Spring JPA, Hibernate 및 SpringData
  • H2 : H2 임베디드 데이터베이스

완료되면 페이지 하단의 프로젝트 생성 버튼을 클릭합니다 . Spring Initializr는 다운로드 할 수있는 모든 필수 프로젝트 소스와 함께 미리 만들어진 ZIP 파일을 생성합니다.

2 단계. Spring Initializr 프로젝트를 IDE로 가져 오기

Spring Initializr에서 ZIP 파일을 추출한 다음 프로젝트를 원하는 IDE로 가져옵니다. 예를 들어 프로젝트를 IntelliJ로 가져 오려면 그림 2와 같이 File-> New Project를 선택합니다 .

스티븐 헤인즈

3 단계. Maven POM 설정

다음으로 Import project from external module 로 이동하고 Maven 을 선택한 후 Next누릅니다 . Java 1.8 프로젝트 SDK를 선택하고 Finish 를 누르 십시오 .

Spring Boot 스타터 앱

이제 지금까지 우리의 (최소한) 노력으로 생성 된 Spring Boot 스타터 애플리케이션을 살펴 보겠습니다.

시작하기 위해 목록 1은 Maven POM 파일을 보여줍니다.

목록 1. Maven pom.xml

   4.0.0 com.geekcap.javaworld spring5mvc-example 0.0.1-SNAPSHOT jar spring5mvc-example Demo project for Spring Boot  org.springframework.boot spring-boot-starter-parent 2.0.3.RELEASE     UTF-8 UTF-8 1.8    org.springframework.boot spring-boot-starter-data-jpa   org.springframework.boot spring-boot-starter-thymeleaf   org.springframework.boot spring-boot-starter-web   com.h2database h2 runtime   org.springframework.boot spring-boot-starter-test test      org.springframework.boot spring-boot-maven-plugin     

POM 파일은 특수 상위 POM : spring-boot-starter-parent. 상위 POM을 사용하여 모든 종속성의 버전을 관리하고 버전이 호환되는지 확인합니다. POM 파일의 끝에있는 저장소는 Spring 스냅 샷마일스톤 저장소를 참조 합니다. Spring Boot 2.x는이 글을 쓰는 시점에서 여전히 마일스톤 릴리스이기 때문에 필요합니다.

종속성은 매우 적으며 대부분은 다음으로 시작됩니다 spring-boot-starter.

  • spring-boot-starter-data-jpa
  • spring-boot-starter-thymeleaf
  • spring-boot-starter-web
  • spring-boot-starter-test

이러한 각 스타터 종속성은 필요한 모든 하위 종속성을 가져옵니다. 그림 3은 IntelliJ에서 부분적으로 확장 된 종속성보기를 보여줍니다.

스티븐 헤인즈

POM 파일에는 다음 종속성이 포함됩니다.

  • spring-boot-starter-data-jpa Hibernate와 SpringData를 포함합니다.
  • spring-boot-starter-thymeleaf Thymeleaf 템플릿 엔진이 포함됩니다.
  • spring-boot-starter-web포함 spring-boot-starter-tomcat된 Apache Tomcat 버전.
  • spring-boot-starter-json Jackson JSON 라이브러리가 포함됩니다.
  • spring-web and spring-webmvc Spring MVC를 포함합니다.
  • spring-boot-starter-test JUnit 및 Mockito와 같은 테스트 라이브러리가 포함됩니다.

Spring Boot가 CLASSPATH에서 이러한 종속성을 확인하면 자동 구성을 시작합니다. 예를 들어,를 찾으면 spring-boot-starter-webTomcat의 임베디드 버전을 spring-boot-starter-jpa생성하고 H2를 발견 하면 H2 임베디드 데이터베이스와 Hibernate를 생성합니다 EntityManager. 그런 다음 SpringData에 연결합니다 EntityManager.

Spring Boot는 또한 애플리케이션을 실행하는 데 사용할 수있는 단일 클래스를 생성합니다. 예제 애플리케이션의 클래스는 목록 2에 나와 있습니다.

목록 2. Spring5mvcExampleApplication.java

 package com.geekcap.javaworld.spring5mvcexample; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Spring5mvcExampleApplication { public static void main(String[] args) { SpringApplication.run(Spring5mvcExampleApplication.class, args); } } 

이 클래스는 SpringApplication.run()메서드를 활용하여 실행할 클래스를 전달합니다 ( Spring5mvcExampleApplication이 예에서). @SpringBootApplication주석은 다음과 같은 주석을 포함한다 :

  • @ConfigurationSpring5mvcExampleApplication클래스에 구성 정보가 포함되어 있음을 Spring에 알립니다 . (이 주석은 Spring 컨텍스트에 등록 될 빈을 생성하는 데 사용할 수 있습니다.)
  • @EnableAutoConfiguration Spring은 H2 및 Tomcat과 같은 CLASSPATH에서 찾은 종속성에서 리소스를 자동으로 구성하도록 지시합니다.
  • @ComponentScan현재 패키지 (아래의 CLASSPATH에 스캔 패키지에 봄을 알려줍니다 com.geekcap.javaworld.spring5mvcexample같은 봄 - 주석 구성 요소) @Service@Controller.

Spring scans the CLASSPATH and automatically creates components such as the embedded Tomcat server and H2 database. It then populates the Spring context with the application components found in the package scan. In essence, Spring Boot makes it very easy to select and configure the services, components, controllers, entities, and so forth that you need for your application. Once you've done that, Spring will automatically find them, make them available in the Spring context, and autowire everything together.

We've got our Spring Boot starter project setup and ready to go. In the next section we'll create the Spring MVC components for our Java web application.

What is the Spring context?

The Spring context is a registry of all available Spring beans. Classes are identified as Spring beans by annotating them with specific Spring annotations. Examples include @Service, which identifies a business service, @Controller, which identifies a Spring MVC controller (i.e., handles web requests), and @Entity, which is a JPA annotation used to identify classes that are mapped to database tables.

Once these beans are annotated they need to be registered with the Spring context, which Spring Boot does by performing a package scan of all classes in packages in your project. As the Spring context is being built, it implements the inversion-of-control (IoC) design pattern through dependency injection: when a Spring bean needs a dependency, such as a service or repository, the bean can either define a constructor that accepts the dependent bean or it can leverage the @Autowired annotation to tell Spring that it needs that dependency. Spring resolves all dependencies and "autowires" the application together.

Dependency Injection is a powerful design pattern because, rather than creating and managing dependencies inside your code--which can be messy and leads to tightly coupled classes--you can instead delegate control to the Spring container. Your class simply tells the container what dependencies it needs to run and the container provides the appropriate dependencies to your class at runtime.

About Spring MVC 5

Spring MVC implements the popular Model-View-Controller pattern, which you've probably seen in other web frameworks. The Model-View-Controller pattern separates concerns into three categories:

  • Model represents your domain objects.
  • View renders your model to a view, such as to an HTML page.
  • Controller sits between your view and model and translates change requests in the view into changes in the model, and vice versa. In practical terms, the controller accepts incoming requests, potentially updates the model, and sends your model objects to a "view" to render back to the client.

In Spring MVC, controllers are identified by the @Controller annotation and accompanied by a @RequestMapping annotation. The annotation defines the HTTP verb (standard HTTP commands like GET, POST, PUT, and DELETE) and URI for which the request-mapping method will be applied. Spring 4 introduced shortcut request mappings, which make things even easier. We'll use these mappings--@GetMapping, @PostMapping, @PutMapping, @PatchMapping, and @DeleteMapping--for our example application.

The model in Spring MVC

애플리케이션의 경우 간단한 모델 객체 a를 정의하고 Widget이를 임베디드 H2 데이터베이스에 저장하고 위젯을 관리하는 컨트롤러를 구축합니다. Widget목록 3에 표시된 클래스 부터 시작해 보겠습니다 .