English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Проект Spring Boot, содержащий вложенные проекты Maven, называется многослойный проект. В многослойных проектах родительский проект выполняет функцию контейнера для базовой конфигурации Maven.
иначе говоря многослойный проектсостоит из родительского POM, который управляет группой подмодулей. Или многослойный проектссылку на один или несколько подмодулей, определяемых из родительского POM.
Родительский проект Maven должен содержать pom тип упаковки делает проект агрегатором. Родительский проект pom.xml файл содержит все зависимости, наследуемые подпроектами модули, общие зависимостии свойствасписок. Родительский pom находится в корневой директории проекта. Подмодули являются реальными проектами Spring Boot, они наследуют мaven свойства от родительского проекта.
Когда мы запускаем многоступенчатый проект, все модули развертываются вместе на嵌入式 сервере Tomcat. Мы также можем развертывать отдельные модули.
Родительский POM определяет группу ID, ID артефакта, версию, и packaging.. В предыдущих проектах Maven мы видели, что родительский POM определяет упаковку jar.. Но в многоступенчатых проектах, родительский POM Определение упаковки pom. Упаковка pom ссылается на другие Maven проекты.
Разделение проекта на несколько модулей полезно и легко поддерживать. Мы также можем легко редактировать или удалять модули в проекте, не влияя на другие модули. Это полезно, когда необходимо развертывать модули по отдельности.
Достаточно указать все зависимости в родительском pom. Все другие модули делят один и тот же pom, поэтому мы не должны указывать одни и те же зависимости в каждом модуле.
Подмодули могут быть любыми проектами и могут иметь любую упаковку. Мы можем свободно создавать любые типы зависимостей между модулями и束ами.
например, мы создаем EAR (enterprise archive), WAR (Web ARchive) и JAR (Java ARchive) файл. Файл JAR включается в WAR файл, а WAR файл включается в EAR файл. Файл EAR является конечным пакетом программного обеспечения, который можно развернуть на сервере приложений.
Файл EAR содержит один или несколько файлов WAR. Каждый файл WAR содержит проект сервисов, который имеет общий код для всех файлов WAR и типов упаковки в JAR.
Подмодули являются независимыми Maven проектами, которые делят свойства родительского проекта. Все подпроекты могут быть скомпилированы одной командой, так как они находятся в родительском проекте. легче определить отношения между проектами.
Давайте разберемся в структуре директории многоступенчатого проекта.
На следующем рисунке мы создали проект под названием spring-boot-multi-module-project проекта, который содержит в себе родительский pom После этого мы создали два Maven модульи названы соответственно module1 и module2 Эти два модуля содержат свои собственные pom файлы.
Давайте откроем родительский POM и посмотрим на его конфигурацию при создании Maven модуля в проекте.
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.BUILD-SNAPSHOT</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.w3codebox</groupId> <artifactId>spring-boot-example</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-boot-multi-module-project</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <packaging>pom</packaging> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.1.RELEASE</version> <type>pom</type> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </repository> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </pluginRepository> <pluginRepository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> <modules> <module>module1</module> <module>module2</module> </modules> </project>
upper pom файл аналогичен предыдущему примеру. Но в данном случае pom в файле, нужно учитывать два момента: упаковкаи модуль.
Когда мы создаем проект с несколькими модулями, нам нужно configuring packaging pom в родительском pom файле, а не jar.
<packaging>pom</packaging>
Когда мы создаем модуль Maven в проекте, Spring Boot автоматически модуль в родительском pom автоматически конфигурируются модули, как показано ниже.
<modules> <module>module1</module> <module>module2</module> </modules>
Теперь мы посмотрим на содержание файла pom для module1.
pom.xml
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.w3codebox</groupId> <artifactId>spring-boot-multi-module-project</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.w3codebox</groupId> <artifactId>module1</artifactId> <version>0.0.1-SNAPSHOT</version> <name>module1</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
Здесь необходимо отметить, что aforementioned POM файл не включает такие элементы, как starter-web, web-mvc и т.д.И таких общих зависимостей. Parent POM.
Давайте создадим пример многослойного приложения.
В следующем примере мы создали приложение с именем Maven проект spring-boot-multimodule.Это основное приложение. В основном приложении мы создалипятьМодули, как показано ниже: Приложение Модель Хранилище service-api service-impl
Модуль приложения
Модуль приложения является основным модулем проекта. Он включает класс приложения, в котором определен метод main, необходимый для запуска Spring Boot Application. Он также включает Конфигурационные свойства приложения, контроллеры, представленияи Ресурсы.
Модуль приложения включает модуль модели, модуль реализации услуги в качестве зависимого модуля, содержащего модель, модуль хранилища и модуль API услуги.
Модуль модели
Модуль модели включает Энтитии используемые в проекте Визуальные объекты .
Модуль хранилища
Модуль хранилища включает <В项目中 используемые> Хранилище. Это зависит от модуля модели.
Модуль API услуги
Модуль API услуги включает все проекты Сервис.Это также зависит от модуля модели.
Модуль реализации услуги
Модуль реализации услуги может реализовывать сервис. Это зависит от модуля хранилища и модуля API услуги.
Parent POM включает все модули приложения. Он также включает все общие зависимости и свойства, необходимые для одного или нескольких модулей. Поскольку проект определил Spring IO Platform в качестве родительского, зависимые элементы определяются без версии, так как они определяются родительским POM.
Давайте изучим структуру многослойного приложения, которое мы создали.
Spring-boot-multimodule │── pom.xml │ └── REDME.adoc ├── application │ ├── pom.xml │ └── src │ └── main │ ├── java │ │ └── sample │ │ └── multimodule │ │ ├── SampleWebJspApplication.java │ │ └── web │ │ └── WelcomeController.java │ └── resources │ ├── application.properties │ └── templates │ └── welcome │ └── show.html ├── model │ ├── pom.xml │ └── src │ └── main │ └── java │ └── sample │ └── multimodule │ └── domain │ └── entity │ └── Account.java | ├── repository │ ├── pom.xml │ └── src │ └── main │ └── java │ └── sample │ └── multimodule │ └── repository │ └── AccountRepository.java ├── service-api │ ├── pom.xml │ └── src │ └── main │ └── java │ └── sample │ └── multimodule │ └── service │ └── api │ └── AccountNotFoundException.java │ └── AccountService.java └── service-impl │── pom.xml └── src └── main └── java └── sample └── multimodule └── service └── impl └── AccountServiceImpl.java
Шаг 1: Создайте файл с именем spring-boot-multimodule Maven проект.
Шаг 2: Откройте pom.xml (родительский pom) файл, и тип пакета jar изменить на pom。
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- Springio платформа является родительской приложением для создаваемого приложения, которая может использовать Spring Boot и все его стандартные конфигурации --> <parent> <groupId>io.spring.platform</groupId> <artifactId>platform-bom</artifactId> <version>2.0.1.RELEASE</version> </parent> <groupId>sample.multimodule</groupId> <artifactId>sample.multimodule</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>Parent - Pom Aggregator</name> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!-- Spring Boot зависимости --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
В указанном файле pom.xml应注意的一件事是,由于尚未创建Maven模块,因此未配置。Теперь мы создадим Maven модуль, как указано.
Шаг 3: Создайте файл с именем приложение Maven модуль .
Шаг 4: Откройте модуль приложения pom.xml Файл, и убедитесь, что тип打包а jar.
pom.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>sample.multimodule</groupId> <artifactId>sample.multimodule</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>sample.multimodule.application</artifactId> <packaging>jar</packaging> <name>Project Module - Application</name> <dependencies> <!-- Project modules --> <dependency> <groupId>sample.multimodule</groupId> <artifactId>sample.multimodule.service.impl</artifactId> <version>${project.version}</version> </dependency> <!-- Spring Boot dependencies --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> </dependencies> <build> <plugins> <!-- Spring Boot plugins --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
步骤5: создание 主要类。这是要运行的类。
SampleWebJspApplication.java
package sample.multimodule; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.SpringApplication; import org.springframework.boot.orm.jpa.EntityScan; @SpringBootApplication public class SampleWebJspApplication { public static void main(String[] args) throws Exception { SpringApplication.run(SampleWebJspApplication.class, args); } }
步骤6: в пакете smaple.multimodule.web。
в создании объекта с именем WelocameController 的Controller类。
WelcomeController.java
package sample.multimodule.web; import java.util.Date; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; импортировать org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import sample.multimodule.domain.entity.Account; import sample.multimodule.service.api.AccountService; @Controller public class WelcomeController { @Value("${application.message:Hello World}") private String message = "Hello World"; @Autowired protected AccountService accountService; @RequestMapping("/") public String welcome(Map<String, Object> model) { //Попытка получить аккаунт под номером 23 Account account = accountService.findOne("23"); if(account == null){ //Если при создании аккаунта возникли проблемы, верните виджет для отображения состояния ошибки model.put("message", "Ошибка получения аккаунта!"); model.put("account", ""); return "welcome/show"; } //Вернуть виджет для отображения информации о 23 аккаунтах String accountInfo = "Ваш номер аккаунта составляет ".concat(account.getNumber()); model.put("message", this.message); model.put("account", accountInfo); return "welcome/show"; } @RequestMapping("foo") public String foo(Map<String, Object> model) { throw new RuntimeException("Foo"); } }
Шаг 7: в папке в папке src/main/resource создать файл show.html of HTML templates -> welcome.
show.html
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Spring Boot Multimodule</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <div> <b>Сообщение:</b> <span th:text="${message}" /> </div> <div> <b>Ваш аккаунт:</b> <span th:text="${account}" /> </div> </body> </html>
Шаг 8: Откройте application.properties файл, откройте application messageи thymeleafКонфигурация кэширования установлена Нет.
application.properties
#Информация приложения application.message = Hello User! dummy.type = type-inside-the-war #Конфигурация Spring Thymeleaf spring.thymeleaf.cache = false
После создания всех указанных файлов, директория модуля приложения будет выглядеть следующим образом:
Давайте создадим второй модуль, то есть model。
Шаг 9: Создайте Maven Moduleимя model。
Шаг 10: Откройте модель pom.xml Модуль файла, и убедитесь, что тип обертки jar.
pom.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>sample.multimodule</groupId> <artifactId>sample.multimodule</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>sample.multimodule.model</artifactId> <packaging>jar</packaging> <name>Модуль проекта - Модель</name> <description>Модуль, содержащий все Сущности и Визуальные объекты, используемые в проекте. У него нет никаких зависимостей. </description> </project>
Шаг 11: в пакете sample.multimodule.domain.entity。
в создании объекта с именем Account класс.Account.java
package sample.multimodule.domain.entity; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; @Entity public class Account { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String number; private String type; private String creditCardNumber; /** * Создание пустого счета. */ public Account() { } /** * Create a new account. * * @param number * the account number * @param id * the account id */ public Account(long id, String number) { this.number = number; this.id = id; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getCreditCardNumber() { return creditCardNumber; } public void setCreditCardNumber(String creditCardNumber) { this.creditCardNumber = creditCardNumber; } }
После создания всех вышеуказанных файлов, каталог модели модуля будет следующим:
Давайте создадим third модуль
Шаг 12: Создайте файл с именем repository Maven модуль. strong>
Шаг 13: Откройте модуль приложения pom.xml Файл, и убедитесь, что тип打包а jar.
pom.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>sample.multimodule</groupId> <artifactId>sample.multimodule</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>sample.multimodule.repository</artifactId> <packaging>jar</packaging> <name>Project Module - Repository</name> <description>Module that contains all repositories to be used in the project. Depends of Model Module.</description> <dependencies> <!-- Project modules --> <dependency> <groupId>sample.multimodule</groupId> <artifactId>sample.multimodule.model</artifactId> <version>${project.version}</version> </dependency> <!-- Spring Boot dependencies --> <dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <scope>runtime</scope> </dependency> </dependencies> </project>
Шаг 14: в пакете sample.multimodule.repository
Создайте имя AccountRepository класс.
AccountRepository.java
package sample.multimodule.repository; import org.springframework.data.domain.*; import org.springframework.data.repository.*; import org.springframework.stereotype.Repository; import sample.multimodule.domain.entity.Account; @Repository public interface AccountRepository extends CrudRepository<Account, Long> { Account findByNumber(String number); }
После создания всех указанных файлов директория модуля хранилища будет выглядеть следующим образом:
Давайте создадим четвертыммодуль, который является service-api.
Шаг 15: Создайте файл с именем service-api Maven модуль.
Шаг 16 : Откройте <strong>приложениеВ файле > pom.xml service-api и убедитесь, что тип打包а составляет jar.
pom.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>sample.multimodule</groupId> <artifactId>sample.multimodule</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>sample.multimodule.service.api</artifactId> <packaging>jar</packaging> <name>Модуль Проекта - API Служб</name> <description>Модуль, содержащий API всех проектных служб. Зависит от Модуля Модели.</description> <dependencies> <!-- Project Modules --> <dependency> <groupId>sample.multimodule</groupId> <artifactId>sample.multimodule.model</artifactId> <version>${project.version}</version> </dependency> </dependencies> </project>
Шаг 17: Создайте имя пакета sample.multimodule.service.api.
Шаг 18: Создайте имя Класс AccountNotFoundExceptionЕсли не найден этот счет, будет обработана исключительная ситуация.
AccountNotFoundException.java
package sample.multimodule.service.api; public class AccountNotFoundException extends RuntimeException { private static final long serialVersionUID = -3891534644498426670L; public AccountNotFoundException(String accountId) { super("No such account with id: " + accountId); } }
Шаг 19: Создайте файл с именем класс AccountServiceОн предоставляет услуги, связанные с аккаунтом, такие как поиски созданиеаккаунт
AccountService.java
package sample.multimodule.service.api; импортировать java.util.List; import sample.multimodule.domain.entity.Account; public interface AccountService { /** * Найдите аккаунт по предоставленному номеру. * * @param number Номер аккаунта * @return аккаунт * @throws AccountNotFoundException если такого аккаунта не существует. */ Account findOne(String number) throws AccountNotFoundException; /** * Создает новый аккаунт. * @param number * @return созданный аккаунт */ Account createAccountByNumber(String number); }
Создав все указанные файлы, каталог модуля service-api будет выглядеть следующим образом:
Шаг 20: Создайте файл с именем service-impl Maven модуль.
Шаг 21: : Откройте приложение service-impl of pom.xml файл и убедитесь, что тип упаковки jar.
pom.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>sample.multimodule</groupId> <artifactId>sample.multimodule</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>sample.multimodule.service.impl</artifactId> <packaging>jar</packaging> <name>Проектный модуль — Реализация сервиса</name> <description>Модуль, содержащий реализацию сервисов, определенную в модуле Service API. Зависит от модуля Repository и модуля Service API.</description> <dependencies> <!-- Project Modules --> <dependency> <groupId>sample.multimodule</groupId> <artifactId>sample.multimodule.repository</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>sample.multimodule</groupId> <artifactId>sample.multimodule.service.api</artifactId> <version>${project.version}</version> </dependency> </dependencies> </project>
шаг 22: в пакете sample.multimodule.service.impl。
в создании объекта с именем AccountServiceImpl класс.AccountServiceImpl.java
пакет sample.multimodule.service.impl; импортировать java.util.ArrayList; импортировать java.util.List; импортировать org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import sample.multimodule.domain.entity.Account; import sample.multimodule.repository.AccountRepository; import sample.multimodule.service.api.AccountService; import sample.multimodule.service.api.AccountNotFoundException; @Service public class AccountServiceImpl implements AccountService { @Value("${dummy.type}") private String dummyType; @Autowired private AccountRepository accountRepository; /** * @inheritDoc * <p/> * Dummy method for testing purposes. * * @param number The account number. Set 0000 to get an @link AccountNotFoundException */ @Override public Account findOne(String number) throws AccountNotFoundException { if(number.equals("0000")) { throw new AccountNotFoundException("0000"); } Account account = accountRepository.findByNumber(number); if(account == null){ account = createAccountByNumber(number); } return account; } @Override public Account createAccountByNumber(String number) { Account account = new Account(); account.setNumber(number); return accountRepository.save(account); } public String getDummyType() { return dummyType; } public void setDummyType(String dummyType) { this.dummyType = dummyType; } }
Создание всех указанных выше файлов, service-impl каталог модуля будет выглядеть так:
Теперь откройте родительском pom файл,我们看到 все созданные Maven-модули находятся в в родительском pom
Теперь убедитесь, что все пять модулей установлены и созданы, как показано ниже:
После создания всех модулей, основная директория проекта будет выглядеть так:
Шаг 23: Теперь, чтобы SampleWebJspApplication.java Файл запускается как Java-приложение.
Шаг 24: Откройте браузер и вызовите URL http: //localhost: 8080. Оно возвращает Сообщениеи аккаунт 23。