構成パラメータに応じて、/* で受信したすべての 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. より適切なタイトルが見つかった場合は、タイトルを変更してください ;))