【问题标题】:Cookie set on the response by Servlet is not available in request of forwarded JSPServlet 在响应上设置的 Cookie 在转发的 JSP 的请求中不可用
【发布时间】:2020-09-27 20:53:51
【问题描述】:

我有一个简单的页面,用户可以在其中单击一个按钮,然后将他们转发到一个新页面。但是,无法在不单击上一页上的按钮的情况下访问新页面。单击按钮时,它会发送一个 cookie,用于检查是否单击了按钮。如果我使用request.sendRedirect(),这可以正常工作。但是,当使用 request.forward() 时,它不会。在我被发送到新页面之前,我必须多次单击该按钮。下面是代码

//sends cookie when button is clicked
private void connect(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    Cookie cookie = new Cookie("connect", "connected");
    cookie.setMaxAge(1);
    
    response.addCookie(cookie);
    
    RequestDispatcher dispatcher = request.getRequestDispatcher("connectAudio.jsp");
    dispatcher.forward(request, response);
}

浏览器检查 cookie 是否存在,如果不存在则表明该按钮未被按下并将其发送回带有按钮的页面

<c:if test="${empty cookie['connect']}">
<c:redirect url="index.jsp">
</c:redirect>
</c:if>

【问题讨论】:

    标签: jsp servlets cookies forward


    【解决方案1】:

    如果是redirect,浏览器会发送两个连续的请求,而第二个请求具有所需的 cookie,因为它是由对第一个请求的响应设置的。

    RequestDispatcher.forward(...) 的情况下,浏览器只发出一个请求,该请求被传递给connectAudio.jsp。尚未为第一个请求设置所需的 cookie。

    更多信息请参见this page 及其上的图片:

    【讨论】:

    • 你拍的照片真漂亮。
    • 图片作者为Javin Paul。我在上面写道:“见this page 和上面的图像......”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2016-05-06
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    相关资源
    最近更新 更多