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 :

Requete HTTP sur une servlet et caractères spéciaux


Sujet :

Servlets/JSP Java

  1. #1
    Membre averti
    Inscrit en
    Février 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 52
    Par défaut Requete HTTP sur une servlet et caractères spéciaux
    Bonjour,

    Je faias actuellement face à un problème concernant une requête HTTP vers une servlet distante.
    La servlet en question récupère un message et le stocke pour affichage, un genre de chat en fait.


    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    public void sendAnswer (String answer){
            try {
                URL chat_url;
                HttpURLConnection urlCon;
     
                String chat_str = CHAT_URL
                        + "?MODE=REGIST&VP_NO=" +
                        relatedChat.getVp_no() +
                        "&PLAYER=" +
                        relatedChat.getRole() +
                        "&MESSAGE=" +
                        answer;
                chat_url = new URL(chat_str);
                urlCon = (HttpURLConnection) chat_url.openConnection();
                urlCon.setRequestMethod("GET");
    /*POST PARAMETERS*/
    //            urlCon.setRequestProperty("MODE", "REGIST");
    //            urlCon.setRequestProperty("VP_NO", String.valueOf(relatedChat.getVp_no()));
    //            urlCon.setRequestProperty("PLAYER", relatedChat.getRole());
    //            urlCon.setRequestProperty("MESSAGE", answer);
                urlCon.setDoOutput(true);
                urlCon.connect();
                int ret_code = urlCon.getResponseCode();
                String ret_msg = urlCon.getResponseMessage();
                urlCon.disconnect();
            } 
            catch (MalformedURLException mex) {
                System.out.println(mex.getMessage());
            }
            catch (IOException ex) {
                System.out.println(ex.getMessage());
            }
        }
    L'appel fonctionne bien, sauf dans le cas ou un des paramètres de la requète possède des caractères spéciaux, problème ! Code de retour 505, Version Not Supported...
    Aucune différence que ce soit en GET ou en POST, la servlet "Chat" fonctionne correctement.

    Par exemple si answer ="Hello", pas de problème. Si par contre c'est "How do you do" ou "How are you ?" => code 505.

    Ca doit etre tout con à résoudre mais je n'ai pas trouvé comment faire

  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 utilises une applet côté client ?
    Tu peux utiliser StringEscapeUtils (org.apache.commons.lang)...

    Sinon, tu pourrais (peut-être) passer par une page html + AJAX et utiliser la fonction javascript escape(...) pour traiter les caractères spéciaux du message.

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Inscrit en
    Février 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 52
    Par défaut
    Coté "client", c'est une servlet qui affiche les messages et traite tout ça, pas d'applet donc.
    J'avais peut-être oublié de préciser que l'appel est fait depuis une simple classe java (pas une servlet) de l'application web locale. L'application traite un message en entrée pour générer l'objet "answer". Du coup, pas possible de traiter le message avec une fonction javascript dans une page HTML

    Cependant je vais aller voir du côté de StringEscapeUtils demain matin, merci pour le tuyau !

  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
    Citation Envoyé par boudou Voir le message
    Coté "client", c'est une servlet qui affiche les messages et traite tout ça, pas d'applet donc.
    On ne s'entend pas là... une servlet, c'est côté serveur... toujours !

    Donc, quel est le client au juste ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    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
    le servlet est le client d'un autre système, c'est pas si peu commun que çà

  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
    Je veux bien, ce que je voudrais savoir, c'est le type de process source puisque le process cible est la servlet (en d'autres termes)

    J'ai du mal à comprendre ce concept :

    l'appel est fait depuis une simple classe java (pas une servlet) de l'application web locale

    Serait-ce une classe java sur un serveur web qui cause à une servlet d'une autre application web ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Inscrit en
    Février 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 52
    Par défaut
    Serait-ce une classe java sur un serveur web qui cause à une servlet d'une autre application web ?
    Tout à fait.

    Il ya deux application web distantes.
    Appelons les CHAT et REPONDEUR.

    L'utilisateur se connecte sur l'interface du CHAT via un navigateur internet et entre un message dans la chatbox de la page jsp. Ce message est envoyé à une servlet du CHAT. Cette servlet envoie ce même message à une servlet du REPONDEUR qui traite ce message dans le coeur de métier (des objets java classiques donc).
    C'est dans ce coeur de métier que se situe le code posté plus haut. Une fois la réponse créée, il faut la renvoyer à la servlet du CHAT qui s'occupe d'enregistrer les messages.

    C'est à ce moment là que le problème de l'envoi du message avec caractères spéciaux via une requete HTTP vers une servlet distante se pose.

    Voila, je crois que je ne peux pas être plus clair avec des mots, j'espère que cela vous aura aidé à comprendre le contexte de mon problème

    Sur ce, je vais jeter un oeil à StringEscapeUtils !

  8. #8
    Membre averti
    Inscrit en
    Février 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 52
    Par défaut
    Effectivement, StringEscapeUtils pourrait marcher.
    Mais en partant de là, j'ai trouvé la classe URLEncoder du package java.net qui fait très bien le boulot sans ajout de librairie !

    Il fallait donc rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    answer = URLEncoder.encode(answer, "UTF-8");
    juste avant la création de l'url (chat_str).

    Merci de m'avoir mis sur la voie !
    Bonne journée et à la revoyure !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/04/2009, 14h16
  2. [DOM] Lancer une requete HTTPS sur un autre site
    Par davidkungfu dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 06/04/2008, 11h31
  3. Requête sur une chaîne de caractères
    Par Hakunamatata dans le forum Langage SQL
    Réponses: 9
    Dernier message: 02/04/2006, 18h27
  4. Dégradé sur une chaine de caractères avec 3 a 4 couleurs
    Par avogadro dans le forum Composants VCL
    Réponses: 6
    Dernier message: 31/03/2006, 13h21
  5. Réponses: 3
    Dernier message: 05/01/2006, 15h14

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