回到使用Servlet中的RequestDispatcher发送请求的相同JSP

时间:2013-06-26 10:27:14

标签: java jsp servlets forward requestdispatcher

我有一个可以通过多个JSP获取请求的servlet。

但是当我在servlet中使用RequestDispatcher时,我不知道如何转发到发送请求的JSP。

req.getRequestDispatcher("page.jsp").forward(req, resp);

我知道html中有这样的东西:javascript:javascript:history.go(-1)

我只需要这样的东西:

req.setAttribute("originalRequest", req.getRequestPage());
req.getRequestDispatcher(originalRequest).forward(req, resp);

这段代码可能非常棒,但它让你知道我需要什么。

所以:我需要转发到发送原始请求的页面(基本上重新加载页面),但由于多个jsp使用servlet,我不能简单地转发到“page.jsp”

3 个答案:

答案 0 :(得分:3)

您可以执行以下操作

  • 为每个名为jspName的jsp创建一个隐藏参数,并为各个JSP提供值。例如对于JSP A,参数名称为jspName,值为a,对于JSP B,参数名称为jspName,值为b
  • 使用以下代码在servlet中读取此隐藏参数。

    String jspName = request.getParameter("jspName");
    RequestDispatcher rd = request.getRequestDispatcher(jspName);
    
    rd.forward(request, response);
    

当您从JSP A调用servlet时,它将具有参数japName=a,当servlet代码运行时,它将从a和{{{{}}检索值request.getParamter("jspName")。 1}}将创建相同的调度程序,getRequestDispatcher(jspName)将转发到jsp。

答案 1 :(得分:0)

我没有尝试以下方法,但我希望这可以帮助您解决问题。

req.setAttribute("originalRequest", req.getRequestPage());
req.getRequestDispatcher(req.getAttribute(originalRequest).toString()).forward(req, resp);

答案 2 :(得分:0)

我已经尝试过了,它为我工作...

在JSP中

您需要在每个JSP中进行设置。例如:index.jsp是我的jsp名称。

<% session.setAttribute("jspName","index.jsp"); %>

在Servlet中

request.getRequestDispatcher(session.getAttribute("jspName").toString()).forward(req, res);