2012-04-13 71 views
0

我正在使用建模Web應用程序的模型/視圖/控制器風格,將傳入的HttpRequest路由到以Java編寫的控制器Servlet,然後當Servlet完成後,讓它使用.jsp文件渲染回View。 (這是非常Rails的風格。)如何在使用javax.servlet.RequestDispatcher.include()時將參數傳遞給.jsp文件?

這樣做需要在控制器Servlet結束這樣一行:

getServletContext().getRequestDispatcher("/Bar.jsp").include(req, res); 

主要的問題是我想參數傳遞給Bar.jsp剛就好像它是我所調用的函數一樣。如果這是不可能的,我最終會在Bar.jsp的頂部放置很多Java來找出Bar.jsp需要渲染的所有東西,這相當難看。

其他web框架提供了一種方法來實現這一點,所以似乎必須有一種方法來處理Servlet。特別是我在Java Google App Engine中工作。

+0

您不能將JSP頁面作爲函數調用,因爲初始化和實例化的方式由Servlet Container完成。你可以做的是包含從JSP生成的響應,但不能作爲一種方法。如果您在JSP中調用JSP以外的成員參考創建,那麼我沒有看到任何挑戰。 – Phani 2012-04-13 07:30:03

+0

您的回覆對我來說沒有任何意義。我希望.jsp文件以某種方式訪問​​Servlet創建的一些Java對象。 – Daniel 2012-04-13 07:41:23

+0

您可以像Alonso Dominguez建議的那樣使用POJO,創建公共bean對象並將其作爲參數傳遞。 – Phani 2012-04-13 07:44:28

回答

1

可以使用

request.setAttribute("attributeName",attributeValue); 

和其他JSP文件,您可以使用方法getAttribute()這樣

request.getAttributeNames(); 
request.getAttribute("attributeName"); 
+0

謝謝,現在已經很清楚並且重要。 – Daniel 2012-04-13 08:22:26

0

正如其中一個註釋所說,您不能將參數傳遞給不同的JSP(在同一個請求中),就像它是一個函數一樣。

您可以做的最好的事情是創建一個(或幾個)用它的屬性封裝參數的java bean。然後,在調用JSP之前,將這些bean添加爲請求屬性。在JSP中,您可以使用EL表達式(如${myBean.myParameter})引用這些bean持有的值,而無需在JSP中添加額外的Java代碼。這是如何常見的MVC框架的Java做到這一點。

請注意,如果只是需要訪問觸發該請求/響應處理的參數,則可以使用像${param.myParam}這樣的表達式來訪問它們。

編輯

對不起,我之前不加入任何鏈接。 EL表達式是...表達式包含在符號${}(或#{})之間的符號 - 不過,大家都認爲這些符號是不同種類的EL表達式。 El表達式允許JSP開發人員訪問存儲在請求,會話或應用程序上下文中的數據(其他框架可向該基本集添加更多上下文),而無需Java代碼。在編寫JSP時,我們必須避免使用<% ... %>,只使用旨在將輸出呈現給視圖的代碼而不是繁重的數據處理。點擊關於best practices的鏈接以獲得更多關於它的背景。

主要有大量的EL表達式,我不能在SO帖子中解釋所有內容,但我建議您遵循this link

將變量或對象(java bean)添加到請求或任何其他作用域非常簡單。要爲請求添加一個bean:request.setAttribute("myBeanName", myBean);。與其他上下文類似的東西。 Java EE tutorial將比我更好地解釋,並且在此之後,您應該能夠理解JavaEE特性。

+0

你能鏈接到一些文檔嗎?如何「將這些bean添加爲請求屬性」?什麼是EL表達式,我可以在.jsp中的<% %>(Java)內或僅在<% %>(在HTML中說)內引用它? – Daniel 2012-04-13 07:45:39

+0

好的,編輯我的答案,希望這個新的信息可以幫助你。 – 2012-04-13 07:56:35

1

本頁面說它好,也解決了參數之間的差異和屬性:http://www.xyzws.com/Servletfaq/what-is-the-difference-between-the-request-attribute-and-request-parameter/1

請求屬性(更正確地稱爲「request-sc oped variables「) 是通過調用setAttribute()方法顯式放置在請求 對象上的任何類型的對象。它們通過getAttribute()方法在 Java代碼中檢索,在帶有 表達式語言參考的JSP頁面中檢索。總是使用request.getAttribute()到 獲取在服務器端添加到請求範圍的對象,即使用 request.setAttribute()。

屬性是對象,可以放在請求,會話或 上下文對象中。因爲它們可以是任何對象,不僅僅是一個字符串,它們更靈活。您還可以編程設置屬性 並稍後檢索它們。這在MVC模式中非常有用。例如,對於 示例,您希望從一個jsp/servlet中的數據庫獲取值,並將其顯示在另一個jsp中。現在,您已經在servlet中準備好充滿數據 的結果集,然後使用setAttribute方法並將此結果集發送給另一個jsp,以便通過使用 getAttribute方法將其提取出來。

一旦servlet獲得請求,它可以添加其他屬性,然後 將請求轉發給另一個servlet進行處理。屬性 允許servlet相互通信。

相關問題