[英]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.