web-dev-qa-db-ja.com

Jettyをサーブレットコンテナとして埋め込む

私はTomcatを使用してJavaサーブレットを提供していますが、それは私にとってはちょっとしたことです。サーブレットリクエストのみ、静的コンテンツ、JSPなどを提供する必要はありません。そこで探していました。アプリケーションに埋め込むことができるサーブレットコンテナ。Jettyを削除してサーブレットコンテナとして単独で使用すると、よりスケーラブルになり、メモリフットプリントを小さくすることができます。[Jettyの「Webサーバー」などは必要ありません。パーツ]。それで、いくつか質問がありますが、

  1. サーブレットリクエストのみを処理するために、アプリケーションコードにJettyを埋め込むにはどうすればよいですか?
  2. アプリケーションコードにJettyコードを埋め込んだ場合、Jettyバージョンを簡単にアップグレードできますか?
  3. Jettyのサーブレットコンテナをアプリに埋め込む必要がある場合は、ここでJettyコードを取得しました。これは、ソースから使用する必要があります http://git.Eclipse.org/c/jetty/org.Eclipse。 jetty.project.git/snapshot/jetty-9.0.3.v20130506.tar.bz2 、jetty-9.0.3.v20130506/jetty-servletまたはjetty-9.0.3.v20130506/jetty-servlets

アプリケーションでAPIリクエストを提供するつもりであり、主な制約としてパフォーマンスとスケーラビリティを探しています。そしてもちろん、サーブレット3.0のサポート。

あなたが探しているのは、組み込みシナリオでJettyを実行することです。

目標を達成するために必要なさまざまな要素を結び付ける方法を示す、利用可能な例がたくさんあります。

桟橋のソースツリーに埋め込まれた例 を確認してください。

ちなみに、jettyスタンドアロンは実際にはいくつかのスタートアップとクラスパス関連のブートストラップが埋め込まれたjettyです。これは同じコードであり、基本的に同じ方法で組み立てられます。

サーブレット3.0が必要だと述べたので、JSPには関心がないので、これはセットアップがかなり簡単です。 (JSPはセットアップが難しいですが、可能です)。

サーブレット3.0固有の埋め込みについては、githubでホストされている完全なサンプルプロジェクトがあります。

https://github.com/jetty-project/embedded-servlet-3.

つまり、次の初期化コードがあります。

package com.company.foo;

import org.Eclipse.jetty.annotations.AnnotationConfiguration;
import org.Eclipse.jetty.plus.webapp.EnvConfiguration;
import org.Eclipse.jetty.plus.webapp.PlusConfiguration;
import org.Eclipse.jetty.server.Server;
import org.Eclipse.jetty.webapp.Configuration;
import org.Eclipse.jetty.webapp.FragmentConfiguration;
import org.Eclipse.jetty.webapp.MetaInfConfiguration;
import org.Eclipse.jetty.webapp.TagLibConfiguration;
import org.Eclipse.jetty.webapp.WebAppContext;
import org.Eclipse.jetty.webapp.WebInfConfiguration;
import org.Eclipse.jetty.webapp.WebXmlConfiguration;

public class EmbedMe {
    public static void main(String[] args) throws Exception {
        int port = 8080;
        Server server = new Server(port);

        String wardir = "target/sample-webapp-1-SNAPSHOT";

        WebAppContext context = new WebAppContext();
        // This can be your own project's jar file, but the contents should
        // conform to the WAR layout.
        context.setResourceBase(wardir);
        // A WEB-INF/web.xml is required for Servlet 3.0
        context.setDescriptor(wardir + "WEB-INF/web.xml");
        // Initialize the various configurations required to auto-wire up
        // the Servlet 3.0 annotations, descriptors, and fragments
        context.setConfigurations(new Configuration[] {
                            new AnnotationConfiguration(), 
                            new WebXmlConfiguration(),
                            new WebInfConfiguration(), 
                            new TagLibConfiguration(),
                            new PlusConfiguration(), 
                            new MetaInfConfiguration(),
                            new FragmentConfiguration(), 
                            new EnvConfiguration() });

        // Specify the context path that you want this webapp to show up as
        context.setContextPath("/");
        // Tell the classloader to use the "server" classpath over the
        // webapp classpath. (this is so that jars and libs in your
        // server classpath are used, requiring no WEB-INF/lib 
        // directory to exist)
        context.setParentLoaderPriority(true);
        // Add this webapp to the server
        server.setHandler(context);
        // Start the server thread
        server.start();
        // Wait for the server thread to stop (optional)
        server.join();
    }
}
16
Joakim Erdfelt