10

これは簡単な質問ですが、簡単な答えが見つかりませんでした。ユーザーが以下のいずれかの URL を要求すると、サーブレット BaseServlet が作成されました。

host
host/
host/BaseServlet

常に同じサーブレットを参照し、ホームページにリダイレクトする必要があります。

私が設定したとき

@WebServlet({"/BaseServlet", ""})

それだけ

host/
host/BaseServlet

作品

私が設定した場合

@WebServlet({"/BaseServlet", "", "/"})

BaseServlet は常にループでリクエストされます ...

なんで?

編集: BaseServlet は WEB-INF フォルダーの index.html hid に転送し、それだけです。

getServletContext().getRequestDispatcher("/WEB-INF/index.html").forward(request,response);

サーブレットの仕様には、「/ 文字のみを含む文字列は、アプリケーションの「デフォルト」サーブレットを示します」と記載されています。したがって、BaseServlet をデフォルトにしたいと考えています。うまくいかないのはなぜですか?

4

2 に答える 2

12
  1. Qで述べているように、次のものが必要な場合:

    host/
    host/BaseServlet
    

    使用する

    @WebServlet({"/BaseServlet", ""})
    
  2. 以下が必要な場合:

    host
    

    これをウェルカム ファイルに追加します (注釈を使用してウェルカム ファイルを指定することはできません)。

    <welcome-file-list>
        <welcome-file>/BaseServlet</welcome-file>
    </welcome-file-list>
    
  3. サーブレットの仕様には、「「/」文字のみを含む文字列は、アプリケーションの「デフォルト」サーブレットを示します」と記載されています。

    しかし、それはすぐに言う

    この場合、サーブレット パスはリクエスト URI からコンテキスト パスを引いたものであり、パス情報は null です。

    つまり、あなたの URL が

    host
    

    サーブレットのパスは次のようになります

    "" (empty string)
    

    そのため、ウェルカム ファイル リストが必要になります (ただし、WEB-INF ではなく、webapp ディレクトリ内の index.htm[l] と index.jsp は、最初のウェルカム ファイル リストとして暗黙的に含まれています)。

于 2013-06-28T03:16:19.727 に答える