โค้ดยิม/หลักสูตรจาวา/โมดูล 3/สร้างโครงการสงคราม

สร้างโครงการสงคราม

ระดับ, บทเรียน
มีอยู่

ความแตกต่างระหว่างไฟล์ war และ jar

อันที่ จริง ไล บรารี่ jar เป็นเพียงไฟล์เก็บถาวร zip ซึ่งตามหลังชื่อของมันโดยตรง: Java Archive ส่วนใหญ่มักจะมีเพียงสี่สิ่ง:

  • คลาสที่รวบรวม;
  • ทรัพยากร: ไฟล์คุณสมบัติและอื่น ๆ ;
  • รายการ MANIFEST.MF;
  • ไลบรารี jar อื่น ๆ (หายาก)

โครงสร้างทั่วไปของไฟล์เก็บถาวรมีลักษณะดังนี้:

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

ทีนี้มาดูไฟล์สงครามทั่วไปกัน อย่างไรก็ตาม สงครามไม่ได้มาจากคำว่าสงคราม แต่มาจากW eb Ar chive โครงสร้างของไฟล์สงครามมักจะซับซ้อนกว่า ส่วนใหญ่มักประกอบด้วยสองส่วน:

  • ส่วนจาวา
    • คลาสที่รวบรวม
    • ทรัพยากรสำหรับคลาสจาวา: ไฟล์คุณสมบัติและอื่น ๆ
    • ไลบรารี jar อื่น ๆ (บ่อยครั้ง)
    • รายการ MANIFEST.MF
  • ส่วนเว็บ
    • web-xml - ตัวอธิบายการปรับใช้บริการเว็บ
    • jsp เซิร์ฟเล็ต
    • ทรัพยากรเว็บแบบคงที่: ไฟล์ HTML, CSS, JS

ตัวอย่างของไฟล์ war ทั่วไป:

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

สำคัญ! ไฟล์ jar สามารถรันได้ด้วยเครื่องจาวาเท่านั้น แต่หากต้องการรันไฟล์ war จะต้องอัพโหลดไปยังเว็บเซิร์ฟเวอร์ มันไม่ได้เริ่มต้นขึ้นเอง

ปลั๊กอินไฟล์ war กับ maven-war-plugin

สมมติว่าเรามีโครงการเว็บง่ายๆ ให้โครงการได้รับโครงสร้างไฟล์เราจะรวบรวมได้อย่างไร

|-- 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 ให้สร้างทั้งหมดนี้เป็นไฟล์ war มีแท็ก <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เรากำหนดไดเร็กทอรีใหม่ที่จะปรับใช้โปรเจ็กต์ ตอนนี้ฉันจะบอกคุณเพิ่มเติมเกี่ยวกับสิ่งที่ฉันกำลังพูดถึง

ปลั๊กอินสามารถตั้งค่าเป็นสองโหมดการสร้าง (เป้าหมายสองประเภท):

  • สงคราม:สงคราม
  • สงคราม: ระเบิด

ในกรณีแรก ไฟล์ war ที่เป็นผลลัพธ์จะถูกวางไว้ใน โฟลเดอร์ เป้าหมายและตั้งชื่อว่า<artifactId>-<version> .war

แต่คุณสามารถ "ถาม" ปลั๊กอินเพื่อให้เนื้อหาของไฟล์ war อยู่ในโฟลเดอร์สุดท้ายในสถานะที่เว็บเซิร์ฟเวอร์จะแตกไฟล์ภายใน สำหรับสิ่งนี้ จะใช้เป้าหมายwar: exploded

วิธีที่สองมักจะใช้หากคุณกำลังรันหรือดีบักโปรเจ็กต์โดยตรงจาก Intellij IDEA

อย่างไรก็ตาม แท็กwebappDirectoryในตัวอย่างด้านบนช่วยให้คุณกำหนดไดเร็กทอรีใหม่ซึ่งไฟล์ war ของคุณจะถูกคลายเมื่อสร้างในโหมด war:exploded

คุณสามารถเรียนรู้เกี่ยวกับการตั้งค่าปลั๊กอินอื่นๆ ได้จากหน้าอย่างเป็นทางการ

สร้างเว็บแอปพลิเคชันโดยใช้ SpringBoot

ฉันต้องการแยกตัวอย่างการประกอบจริงบางส่วน อย่าคิดเล็กคิดน้อยและพิจารณาสิ่งนี้โดยใช้แอปพลิเคชันตัวอย่างที่ใช้ SpringBoot

ขั้นตอนแรก. สร้างโครงการเว็บ Maven ที่ว่างเปล่าด้วย IDEA

ขั้นตอนที่สอง เพิ่มการขึ้นต่อกันของสปริงใน 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 framework ว่าคลาสนี้จะถูกใช้เพื่อให้บริการคำขอเว็บที่เข้ามา

ประการที่สองคำอธิบายประกอบ @GetMappingระบุว่าวิธีการของเราจะถูกเรียกใช้เพื่อให้บริการคำขอ GET บน URI รูท - /

ประการที่สาม วิธีการส่งคืนสตริง"ดัชนี " ซึ่งจะบอกให้ SpringBoot framework ส่งคืนเนื้อหาของไฟล์ 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 ประมวลผลและแก้ไขเนื้อหาของเพจ

แท็กสีแดงคือแท็กที่ไลบรารี Thymeleaf จะดำเนินการ ส่วนสีเขียวคือสไตล์ของไลบรารี Bootstrap CSS

ขั้นตอนที่ห้า ตั้งค่าปลั๊กอินใน pom.xml:

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

ฉันประเมินความแข็งแกร่งของฉันสูงเกินไป ต้องใช้เวลามากในการแยกวิเคราะห์ตัวอย่างง่ายๆ แต่คุณสามารถดาวน์โหลดรหัสเต็มของโครงการได้จาก GitHub และพยายามทำความเข้าใจด้วยตัวเอง อย่างไรก็ตาม 80% ของเวลาทำงานของคุณ คุณจะทำอย่างนั้น :)

คุณสามารถดาวน์โหลดโค้ดฉบับเต็มได้จากลิงก์ใน GitHub

ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ