যুদ্ধ এবং জার ফাইলের মধ্যে পার্থক্য

আসলে , একটি জার লাইব্রেরি হল একটি জিপ সংরক্ষণাগার, যা সরাসরি এর নাম থেকে অনুসরণ করে: Java Archive । প্রায়শই এটিতে মাত্র চারটি জিনিস থাকে:

  • সংকলিত ক্লাস;
  • সম্পদ: বৈশিষ্ট্য ফাইল এবং মত;
  • ম্যানিফেস্ট MANIFEST.MF;
  • অন্যান্য জার লাইব্রেরি (বিরল)।

এই জাতীয় সংরক্ষণাগারের সাধারণ কাঠামোটি এইরকম দেখায়:

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

এখন একটি সাধারণ যুদ্ধ ফাইল তাকান. যাইহোক, যুদ্ধ শব্দটি যুদ্ধ থেকে নয়, তবে W eb Ar chive থেকে । যুদ্ধ ফাইলের গঠন সাধারণত আরো জটিল হয়। প্রায়শই এটি দুটি অংশ নিয়ে গঠিত:

  • জাভা অংশ
    • সংকলিত ক্লাস
    • জাভা ক্লাসের জন্য সংস্থান: বৈশিষ্ট্য ফাইল এবং এর মতো
    • অন্যান্য জার লাইব্রেরি (প্রায়ই)
    • ম্যানিফেস্ট MANIFEST.MF
  • ওয়েব অংশ
    • web-xml - ওয়েব পরিষেবা স্থাপনার বর্ণনাকারী
    • jsp servlets
    • স্ট্যাটিক ওয়েব রিসোর্স: 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 ট্যাগ আপনাকে সেই ডিরেক্টরিটিকে পুনরায় সংজ্ঞায়িত করতে দেয় যেখানে আপনার যুদ্ধ ফাইলটি যুদ্ধ: বিস্ফোরিত মোডে তৈরি করার সময় আনপ্যাক করা হবে।

আপনি এর অফিসিয়াল পৃষ্ঠা থেকে অন্যান্য প্লাগইন সেটিংস সম্পর্কে জানতে পারেন ।

স্প্রিংবুটের উপর ভিত্তি করে একটি ওয়েব অ্যাপ্লিকেশন তৈরি করা

ওয়েল, আমি কিছু বাস্তব সমাবেশ উদাহরণ disassemble করতে চাই. আসুন তুচ্ছ না হয়ে স্প্রিংবুটের উপর ভিত্তি করে একটি উদাহরণ অ্যাপ্লিকেশন ব্যবহার করে এটি বিবেচনা করি।

প্রথম ধাপ. 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টি জিনিস বর্ণনা করা হয়েছে। প্রথমে, @কন্ট্রোলার টীকা স্প্রিংবুট ফ্রেমওয়ার্ককে বলে যে এই ক্লাসটি ইনকামিং ওয়েব অনুরোধগুলি পরিবেশন করতে ব্যবহার করা হবে।

দ্বিতীয়ত, @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 নয়। এর বিষয়বস্তু ক্লায়েন্টকে দেওয়ার আগে, এটি থাইমেলিফ ফ্রেমওয়ার্ক দ্বারা সার্ভারে সংশোধন করা হবে । এই ফাইলটিতে বিশেষ ট্যাগগুলি এম্বেড করা হয়েছে, যা Thymeleaf লাইব্রেরিকে পৃষ্ঠার বিষয়বস্তু প্রক্রিয়া ও পরিবর্তন করার অনুমতি দেয়।

লাল রঙের ট্যাগগুলি হল সেই ট্যাগগুলি যা Thymeleaf লাইব্রেরি দ্বারা প্রক্রিয়া করা হবে, সবুজ রঙগুলি হল বুটস্ট্র্যাপ CSS লাইব্রেরির শৈলী৷

ধাপ পাঁচ. pom.xml এ প্লাগইন সেট করুন:

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

আমি আমার শক্তি একটু overestimated. একটি সাধারণ উদাহরণ সম্পূর্ণভাবে পার্স করতে অনেক সময় লাগে। কিন্তু আপনি GitHub থেকে প্রকল্পের সম্পূর্ণ কোড ডাউনলোড করতে পারেন এবং এটি নিজে বোঝার চেষ্টা করুন। যাইহোক, আপনার কাজের সময়ের 80% আপনি এটিই করবেন :)

আপনি GitHub লিঙ্ক থেকে সম্পূর্ণ কোড ডাউনলোড করতে পারেন ।