IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Ecrire du code pour faire un POST de formulaire


Sujet :

Servlets/JSP Java

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Par défaut Ecrire du code pour faire un POST de formulaire
    Bonjour,

    Voici mon problème. Je dois créer un lien sur une page. Ce lien va appeler une servlet.
    Dans cette servlet, j'ai quelques opérations à faire et ensuite je souhaite faire un POST de formulaire vers un serveur distant.
    Autre formulation :
    1) L'utilisateur clique sur le lien : http://www.monsite.com/monappli/maServlet
    2) La servlet en question de "monappli" doit faire un POST à l'URL http://www.unautresite.com/uneautreappli.

    Comment puis-je faire ça ? L'objet URL ne me parait pas adapté.
    Par avance, merci !

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    utilise la librairie common http client de jakarta, elle peut faire toutes sortes de POST

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Par défaut
    Merci tchize_ pour ta réponse. En effet je l'ai déjà utilisée et c'est plutôt puissant.
    Mon problème est que je ne peux pas utiliser cette API.
    Ma question est donc de savoir s'il existe un moyen relativement simple de faire ça avec les API standards qu'on peut trouver sur un projet Web (quelques commons...).
    Sinon, il va falloir que je fasse autrement !
    Par avance, merci.

  4. #4
    Membre chevronné
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Par défaut
    tu génère un formualire en mode post que tu auto-submit sur le onload.

    Je ne vois rien d'autre ou ssinon il faudrait que tu précises ou est ton problème ou la contrainte qui t'est imposé.

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Par défaut
    link256 : oh la grosse feinte... Bonne idée mais c'est pas très satisfaisant !
    Pour donner un peu plus de détails, mon problème est le suivant.
    Je dois mettre en place une authentification croisée entre 2 sites. La solution imposée est la suivante :
    Sur le site A, j'ai un lien vers une page du site B pour afficher la page b1. Sauf qu'au lieu de faire un lien direct vers b1, je dois envoyer à B en POST une String qui correspond à un certain nombre de paramètres chiffrés. B contacte ensuite A en lui passant cette même String. A récupère les infos chiffrés, les déchiffre et les vérifie. Si tout est ok, alors seulement à ce moment là il y a un appel à b1.
    Mon problème est que le lien pour afficher b1 est présent sur toutes les pages de A. Dans mes données chiffrées j'ai une date d'expiration. Je ne peux pas me permettre de chiffrer les données à chaque fois que j'affiche une page uniquement pour mettre à jour cette date d'expiration. Mon idée était donc de repasser par une servlet sur A qui aurait en charge de faire le POST de la String chiffrée vers B.
    Bon voilà c'est un peu compliqué... Si c'est pas clair, je ferai un schéma !
    Si quelqu'un a compris mon problème est qu'il a une idée géniale, je suis preneur !

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    t'as plusieurs possibilités

    1) le GET plutot que le POST (si ça passe et si la requête est suffisament petite)
    2) tu obtiens de l'objet URL un objet URLConnection tu fait setDoOutput(true) dessus et tu récupère son outputstream, où tu balance le POST

  7. #7
    Membre chevronné
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Par défaut
    J'ai fait quelque chose de similaire sans authentification croisé

    Je fais un appel de A vers B pour cela j'utilise comme el propose tchize_

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    URLConnection urlconn = null;
    URL url=null;
    String globalURL = "url vers B avec les parametres +param de sécurite"
    url = new URL(globalURL);
    URLConnection urlconn = urlCorbielle.openConnection();
     
    ObjectInputStream toto =  new ObjectInputStream(urlconn.getInputStream());
    Pour ce qui est de la sécurité entre les 2applications, je passe par une table dans laquelle j'insère un sésame (taille variable) et que j'encrypte
    et c'est ce sésame encrypte que j'envoie à B qui le decode pour le comparer a celui enregistre dans la table puis l"efface après authentification.

    Ou si tu ne peux pas décode tu crypes le sésame dans la table et tu compares les 2 encryptages.

    Tu as une connexion sécurisée de A vers B et B qui renvoie les information à A que si la demande est authentifiée.

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Par défaut
    Merci pour vos réponses. Je suis obligé d'utiliser du POST.
    Me voilà au bout de mon problème.
    Voici de liens qui m'ont aidé à utiliser la classe URLConnection pour poster un formulaire :

    http://www.devx.com/tips/Tip/18188
    http://www.jguru.com/faq/view.jsp?EID=1068924

    Posting forms in Java is easy. All you need is just a HTML code snippet. Here's an example:


    <form action="getmsg.asp?q=1" method="post">
    Your Email : *
    <input type=text name=strEmail maxlength=255>
    Message : *
    <input type=text name=strMessage maxlength=70>
    <input name="submit" type="submit" value="Send>
    </form>

    Post the above form like this:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    String server ="http://www.server.com/getmsg.asp?q=1";
    HttpURLConnection uc =(HttpURLConnection) new
    URL(server).openConnection();
    uc.setDoOutput(true);
    uc.setRequestMethod("POST");
     
    BufferedWriter bw = new BufferedWriter(new  
                           OutputStreamWriter(uc.getOutputStream()));
    String query="";
    query += URLEncoder.encode("strEmail")+ "="+ 
    URLEncoder.encode("silver@hotmail.com");
    query +="&";
    query += URLEncoder.encode("strMessage")+ "=" +
    URLEncoder.encode("Prices are going down!");
    bw.write(query);
    bw.write("\r\n");
    bw.flush();
    bw.close();
    Pour le petite info, il y a quand même une vraie différence entre la méthode du formulaire proposée par link256 et la méthode de _tchize avec URLConnection. Dans le 1er cas le serveur B répond directement au client. Dans le 2e cas on repasse par le serveur A.

    CQFD, merci à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/04/2008, 11h20
  2. Code pour faire de la pagination
    Par biniki dans le forum ASP
    Réponses: 4
    Dernier message: 29/11/2007, 13h53
  3. [Tableaux] probleme avec mon code pour faire un parseur !
    Par Joe-La-Boule dans le forum Langage
    Réponses: 10
    Dernier message: 11/10/2006, 15h35
  4. code pour faire une migration
    Par rollins_ng dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 11/08/2006, 21h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo