युद्ध आणि किलकिले फाइल्समधील फरक

खरं तर , जार लायब्ररी हे फक्त एक झिप संग्रहण आहे, जे थेट त्याच्या नावावरून येते: Java Archive . बहुतेकदा त्यात फक्त चार गोष्टी असतात:

  • संकलित वर्ग;
  • संसाधने: गुणधर्म फाइल्स आणि सारखे;
  • मॅनिफेस्ट MANIFEST.MF;
  • इतर जार लायब्ररी (दुर्मिळ).

अशा संग्रहणाची विशिष्ट रचना अशी दिसते:

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

आता एक टिपिकल वॉर फाईल पाहू. तसे, युद्ध हे युद्ध या शब्दापासून नाही तर W eb Ar chive या शब्दापासून आहे . युद्ध फाइलची रचना सहसा अधिक जटिल असते. बहुतेकदा त्यात दोन भाग असतात:

  • जावा भाग
    • संकलित वर्ग
    • जावा वर्गांसाठी संसाधने: गुणधर्म फाइल्स आणि यासारखे
    • इतर जार लायब्ररी (अनेकदा)
    • मॅनिफेस्ट 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 फाईल फक्त जावा मशीनद्वारे चालवता येते, परंतु युद्ध फाइल चालविण्यासाठी, ती वेब सर्व्हरवर अपलोड करणे आवश्यक आहे. ते स्वतःपासून सुरू होत नाही.

मावेन-वॉर-प्लगइनसह युद्ध फाइल प्लगइन

चला कल्पना करूया की आपल्याकडे एक साधा वेब प्रोजेक्ट आहे. प्रोजेक्टला अशी फाईल स्ट्रक्चर देऊ द्या, ती कशी जमवायची?

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

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

प्लगइन दोन बिल्ड मोडवर सेट केले जाऊ शकते (दोन प्रकारचे ध्येय):

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

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

परंतु तुम्ही प्लगइनला "विचारू" शकता जेणेकरुन वॉर फाइलची सामग्री त्या राज्यातील अंतिम फोल्डरमध्ये ठेवली जाईल ज्यामध्ये ती वेब सर्व्हरद्वारे अनपॅक केली जाईल. यासाठी, ध्येय युद्ध:स्फोट वापरले जाते .

जर तुम्ही थेट Intellij IDEA वरून एखादा प्रोजेक्ट चालवत असाल किंवा डीबग करत असाल तर दुसरी पद्धत सहसा वापरली जाते.

तसे, वरील उदाहरणातील webappDirectory टॅग तुम्हाला war:exploded मोडमध्ये तयार करताना तुमची वॉर फाइल अनपॅक केली जाईल अशी निर्देशिका पुन्हा परिभाषित करण्याची परवानगी देतो.

तुम्ही त्याच्या अधिकृत पृष्ठावरून इतर प्लगइन सेटिंग्जबद्दल जाणून घेऊ शकता .

SpringBoot वर आधारित वेब अनुप्रयोग तयार करणे

बरं, मी काही वास्तविक असेंब्लीचे उदाहरण वेगळे करू इच्छितो. चला क्षुल्लक होऊ नका आणि SpringBoot वर आधारित उदाहरण वापरून याचा विचार करूया.

पहिली पायरी. IDEA सह रिक्त Maven वेब प्रकल्प तयार करा.

पायरी दोन. त्याच्या 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 विनंती सर्व्ह करण्यासाठी कॉल केले जाईल - /

तिसरी, पद्धत "इंडेक्स" स्ट्रिंग परत करते . हे SpringBoot फ्रेमवर्कला 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 लायब्ररीद्वारे प्रक्रिया केली जाईल, हिरवे हे बूटस्ट्रॅप CSS लायब्ररीच्या शैली आहेत.

पायरी पाच. pom.xml मध्ये प्लगइन सेट करा:

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

मी माझ्या ताकदीचा थोडा जास्त अंदाज घेतला. साध्या उदाहरणाचे पूर्ण विश्लेषण करण्यासाठी बराच वेळ लागतो. परंतु तुम्ही GitHub वरून प्रकल्पाचा संपूर्ण कोड डाउनलोड करू शकता आणि ते स्वतः समजून घेण्याचा प्रयत्न करू शकता. तसे, तुमच्या कामाच्या वेळेपैकी 80% तुम्ही तेच कराल :)

तुम्ही GitHub मधील लिंकवरून पूर्ण कोड डाउनलोड करू शकता .