【问题标题】:How to dispatch a request back to the page where it was sent from?如何将请求发送回发送请求的页面?
【发布时间】:2013-05-21 02:33:01
【问题描述】:

最初只有在我的索引页面上有一个“退出”链接,所以我只会使会话无效并将其发送回索引页面......

但现在我在每个页面的顶部都有一个“退出”链接。那么,在使会话无效后,如何将请求发送回单击“退出”的同一页面?

HttpSession hs = request.getSession();
if (hs != null) {
    hs.invalidate();
    RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
    rd.forward(request, response);
}

【问题讨论】:

标签: java jsp session servlets


【解决方案1】:

使用HttpServletRequest#getHeader() 检索 HTTP 引荐来源网址。

HttpSession session = request.getSession();
if(session !=null) {
    session.invalidate();
    RequestDispatcher rd;
    String referrer = request.getHeader("Referer");
    if (referrer != null) {
        URL ref = new URL(referrer);
        // assuming logout request came from the same application
        referrer = ref.getPath().substring(request.getContextPath().length());
        rd = request.getRequestDispatcher(referrer);
    } else {
        rd = request.getRequestDispatcher("/index.jsp");
    }
    rd.forward(request, response);
}

substring() 已完成删除应用程序的上下文根,因为调度程序也将添加相同的内容。如果不删除它,生成的路径将变得无效(前面有两个上下文 /webapp/webapp/..)。

【讨论】:

    【解决方案2】:

    您可以为前一页和当前 servletContext 存储会话属性。每当有新请求时,从会话中获取当前 servletContext 并将其设置为先前的上下文,然后将当前 servletContext 替换为新请求的 servletContext。现在,任何时候您想将用户发送到上一个视图,从会话中获取上一个视图并使用response.sendRedirect((String)session.getAttribute("previousPath"))。 对我很有用。

    【讨论】:

      猜你喜欢
      • 2020-07-18
      • 2011-08-07
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 2019-10-28
      相关资源
      最近更新 更多