Avatar billede keet Nybegynder
07. marts 2004 - 19:43 Der er 29 kommentarer og
1 løsning

Send data fra servlet til servlet

Jeg har et xml-dokument der skal kunne sendes fra en servlet til en anden servlet.

Min servlet2 skal kunne få dokument via POST og blot ved:
InputStream stream = request.getInputStream();

Hvad skal der stå i min servlet1?
Avatar billede keet Nybegynder
07. marts 2004 - 19:43 #1
Jeg har et Document -objekt doc. Det er dette der skal sendes til servlet2
Avatar billede arne_v Ekspert
07. marts 2004 - 19:56 #2
servlet1 skal vel bare outputte XMl dokumentet råt.

Hvis du har et DOM træ, så mangler du noget til at udskrive det med, men enten
kan du selv kode det eller bruge en Xerces klasse til det.
Avatar billede keet Nybegynder
07. marts 2004 - 19:59 #3
Hvordan mener du råt?
Blot:
PrintWriter out = response.getWriter();
Document n = new Document(root);
XMLOutputter xo = new XMLOutputter();
xo.output(n, out);
?
Avatar billede keet Nybegynder
07. marts 2004 - 19:59 #4
Hvordan skal jeg fortælle servlet1 at den skal sende det til servlet2 via POST
Avatar billede arne_v Ekspert
07. marts 2004 - 20:04 #5
Det skal vel være noget a la:

        Document n = new Document(root);
        XMLOutputter xo = new XMLOutputter();
        URL url = new URL("http://www.domain.dk/htbin/tell2");
        HttpURLConnection con = (HttpURLConnection)url.openConnection();
        con.setRequestMethod("POST");
        con.setDoOutput(true);
        xo.output(n, con.getOutputStream());
        con.connect();
        if(con.getResponseCode() == HttpURLConnection.HTTP_OK) {
        }
        con.disconnect();
Avatar billede arne_v Ekspert
07. marts 2004 - 20:04 #6
response.getWriter();

vil outputte XML tilbage til kalderen af servlet1 i.s.f. at POST'e til servlet2
Avatar billede keet Nybegynder
07. marts 2004 - 20:09 #7
Er det meningen at jeg i browseren skal blive sent over til servlet2 eller bliver jeg ved servlet1?
Altså i browseren adresse felt?
Avatar billede arne_v Ekspert
07. marts 2004 - 20:14 #8
Med det kode jeg har skitseret så returnerer servlet1 noget HTML
til browseren "Alt OK" eller "Fejl". Brugeren kan ikke se at
servlet2 er inde i billedet.

Jeg ved ikke om det passer til din problem stilling eller ej.
Avatar billede keet Nybegynder
07. marts 2004 - 20:15 #9
Hvad gør?:
Skal der ikke nogen ind i {}?

f(con.getResponseCode() == HttpURLConnection.HTTP_OK) {
}
con.disconnect();
Avatar billede arne_v Ekspert
07. marts 2004 - 20:18 #10
Jo.

F.eks.:

        if(con.getResponseCode() == HttpURLConnection.HTTP_OK) {
            out.println("Jubi dubbi du");
        } else {
            out.println("Bedre held næste gang");
        }

men jeg ved jo ikke hvad du vil gøre i tilfælde af fejl eller ingen fejl.
Avatar billede keet Nybegynder
07. marts 2004 - 20:23 #11
Skal con.connection ikke rykkes op i koden eller hvorfor står det til sidst?
Avatar billede arne_v Ekspert
07. marts 2004 - 20:25 #12
Nej con.connect() er den som sender POST og data skal være skrevet først.
Avatar billede keet Nybegynder
07. marts 2004 - 21:12 #13
Er det muligt at printe connection.getOutputStream() og få et fornuftigt output for at debugge?
Avatar billede arne_v Ekspert
07. marts 2004 - 21:14 #14
Nej - men du kan vel skrive det samme 2 gange.

xo.output(n, System.out);
xo.output(n, con.getOutputStream());
Avatar billede arne_v Ekspert
07. marts 2004 - 21:15 #15
eller

xo.output(n, out);
xo.output(n, con.getOutputStream());

hvid du vil have det tilbage til browseren.
Avatar billede keet Nybegynder
07. marts 2004 - 21:18 #16
ja ok... prøver mig lige frem
Jeg prøvede at printe con.getOutputStream() men der opstod en runtime error
Avatar billede arne_v Ekspert
07. marts 2004 - 21:24 #17
Man kan ikke printe en output stream.
Avatar billede arne_v Ekspert
07. marts 2004 - 21:25 #18
Jeg vil ligge et svar nu - vent med at acceptere indtil det virker.
Avatar billede keet Nybegynder
07. marts 2004 - 21:26 #19
Mit problem er at servlet2 skal skrive dokumentet til en fil. Jeg får noget gyldigt xml ud, når jeg printer til response.getWriter, men hvordan kan jeg tjekke at min servlet2 får OK data?
Avatar billede arne_v Ekspert
07. marts 2004 - 21:30 #20
Kan du ikke bare se hvad servlet2 skriver ud ?
Avatar billede keet Nybegynder
07. marts 2004 - 21:36 #21
I min servlet2 har jeg:
InputStream is = request.getInputStream();

Men hvordan skriver jeg det ud når jeg har en doPost()?
Avatar billede arne_v Ekspert
07. marts 2004 - 21:40 #22
Du læser fra den InputStream og skriver det enten ud som tekst eller
parser det en gang mere inden du skriver det ud.
Avatar billede keet Nybegynder
07. marts 2004 - 21:45 #23
Jeg er ikke helt med. Kan jeg ikke i min servlet1 blive sendt til serlvet2 for at se hvad servlet2 siger til det den får ind?
Avatar billede arne_v Ekspert
07. marts 2004 - 21:48 #24
Du kan i servlet1 kalde con.getInputStream() og læse hvad servlet2 skriver
til dens out.
Avatar billede keet Nybegynder
07. marts 2004 - 21:52 #25
kan jeg skrive
out.prinln( con.getInputStream() )
i min servlet1?

Hvordan kan jeg printe con.getInputStream() så jeg får et fornuftigt output og debugge på?
Avatar billede arne_v Ekspert
07. marts 2004 - 21:58 #26
Du er nødt til at læse fra input og skrive til output.
Avatar billede arne_v Ekspert
07. marts 2004 - 22:00 #27
InputStream is = con.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String line;
            while((line = br.readLine()) != null) {
                out.println(line);
            }
            br.close();
            is.close();
Avatar billede keet Nybegynder
07. marts 2004 - 22:00 #28
er det ikke det jeg gør med:
out = response.getWriter()
out.prinln( con.getInputStream() )
Avatar billede keet Nybegynder
07. marts 2004 - 22:00 #29
ok, tester lige
Avatar billede keet Nybegynder
07. marts 2004 - 22:07 #30
Klasse.... :) nu virker det. Du skal ha 1000 tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester