Bedane antarane file perang lan jar

Nyatane , perpustakaan jar mung arsip zip, sing langsung nderek saka jenenge: Java Archive . Paling asring ngemot mung papat perkara:

  • kelas sing disusun;
  • sumber daya: file properti lan liya-liyane;
  • manifest MANIFEST.MF;
  • perpustakaan jar liyane (langka).

Struktur khas arsip kasebut katon kaya iki:

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

Saiki ayo goleki file perang sing khas. Miturut cara, perang ora saka tembung perang, nanging saka W eb Ar chive . Struktur file perang biasane luwih rumit. Paling asring kasusun saka rong bagean:

  • bagean Jawa
    • kelas sing disusun
    • sumber daya kanggo kelas java: file sifat lan liya-liyane
    • perpustakaan jar liyane (asring)
    • manifest MANIFEST.MF
  • bagean web
    • web-xml - deskriptor penyebaran layanan web
    • jsp servlet
    • sumber daya web statis: HTML, CSS, file JS

Conto file perang sing khas:

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

Penting! jar file bisa mbukak dening mung mesin java, nanging kanggo mbukak file perang, iku kudu diunggahaké menyang server web. Ora diwiwiti dhewe.

file perang plugin karo maven-war-plugin

Ayo mbayangno yen kita duwe proyek web sing prasaja. Ayo proyek kasebut diwenehi struktur file kasebut, kepiye carane kita ngumpulake?

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

Pisanan, kita kudu ngandhani Maven supaya nggawe kabeh iki minangka file perang , ana tag <paket> iki , contone:

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

Kapindho, kita kudu nyakup plugin maven-war-plugin . Tuladha:

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

Ing kene kita mung nemtokake plugin sing bisa dikonfigurasi ing mangsa ngarep. Uga, nggunakake tag webappDirectory , kita nemtokake maneh direktori ing ngendi proyek bakal disebarake. Saiki aku bakal ngandhani sampeyan babagan apa sing dakkandhakake.

Plugin bisa disetel dadi rong mode mbangun (rong jinis tujuan):

  • perang: perang
  • perang: njeblug

Ing kasus sing sepisanan, file perang sing diasilake mung diselehake ing folder target lan dijenengi <artifactId>-<version>.war .

Nanging sampeyan bisa "takon" plugin supaya isi file perang diselehake ing folder final ing negara kang bakal unpacked dening server web nang. Kanggo iki, perang gol: mbledhos digunakake .

Pendekatan kapindho asring digunakake yen sampeyan mlaku utawa debugging proyek langsung saka Intellij IDEA.

Miturut cara, tag webappDirectory ing conto ing ndhuwur ngidini sampeyan nemtokake maneh direktori ing ngendi file perang sampeyan bakal dibongkar nalika mbangun perang: mode mbledhos.

Sampeyan bisa sinau babagan setelan plugin liyane saka kaca resmi .

Nggawe aplikasi web adhedhasar SpringBoot

Inggih, aku pengin mbongkar sawetara conto perakitan nyata. Ayo dadi ora trifles lan nimbang iki nggunakake conto aplikasi adhedhasar SpringBoot.

Langkah siji. Nggawe proyek web Maven kosong karo IDEA.

Langkah loro. Tambah dependensi Spring menyang pom.xml sawijining.

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

Langkah telu. Nggawe kelas com.codegym.spring.MainController . Sampeyan kudu diselehake ing folder src/main/java :

@Controller
public class MainController {

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

Ana 3 perkara sing diterangake ing kene. Pisanan, anotasi @Controller ngandhani kerangka SpringBoot yen kelas iki bakal digunakake kanggo nglayani panjaluk web sing mlebu.

Kapindho, anotasi @GetMapping , nuduhake yen metode kita bakal diarani layanan panyuwunan GET ing root URI - /

Katelu, cara ngasilake string "indeks" . Iki ngandhani framework SpringBoot kanggo ngasilake isi file index.html minangka respon .

Langkah papat. Sampeyan kudu nambah file index.html menyang proyek kanthi isi ing ngisor iki:

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

Iku ora mung html. Sadurunge isi kasebut diwenehake menyang klien, bakal diowahi ing server dening kerangka Thymeleaf . Tag khusus ditempelake ing file iki, sing ngidini perpustakaan Thymeleaf ngolah lan ngowahi isi kaca kasebut.

Tag ing werna abang minangka tag sing bakal diproses dening perpustakaan Thymeleaf, sing ijo minangka gaya perpustakaan Bootstrap CSS.

Langkah kaping lima. Setel plugin ing pom.xml:

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

Aku overestimated kekuatan sandi dicokot. Perlu akeh wektu kanggo ngrampungake conto sing gampang. Nanging sampeyan bisa ndownload kode lengkap proyek kasebut saka GitHub lan nyoba ngerti dhewe. Ngomong-ngomong, 80% wektu kerja sampeyan bakal ditindakake :)

Sampeyan bisa ngundhuh kode lengkap saka link ing GitHub .