0

2 つのサーブレットがある場合:

@WebServlet (urlPatterns = {"/s1"})
public class Servlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException {

        Map<String, Integer> map = new HashMap<String, Integer>();
        map.put("A", 100);
        map.put("B", 200);
        map.put("C", 300);

        req.setAttribute("map", map);
        getServletContext().getRequestDispatcher("Servlet2").forward(req, resp);
    }
}

public class Servlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException {
        Map map = (Map) req.getAttribute("map");

        for (Object o : map.values()) {
            System.out.println(o);
        }
    }
}

それらの間でリダイレクトを行うにはどうすればよいですか? getRequestDispatcher メソッドで使用する必要があるパスはどれですか? もう 1 つの条件 - Servlet2 は、注釈または web.xml にマッピングされていない必要があります。

4

1 に答える 1

3

Servlet2 は、注釈または web.xml にマッピングされていない必要があります。

これはHttpServletRequest#getRequestDispatcher(String)、これらのマッピングをチェックするコンテナー管理メソッドです。

その状態はばかげていて、意味がありません。サーブレット コンテナを使用しない場合は、Servlet. 必要なアクションを実行するサービス クラスを作成します。すべてを にする必要はありませんServlet

あなたの唯一の(ばかげた)代替手段は、Servlet2そのメソッドをインスタンス化して明示的に呼び出すことdoGetです。

于 2014-01-06T20:35:38.990 に答える