重定向后访问请求范围中的自定义对象的HashMap

时间:2011-12-08 08:26:32

标签: java jsp servlets jstl

我使用HashMapRequestDispatcher个自定义对象传递给JSP,并且我能够使用JSTL访问该对象及其属性。

但是,如果使用response.sendRedirect()发送参数,代码将失败。

我不确定原因是什么以及如何使其发挥作用?

2 个答案:

答案 0 :(得分:0)

response.sendRedirect()基本上指示客户端(网络浏览器)在给定的网址上发送请求。您还会看到浏览器地址栏中的更改会反映出这一点。

请求当然不包含先前(或任何其他)请求的属性。否则,这将破坏“请求范围”的整个概念。

要预处理GET请求,您需要在servlet的doGet()方法中执行该作业,然后重定向到该servlet的URL。

E.g。

response.sendRedirect(request.getContextPath() + "/foo");

@WebServlet("/foo")
public class FooServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Map<String, Foo> foos = fooService.map();
        request.setAttribute("foos", foos);
        request.getRequestDispatcher("/WEB-INF/foo.jsp").forward(request, response);
    }

}

请注意,此问题与无法相关,与请求范围中的自定义对象的哈希映射相关。

另见:

答案 1 :(得分:0)

您无法在response.sendRedirect中共享请求属性,因为它会创建新请求。

但是,如果你想要那个HashMap,在response.sendRedirect中,你可以把它放在会话中

request.getSession().setAttribute("myMap", [HashMap object]);

并且可以在servlet和JSP之间共享。这适用于RequestDispatcher和sendRedirect。