1. 概要

この記事では、Jetty Webサーバーの概要を簡単に説明してから、WARファイルをデプロイするためのさまざまなアプローチについて説明します。

Jetty は、オープンソースのJavaHTTPWebサーバーおよびサーブレットコンテナです。 Jettyは、Javaエコシステムのマシンツーマシン通信でより一般的に使用されます。

2. プロジェクトの設定

Jettyの最新バージョンは、このリンクをたどることでいつでもダウンロードできます。 Mavenを使用してコマンドラインから非常に基本的なJavaWebアプリケーションを作成します。これは、例で使用します。

この記事では、現在最新バージョンのJetty9.xを使用しています。

コンソールに移動し、選択した場所に移動して、次のコマンドを実行してみましょう。

mvn archetype:generate -DgroupId=com.baeldung -DartifactId=jetty-app 
  -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

このコマンドは、現在の場所にある新しいjetty-appフォルダー内に完全なJavaWebアプリを作成します。 これは、Mavenを使用してJavaアプリケーションを作成する多くの方法の1つにすぎず、私たちの目的に適しています。

WARファイルを処理するので、プロジェクトルートに移動してビルドしましょう。

cd jetty-app

Mavenを使用した構築:

mvn package

次に、jetty-app.warが場所jetty-app/ target /jetty-app.warに作成されます。

3. 突堤構造

コンテキストパス。 サーバーのアドレスを基準にして、Webアプリケーションの名前を表す場所を参照します。

たとえば、Webアプリケーションが $ JETTY_HOME \ webapps \ myapp ディレクトリに配置されている場合、URL http:// localhost /myappとそのコンテキストパスによってアクセスされます。 /myappになります。

WAR。 Webアプリケーションディレクトリ階層をZIP形式でパッケージ化したファイルの拡張子であり、WebArchiveの略です。 Java Webアプリケーションは通常、デプロイメント用のWARファイルとしてパッケージ化されています。 WARファイルは、コマンドラインまたはEclipseなどのIDEを使用して作成できます。

4. WARをコピーして展開する

WebアプリケーションをJettyサーバーにデプロイする最も簡単な方法は、おそらくWARファイルを $ JETTY_HOME /webappsディレクトリにコピーすることです。

コピー後、 $ JETTY_HOME に移動し、次のコマンドを実行してサーバーを起動できます。

java -jar start.jar

Jettyは、起動時に $ JETTY_HOME / webapps ディレクトリをスキャンして、Webアプリケーションをデプロイします。 新しいアプリは、 /jetty-appコンテキストでデプロイされます。

ブラウザからURLhttp:// localhost:8080 / jetty-app をロードすると、 Hello world!が画面に印刷された状態で実行されているアプリが表示されます。

5. コンテキストファイルを使用したデプロイ

Jetty Webサーバーは、コンテキストファイルを作成することにより、ファイルシステムの任意の場所にあるWebアーカイブデプロイする方法を提供します。

このように、WARファイルがデスクトップにある場合、またはMavenがパッケージを配置する jetty-app / target に保持することを選択した場合でも、$内にコンテキストファイルを作成できます。 JETTY_HOME /webapps

webapps から削除して、デプロイしたばかりのjetty-app.warをアンデプロイしましょう。 次に、次のコードを使用して jetty-app.xml を作成し、webapps内に配置します。

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" 
  "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <Set name="contextPath">/jetty</Set>
    <Set name="war">absolute/path/to/jetty-app.war</Set>
</Configure>

このコンテキストファイルは、WAR と同じ名前で、XMLファイル拡張子が付いている必要があります。 contextPath属性を/jettyに設定していることに注意してください。 これは、URL http:// localhost:8080 /jettyからWebアプリにアクセスすることを意味します。

一部のアプリ名はこの目的には便利でない場合があるため、コンテキストパスをカスタマイズするこの機能は、JettyにWARをデプロイするコンテキストファイルアプローチの大きな利点の1つです。

6. JettyMavenプラグインを使用したデプロイ

6.1. デフォルトの展開

jetty Mavenプラグインは、JavaWebアプリケーションを構築しながら迅速なテストと反復を行うのに役立ちます。 それを使用してアプリケーションをデプロイおよび実行できるようにするには、pom.xmlにプラグインを追加するだけです。

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.3.11.v20160721</version>
</plugin>

最新バージョンは、このMavenリンクをたどることで見つけることができます。

次の手順を実行する前に、ポート8080で実行されているJettyのインスタンスが停止していることを確認する必要があります。

プラグインを追加した後にアプリをデプロイするには、 pom.xml が配置されているルートに移動し、次のコマンドを実行します。

mvn jetty:run

このコマンドは新しいjettyインスタンスを作成し、プラグインはそれにアプリをデプロイします。 http:// localhost:8080。をロードすることでアクセスできます

jetty Mavenプラグインは、変更がないかWebプロジェクトを継続的にスキャンし、再デプロイを続けます。

6.2. ContextPathの変更

前のサブセクションから、アプリは/コンテキストでデプロイされました。 ただし、以前のように / jetty などの特定のコンテキストパスでデプロイする場合は、プラグインを別の方法で構成する必要があります。

プラグイン宣言を次のXMLに変更します。

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.3.11.v20160721</version>
    <configuration>
        <webApp>
            <contextPath>/jetty</contextPath>
        </webApp>
    </configuration>
</plugin>

展開をさらにカスタマイズするために構成ブロックを追加したことに注目してください。 必要に応じて、このブロック内に配置するいくつかの構成オプションがあります。

これらの変更後、以前と同じようにプラグインを再実行し、 http:// localhost:8080 /jettyからアプリにアクセスできます。

6.3. ポートの変更

直面する可能性のあるシナリオは、使用中のポートの例外です。 実稼働用にポート8080で実行されているjettyインスタンスがあるかもしれませんが、まだ開発段階にあり、Mavenプラグインを使用したデプロイに伴う反復の容易さの恩恵を受けたいと考えています。

このような場合、テストサーバーを別のポートで実行する必要があります。 プラグイン構成を次のXMLに変更してみましょう。

<configuration>
    <webApp>
        <contextPath>/jetty</contextPath>
    </webApp>
    <httpConnector>
        <port>8888</port>
    </httpConnector>
</configuration>

Mavenプラグインを再実行すると、 http:// localhost:8888 /jettyからアプリにアクセスできるようになります。

jetty Mavenプラグインを使用すると、jettyのインスタンスをインストールして実行する必要がないことに注意してください。 むしろ、独自の突堤インスタンスを作成します。

7. JettyRunnerを使用したデプロイ

jetty Mavenプラグインと同様に、jetty-runnerは、Webアプリをデプロイして実行するための高速で簡単な方法を提供します。 jetty-runnerを使用すると、jettyサーバーの個別のインスタンスをインストールして実行する必要もありません。

7.1. 桟橋ランナーのセットアップ

Jetty-runnerをWebアプリの迅速な展開と実行に使用するには、このMavenリンクをたどって最新バージョンをダウンロードできます。

jetty-runnerを使用すると、ダウンロードしたjarを好きな場所に配置するだけで、Webアーカイブへのファイルシステムパスを準備できます。

コマンドラインから構成パラメーターを渡すだけでなく、さまざまなコンテキストで多数のアプリケーションをデプロイし、1つのコマンドでさまざまなポートにバインドできます。

jetty-runnerjarをjetty-appディレクトリと同じ階層に配置しました。 これは、Webアプリケーションを含むディレクトリです。

7.2. 基本的な展開

jetty-runnerを使用してWARを展開しましょう。

java -jar jetty-runner-9.4.0.M1.jar jetty-app/target/jetty-app.war

このコマンドは、Mavenプラグインの場合と同様に、jettyインスタンスを作成し、提供されたWARをそれにデプロイします。 WARパスは、絶対パスまたは相対パスにすることができます。

このアプリケーションは、 http:// localhost:8080を使用してロードできます。

7.3. コンテキストパスを使用してデプロイ

以前のように/jetty コンテキストでデプロイするには:

java -jar jetty-runner-9.4.0.M1.jar --path /jetty jetty-app/target/jetty-app.war

http:// localhost:8080 /jettyからアクセスできます。

7.4. 特定のポートにデプロイ

特定のポート番号にデプロイするには:

java -jar jetty-runner-9.4.0.M1.jar --port 9090 jetty-app/target/jetty-app.war

http:// localhost:9090からアクセスできます。

7.5. 複数のWARを展開する

同じコマンドで複数のWARを展開するには、 –path引数を使用してそれぞれを一意にします。

java -jar jetty-runner --path /one one.war --path /two two.war

次に、 http:// localhost:8080 /one経由でone.warにアクセスし、 http:// localhost:8080経由でtwo.warにアクセスします。 /two

8. CargoMavenプラグインを使用してデプロイする

Cargo は、さまざまなタイプのアプリケーションコンテナを標準的な方法で操作できるようにする汎用ライブラリです。

8.1. 貨物配備のセットアップ

このセクションでは、CargoのMavenプラグインを使用してWARをJetty にデプロイする方法を説明します。この場合、WARをJetty9.xインスタンスにデプロイします。

プロセス全体をしっかりと把握するために、コマンドラインから新しいJavaWebアプリケーションを作成することから始めます。

mvn archetype:generate -DgroupId=com.baeldung -DartifactId=cargo-deploy 
  -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

これにより、cargo-deployディレクトリに完全なJavaWebアプリケーションが作成されます。 このアプリケーションをそのままビルド、デプロイ、ロードすると、ブラウザーに Hello World!が出力されます。

Webアプリケーションにはサーブレットが含まれていないため、web.xmlファイルは非常に基本的なものになります。 したがって、新しく作成したプロジェクトの WEB-INF フォルダーに移動し、次のコンテンツでまだ自動作成されていない場合はweb.xmlを作成します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns="http://Java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://Java.sun.com/xml/ns/javaee 
      http://Java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

    <display-name>cargo-deploy</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

完全修飾名を入力せずにMavenがカーゴのコマンドを認識できるようにするには、MavenのプラグイングループにカーゴMavenプラグインを追加する必要があります。 settings.xml。

ルート 要素の直接の子として、次を追加します。

<pluginGroups>
    <pluginGroup>org.codehaus.cargo</pluginGroup>
</pluginGroups>

8.2. ローカル展開

このサブセクションでは、 pom.xml を編集して、新しいデプロイメント要件に適合させます。

次のようにプラグインを追加します。

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
            <version>1.5.0</version>
            <configuration>
                <container>
                    <containerId>jetty9x</containerId>
                    <type>installed</type>
                    <home>Insert absolute path to jetty 9 installation</home>
                </container>
                <configuration>
                    <type>existing</type>
                    <home>Insert absolute path to jetty 9 installation</home>
                </configuration>
            </configuration>
       </plugin>
    </plugins>
</build>

パッケージをWARとして明示的に定義していることに注意してください。これがないと、ビルドは失敗します。 次に、プラグインセクションで、cargomaven2プラグインを追加します。

執筆時点での最新バージョンは1.5.0です。 ただし、最新バージョンは常にここにあります。 さらに、Jettyコンテナーと既存のJettyインストールを使用していることをMavenに通知する構成セクションを追加します。

コンテナタイプをinstalledに設定することで、マシンにJettyインスタンスがインストールされていることをMavenに通知し、このインストールへの絶対URLを提供します。

構成タイプをexistingに設定することにより、使用している既存のセットアップがあり、それ以上の構成は不要であることをMavenに通知します。

別の方法は、URLを指定して指定されたJettyバージョンをダウンロードしてセットアップするように貨物に指示することです。 ただし、ここではWARデプロイメントに焦点を当てています。

Maven2.xとMaven3.xのどちらを使用していても、cargomaven2プラグインは両方で機能することに注意してください。

これで、次のコマンドを実行してアプリケーションをインストールできます。

mvn install

次のコマンドを実行してデプロイします。

mvn cargo:deploy

MavenおよびJettyコンソールですべてがうまくいけば、 http:// localhost:8080/cargo-deploy。をロードすることでWebアプリケーションを実行できるはずです。

$ JETTY_HOME / webapps フォルダーを確認すると、デプロイメント記述子ファイル、または以前にカーゴによって作成されたcargo-deploy.xmlと呼ばれるコンテキストファイルが見つかります。

8.3. リモート展開

デフォルトでは、Jettyにはリモート展開の可能性はありません。 このようなサポートをJettyに追加するために、CargoはJettyリモートデプロイヤーWebアプリケーションを使用します。

これが意味するのは、Cargo開発者によって事前に作成されたWebアプリケーションWARをダウンロードし、このWARをターゲットの桟橋コンテナにデプロイする必要があるということです。

カーゴMavenプラグインを使用してこのリモートサーバーにデプロイするたびに、デプロイ用のWARを使用してリモートサーバー上のデプロイヤーアプリケーションにHTTPリクエストを送信します。

このリモートデプロイヤはここにあります。 ツールセクションに移動し、 cargo-jetty-7-and-onwards-deployerWARをダウンロードします。

セキュリティに関する考慮事項

認証の目的で、これが機能する前に、桟橋にセキュリティレルムを設定する必要があります。 リモートjettyサーバーの$JETTY_HOME /etcディレクトリにrealm.propertiesというファイルを作成します。 ファイルの内容は次のとおりです。

admin:password,manager

admin は、クライアントがセキュリティで保護されたアプリにアクセスするためのユーザー名です。 password はパスワードであり、 manager は、クライアントが付与される前に持つ必要のある役割です。アクセス。

また、デプロイヤーアプリケーションでセキュリティ要件を宣言する必要があります。 桟橋のダウンロードページからダウンロードしたWARを解凍し、いくつかの変更を加えてWARに戻します。

解凍後、 WEB-INF / web.xml に移動し、セキュリティコメントをアクティブにするために、コメント解除でXMLコードのコメントを解除します。 または、次のコードをそこに配置します。

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Jetty Remote Deployer</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>manager</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Test Realm</realm-name>
</login-config>

デプロイヤのデプロイ

これで、アプリをWARにパックして戻し、リモートサーバー上の任意の場所にコピーできます。 次に、それをJettyにデプロイします。

展開中は、展開記述子ファイルを使用して、 securityHandler を作成し、それにloginServiceを渡すことができます。 保護されたすべてのアプリケーションにはログインサービスが必要です。そうでない場合、jettyはそれらをデプロイできません。

ここで、リモートjettyインスタンスの $ JETTY_HOME / webappsにコンテキストファイルを作成しましょう。コンテキストファイルの命名規則を覚えておいてください。 WARと同じ名前にします。

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" 
  "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <Set name="contextPath">/deployer</Set>
    <Set name="war">absolute/path/to/cargo-jetty-deployer.war</Set>
    <Get name="securityHandler">
        <Set name="loginService">
            <New class="org.eclipse.jetty.security.HashLoginService">
                <Set name="name">Test Realm</Set>
                <Set name="config"><SystemProperty name="jetty.home" 
                   default="."/>/etc/realm.properties</Set>
            </New>
        </Set>
    </Get>
</Configure>

リモート桟橋サーバーを起動し、すべてがうまくいけば、ロードできるはずです http:// localhost:8080/cargo-jetty-deployer。 そうすれば、次のようなものが表示されるはずです。

HTTP ERROR 400

Problem accessing /cargo-jetty-deployer/. Reason:

    Command / is unknown

リモートJettyへのWARの展開

リモートデプロイを行うには、pom.xmlの構成セクションを変更するだけです。 リモートデプロイとは、Jettyをローカルにインストールしていないが、リモートサーバーで実行されているデプロイヤーアプリへのアクセスを認証していることを意味します。

それでは、 pom.xml を変更して、構成セクションが次のようになるようにします。

<configuration>
    <container>
        <containerId>jetty9x</containerId>
        <type>remote</type>
    </container>
    <configuration>          
        <type>runtime</type>
        <properties>
      <cargo.hostname>127.0.0.1</cargo.hostname>
            <cargo.servlet.port>8080</cargo.servlet.port>
            <cargo.remote.username>admin</cargo.remote.username>
            <cargo.remote.password>password</cargo.remote.password>
        </properties>
    </configuration>
</configuration>

今回は、コンテナタイプをインストール済みからリモートに変更し、構成タイプを既存からランタイムに変更します。 最後に、ホスト名、ポート、および認証のプロパティを構成に追加します。

プロジェクトをクリーンアップします。

mvn clean

それをインストールします:

mvn install

最後に、それを展開します。

mvn cargo:deploy

それでおしまい。

9. Eclipseからのデプロイ

Eclipseを使用すると、IDEから移動することなく、通常のワークフローにWebプロジェクトの展開を追加するためにサーバーを埋め込むことができます。

9.1. EclipseへのJettyの埋め込み

タスクバーからwindow項目を選択し、ドロップダウンメニューから Preferences を選択することで、JettyインストールをEclipseに埋め込むことができます。

表示されるウィンドウの左側のパネルに、設定項目のツリーグリッドがあります。 次に、Eclipse->サーバーに移動するか、検索バーにサーバーと入力します。

次に、まだ開いていない場合はJettyディレクトリを選択し、ダウンロードしたJettyバージョンを選択します。

パネルの右側に構成ページが表示され、有効化オプションを選択してこのJettyバージョンをアクティブ化し、インストールフォルダーを参照します。

スクリーンショットから、jetty 7.xは、構成したバージョンのjettyに置き換えられます。

 

変更を適用し、次にEclipseのウィンドウからサーバービューを開くと、[ビューの表示]サブメニューが表示され、新しく構成されたサーバーが表示され、アプリケーションを開始、停止、およびデプロイできます。

9.2. EmbeddedJettyへのWebアプリケーションのデプロイ

埋め込まれたJettyインスタンスにWebアプリケーションをデプロイするには、それがワークスペースに存在している必要があります。

ウィンドウからserversビューを開き、->ビューを表示してサーバーを探します。 開いたら、構成したサーバーを右クリックして、表示されるコンテキストメニューから展開の追加を選択します。

表示される新規展開ダイアログボックスから、プロジェクトドロップダウンを開き、Webプロジェクトを選択します。

Exploded Archive(開発モード)を選択すると、Projectコンボボックスの下にDeployType セクションがあり、アプリケーションの変更が同期されます再デプロイせずにライブ、これは非常に効率的であるため、開発中の最良のオプションです。

 

パッケージアーカイブ(本番モード)を選択すると、変更を加えてブラウザに表示するたびに再デプロイする必要があります。 これは本番環境にのみ最適ですが、それでもEclipseを使用すると同様に簡単になります。

9.3. 外部の場所へのWebアプリケーションのデプロイ

通常、デバッグを容易にするために、Eclipseを介してWARをデプロイすることを選択します。 Eclipseの組み込みサーバーで使用されている場所以外の場所にデプロイしたい場合があります。

最も一般的な例は、本番サーバーがオンラインであり、Webアプリケーションを更新する場合です。

この手順をバイパスするには、本番モードで展開し、新しい展開ダイアログボックスの展開場所に注意して、そこからWARを選択します。

展開中に、組み込みサーバーを選択する代わりに、 からのオプションサーバー組み込みサーバーのリストと一緒に表示します。 外部Jettyインストールの$JETTY_HOME / webappsディレクトリに移動します。

10. IntelliJIDEAからのデプロイ

JettyにWebアプリケーションをデプロイするには、Webアプリケーションが存在し、すでにダウンロードおよびインストールされている必要があります。

10.1. ローカル構成

実行メニューを開き、構成の編集オプションをクリックします。

左側のパネルでJettyServer を検索し、そこにない場合はメニューの+記号をクリックし、 Jetty を検索して、Localを選択します。 name フィールドに、 Jetty9を入力します。

構成…ボタンをクリックし、 Jetty Home フィールドで、インストールのホームロケーションに移動して選択します。

必要に応じて、 Startupページをhttp:// localhost:8080 /およびHTTPポート:8080 に設定し、必要に応じてポートを変更します。

展開タブに移動し、+記号をクリックして、サーバーに追加するアーティファクトを選択し、[OK]をクリックします。

10.2. リモート構成

ローカルのJetty構成の場合と同じ手順に従いますが、[サーバー]タブで、インストールのリモートロケーションを入力する必要があります。

11. 結論

この記事では、JettyWebサーバーにWARファイルをデプロイするさまざまな方法について詳しく説明しました。