簡體   English   中英

如何將列表發送到請求它的jsp?

[英]How do I send a list to the jsp that requested it?

讓我們假設有一個jsp ,它需要顯示特定IP共享的共享文件列表。 客戶端在其本地服務器上打開該jsp ,然后將請求發送到遠程服務器以獲取列表。

服務器上的Servlet處理請求並獲取該IP共享的文件列表。 現在,servlet如何將該列表發送到請求它的jsp頁面?

JSP :

connection.openConnection(); // Connection sends IP as the query parameter to the 
                             // remote servlet

Servlet :

doGet(..parameters..) {
 list = getList(forThatIP);
 // NOW HOW DO I SEND THIS LIST ?
}

我認為一種方法是將整個數據作為查詢字符串發送到客戶端的servlet(運行諸如tomcat之類的服務器),然后將該列表存儲到某個文件中。后來的jsp可以解析該文件並顯示數據。 但這似乎不是一個好選擇。

注意:成功將IP發送到遠程servlet后,當servlet轉發時,將調用JSP。

您可以在Servlet中使用request.setAttribute()。 然后,您可以使用JSP標記來檢索JSP中的值。 研究一下。

編輯:

在Servlet doGet方法中,您可以設置一個屬性,例如listOfFiles為:

resquest.setAttribute("listOfFiles",list);

然后在JSP中,您可以使用EL表達式重新檢索它:

${listOfFiles}

這是JSP的內置功能。

另外,您也可以使用

<% request.getAttribute("listOfFiles")%>

但是將Java scriptlet嵌入JSP中是不好的。

如果要通過連接傳遞復雜的數據(列表等),則可以使用JSON或XML。 您的JSP代碼應該能夠使用正確的庫輕松解析。

實際上,這取決於jsp的調用方式。

您是否在其上張貼文章? Servlet是否執行轉發? 還是sendRedirect()?

據此,有很多方法可以將數據發送到您的jsp。 一種是使用請求屬性或更好的請求范圍的Bean。 另一個可以是將列表的某種形式的表示形式作為post參數發布(可以是json,xml或您的自定義格式)。

要考慮的另一件事是,您在使用什么? JSF? 一些Spring庫? 據此,可能還有其他更好(或更差)的數據發送方式。

如果在一個小項目上使用簡單的JSP / Servlet,我個人會使用request.setAttribute()方式,確實這將迫使我通過類似以下方式調用jsp

request.setAttribute("myList", yourListObject);
request.getRequestDispatcher("yourjsp.jsp").forward(request, response);

然后在jsp中,您可以:

<% Object myListObj = pageContext.getRequest().getAttribute("myList"); %>

當您從代碼中調用servlet時,最好的方法是使用HttpServlet並模仿瀏覽器的行為。

在URL中傳遞數據是GET請求。 僅在相對較小的數據塊中有用,但語義看起來像您想要的(“獲取一點數據”)。 http://myremoteserver.com/myServlet?ip=... 您將需要參數的正確編碼(Java API可以處理)。

通過寫入流傳遞數據將是一個POST請求。 它傳遞給服務器的數據沒有限制,但是語義不同(“更改系統中的內容”)。 您可以將數據作為參數傳遞到所寫內容的內部,我不確定如何解碼。 另一種選擇是使用Servlet (不使用HttpServlet )並僅處理原始數據。

在這兩種情況下,響應都將在連接輸出流中返回。 您可以使用任何喜歡的格式(即使定義您自己的XML,像JSON這樣的標准格式也可能是最好的)。 在這種情況下,可行的選擇是用“安全”字符(如\\n| )分隔的文件名。 快速,但是將來會變得不太靈活。

我會去一個GET請求和JSON encoding

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM