war ファイルと jar ファイルの違い
実際、 jar ライブラリは単なる zip アーカイブであり、その名前はJava Archiveに直接続きます。ほとんどの場合、それに含まれるのは次の 4 つだけです。
- コンパイルされたクラス。
- リソース: プロパティ ファイルなど。
- マニフェストMANIFEST.MF;
- 他の jar ライブラリ (まれ)。
このようなアーカイブの一般的な構造は次のようになります。
META-INF/
MANIFEST.MF
com/
codegym/
MyApplication.class
application.properties
次に、典型的な war ファイルを見てみましょう。ちなみに戦争はwarではなくWeb Archiveから来ています。war ファイルの構造は通常、より複雑です。ほとんどの場合、これは 2 つの部分で構成されます。
- Java部分
- コンパイルされたクラス
- Java クラスのリソース: プロパティ ファイルなど
- 他の jar ライブラリ (多くの場合)
- マニフェストMANIFEST.MF
- Web パーツ
- web-xml - Web サービス デプロイメント記述子
- JSPサーブレット
- 静的 Web リソース: 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 ファイルは Java マシンだけで実行できますが、war ファイルを実行するには、Web サーバーにアップロードする必要があります。それは単独では始まりません。
maven-war-plugin を使用した war ファイルプラグイン
単純な Web プロジェクトがあると想像してみましょう。プロジェクトにそのようなファイル構造が与えられたとして、それをどのように組み立てればよいでしょうか?
|-- 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タグを使用して、プロジェクトがデプロイされるディレクトリを再定義します。これから、私が話していることについて詳しくお話します。
プラグインは 2 つのビルド モード (2 種類の目標) に設定できます。
- 戦争:戦争
- 戦争:爆発した
最初のケースでは、結果の war ファイルは単純にターゲットフォルダーに配置され、<artifactId>-<version>.warという名前が付けられます。
ただし、プラグインに「要求」して、war ファイルの内容が内部の Web サーバーによって解凍される状態で最終フォルダーに配置されるようにすることができます。このために、ゴールwar:explodedが使用されます。
2 番目のアプローチは、Intellij IDEA からプロジェクトを直接実行またはデバッグする場合によく使用されます。
ちなみに、上の例のwebappDirectoryタグを使用すると、war:exploded モードでビルドするときに war ファイルが解凍されるディレクトリを再定義できます。
他のプラグイン設定については、公式ページから学ぶことができます。
SpringBoot に基づいた Web アプリケーションの構築
さて、実際のアセンブリ例をいくつか分解してみたいと思います。些細なことではなく、SpringBoot に基づくサンプル アプリケーションを使用してこれを検討してみましょう。
第一歩。IDEA を使用して空の Maven Web プロジェクトを作成します。
ステップ2。Spring の依存関係を 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>
ステップ 3。クラス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 アノテーションは、このクラスが受信 Web リクエストを処理するために使用されることを SpringBoot フレームワークに伝えます。
2 番目の@GetMapping アノテーションは、ルート URI で GET リクエストを処理するためにメソッドが呼び出されることを示します - /
3 番目に、メソッドは文字列"index"を返します。これにより、SpringBoot フレームワークに、 index.htmlファイルの内容を応答として返すように指示します。
ステップ4。次の内容を含む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 ライブラリのスタイルです。
ステップ5。pom.xml でプラグインを設定します。
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
</plugin>
ちょっと自分の力を過大評価してしまいました。単純な例を完全に解析するにはかなりの時間がかかります。ただし、GitHub からプロジェクトの完全なコードをダウンロードして、自分で理解してみることはできます。ちなみに、作業時間の 80% はこれに費やすことになります :)
GitHub のリンクから完全なコードをダウンロードできます。
GO TO FULL VERSION