2009-11-06 5 views
2

J'ai une servlet java qui reçoit la demande de formulaire d'une page Web dans le domaine A, et traiterait le formulaire, et enverrait le résultat sous une autre forme comme une demande à une autre page Web dans le domaine B.Comment soumettre un formulaire par programmation dans un servlet Java?

I je me demande comment soumettre le formulaire par programmation dans Java servlet? J'ai essayé d'utiliser

javax.servlet.RequestDispatcher.forward(request, response) 

mais il ne fonctionne pas parce qu'il ne peut avancer à une ressource dans le même domaine.

Répondre

2

Essayez d'utiliser Apache HttpClient pour cette

De l'tutorial le code ressemble:

HttpClient client = new HttpClient(); 
GetMethod method = new PostMethod(url); 
int statusCode = client.executeMethod(method); 
... etc 

Il y a des tonnes d'options pour le personnaliser.

+0

C'est une bonne idée, mais cela dépend vraiment de ce que veut l'affiche originale. Avec Apache HttpClient, le serveur servant le Servlet est le client. Par conséquent, le client réel demandant la page sur la servlet ne s'est pas connecté. – lsiu

+0

Merci beaucoup. Est-ce que cela va rediriger vers une autre page sur le domaine B? Je n'ai actuellement aucune idée comment l'avant fonctionnerait dans mon servlet dans le domaine A. – Sapience

+0

@Isui; Ohh je vois, ça a du sens. @Sapience: Non, ce ne sera pas le cas. Vous pouvez essayer de soumettre le formulaire, puis dans la réponse écrire une vieille école de redirection (HTTP-EQUIV = Refresh etc etc) Mais comme le souligne Isiu, votre client final ne sera pas reconnu par le second serveur. Ce serveur devrait vous permettre de démarrer par programme une session à distance. – OscarRyz

1

Essayez un javascript de soumission automatique formulaire retourné par Servlet sur le domaine A.

Servlet sur le domaine A:

public void doPost(HttpServletRequest req, HttpServletResponse resp) { 
    PrintWriter p = resp.getPrintWriter(); 
    p.print("<form id='f' action=[URL on domain B to login]><input type='secret' name='username' value='" + username+ "'/><input type='secret' name='password' value='" + password + "'/></form>"); 
    p.print("<script type='text/javascript'>document.getElementById('f').submit()"); 
} 

Ce ne sera pas la solution la plus élégante, mais si vous cherchez quelque chose de plus enterprisy, essayez la solution SSO comme OpenSSO ou CAS.

+0

Signification Le domaine de servlet A retournera JS qui a un auto submit dans son onLoad qui le soumettra au domaine B juste Isiu? Le seul problème est de savoir ce que le client (navigateur s'il est) va montrer? –

+0

Peut définir la visibilité par CSS du formulaire pour masquer le formulaire. – lsiu

1

Vous devez effectuer une publication automatique sur le nouveau domaine. Il suffit de transmettre la demande à un JSP comme ce,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<body onload="document.forms[0].submit()"> 
<noscript> 
<p> 
<strong>Note:</strong> Since your browser does not support JavaScript, 
you must press the Continue button once to proceed. 
</p> 
</noscript> 

<jsp:useBean id="myBean" scope="request" class="example.myBean" /> 

<form action="<jsp:getProperty name="myBean" property="url"/>" method="post"> 
<div> 
<input type="hidden" name="field1" value="<jsp:getProperty name="myBean" property="field1"/>"/> 
... 
</div> 
<noscript> 
<div> 
<input type="submit" value="Continue"/> 
</div> 
</noscript> 
</form> 
</body> 
</html> 

Le « monBean » contient l'URL de redirection et la valeur du champ doit être affiché à l'autre domaine.

+0

Merci. Cette méthode devrait fonctionner sur un navigateur sur PC, mais le problème est que mon client est un téléphone mobile, et son navigateur ne permet pas de soumettre automatiquement un formulaire sauf si l'utilisateur clique explicitement sur un bouton ou un lien pour déclencher l'envoi. – Sapience

0

Grande question est ici: voulez-vous transmettre la demande à l'autre site et ne pas s'inquiéter de la réponse plus loin? Ou voulez-vous toujours avoir un contrôle total sur la réponse afin de pouvoir la présenter comme si elle se faisait sous votre propre domaine? Cela n'a pas été précisé dans votre topicstart.

Si le premier, alors utilisez l'approche Javascript-soumettre-onloaduguée ci-dessus. Si la seconde, puis utilisez la suggestion HttpClient déjà mentionnée (ou si vous connaissez assez bien HTTP, vous pouvez également utiliser java.net.URLConnection).

Questions connexes