0

如果我有两个 servlet:

@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 方法中使用哪个路径?还有一个条件 - Servlet2 必须在注释或 web.xml 中没有任何映射。

4

1 回答 1

3

Servlet2 必须在注解或 web.xml 中没有任何映射。

然后你不能使用HttpServletRequest#getRequestDispatcher(String),这是一个检查这些映射的容器管理方法。

这种情况是荒谬的,没有任何意义。如果您不打算使用 Servlet 容器,请不要创建Servlet. 创建一个执行您需要的操作的服务类。您不需要将所有内容都设置为Servlet.

您唯一的(荒谬的)替代方法是实例化Servlet2并显式调用其doGet方法。

于 2014-01-06T20:35:38.990 回答