JettyにWebアプリケーションをデプロイする
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ファイルをデプロイするためのさまざまな方法について詳しく説明しました。