युद्ध और जार फ़ाइलों के बीच अंतर

वास्तव में , एक जार पुस्तकालय सिर्फ एक ज़िप संग्रह है, जो सीधे इसके नाम से आता है: जावा आर्काइव । बहुधा इसमें सिर्फ चार चीजें होती हैं:

  • संकलित कक्षाएं;
  • संसाधन: गुण फ़ाइलें और पसंद;
  • मैनिफेस्ट मैनिफेस्ट.एमएफ;
  • अन्य जार पुस्तकालय (दुर्लभ)।

इस तरह के संग्रह की विशिष्ट संरचना इस तरह दिखती है:

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

अब आइए एक विशिष्ट युद्ध फ़ाइल देखें। वैसे युद्ध युद्ध शब्द से नहीं, वेब आर्काइव से बना है । युद्ध फ़ाइल की संरचना आमतौर पर अधिक जटिल होती है। बहुधा इसमें दो भाग होते हैं:

  • जावा भाग
    • संकलित कक्षाएं
    • जावा कक्षाओं के लिए संसाधन: गुण फ़ाइलें और इसी तरह
    • अन्य जार पुस्तकालय (अक्सर)
    • प्रकट MANIFEST.एमएफ
  • वेब भाग
    • वेब-एक्सएमएल - वेब सेवा परिनियोजन विवरणक
    • जेएसपी सर्वलेट्स
    • स्थैतिक वेब संसाधन: 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 फ़ाइल केवल एक जावा मशीन द्वारा चलाई जा सकती है, लेकिन युद्ध फ़ाइल चलाने के लिए इसे वेब सर्वर पर अपलोड किया जाना चाहिए। यह अपने आप शुरू नहीं होता है।

मावेन-वार-प्लगइन के साथ युद्ध फ़ाइल प्लगइन

आइए कल्पना करें कि हमारे पास एक साधारण वेब प्रोजेक्ट है। प्रोजेक्ट को ऐसी फाइल संरचना दें, हम इसे कैसे इकट्ठा करते हैं?

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

सबसे पहले, हमें मावेन को यह सब एक युद्ध फ़ाइल के रूप में बनाने के लिए कहना होगा, इसके लिए एक <पैकेज> टैग है , उदाहरण के लिए:

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

दूसरा, हमें मावेन-वार-प्लगइन प्लगइन को शामिल करने की आवश्यकता है । उदाहरण:

  <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 टैग का उपयोग करते हुए , हम उस निर्देशिका को फिर से परिभाषित करते हैं जिसमें प्रोजेक्ट तैनात किया जाएगा। अब मैं आपको और बताऊंगा कि मैं किस बारे में बात कर रहा हूं।

प्लगइन को दो बिल्ड मोड (दो प्रकार के लक्ष्य) पर सेट किया जा सकता है:

  • युद्ध: युद्ध
  • युद्ध: विस्फोट

पहले मामले में, परिणामी युद्ध फ़ाइल को केवल लक्ष्य फ़ोल्डर में रखा जाता है और <artifactId>-<version>.war नाम दिया जाता है ।

लेकिन आप प्लगइन को "पूछ" सकते हैं ताकि युद्ध फ़ाइल की सामग्री उस स्थिति में अंतिम फ़ोल्डर में रखी जाए जिसमें इसे अंदर वेब सर्वर द्वारा अनपैक किया जाएगा। इसके लिए लक्ष्य युद्ध: विस्फोट का उपयोग किया जाता है ।

यदि आप किसी प्रोजेक्ट को सीधे Intellij IDEA से चला रहे हैं या डिबग कर रहे हैं तो दूसरे दृष्टिकोण का अक्सर उपयोग किया जाता है।

वैसे, ऊपर दिए गए उदाहरण में webappDirectory टैग आपको उस निर्देशिका को फिर से परिभाषित करने की अनुमति देता है जहां युद्ध: विस्फोटित मोड में निर्माण करते समय आपकी युद्ध फ़ाइल अनपैक हो जाएगी।

आप इसके आधिकारिक पेज से अन्य प्लगइन सेटिंग्स के बारे में जान सकते हैं ।

स्प्रिंगबूट पर आधारित एक वेब एप्लिकेशन का निर्माण

खैर, मैं कुछ वास्तविक असेंबली उदाहरण को अलग करना चाहता हूं। आइए ट्रिफ़ल्स न बनें और स्प्रिंगबूट पर आधारित एक उदाहरण एप्लिकेशन का उपयोग करके इस पर विचार करें।

पहला कदम। आईडीईए के साथ एक खाली मेवेन वेब प्रोजेक्ट बनाएं।

दूसरा चरण। इसके 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 एनोटेशन स्प्रिंगबूट फ्रेमवर्क को बताता है कि इस वर्ग का उपयोग आने वाले वेब अनुरोधों को पूरा करने के लिए किया जाएगा।

दूसरा, @GetMapping एनोटेशन इंगित करता है कि रूट URI पर GET अनुरोध की सेवा के लिए हमारी विधि को कॉल किया जाएगा - /

तीसरा, विधि स्ट्रिंग "इंडेक्स" लौटाती है । यह प्रतिक्रिया के रूप में 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 नहीं है। क्लाइंट को इसकी सामग्री देने से पहले, इसे थाइमेलीफ फ्रेमवर्क द्वारा सर्वर पर संशोधित किया जाएगा । इस फ़ाइल में विशेष टैग एम्बेड किए गए हैं, जो थाइमेलीफ़ लाइब्रेरी को पृष्ठ की सामग्री को संसाधित करने और संशोधित करने की अनुमति देते हैं।

लाल रंग के टैग वे टैग हैं जिन्हें थाइमेलीफ लाइब्रेरी द्वारा संसाधित किया जाएगा, हरे वाले बूटस्ट्रैप सीएसएस लाइब्रेरी की शैलियाँ हैं।

चरण पाँच। Pom.xml में प्लगइन सेट करें:

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

मैंने अपनी ताकत को कुछ ज्यादा ही आंक लिया। एक साधारण उदाहरण को पूरी तरह से पार्स करने में काफी समय लगता है। लेकिन आप प्रोजेक्ट का पूरा कोड GitHub से डाउनलोड कर सकते हैं और इसे स्वयं समझने की कोशिश कर सकते हैं। वैसे, आपके काम का 80% समय आप बस यही करेंगे :)

आप गिटहब में लिंक से पूरा कोड डाउनलोड कर सकते हैं ।