Comment transférer les requestdispatcher à une URL distante
Vais avoir une page HTML http://www.mywebapp.com/sample.html
qui est utilisé à partir du serveur distant. transmets le HTML URL de la forme cachée de ce genre dans le même formulaire HTML,
<form action="/myservlet?userid=12345" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Submit">
<input type="hidden" name="url" value="http://www.mywebapp.com/sample.html"/>
</form>
Dans ma servlet j'ai eu la caché URL http://www.mywebapp.com/sample.html
et stockés comme
String fieldValue = http://www.mywebapp.com/sample.html
Maintenant, Quand j'essaie RequestDispatcher
et en avant la page de la face cachée de l'URL comme ceci,
RequestDispatcher rd = req.getRequestDispatcher(fieldValue);
rd.forward(req, resp);
suis ERROR 404
.
Quelqu'un peut-il me suggérer une idée pour résoudre cela.
ÉDITÉ
Exactement ce que je veux faire, c'est, à Partir d'un Serveur Distant une page HTML va demander à mes services Web REST. La réponse du web service sera à la sortie JSON. Maintenant, je veux envoyer cette Réponse JSON à la demande de formulaire HTML(c'est à dire le Serveur Distant page HTML)
Quelqu'un peut-il suggérer une idée pour résoudre cela.
Votre aide sera appréciée.
Alors que @fanaj lien ne marche pas contenir une description de l' - je vous recommande vivement de vérifier it out comme il décrit la façon dont vous devriez utiliser une 307 rediriger "le client réappliquer le même POST les paramètres de la requête sur la nouvelle URL" les autres redirections ne pas le faire. Je faisais des recherches sur le même problème
OriginalL'auteur sathya | 2013-01-22
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas envoyer une demande à un URL, ce qui est externe à votre webapp. Vous voulez probablement envoyer une redirection vers cette URL à la place. Voir
HttpServletResponse.sendRedirect()
.Voir Différence entre les JSP de l'avant et de redirection
HttpServletResponse.sendRedirect()
suis 302 code de statut qui ne devrait pas arriver. Pouvez-vous me suggérer comment la réponse à un serveur distant qui est une page HTML. Ma réponse contient des données JSONcomment la réponse à un serveur distant qui est une page HTML: je ne comprends pas ce que cela signifie. Que voulez-vous atteindre.
Une télécommande en forme de HTML est de l'envoi des données à mes services web REST. Suis donner la réponse en JSON sortie à la distance de formulaire HTML. C'est ce qu'essaie espère que vous avez compris. Maintenant, mon problème est que je veux envoyer les données JSON à la distance de formulaire HTML
pour être honnête, cela sonne comme un peu de désordre - je n'ai pas essayé, mais vous auriez à coder la réponse JSON en tant que paramètre dans l'URL que vous allez être rediriger vers qui je viens ne peut pas voir le travail (l'échappement sera un cauchemar). La page d'appeler le service RESTful devrait le faire à l'aide de JavaScript traitement de la réponse JSON à partir de ce service en tant que de besoin.
Merci beaucoup pour vos suggestions Nick.
OriginalL'auteur JB Nizet
Si vous avez absolument besoin de transmettre la demande par opposition à rediriger (par exemple, si l'URL distante n'est accessible que pour le serveur et non pas à l'utilisateur), il est possible de faire votre propre expédition. Dans votre servlet, vous pouvez faire une requête à l'URL distante et écrire l'InputStream de cette demande à l'OutputStream dans votre servlet. Vous voulez bien sûr de rechercher et de gérer les erreurs avec la demande et assurez-vous que les flux sont fermés correctement. Vous aurez aussi besoin d'manuellement avant tout les paramètres de la requête à la nouvelle.
L'approche de base serait:
Ce n'est évidemment pas la poignée de la multipart demande dans votre exemple, mais cela vous donne une idée de base sur la façon d'obtenir ce que vous voulez. Je vous recommande d'utiliser Apache HTTP Composants pour en faire la demande à la place de HttpURLConnection puisque la demande multiparties avec le fichier plus facile à réaliser (j'imagine que vous auriez à créer manuellement le multipart/form-data corps avec HttpURLConnection). Un exemple de faire la demande peut être trouvé à Comment puis-je faire un multipart/form-data requête POST à l'aide de Java?. Un InputStream peut être obtenu à partir de la HttpEntity en appelant getContent() (ce qui serait l'équivalent de conn.getInputStream() dans l'exemple).
L'écriture de l'InputStream à l'OutputStream peut également être atteint plus facilement avec Apache Commons IO IOUtils.copier() la méthode.
EDIT:
Il peut être possible d'utiliser req.getInputStream() pour obtenir le raw du corps de la requête et de l'écrire à paramsWriter.writeBytes() mais je n'ai pas essayé, donc il n'y a aucune garantie que cela fonctionnerait. Je ne suis pas sûr exactement ce req.getInputStream() contient une requête post.
OriginalL'auteur Jonathan
Vous ne pouvez pas les transférer à un autre serveur.
Vous pouvez utiliser le
resp.sendRedirect(url)
http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html#sendRedirect%28java.lang.String%29
plutôt la méthode qui sera de retour une redirection 302 vers l'URL spécifiée.
Salut, désolé je ne suis pas exactement clair ce que vous essayez de faire
Une télécommande en forme de HTML est de l'envoi des données à mes services web REST. Suis donner la réponse en JSON sortie à la distance de formulaire HTML. C'est ce qu'essaie espère que vous avez compris. Maintenant, mon problème est que je veux envoyer les données JSON à la distance de formulaire HTML
OriginalL'auteur cowls