【问题标题】:Sending redirect to another servlet/JSP without loosing the request parameters.在不丢失请求参数的情况下将重定向发送到另一个 servlet/JSP。
【发布时间】:2011-04-04 13:28:14
【问题描述】:

如何在 servlet 的 doPost() 方法中指定重定向到另一个 servlet。

目前我正在使用

request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);

这是错误的,因为我在产品的 doGet() 方法中的参数没有被调用和初始化。

所以我在登录后留下了一个空的产品页面:/

【问题讨论】:

    标签: java jsp servlets


    【解决方案1】:

    您需要使用HttpServletResponse#sendRedirect() 发送重定向。假设 servlet 映射到 /products 的 URL 模式:

    response.sendRedirect("/products");
    

    这样,webbrowser 将被指示在给定的 URL 上触发一个新的 HTTP GET 请求,因此将调用 servlet 实例的 doGet() 方法,您可以依次加载产品并转发到显示的 JSP以通常的方式。

    【讨论】:

    • 如果我设置一个属性 request.setAttribute("test",new String("ABC"));我如何在另一个 servlet 中访问它。
    • 取决于功能需求。如果是登录用户,则应将其存储在会话中。或者,如果它是基于请求的数据,则将其作为请求参数传递。或者,如果它实际上是产品 servlet 的责任,你应该在那里做。
    【解决方案2】:

    在您的 doPost 中,您可以随时调用:

    return doGet(request, response);
    

    【讨论】:

    • 相信你没有看懂问题所在。无论如何,将 GET 移植到 POST 或反之亦然,无论如何都是一种糟糕的做法。您应该使用 GET 来预处理请求并使用 POST 来后处理请求,而不是混淆它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多