我有兩個Web應用程序說App1和App2。我想從App1中的servlet調用App2中的servlet。我正在使用URLConnection。我能夠將參數傳遞給App2中的servlet,並且我還能夠以字符串的形式接收來自servlet的響應。但我想從App2中的servlet發送java對象,並在App1的servlet中接收它們。如何實現這一目標?遠程servlets之間的通信
回答
取決於。
如果這些web應用運行在物理上處於同一servletcontainer相同的Web服務器,然後設置好它作爲一個請求屬性,將請求轉發到其他方面:
request.setAttribute("name", object);
ServletContext app2 = getServletContext().getContext("app2");
app2.getRequestDispacher("servletUrl").forward(request, response);
其他方面將是能夠獲得如下對象:
Object object = request.getAttribute("name");
這隻需要一個服務器設置,上下文可以互相訪問。如何做到這一點取決於servletcontainer。例如,在Tomcat中,您只需將webapp的<Context>
元素的crossContext
屬性設置爲true
。
<Context crossContext="true">
然後它將可用於其他上下文。對於其他服務器,請查閱其文檔。
如果這些web應用運行在物理上不同的Web服務器,那麼有幾種選擇:
轉換爲字符串併發送作爲參數。在檢索時,從字符串轉換回來。 JSON是一個很好的格式。 Google Gson提供了在完整的Java對象和JSON之間進行轉換的可能性,反之亦然。如果您使用GET並且請求URI變得相當長(超過2KB),那麼請考慮使用POST而不是GET,否則URI可能會被服務器截斷。優點:更好的可重用服務。缺點:很難發送二進制數據。
另請參閱:Converting JSON to Java。
使用
URLConnection
或Apache HttpComponents Client按照RFC2388寄multipart/form-data
HTTP POST請求,並處理它使用Apache Commons FileUpload另一側。優點:標準規格,可以發送二進制數據。缺點:更多的代碼。另請參閱:How to use URLConnection。
Serialize的Java對象,使用
ObjectOutputStream
寫原材料到URLConnection#getOutputStream()
,並檢索它從HttpServletRequest#getInputStream()
原料,並使用ObjectInputStream
反序列化它。優點:容易。缺點:不可重複使用,緊密耦合。
- 1. Servlets之間的通信
- 2. JSP servlets之間的通信(替代靜態字段)
- 3. 2個Servlets之間的通信不適用於數據庫
- 4. 線程之間的通信?
- 5. 線程之間的通信
- 6. 線程之間的通信
- 7. 進程之間的通信
- 8. 進程與線程之間的通信
- 9. android在遠程服務和活動之間進行通信
- 10. PySide中的線程之間的通信
- 11. java中的線程之間的通信
- 12. Qt中的線程之間的通信
- 13. 鈦的應用程序和遠程web視圖之間的通信
- 14. Linux程序之間的通信
- 15. Rails進程之間的通信
- 16. EDT與主線程之間的通信
- 17. c#.Net 4.5線程之間的通信
- 18. VHDL中進程之間的通信
- 19. Linux,應用程序之間的通信
- 20. C#和Java之間的通信:過程
- 21. Windows核心進程之間的通信
- 22. 線程之間的Java通信
- 23. 線程之間的串口通信
- 24. luajit2進程之間的通信?
- 25. python程序之間的通信
- 26. .NET程序之間的通信
- 27. 兩個java程序之間的通信
- 28. Task.Factory和線程之間的通信
- 29. vb.net應用程序之間的通信
- 30. Java程序之間的通信