1概要

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


Jetty

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


2プロジェクト設定

最新バージョンのJettyは、http://www.eclipse.org/jetty/download.html[このリンク]からいつでもダウンロードできます。 Mavenを使用してコマンドラインから非常に基本的なJava Webアプリケーションを作成します。これを例に使用します。

この記事では、現在最新のJetty 9.xを使用しています。

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

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

このコマンドは、現在の場所の新しい

jetty-app

フォルダ内に完全なJava Webアプリケーションを作成します。それは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__になります。

  • 戦争



    ** Webアプリケーションディレクトリ階層をZIP形式でパッケージ化したファイルの拡張子で、Web Archiveの略です。 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__コンテキストでデプロイされます。

ブラウザから


http://localhost:8080/jetty-app


というURLを読み込むと、

Hello world!

で実行されているアプリが画面に表示されます。


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

Jetty Webサーバは、コンテキストファイルを作成することによって、ファイルシステム内の任意の場所にあるWebアーカイブを

デプロイする

方法を提供します。

このようにして、WARファイルがデスクトップ上にある場合、またはMavenがパッケージを配置する

jetty-app/target

に保存することを選択した場合でも、

$ JETTY

HOME/webapps__内にコンテキストファイルを作成するだけで済みます。

先ほどデプロイした

jetty-app.war



webapps

から削除してアンデプロイしましょう。次に、次のコードを使用して

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>

  • このコンテキストファイルは、XMLファイル拡張子を付けて、WAR ** と同じ名前でなければなりません。

    contextPath

    属性を

    /jetty

    に設定しました。これは、Webアプリに


    http://localhost:8080/jetty


    というURLからアクセスすることを意味します。

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


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


6.1. デフォルト展開

Jetty Mavenプラグインを使用すると、Java Webアプリケーションを構築しながら迅速なテストと反復を行うことができます。それを使用してアプリケーションをデプロイして実行できるようにするには、

pom.xml

にプラグインを追加するだけです。

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

最新版はhttp://search.Maven.org/#search%7Cga%7C1%7Ca%3A%22jetty-Maven-plugin%22[このMavenリンク]をたどることで見つけることができます。

次のステップを実行する前に、ポート

8080

で実行中のJettyのインスタンスが停止していることを確認する必要があります。

プラグインを追加した後でアプリをデプロイするには、

pom.xml

があるルートに移動して次のコマンドを実行します。

mvn jetty:run

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

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


6.2.

ContextPath


を変更する

前のサブセクションから、アプリは

/

contextの下にデプロイされました。

しかし、以前のように

/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. Jetty Runnerを使用したデプロイ

Jetty Mavenプラグインと同じように、Jettyランナーは、Webアプリケーションを迅速に展開して実行する方法を提供します。 Jetty-Runnerを使用すると、Jettyサーバーの別のインスタンスをインストールして実行する必要もありません。


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

Webアプリケーションの迅速な展開と実行にJetty-Runnerを使用するには、このhttp://search.Maven.org/#search%7Cga%7C1%7Ca%3A%22jetty-runner%22を参照して最新バージョンをダウンロードできます。[Maven link]

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

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

私のjetty-runner jarを

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


を介して

two.war

にアクセスします。


8 Cargo Mavenプラグインを使用してデプロイする


Cargo

は、さまざまな種類のアプリケーションコンテナを標準的な方法で操作することを可能にする多用途のライブラリです。


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

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

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

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

これにより、

cargo-deploy

ディレクトリに完全なJava Webアプリケーションが作成されます。このアプリケーションをそのまま構築、デプロイ、ロードすると、ブラウザに

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の__settings.xmlのプラグイングループに貨物のMavenプラグインを追加する必要があります。

ルート

<settings> </settings>

要素の直接の子として、これを追加します。

<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 ** として定義していることに注意してください。これがなければ、ビルドは失敗します。プラグインセクションで、次に貨物maven2プラグインを追加します。

これを書いている時点での最新版は

1.5.0

です。ただし、最新バージョンは常にhttps://codehaus-cargo.github.io/cargo/Downloads.html[ここ]にあります。

さらに、私たちがMavenにJettyコンテナと既存のJettyインストールを使用していることを伝える設定セクションを追加しました




コンテナタイプを

installed

に設定することで、マシンにJettyインスタンスがインストールされたことをMavenに伝え、このインストールへの絶対URLを提供します。

設定タイプを

existing

に設定することで、使用している既存の設定があり、それ以上の設定は必要ないことをMavenに伝えます。

別の方法は、URLを指定して指定されたJettyバージョンをダウンロードして設定するように貨物に指示することです。しかし、私たちの焦点は

WARデプロイメント

です。

Maven 2.xとMaven 3.xのどちらを使用している場合でも、貨物maven2プラグインは両方に使用できます。

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

mvn install

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

mvn cargo:deploy

すべてがMavenとJettyのコンソールでうまくいけば、


http://localhost:8080/cargo-deploy

.

をロードすることでWebアプリケーションを実行できるはずです。


$ JETTY

HOME/webapps

フォルダーを確認すると、デプロイメント記述子ファイル、またはcargoによって作成された

cargo-deploy.xml__という名前のコンテキストファイルが見つかります。


8.3. リモート展開

デフォルトでは、Jettyにはリモート展開の可能性はありません。 Jettyにそのようなサポートを追加するために、Cargoは

Jettyリモートデプロイヤ

Webアプリケーションを使用します。

つまり、Cargo開発者によって事前に作成されたWebアプリケーションWARをダウンロードし、このWARをターゲットのJettyコンテナにデプロイする必要があります。

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

このリモートデプロイヤはhttps://codehaus-cargo.github.io/cargo/Downloads.html[ここ]にあります。

tools

セクションに進んで

cargo-jetty-7-and-onwards-deployer

WARをダウンロードしてください。



セキュリティ上の考慮事項

認証を目的として、これが機能するようになる前に、Jettyに

セキュリティレルム

を設定する必要があります。リモートJettyサーバーの

$ JETTY

HOME/etc

ディレクトリーに

realm.properties__というファイルを作成します。ファイルの内容は次のとおりです。

admin:password,manager


admin

はクライアントがセキュアアプリにアクセスするためのユーザー名、password __はパスワード、managerはアクセスを許可される前にクライアントが持たなければならない役割です。

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

解凍後、

WEB-INF/web.xml

に進んで、security

コメントをアクティブにするために

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

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>

リモートのJettyサーバを起動して、すべてうまくいけば、__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>

今回は、コンテナタイプを

installed

から

remote

に、設定タイプを

existing

から

runtime

に変更します。最後に、設定にホスト名、ポート、認証の各プロパティを追加します。

プロジェクトをきれいにする:

mvn clean

それをインストールしてください。

mvn install

最後に、それをデプロイします。

mvn cargo:deploy

それでおしまい。


9 Eclipse

からのデプロイ

Eclipseでは、IDEから離れずに通常のワークフローにWebプロジェクトのデプロイメントを追加するためにサーバーを組み込むことができます。

** 9.1. EclipseへのJettyの埋め込み

タスクバーから

window

項目を選択してからドロップダウンメニューから

preferences

を選択することで、JettyインストールをEclipseに埋め込むことができます。

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

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

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

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

リンク:/uploads/Capture-3.png%20707w[]

変更を適用し、次回Eclipseのウィンドウからサーバービューを開くと、 – >サブメニューが表示され、新しく設定されたサーバーが表示され、そこにアプリケーションを起動、停止、デプロイできます。


9.2. Embedded JettyにWebアプリケーションをデプロイする

Webアプリケーションを埋め込みJettyインスタンスにデプロイするには、それが私たちのワークスペースに存在しなければなりません。

ウィンドウ – > show viewから

servers

ビューを開き、サーバーを探します。

開いたら、設定したサーバを右クリックして、表示されるコンテキストメニューから[

add deployment

]を選択します。

リンク:/uploads/Capture-4-1.png%20853w[]

表示される[

新しい展開

]ダイアログボックスから、[

プロジェクト

]ドロップダウンを開き、Webプロジェクトを選択します。


Exploded Archive(開発モード)

を選択すると、

Project

コンボボックスの下に

Deploy Type

セクションがあります。 。

リンク:/uploads/Capture-5.png%20586w[]

[アーカイブアーカイブ(プロダクションモード)]を選択すると、変更を加えるたびに再デプロイしてブラウザで表示する必要があります。これは本番環境にのみ最適ですが、それでもEclipseでも同様に簡単です。


9.3. Webアプリケーションを外部の場所に配置する

私たちは通常、デバッグを容易にするためにEclipseを通してWARをデプロイすることを選びます。 Eclipseの組み込みサーバー以外の場所にデプロイしたい場合があるかもしれません。

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

  • プロダクションモードでデプロイし、

    New Deployment

    ダイアログボックスの

    Deploy Location

    に注目し、そこからWARを選択することで、この手順を回避できます。

デプロイ中に、組み込みサーバーを選択する代わりに、組み込みサーバーのリストの横にある

servers

ビューから

<外部起動>

オプションを選択できます。外部Jettyインストールの

$ JETTY

HOME

/

webapps__ディレクトリに移動します。


10 IntelliJ IDEAからのデプロイ

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


10.1. ローカル設定


Run

メニューを開き、

Edit Configurations

オプションをクリックします。

左側のパネルで

Jetty Server

が検索されていない場合は、メニューの+記号をクリックし、

Jetty

を検索して

Local

を選択します。

name

フィールドに

Jetty 9

を入力します。


Configure …​

ボタンをクリックし、

Jetty Home

フィールドでインストールのホームロケーションに移動して選択します。

必要に応じて、

Startup

ページを


http://localhost:8080/


および

HTTP port:8080

に設定し、必要に応じてポートを変更します。

[デプロイメント]タブに移動してシンボルをクリックし、サーバーに追加する案件を選択して[OK]をクリックします。


10.2. リモート設定

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


11結論

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