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 :

Dialogue entre servlets


Sujet :

Servlets/JSP Java

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 122
    Par défaut Dialogue entre servlets
    Bonjour,
    Petits soucis pour récupérer les données d'une servlet.
    Une servlet A assure la gestion et la fourniture de pages JSP+javascript.
    Ces pages JSP+javascript dialoguent en Ajax+JSON avec une Servlet B qui assure les interactions avec la base de données.
    Dans certaines configurations, ces pages effectuent des requêtes Ajax vers la Servlet A. Tout celà s'enchaine parfaitement; mais parfois ces derniètes requêtes nécessitent que la Servlet A sous-traite une partie de la demande à la servlet B. Et dans ce cas, le forward ne convient pas, car c'est la servlet B qui va répondre à la page JSP, alors que je veux que la réponse revienne à la servlet A.
    D'où ma question : comment procéder?

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    tu peux utiliser le RequestDispatcher.include pour l'appel de la servletB de ServletA.
    Pour les paramètres, utilise request.setAttribute(nom, valeur);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 122
    Par défaut
    Merci pour la réponse, mais le fait d'indiquer les paramètres avec setAttribute() fait que la servlet B n'est plus "standard".
    Je vais expliquer par un exemple précis :
    1-er cas d'utilusation
    Pour la création d'un utilisateur en base de données la page JSP envoie en Ajax+JSON à la servlet B (servlet vue comme un service web):
    {"methode":"creation","nom":"Dubois","prenom";"Eric", ......}
    Après insertion en base, la servlet B retourne {"iduser":"25", "dateCreation":"06-01-11", ....}
    Donc dans la requête au niveau de la servlet B, je récupère mes paramètres avec request.getParameter("methode"), ......
    2-ème cas d'utilusation
    Maintenant, à partir d'une page web issue de la servlet A, j'ai "uploadé" sur le serveur un fichier d'utilisateurs, et je demande à la servlet A d'effectuer, par des appels successifs à la servlet B, l'insertion en BD des utilisateurs contenus dans le fichier .
    Au niveau de la servlet A, j'instancie donc une classe Insertion qui effectue une lecture du fichier précédemment "uploadé" et qui pour chaque ligne va formater au standard JSON les paramètres correspondants à un utilisateur puis effectuer l'appel au service web de la servlet B pour insérer les données en base. Au retour, la classe Insertion constitue un fichier aves les identifiants des utilisateurs créés.
    Donc si j'utilise request.setAttribute("objson",userJson), je ne suis plus compatible pour les appels au niveau de la servlet B.

    Celà implique que je dois distinguer l'origine des appels au niveau de la servlet B.
    Je ne connais pas Restlet, mais passer par ce framework permettrai t'il de résoudre ce problème?

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Je n'en ai pas la moindre idée, je ne connais pas ce framework...

    Ce qui me paraît sûr, c'est qu'il faudra bien faire un distinction pour l'extraction des paramètres de la demande (request).

    Ce que je fais, c'est de toujours privilégier le getAttribute() sur le getParameter(). De ce fait, tout fonctionne correctement.
    Si on vient de la page, c'est forcément le getParameter() qui renverra quelque chose (enfin pour les champs input du formulaire ou pour les paramètres d'url), et si l'appel vient d'une servlet, se sera bien le getAttribute().
    On peut donc imaginer de généraliser le mécanisme...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 122
    Par défaut
    Bonjour,
    Merci des précisions.
    J'ai écrit un client Restlet en quelques lignes et j'ai réussi à dialoguer avec la Servlet B à partir de la Servlet A. Seul un petit problème de mapping à résoudre; je suis obligé de préciser l'url complète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Request request = new Request(Method.POST, "http://127.0.0.1:8080/application2/servletB");
    alors que la Servlet B est mappée dans Tomcat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        <servlet-mapping>
            <servlet-name>servletB</servlet-name>
            <url-pattern>/servletB</url-pattern>
        </servlet-mapping>
    Les 2 servlets n'appartienent pas à la même application sous webapps; accès :
    http://127.0.0.1:8080/application1/servletA
    http://127.0.0.1:8080/application2/servletB

    Au lieu de préciser une url absolue, j'aimerais pouvoir la définir uniquement par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Request request = new Request(Method.POST, "/application2/servletB");
    Mais dans ce cas je n'arrive pas à atteindre la Servlet B.

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Ben utilise le requestdispatcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.getRequestDispatcher("/servletB").include(request, response);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. dialogue entre frames
    Par funkadelic dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/12/2005, 11h09
  2. Réponses: 72
    Dernier message: 05/12/2005, 10h45
  3. Dialogue entre systemes embarqués sur un réseau.
    Par zodd dans le forum Développement
    Réponses: 1
    Dernier message: 10/11/2005, 09h34
  4. Dialogue Applet Servlet
    Par GrimKo dans le forum Applets
    Réponses: 11
    Dernier message: 02/11/2005, 18h09
  5. [FLASH MX2004] [AS2] Dialogue entre 2 SWF- tellTarget ???
    Par Geilgestorm dans le forum ActionScript 1 & ActionScript 2
    Réponses: 11
    Dernier message: 24/10/2004, 22h07

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