1

Javaでいくつかのサーブレットをセットアップしました。これらはパス名で識別されます。しかし、要求されたサーブレットが存在しない場合は、「デフォルト サーブレット」を呼び出したいと思います。私はそれをそのように解決しようとしました(私のコードを見てください)。私はそれをうまくテストしましたが、不安定になる可能性があるかどうかはわかりません (たとえば、「サーブレット 1」は、スレッド管理または OS による何かによって引き起こされたデフォルトのサーブレットに転送されます...)

Server server = new Server(8080);
WebAppContext context = new WebAppContext();
context.setContextPath("/");
HandlerCollection handlers = new HandlerCollection();
handlers.addHandler(context);
RequestLogHandler requestLogHandler = new RequestLogHandler();
handlers.addHandler(requestLogHandler);
server.setHandler(handlers);

context.setResourceBase("WebContent");
context.addServlet(new ServletHolder(new MyFirstServlet()), "/servlet one/*");
context.addServlet(new ServletHolder(new MySecondServlet()), "/servlet two/*");
context.addServlet(new ServletHolder(new DefaultServlet()), "/*");
context.setInitParameter("dirAllowed", "true");

server.start();

私はjettyライブラリでJavaを使用しています。

ご協力いただきありがとうございます。

4

1 に答える 1

0

サーブレット(3.0)仕様では、コンテナがURLパターンに一貫して一致する必要があります。

  1. コンテナは、リクエストのパスとサーブレットのパスが完全に一致するものを見つけようとします。一致が成功すると、サーブレットが選択されます。
  2. コンテナは、最長のパスプレフィックスとの一致を再帰的に試行します。/これは、文字をパス区切り文字として使用して、パスツリーを一度にディレクトリごとにステップダウンすることによって行われます。最長の一致によって、選択されるサーブレットが決まります。
  3. URLパスの最後のセグメントに拡張機能(例.jsp)が含まれている場合、サーブレットコンテナは拡張機能のリクエストを処理するサーブレットとの照合を試みます。拡張機能は、最後の文字の後の最後のセグメントの一部として定義され.ます。
  4. 前の3つのルールのいずれもサーブレットの一致をもたらさない場合、コンテナは要求されたリソースに適切なコンテンツを提供しようとします。アプリケーションに「デフォルト」サーブレットが定義されている場合は、それが使用されます。多くのコンテナは、コンテンツを提供するための暗黙のデフォルトサーブレットを提供します。

コンテナでは、大文字と小文字を区別する文字列比較を使用して照合する必要があります。

したがって、同じURLが毎回同じパターンのセットと一致する必要があります。

于 2013-01-23T09:43:00.483 に答える