2012-07-19 107 views
0

我有一個JSP頁面,它將HttpServletRequest和HttpServletResponse傳遞給一個Java類,該類根據名爲「action」的參數將請求和響應分派給一個動作類。動作類執行一些動作,有時會轉發到另一個JSP,其中重複相同的過程。如果你的想法我應該使用一個servlet,你的權利,但這是一個漫長的故事,基本上我也沒有權力。覆蓋JSP中的請求參數

在我的一個操作類中,我驗證數據,如果有效,請使用RequestDispatcher將請求轉發到另一個JSP。我還嘗試設置「action」屬性,以便我可以告訴其他JSP要執行的操作,但是我知道屬性不會隨請求一起轉發。事實上,我的代碼開始無限循環,因爲我正在執行相同的操作,原因是action參數不變,導致請求在action和jsp之間循環。

我發現我可以通過在新頁面的url中傳遞參數來覆蓋動作參數。像這樣:

RequestDispatcher dispatcher = request.getRequestDispatcher("someUrl.jsp?action=SOME_OTHER_ACTION"); 
dispatcher.forward(request, response"); 

這個解決方案給我發腥味。任何人都可以提供任何洞察這是否是一個好主意?

回答

1

我認爲這是傳遞參數的有效方法之一。

其他方式可能是,您可以訪問請求對象,您可以將它設置爲請求屬性。轉發在服務器上,您應該能夠在另一端訪問相同的請求屬性。

+0

當你說我應該能夠看到請求參數,你的意思是屬性? – 2012-07-19 17:32:46

+0

請求有參數和屬性。所以,你使用什麼。 – kosa 2012-07-19 17:34:31

+0

我相信你只能設置屬性,沒有request.setParameter()方法。 – 2012-07-19 17:35:47

2

是的,這是在轉發時發送請求參數的唯一方法。

2

正如您發現的那樣,請求屬性只是過濾器或其他請求處理程序向請求對象添加對象的便利位置。它們與來自HTTP請求本身的參數截然不同。屬性不會傳遞給HTTP客戶端,並且一旦發送響應就會消失。

你的方法沒有什麼可疑的。另一種(可能更糟糕的)方法是使用會話來維護狀態。

+0

我儘可能避免使用會話,我已經看到一些真正的噩夢與濫用。我可能沒有正確描述我的情況,setAttribute確實起作用,我從不回到客戶端。我不確定究竟出了什麼問題,我相信這是因爲我試圖將ENUM放在屬性中。 – 2012-07-19 17:54:14