Passaggio parametri a una servlet

di il
1 risposte

Passaggio parametri a una servlet

Ciao ragazzi ho la mia applicazione stand alone che deve comunicare con una servlet.
Quindi ho creato una connessione con la servlet e tramite metodo POST voglio inviare i dati, per esempio dati di login come username e password.
Idealmente credevo si potessero inviare i parametri allo stesso modo in cui li passiamo tra le classi ma ho visto che non è cosi, diciamo che possiamo inviare solo flussi di byte e i dati da quello che ho visto possono essere solo file o stringhe, ma il problema non è questo. Tramite la classe outputStreamWriter ho inviato per esempio il dato username, però ho notato che se provo a inviare altri dati vengono tutti concatenati, per esempio se faccio:
OutputStreamWriter wr=new OutputStreamWriter(conn.getOutputStream());
wr.write("usernameperlogin");
wr.write("passworddiaccesso");
wr.flush();

Quando vado a prelevare i dati tramite request.getInputStream() me li ritrovo concatenati "usrnameperloginpassworddiaccesso" perchè giustamente li inserisce nello stesso flusso di dati. C'è un modo differente che mi permette di differenziare i dati passati? per esempio attribuendo un nome ai dati?
perchè l'unico metodo che mi è venuto in mente per distinguerli è quello di passare dei dati in questo modo
wr.write("username=");
wr.write("m.rossi");
wr.write("&");
wr.write("password=");
wr.write("passworddiaccesso");
in modo da avere in ricezione una stringa del tipo username=m.rossi&password=passworddiaccesso. Però cosi dovrei crearmi un metodo per estrarre il valore che mi serve dalla stringa ricevuta.

Grazie!

1 Risposte

  • Re: Passaggio parametri a una servlet

    michele.c93 ha scritto:


    Ciao ragazzi ho la mia applicazione stand alone che deve comunicare con una servlet.
    Quindi ho creato una connessione con la servlet e tramite metodo POST voglio inviare i dati, per esempio dati di login come username e password. [...]
    Facciamo una premessa: visto che il "client" è una applicazione Java standalone (e non un browser, quindi) e il server è una webapp Java EE che si basa come minimo sulle Servlet e sono entrambi sviluppati da te, allora il formato dei dati, e in particolare cosa/come inviare con un POST, potresti assolutamente deciderlo tu in modo del tutto arbitrario. Potresti, per ipotesi estrema, addirittura usare la serializzazione degli oggetti di Java, dato che è Java da entrambi i lati. Potresti anche "inventarti" un tuo protocollo binario oppure testuale.
    Ma ti conviene non andare a cercare cose troppo strane ... complicheresti solo le cose e renderesti anche più difficile il testing della comunicazione con eventuali altri strumenti.

    Quindi.

    Se vuoi inviare un POST come avviene quando si fa il submit di un form HTML, in modo che lato Servlet puoi prendere i dati con il getParameter(String name) di (Http)ServletRequest, allora DEVI usare un formato ben preciso che è secondo il content-type "application/x-www-form-urlencoded".
    Vedi ad esempio qui o , giusto due risorse trovate in rete.

    In generale, comunque, se vuoi scambiare dati un po' strutturati (non "pagine web", pertanto) tra client e server su HTTP, dovresti cercare di usare dei formati ben noti e standard, tra cui sicuramente XML oppure JSON.

    Al momento non saprei cosa altro suggerirti, anche perché dal tuo messaggio una cosa risulta abbastanza evidente: poca/scarsa conoscenza del networking, dei protocolli di comunicazione e di HTTP.
Devi accedere o registrarti per scrivere nel forum
1 risposte