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

JettyでのWebアプリケーションの展開

1. 概要

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

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

2. プロジェクトのセットアップ

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

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

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

mvn archetype:generate -DgroupId=com.example -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. 桟橋の構造

Context path。 サーバーのアドレスに関連する場所を指し、Webアプリケーションの名前を表します。

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

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

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

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

Jetty Webサーバーは、ファイルシステムの任意の場所にあるdeploy a web archiveに、そのコンテキストファイルを作成する方法を提供します。

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

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




    /jetty
    absolute/path/to/jetty-app.war

This context file must have the same name as our WAR、XMLファイル拡張子付き。 contextPath属性を/jettyに設定していることに注意してください。 これは、URLhttp://localhost:8080/jettyからWebアプリにアクセスすることを意味します。

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

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

6.1. デフォルトのデプロイメント

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


    org.eclipse.jetty
    jetty-maven-plugin
    9.3.11.v20160721

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

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

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

mvn jetty:run

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

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

6.2. ContextPathの変更

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

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


    org.eclipse.jetty
    jetty-maven-plugin
    9.3.11.v20160721
    
        
            /jetty
        
    

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

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

6.3. ポートを変更する

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

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


    
        /jetty
    
    
        8888
    

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

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

7. JettyRunnerを使用した展開

jetty Mavenプラグインと同様に、jetty-runnerはWebアプリを迅速かつ簡単に展開および実行する方法を提供します。 jetty-runnerを使用すると、jettyサーバーの個別のインスタンスをインストールして実行する必要もありません。

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

Webアプリの迅速な展開と実行でjetty-runnerを使用するには、この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. CargoMavenプラグインを使用してデプロイする

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

8.1. 貨物展開のセットアップ

このセクションでは、use Cargo’s Maven plugin to deploy a WAR to Jettyの実行方法を確認します。この場合、WARをJetty9.xインスタンスにデプロイします。

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

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

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

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




    cargo-deploy
    
        index.jsp
    

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

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


    org.codehaus.cargo

8.2. ローカル展開

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

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


    
        
            org.codehaus.cargo
            cargo-maven2-plugin
            1.5.0
            
                
                    jetty9x
                    installed
                    Insert absolute path to jetty 9 installation
                
                
                    existing
                    Insert absolute path to jetty 9 installation
                
            
       
    

explicitly define the packaging as a WARがないと、ビルドが失敗することに注意してください。 プラグインセクションで、cargo maven2プラグインを追加します。

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

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

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

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

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 remote deployerWebアプリケーションを使用します。

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

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

このリモートデプロイヤーはhereで見つけることができます。 toolsセクションに移動し、cargo-jetty-7-and-onwards-deployerWARをダウンロードします。

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

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

admin:password,manager

adminは、クライアントが保護されたアプリにアクセスできるユーザー名、passwordはパスワード、managerは、アクセスが許可される前にクライアントが持つ必要のある役割です。

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

解凍後、WEB-INF/web.xmlに移動し、Uncomment in order to activate securityコメントを使用してXMLコードのコメントを解除します。 または、次のコードをそこに配置します。


    
        Jetty Remote Deployer
        /*
    
    
        manager
    



    BASIC
    Test Realm

デプロイヤーのデプロイ

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

展開中は、deployment descriptor fileを使用して、securityHandlerを作成し、それにloginServiceを渡すことができるようにするのが最善です。 すべての保護されたアプリケーションにはログインサービスが必要です。そうでない場合、jettyはそれらのデプロイに失敗します。

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




    /deployer
    absolute/path/to/cargo-jetty-deployer.war
    
        
            
                Test Realm
                /etc/realm.properties
            
        
    

リモート桟橋サーバーを起動し、すべてがうまくいけば、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を変更しましょう。


    
        jetty9x
        remote
    
    
        runtime
        
      127.0.0.1
            8080
            admin
            password
        
    

今回は、コンテナタイプをinstalledからremoteに変更し、構成タイプをexistingからruntimeに変更します。 最後に、ホスト名、ポート、および認証プロパティを構成に追加します。

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

mvn clean

インストールしてください:

mvn install

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

mvn cargo:deploy

それでおしまい。

9. Eclipseからのデプロイ

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

9.1. Eclipseへの桟橋の埋め込み

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

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

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

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

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

image

 

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

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

Webアプリケーションを組み込みJettyインスタンスにデプロイするには、ワークスペースに存在する必要があります。

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

image

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

Exploded Archive(development mode)our changes in the application will be synced live without having to redeployを選択すると、Projectコンボボックスの下にDeploy Typeセクションがあります。これは非常に効率的であるため、開発中の最良のオプションです。

image

 

Packaged Archive(production mode)を選択すると、変更を加えてブラウザに表示するたびに再デプロイする必要があります。 これは本番環境でのみ最適ですが、Eclipseでも同様に簡単です。

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

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

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

実稼働モードで展開し、New DeploymentダイアログボックスでDeploy Locationに注目し、そこからWARを選択することで、この手順をバイパスできます。

展開中に、組み込みサーバーを選択する代わりに、組み込みサーバーのリストの横にあるserversビューから<Externally Launched>オプションを選択できます。 外部Jettyインストールの$JETTY_HOME /webappsディレクトリに移動します。

10. IntelliJIDEAからのデプロイ

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に設定し、必要に応じてポートを変更します。

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

10.2. リモート構成

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

11. 結論

この記事では、Jetty WebサーバーにWARファイルをデプロイするさまざまな方法を幅広く取り上げました。