Post écrit des données à partir d'une servlet java à l'autre
Je suis en train d'écrire une servlet qui va envoyer un fichier XML (xml chaîne mise en forme) à une autre servlet via un POST.
(Non essentiel xml de la génération de code, remplacé par "Bonjour")
StringBuilder sb= new StringBuilder();
sb.append("Hello there");
URL url = new URL("theservlet's URL");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Length", "" + sb.length());
OutputStreamWriter outputWriter = new OutputStreamWriter(connection.getOutputStream());
outputWriter.write(sb.toString());
outputWriter.flush();
outputWriter.close();
Cela provoque une erreur du serveur, et le second servlet n'est jamais invoquée.
OriginalL'auteur denny | 2008-09-18
Vous devez vous connecter pour publier un commentaire.
Ce genre de chose est beaucoup plus facile en utilisant une bibliothèque comme HttpClient. Il y a même un post exemple de code XML:
OriginalL'auteur Peter Hilton
Je recommande d'utiliser Apache HTTPClient au lieu de cela, parce que c'est plus agréable de l'API.
Mais pour résoudre ce problème: essayez d'appeler
connection.setDoOutput(true);
après l'ouverture de la connexion.OriginalL'auteur Sietse
Le contenu d'un post HTTP upload stream et de la mécanique de celui-ci ne semblent pas être ce que vous attendez d'eux. Vous ne pouvez pas il suffit d'écrire un fichier que le contenu du poste, parce que le POST est très spécifique RFC normes sur la façon dont les données incluses dans une requête POST est censé être envoyé. Ce n'est pas seulement la mise en forme du contenu lui-même, mais c'est aussi la mécanique de la façon dont il est "écrit" à l'outputstream. Beaucoup de l'époque POST est maintenant écrit en gros morceaux. Si vous regardez le code source d'Apache HTTPClient, vous verrez comment il écrit les morceaux.
Il y a des bizarreries avec la longueur du contenu, comme le résultat, parce que le contenu de la longueur est augmentée par un petit nombre d'identifier le morceau et aléatoire d'une petite séquence de caractères qui délimite chaque morceau comme il est écrit sur le flux. Regardez certains des autres méthodes décrites dans les nouvelles versions de Java de la HTTPURLConnection.
http://java.sun.com/javase/6/docs/api/java/net/HttpURLConnection.html#setChunkedStreamingMode(int)
Si vous ne savez pas ce que vous faites et ne veulent pas apprendre, traitant avec l'ajout d'une dépendance de type Apache HTTPClient vraiment finir par être beaucoup plus facile, car il les résumés toute la complexité et la marche.
OriginalL'auteur Josh
N'oubliez pas d'utiliser:
si vous avez l'intention sur l'envoi de la sortie.
OriginalL'auteur Craig B.