CodeGym/Java курс/Модул 3/Изграждане на военен проект

Изграждане на военен проект

На разположение

Разлики между war и jar файлове

Всъщност jar библиотеката е просто zip архив, което директно следва от името й : Java Archive . Най-често съдържа само четири неща:

  • компorрани класове;
  • ресурси: файлове със свойства и други подобни;
  • манифест MANIFEST.MF;
  • други jar библиотеки (рядко).

Типичната структура на такъв архив изглежда така:

  META-INF/
  	MANIFEST.MF
  com/
  	codegym/
	      MyApplication.class
  application.properties

Сега нека да разгледаме типичен военен файл. Между другото война не е от думата война, а от W eb Ar chive . Структурата на военното досие обикновено е по-сложна. Най-често се състои от две части:

  • Java част
    • компorрани класове
    • ресурси за Java класове: файлове със свойства и други подобни
    • други jar библиотеки (често)
    • манифест MANIFEST.MF
  • уеб част
    • web-xml - дескриптор за внедряване на уеб услуга
    • jsp сървлети
    • статични уеб ресурси: HTML, CSS, JS файлове

Пример за типичен военен файл:

META-INF/
    MANIFEST.MF
WEB-INF/
    web.xml
    jsp/
    	helloWorld.jsp
    classes/
    	static/
    	templates/
    	application.properties
    lib/
    	// *.jar files as libs

важно! jar може да се стартира само от java машина, но за да стартира war файл, той трябва да бъде качен на уеб сървър. Не започва от само себе си.

приставка за военни файлове с maven-war-plugin

Нека си представим, че имаме прост уеб проект. Нека проектът получи такава файлова структура, How да го сглобим?

|-- pom.xml
 `-- src
 	`-- main
     	|-- java
     	|   `-- com
     	|   	`-- example
     	|       	`-- projects
     	|           	`-- SampleAction.java
     	|-- resources
     	|   `-- images
     	|   	`-- sampleimage.jpg
     	`-- webapp
         	|-- WEB-INF
         	|   `-- web.xml
         	|-- index.jsp
         	`-- jsp
             	`-- websource.jsp

Първо, трябва да кажем на Maven да изгради всичко това като военен файл , има етикет <package> за това , например:

	<project>
  	...
      <groupId>com.example.projects</groupId>
      <artifactId>simple-war</artifactId>
  	<packaging>war</packaging>
      <version>1.0-SNAPSHOT</version>
  	<name>Simple War Project</name>
      <url>http://codegym.cc</url>
  	...
    </project>

Второ, трябва да включим плъгина maven-war-plugin . Пример:

  <build>
	<plugins>
  	<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
    	<version>3.3.2</version>
    	<configuration>
          <webappDirectory>/sample/servlet/container/deploy/directory</webappDirectory>
    	</configuration>
      </plugin>
    </plugins>
  </build>

Тук просто дефинираме плъгин, който може да бъде конфигуриран в бъдеще. Освен това, използвайки маркера webappDirectory , предефинираме директорията, в която ще бъде внедрен проектът. Сега ще ви разкажа повече за Howво говоря.

Плъгинът може да бъде настроен на два режима на изграждане (два вида цели):

  • война: война
  • война:избухнал

В първия случай полученият военен файл просто се поставя в целевата папка и се нарича <artifactId>-<version>.war .

Но можете да „помолите“ плъгина, така че съдържанието на военния файл да бъде поставено в крайната папка в състоянието, в което ще бъде разопаковано от уеб сървъра вътре. За това се използва goal war:exploded .

Вторият подход често се използва, ако изпълнявате or отстранявате грешки в проект директно от Intellij IDEA.

Между другото, тагът webappDirectory в примера по-горе ви позволява да предефинирате директорията, в която вашият war файл ще бъде разопакован при изграждане в режим war:exploded.

Можете да научите за други настройки на плъгина от неговата официална page .

Изграждане на уеб приложение, базирано на SpringBoot

Е, бих искал да разглобя няHowъв реален пример за сглобяване. Нека не бъдем дреболии и помислете за това, като използвате примерно приложение, базирано на SpringBoot.

Първа стъпка. Създайте празен уеб проект на Maven с IDEA.

Стъпка втора. Добавете зависимости на Spring към неговия pom.xml.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

Стъпка трета. Създайте клас com.codegym.spring.MainController . Трябва да се постави в папката src/main/java :

@Controller
public class MainController {

	@GetMapping("/")
    public String viewIndexPage(Model model) {
        model.addAttribute("header", "Maven Generate War");
    	return "index";
	}
}

Тук са описани 3 неща. Първо, анотацията @Controller казва на рамката SpringBoot, че този клас ще се използва за обслужване на входящи уеб заявки.

Второ, анотацията @GetMapping показва, че нашият метод ще бъде извикан за обслужване на GET заявка на основния URI - /

Трето, методът връща низа "index" . Това казва на рамката SpringBoot да върне съдържанието на file index.html като отговор .

Стъпка четвърта. Трябва да добавите файл index.html към проекта със следното съдържание:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
    <!-- Bootstrap core CSS -->
    <link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">
</head>
<body>
    <nav class="navbar navbar-light bg-light">
    	<div class="container-fluid">
        	<a class="navbar-brand" href="#">
            	CodeGym Tutorial
        	</a>
    	</div>
    </nav>
    <div class="container">
    	<h1>[[${header}]]</h1>
    </div>
</body>
</html>

Не е само html. Преди съдържанието му да бъде предоставено на клиента, то ще бъде модифицирано на сървъра от рамката Thymeleaf . В този файл са вградени специални тагове, които позволяват на библиотеката Thymeleaf да обработва и променя съдържанието на pageта.

Етикетите в червено са таговете, които ще бъдат обработени от библиотеката Thymeleaf, зелените са стиловете на CSS библиотеката Bootstrap.

Стъпка пета. Задайте приставката в pom.xml:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.3.1</version>
</plugin>

Малко надцених сorте си. Отнема много време за пълно анализиране на прост пример. Но можете да изтеглите пълния code на проекта от GitHub и да се опитате да го разберете сами. Между другото, 80% от работното си време ще правите точно това :)

Можете да изтеглите пълния code от връзката в GitHub .

Коментари
  • Популярен
  • Нов
  • Стар
Трябва да сте влезли, за да оставите коментар
Тази страница все още няма коментари