2

構成パラメータに応じて、/* で受信したすべての GET および POST 要求を他のサーブレットにリダイレクトするエントリ サーブレット (DispatcherServlet と呼ばれる) があります。リクエストを他のサーブレットにディスパッチするために、パスの代わりにそれらの名前を使用します。

「古い」方法は、サーブレットに web.xml 記述子で名前を付けることでした。

<servlet>
  <servlet-name>MyServlet</servlet-name>
  <servlet-class>mypackage.MyServlet</servlet-class>
</servlet>

その後、たとえばRequestDispatcher. 私の DispatcherServlet のコードは次のようになります。

RequestDispatcher ディスパッチャ = getServletContext().getNamedDispatcher("MyServlet"); dispatcher.forward(リクエスト、レスポンス);

これは完全に機能します。しかし、web.xml なしで「新しい」サーブレット 3 アノテーションを使用したいので、次のようにします。

@WebServlet(name="MyServlet")
public class MyServlet extends HttpServlet {
    ...

しかし今、私の DispatcherServlet 内では、適切なディスパッチャーの代わりにnullgetServletContext().getNamedDispatcher("MyServlet")を返しますが、同じように動作すると予想されますMyServlet@WebServlet(name="MyServlet")<servlet-name>MyServlet</servlet-name>

Tomcat 7 でこれをテストしました。これは、DispatcherServlet が呼び出されるまでに MyServlet がまだロードされておらず、MyServlet の名前がわからないためですか? @WebServlet(name="...")もしそうなら、注釈はどのような意味を持ちますか ;)

「なぜフィルタを使わないのですか?」などと答えないでください。など。これは、注釈と web.xml の背景に関する詳細です。

前もって感謝します!

(ps. より適切なタイトルが見つかった場合は、タイトルを変更してください ;))

4

2 に答える 2