Ho due applicazioni Web che dicono App1 e App2. Voglio chiamare un servlet che si trova in App2 da un servlet in App1. Sto usando URLConnection per questo. Sono in grado di passare anche i parametri al servlet in App2 e sono anche in grado di ricevere una risposta dal servlet come stringa. Ma voglio inviare oggetti java dal servlet in App2 e riceverli in servlet di App1. Come ottenere questo?comunicazione tra servlet remoto
risposta
Depends.
Se queste applicazioni web corre al fisicamente lo stesso web server nella stessa servletcontainer, poi basta impostarlo come un attributo di richiesta e inoltrare la richiesta al altro contesto:
request.setAttribute("name", object);
ServletContext app2 = getServletContext().getContext("app2");
app2.getRequestDispacher("servletUrl").forward(request, response);
L'altro contesto sarà in grado di ottenere l'oggetto come segue:
Object object = request.getAttribute("name");
Ciò richiede unica impostazione che i contesti sono accessibili con l'altro server. Come fare questo dipende dal servlettaintainer. Ad esempio, in Tomcat, è sufficiente impostare l'attributo crossContext
dell'elemento <Context>
della webapp su true
.
<Context crossContext="true">
Quindi sarà disponibile per altri contesti. Per altri server, consultare la relativa documentazione.
Se queste applicazioni web corre in fisicamente altro server web, poi ci sono diverse opzioni:
Converti in stringa e Invia come parametro. Al momento del recupero, riconvertire da String. JSON è un bel formato per questo. Google Gson offre la possibilità di convertire tra oggetti Java completi e JSON e viceversa. Se stai utilizzando GET e l'URI della richiesta diventa piuttosto lungo, superiore a 2 KB, quindi considera l'utilizzo di POST anziché GET, altrimenti l'URI potrebbe essere troncato dal server. Pro: migliore servizio riutilizzabile. Contro: difficile inviare dati binari.
Vedere anche:Converting JSON to Java.
invia una richiesta POST
multipart/form-data
HTTP usandoURLConnection
o Apache HttpComponents Client secondo RFC2388 ed elaborarlo sul lato opposto utilizzando Apache Commons FileUpload. Pro: specifiche standard, è possibile inviare dati binari. Contro: più codice.Vedere anche:How to use URLConnection.
Serialize l'oggetto Java, scriverlo prima al
URLConnection#getOutputStream()
utilizzandoObjectOutputStream
e recuperare crudo dalHttpServletRequest#getInputStream()
e unserialize utilizzandoObjectInputStream
. Pro: facile. Contro: non riutilizzabile, stretto accoppiato.Vedere anche:Object Streams e Lesson: Serialization.
Usa Serialization
Invece di inviare HTML si inviano oggetti ruscelli.
Solo, essere consapevoli, per aggiungere ulteriore sicurezza, non si vuole che qualche fonte esterna inietti oggetti avvelenati nelle chiamate.
- 1. Comunicazione iframe tra domini
- 2. C# Comunicazione tra thread
- 3. Comunicazione tra iFrame?
- 4. MVP Comunicazione tra relatori?
- 5. Comunicazione tra applicazioni
- 6. Comunicazione tra SERVICE e applicazione web/desktop
- 7. comunicazione tra due app flessibili
- 8. Comunicazione tra moduli in AngularJS
- 9. Comunicazione tra SAP e C#
- 10. Comunicazione tra moduli con Prism?
- 11. Comunicazione tra OCaml e Python
- 12. Comunicazione tra Python e Matlab
- 13. Comunicazione Android tra due applicazioni
- 14. Comunicazione tra script | Tre metodi
- 15. comunicazione tra due script python
- 16. Backbone.js: comunicazione tra le viste
- 17. Opzioni di comunicazione tra processi
- 18. Comunicazione tra due dispositivi iOS
- 19. Android - comunicazione tra due dispositivi
- 20. Passaggio di messaggi tra MailboxProcessor remoto?
- 21. Differenza tra servlet/mappatura servlet e filtro/mappatura del filtro?
- 22. Quartz.NET, "Errore nella comunicazione con lo scheduler remoto."
- 23. Come posso ottenere l'indirizzo remoto di un client in servlet?
- 24. Comunicazione sicura tra iPhone e server?
- 25. comunicazione tra 2 programmi in python
- 26. Comunicazione tra Rails e Ruby EventMachine Process
- 27. comunicazione tra un WebJob e SignalR Hub
- 28. comunicazione tra la scheda del browser
- 29. Comunicazione tra BroadcastReceiver e Activity - android
- 30. Comunicazione di applicazioni elettroniche tra due finestre