2010-06-14 22 views
7

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

10

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:

  1. 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.

  2. invia una richiesta POST multipart/form-data HTTP usando URLConnection 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.

  3. Serialize l'oggetto Java, scriverlo prima al URLConnection#getOutputStream() utilizzando ObjectOutputStream e recuperare crudo dal HttpServletRequest#getInputStream() e unserialize utilizzando ObjectInputStream. Pro: facile. Contro: non riutilizzabile, stretto accoppiato.

    Vedere anche:Object Streams e Lesson: Serialization.

1

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.