如何将请求发送回发送它的页面?

时间:2013-05-25 18:38:57

标签: java jsp session servlets

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

但现在我在每个页面的顶部都有一个“退出”链接。那么我怎样才能将请求发送回同一页面,该页面在会话无效后点击了“注销”?

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

2 个答案:

答案 0 :(得分: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 /..。)

答案 1 :(得分:0)

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