2013-06-26 84 views
0

我有一個可以通過多個JSP獲取請求的servlet。回到使用Servlet中的RequestDispatcher發送請求的相同JSP

但是,當我在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」

+0

因此,您希望將請求從'JSP A'轉發到'JSP B',並且一次在'JSP B'中轉回到'JSP A'? – Uooo

+0

此外,它似乎是你混合轉發和重定向。你知道有什麼不同嗎? 'history.go(...)'顯示重定向,但是你想在JSP中使用轉發。你真的需要什麼?這似乎是問題更多的是設計而不是代碼問題。 – Uooo

+0

我有JSP A,JSP B,ServletC。 當JSP A向ServletC發送請求時,請求調度程序應該「轉發/重定向」到JSP A. 當JSP B向ServletC發送請求時,請求調度程序應該「轉發/重定向到」JSP B. 我不是確定轉發和重定向之間的區別是什麼,但它應該轉到請求來自同一頁面。 – colin

回答

2

你可以做以下

  • 爲每個名爲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代碼運行時,它會從request.getParamter("jspName")檢索值agetRequestDispatcher(jspName)將創建調度和rd.forward(request, response)一樣會轉發給jsp。

+0

非常感謝,這爲我工作。 – colin

+0

樂於幫助科林:) –

0

我還沒有執行以下操作。但希望這可以幫助你做到這一點

req.setAttribute(「originalRequest」,req.getRequestPage()); req.getRequestDispatcher(req.getAttribute(originalRequest).toString())。forward(req,resp);