War-loyihani yig'ish

All lectures for UZ purposes
Daraja, Dars
Mavjud

War va jar-fayllarining farqlari

Aslida jar-kutubxona – bu shunchaki zip arxiv, bu uning nomidan kelib chiqadi: Java Archive. Ko'pincha u shunchaki to'rtta narsani o'z ichiga oladi:

  • kompilyatsiya qilingan sinflar;
  • resurslar: properties-fayllar va shunga o'xshash narsalar;
  • manifest MANIFEST.MF;
  • boshqa jar-kutubxonalar (kamdan-kam).

Bunday arxivning oddiy tuzilishi quyidagicha ko'rinadi:

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

Endi keling, oddiy war-faylni ko'rib chiqaylik. Aytgandek, war urush so'zidan emas, balki Web Archive so'zidan kelib chiqqan. War-faylning tuzilishi odatda murakkabroq. Ko'pincha u ikkita qismdan iborat:

  • Java-qismi
    • kompilyatsiya qilingan sinflar
    • java-sinflar uchun resurslar: properties-fayllar va shunga o'xshash narsalar
    • boshqa jar-kutubxonalar (ko'pincha)
    • manifest MANIFEST.MF
  • Web-qismi
    • web-xml – web-xizmatni joylashtirish deskriptori
    • jsp-servelar
    • statik web-resurslar: HTML, CSS, JS-fayllar

Oddiy war-faylning misoli:

META-INF/
    MANIFEST.MF
WEB-INF/
    web.xml
    jsp/
    	helloWorld.jsp
    classes/
    	static/
    	templates/
    	application.properties
    lib/
    	// *.jar fayllar liblar sifatida

Muhim! jar-faylni shunchaki java-mashina ishga tushirishi mumkin, ammo war-faylni ishga tushirish uchun uni web-serverga yuklash kerak. U mustaqil ravishda ishga tushirilmaydi.

maven-war-plugin yordamida war-fayl yaratish uchun plagin

Keling tasavvur qilaylik, bizda oddiy web-loyiha bor. Loyiha bunday fayl tuzilishini belgilaydi, uni qanday yig'ishimiz kerak?

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

Birinchidan, biz Maven'ga hammasini war-fayl sifatida yig'ishni ko'rsatishimiz kerak, buning uchun <package> tegi mavjud, misol:

 <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://javarush.com</url> ... </project>

Ikkinchidan, biz maven-war-plugin plaginini ulashimiz kerak. Misol:

  <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>

Bu yerda biz shunchaki kelajakda konfiguratsiya qilish mumkin bo'lgan plaginni belgilaymiz. Shuningdek, webappDirectory tegi yordamida loyiha joylashtiriladigan katalogni qayta belgilang. Endi nima haqida gap ketayotganini batafsilroq aytib beraman.

Plaginga ikkita yig'ish rejimini (ikki xil goal) belgilash mumkin:

  • war:war
  • war:exploded

Birinchi holatda yakuniy war-fayl shunchaki target papkasiga joylanadi va unga <artifactId>-<version>.war nomi beriladi.

Lekin pluginni "iltimos qilish" mumkin, war-fayl mazmuni yakuniy papkaga web-server ichida u qanday holatda ochiladi, shu holatda qo'yilsin. Buning uchun war:exploded goal ishlatiladi.

Ikkichi yondoshish tez-tez ishlatiladi, agar siz loyihani to'g'ridan-to'g'ri Intellij IDEA'dan ishga tushirsangiz yoki debag qilsangiz.

Aytgandek, yuqoridagi misoldagi webappDirectory teg war-faylingizni war:exploded rejimda yig'ishda qayta ochiladigan joyni belgilash imkonini beradi.

Plaginning boshqa sozlamalari haqida uning rasmiy sahifasida bilib olishingiz mumkin.

SpringBoot asosida web-ilovani yig'ish

Yana bir amaliy misolni tahlil qilgimiz keladi. Keling kichik narsalar bilan shug'ullanmaylik va SpringBoot asosidagi ilova misolida ko'ramiz.

Birinchi qadam. IDEA yordamida bo'sh Maven web-loyiha yarat.

Ikkinchi qadam. Uning pom.xml ga Spring'ga bog'liqliklarni qo'sh.

<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>

Uchinchi qadam. com.javarush.spring.MainController klassini yarat. Uni src/main/java papkaga joylashtiring:


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

Bu yerda 3 narsa tasvirlangan. Birinchidan, anotatsiya @Controller SpringBoot freymvorkiga bu sinf kiruvchi web-so'rovlarni xizmat qilish uchun ishlatilishini ko'rsatadi.

Ikkinchidan, anotatsiya @GetMapping bizning metodimiz GET-so'rov bilan xizmat qilish uchun chaqirilishini ko'rsatmoqda - / asosiy URI ga

Uchinchidan, metod "index" qatorini qaytaradi. Bu SpringBoot freymvorkiga index.html faylining mazmunini javob sifatida berish kerakligini bildiradi.

To'rtinchi qadam. Loyihaga quyidagi mazmundagi index.html faylini qo'shing:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
    <!-- Bootstrap asosiy 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="#">
            	JavaRush Tutorial
        	</a>
    	</div>
    </nav>
    <div class="container">
    	<h1>[[${header}]]</h1>
    </div>
</body>
</html>

Bu shunchaki html emas. Mijozga yuborilishidan oldin uning mazmuni serverda Thymeleaf freymvorki tomonidan o'zgartiriladi. Ushbu faylda maxsus teglar mavjud, ular Thymeleaf kutubxonasi sahifa mazmunini qayta ishlash va o'zgartirish imkonini beradi.

Qizil rangda Thymeleaf kutubxonasi tomonidan qayta ishlanadigan teglar, yashil rangda esa CSS-kutubxonasi Bootstrap uslublari ko'rsatilgan.

Beshinchi qadam. pom.xml ga plugin qo'shamiz:

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

O'z kuchimni biroz ortiqcha baholadim. Oddiy misolni to'liq tahlil qilish uchun ko'p vaqt kerak. Ammo siz loyiha kodini GitHub'dan yuklab olib, uni mustaqil o'rganishga harakat qilishingiz mumkin. Aytgandek, ish vaqtingizning 80% ana shu ishni bajarish bilan o'tadi :)

To'liq kodni GitHubdagi havola orqali yuklab olishingiz mumkin.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION