9

次の作業コードは、2つのサーブレットを桟橋の埋め込みインスタンスに含めることを示しています。

Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.addServlet(new ServletHolder(new Html()), "/html");
context.addServlet(new ServletHolder(new Iphone()), "/iphone");       
server.setHandler(context);
server.start();
server.join();

URL "/ iphone"を使用する代わりに、サーブレットの注釈でurlpatternsを使用するように、これをどのように変更する必要がありますか。

@WebServlet(urlPatterns={"/json", "/iphone"})
public class Iphone extends HttpServlet {
    ....
}
4

2 に答える 2

7

サーブレットは、WARにパッケージ化されているのではなく、サーバーのクラスパス上にあります。

サーブレット3.0の仕様には次のように記載されています。

WEB-INF/classesWebアプリケーションでは、アノテーションを使用するクラスは、ディレクトリにある場合、またはアプリケーション内にあるjarファイルにパッケージ化されている場合にのみアノテーションが処理 されWEB-INF/libます。

Webアプリケーションデプロイメント記述子には、web-app要素に新しい「<code>metadata-complete」属性が含まれています。「<code>metadata-complete」属性は、Web記述子が完全であるかどうか、またはデプロイメント時にjarファイルのクラスファイルでアノテーションとWebフラグメントを調べる必要があるかどうかを定義します。「<code>metadata-complete」が「true」に設定されている場合、デプロイメントツールは、アプリケーションのクラスファイルとWebフラグメントに存在するサーブレットアノテーションを無視する必要があります。metadata-complete属性が指定されていないか、「false」に設定されている場合、デプロイメントツールは、アプリケーションのクラスファイルでアノテーションを調べ、Webフラグメントをスキャンする必要があります。

WARのパッケージ化と、などのより多くの機能を備えたコンテキストの使用を検討する必要がある場合がありますWebAppContext

または、独自の注釈スキャンを試すこともできます。フォームの何か:

void registerServlets(ServletContextHandler context,
                              Class<? extends HttpServlet> type)
          throws InstantiationException, IllegalAccessException,
                 InvocationTargetException, NoSuchMethodException {
    WebServlet info = type.getAnnotation(WebServlet.class);
    for (String pattern : info.urlPatterns()) {
        HttpServlet servlet = type.getConstructor().newInstance();
        context.addServlet(new ServletHolder(servlet), pattern);
    }
}
于 2012-12-19T15:16:41.210 に答える
0

ここで私の答えを参照してください:EmbeddedJettyが注釈付きサーブレットを見つけられません

つまり、次のことを行う必要があります。

  1. 回答に記載されているように必要な構成を設定します
  2. コンパイルされたサーブレットが移動するclasses/ディレクトリをJettyにスキャンさせます。デフォルトでは、jarのみをスキャンすると思います。
于 2017-01-24T20:18:57.007 に答える