1

ルート コンテキストを提供するサーブレットを使用するために、jetty コンテキストを (プログラムで) 構成しようとしています。

コンテキスト パスには「/」を設定し、サーブレット マッピングには「/*」を設定します。これはまさに私が望んでいた方法で動作しますが、Jetty は「/」で終わるコンテキスト パスについて文句 (警告) を出しています。コンテキスト パスを "" (空の文字列) に設定すると、空の文字列に関する警告が表示されます。

この問題に関するJetty のドキュメント セクションには、次のように記載されています。


Java Servlet 仕様 2.5 では空のコンテキスト パス文字列が推奨されておらず、Java Servlet 仕様 3.0 では実質的に禁止されていることに注意してください。

Jetty ソースの一部は次のとおりです。

public void setContextPath(String contextPath)
    {
    if (contextPath == null)
        throw new IllegalArgumentException("null contextPath");

    if (contextPath.endsWith("/*"))
    {
        LOG.warn(this+" contextPath ends with /*");
        contextPath=contextPath.substring(0,contextPath.length()-2);
    }
    else if (contextPath.endsWith("/"))
    {
        LOG.warn(this+" contextPath ends with /");
        contextPath=contextPath.substring(0,contextPath.length()-1);
    }

    if (contextPath.length()==0)
    {
        LOG.warn("Empty contextPath");
        contextPath="/";
    }

    _contextPath = contextPath;

    if (getServer() != null && (getServer().isStarting() || getServer().isStarted()))
    {
        Handler[] contextCollections = getServer().getChildHandlersByClass(ContextHandlerCollection.class);
        for (int h = 0; contextCollections != null && h < contextCollections.length; h++)
            ((ContextHandlerCollection)contextCollections[h]).mapContexts();
    }
}

問題は、コンテキストのルートにマップするためにどのコンテキスト パスを設定する必要があるかということです。現在、すべて正常に動作していますが、仕様または Jetty 警告によってコンテキスト パスの設定が禁止されているため、別のものが必要だと思います。

4

2 に答える 2

2

ドキュメントはそれを言う

コンテキスト パスは、着信要求が渡されるコンテキストを選択するために使用される URL パスのプレフィックスです。通常、Java サーブレット サーバーの URL の形式は http://hostname.com/contextPath/servletPath/pathInfoで、各パス要素は 0 個以上の区切り要素にすることができます。コンテキスト パスがない場合、コンテキストはルート コンテキストと呼ばれます。ルート コンテキストは「/」として設定する必要がありますが、サーブレット API の getContextPath() メソッドによって空の文字列として報告されます。

したがって、 「/」を使用しても問題ないと思います。

http://www.eclipse.org/jetty/documentation/current/configuring-contexts.html

于 2013-11-04T13:29:34.243 に答える