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

Java Discussion :

utiliser getParameter et getInputStream


Sujet :

Java

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut utiliser getParameter et getInputStream
    Bonjour,

    J'ai une servlet ou j'utilise getParameter et ensuite getInputStream.
    Le problème c'est quand je met le getInputStream avec le getParameter celui ce remet à null.
    Comment faire pour que le getInputStream ne se remettre pas à null après un getParameter

    Merci de votre aide

  2. #2
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Piouu

    Non y'a rien a faire j'ai pas pigé un mot de ce que tu nous racontes..

    Tu pourrais essayer d'être un peu plus clair dans tes explications ? Décrire le contexte dans lequel tu te trouves avec éventuellement un petit bout de code aussi pourrait faciliter un peu la compréhension..

    Cdt.

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je vais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(request.getParameter("url") == monChoix){
    String test= "";
    BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
    text = reader.readLine();
     
    }
    Le problème c'est quand je fait se test, sa passe bien dans le if mais du coup sa met le getInputStream à null alors que si je fait pas le test, je récupère bien son contenu.
    Le contenu de getInputStream est rempli grâce à un client http.
    Je suis obligé de faire ce test car j'ai une seule servlet dans mon application qui gère toutes les requêtes envoyées

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 631
    Points
    21 631
    Par défaut
    Hello,

    cela arrive lorsque le corps de la requête contient des paramètres. Genre si c'est un POST de type application/x-www-form-urlencoded ou multipart/form-data.
    Dans ce cas-là, getParameter() et getInputStream() vont aller lire les mêmes données, puisque les paramètres sont dans ce qu'il y a à lire dans l'InputStream.
    Or, comme l'InputStream de la requête ne peut être lu qu'une seule fois (parce qu'il ne peut pas être chargé en mémoire au cas où il soit très gros, comme l'upload d'un film en HD,) si tu appelles getParameter() il sera lu, et donc c'est fini, plus de getInputStream().

    Pour la solution, ben...
    Dans ces cas-là tu as juste pas besoin de getInputStream() en fait. Tu auras tout ce qu'il faut avec getParameter() ou les autres méthodes du même genre. Pourquoi appeler getInputStream dans ce cas ?

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    dans mon client http, je fait write dans le inputStream

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 631
    Points
    21 631
    Par défaut
    Quelle importance, puisque c'est le serveur et pas le client, là ?

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    J'ai un client http qui fait un write et qui fait une connexion vers le serveur et dans ma servlet je récupère le contenu du inputStrean

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 631
    Points
    21 631
    Par défaut
    Une telle chose n'est pas censée provoquer des effets comme ceux dont tu parles.

    Il va falloir montrer plus de code, côté client et côté serveur. En l'état, tu nous parles d'un mouton à cinq pattes, ça n'existe pas.

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je vous ai déjà mi le code concerné dans la servlet.

    Client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    		URL url = new URL("monURL");
    			connection = (HttpURLConnection) url.openConnection();
    			connection.setDefaultUseCaches(false);
    			connection.setDoOutput(true);
    			connection.setDoInput(true);	
     
    	        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
    	        writer.write(monText+"\n");
    	        writer.close();

  10. #10
    Expert éminent sénior
    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
    Points : 48 804
    Points
    48 804
    Par défaut
    getParameter consomme le inputstream, au cas où il y aurait des paramètres à l'intérieur. Il n'y a rien à faire, c'est comme ça. Si tu veux les paramètres de l'url (et uniquement ceux là) et le inputstream dans la même requete, il faut d'abord lire l'inputstream, ensuite lire les paramètres.

  11. #11
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Sauf que je veux lire le contenu du input stream selon le contenu de getParameter.
    Je lit le input stream si mon getParameter n'est pas null, sinon je ne le lit pas

  12. #12
    Expert éminent sénior
    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
    Points : 48 804
    Points
    48 804
    Par défaut
    Sauf que tu ne peux pas parce que getParameter utilise des données qui sont dans l'inpuStream. Tu dois revoir ton design et envisager des options alternatives:

    • transformer ta construction d'url pour ne pas avoir besoin de mélanger inputStream et parametres
      http://monserveur/monApplication/maServlet?option=truc + content deviendrait http://monserveur/monApplication/maServlet/truc + content
    • lire ton inputstream avant, le stocker quelque part et l'utiliser uniquement si le paramètre vaux ce que tu veux. Inconvénient: stockage parfois inutile et ta servelt deviens de facto incapable de recevoir du multipart / form-data
    • parser manuellement getQueryString pour te limiter aux paramètres de la query, sans tenir compte d'un éventuel POST, et décider à partir de là

  13. #13
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Comme j'ai qu'une seule servlet pour toute l'application, je suis obligé d'utiliser le premier type d'url comme tu as mi?

  14. #14
    Expert éminent sénior
    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
    Points : 48 804
    Points
    48 804
    Par défaut
    non tu n'es pas obligé, je t'ai donné plusieurs exemple, tu pourra en découvrir d'autre. Le principe de base c'est: getInputstream après un getParameter, ça ne marche pas et il faudra faire avec.

    Après on peut se poser la question de pourquoi t'as une seule servlet pour toute l'application au lieu de mapper tes services sur différentes urls.

  15. #15
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    J'ai fait mon getInputStream avant mon getParameter et cela fonctionne.
    Maintenant, je cherche à faire une redirection pour afficher ce que j'ai récupérer du getInputStream sauf que cela ne s'affiche pas à l'écran mais dans ma console tomcat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		this.getServletContext().getRequestDispatcher("/maPage.jsp").forward(request, response);
    J'ai déjà mi plus haute le code du client http qui m'a permis d'appeler ma servlet

  16. #16
    Expert éminent sénior
    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
    Points : 48 804
    Points
    48 804
    Par défaut
    tu gère comment la réponse coté client? Parce que visiblement ce n'est pas un browser mais un client en java que tu as codé. C'est à lui de suivre la redirection.

  17. #17
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    le getRequestDispatcher est dans la servlet
    Et le client:
    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
    19
    		try {
    			URL url = new URL("http://localhost:8080/recupInfo");
    			connection = (HttpURLConnection) url.openConnection();
    			connection.setDefaultUseCaches(false);
    			connection.setDoOutput(true);
    			connection.setDoInput(true);	
     
    	        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
    	        writer.write(monTexte+"\n");
    	        writer.close();
     
     
    		} catch (MalformedURLException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			connection.disconnect();
    		}
    Le client http lance bien une connexion vers la servlet qui va lire les donnée envoyé par le client et ensuite je veux qu'elle redirige vers la bonne jsp grâce au getRequestDispatcher sauf qu'il m'affiche ma page sur la console TOMCAT et non dans mon navigateur

Discussions similaires

  1. Utiliser variable de request.getParameter dans JSP
    Par kawaiyush dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 08/01/2015, 15h52
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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