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 :

Inclure Javascrpit dans HttpServeur


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Slovénie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2015
    Messages : 42
    Par défaut Inclure Javascrpit dans HttpServeur
    Bonjour à tous !

    Tout d'abord j'espère que je poste bien dans la bonne section du forum et si ce n'est pas le cas merci de ne pas taper :p

    J'aimerais créer un serveur HTTP via Java pour pouvoir afficher des informations en temps réel extraites d'une base de données SQL, et ce par l’intermédiaire de la librairie Javascript Highcharts (qui permet de faire de jolis graphiques).

    Après avoir essayé de créer un serveur en Java grâce à SimpleFrameWork, j'ai opté pour HttpServer qui semblait être plus connu et offrait une meilleure documentation sur Internet.

    Le code que j'ai est le suivant:

    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
     
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.InetSocketAddress;
     
    import com.sun.net.httpserver.Headers;
    import com.sun.net.httpserver.HttpExchange;
    import com.sun.net.httpserver.HttpHandler;
    import com.sun.net.httpserver.HttpServer;
     
    public class HttpServ {
     
        public static void main(String[] args) throws Exception {
            HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
            server.createContext("/test", new MyHandler());
            server.setExecutor(null); // creates a default executor
            server.start();
        }
     
        static class MyHandler implements HttpHandler {
            public void handle(HttpExchange t) throws IOException {
                String response = "This is the response : COUCOU !!!";
                Headers headers = t.getResponseHeaders();
                headers.add("Content-Type", "application/atom+xml");
                t.sendResponseHeaders(200, 0);
                t.sendResponseHeaders(200, response.length());
                OutputStream os = t.getResponseBody();
                os.write(response.getBytes());
                os.close();
            }
        }
     
    }
    Lorsque j’exécute le programme et me connecte à l'adresse http:127.0.0.1:8000/test la page est bien affichée. Donc de ce côté là ça fonctionne.

    Par contre lorsque j'essaye de modifier le champ head, j'ai une page blanche. Et ce champ head j'aimerais pouvoir le modifier car ce dernier doit contenir le code suivant pour pouvoir afficher le graphique Highcharts:

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    		<title>Highcharts Example</title>
     
    		<script type="text/javascript" src="C:\Users\PC-Voix\Desktop\testJcharts\NEW\Highcharts-4.1.1\examples\pie-basic\jquery-1.11.2.min.js"></script>
    		<style type="text/css">
    ${demo.css}
    		</style>
    		<script type="text/javascript">
    $(function () {
        $('#container').highcharts({
            chart: {
                type: 'bar'
            },
            title: {
                text: 'Utilisation des Liens'
            },
            xAxis: {
                categories: ['Ethernet', 'GSM', 'T2', 'VHF', 'VLF']
            },
            yAxis: {
                min: 0,
                title: {
                    text: 'Affichage Temps-Reel'
                }
            },
            legend: {
                reversed: true
            },
            plotOptions: {
                series: {
                    stacking: 'normal'
                }
            },
    colors: ['#2ecc71','#e74c3c','#2c3e50'],
            series: [{
                name: 'Free',
                data: [5, 3, 4, 7, 2]
            }, {
                name: 'Buzzy',
                data: [2, 2, 3, 2, 1]
            }, {
                name: 'HS',
                data: [3, 4, 4, 2, 5]
            }]
        });
    });
    		</script>
    `

    Ma question est donc : ''Comment peut-on faire pour modifier le champ Head et insérer ce code Javascript ?'', ou plus simplement comment insérer du Javascript dans HttpServer?

    Par avance je vous remercie de l'aide que vous pourrez m'apporter,
    Cordialement,
    FLIGHT'

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    A priori, si dans l'outputStream que tu récupères par t.getResponseBody(), tu écris ton html, et que tu changes ton content-type en text/html, la page devrait s'afficher dans le navigateur.

    Ensuite, il faudrait modifier l'URL du javascript dans la page, pour que ça repointe vers ton serveur (un chemin relatif à un dossier accessible par le serveur). Et dans ta classe MyHandler tu testes si, l'url se termine par .js, tu renvoies le contenu du fichier complet correspondant à l'url passée.

    De manière générale, tu peux gérer dans ton handler un système capable soit de renvoyer dans le stream systématique le contenu d'un fichier lorsque l'URL correspond à un fichier dans un dossier local de ton serveur, sinon autre chose (tu peux parser l'URL et l’interpréter comme tu veux). Il faut juste que le content-type soit reconnaissable par le navigateur (donc un mimetype standard) pour ce qui doit être traité par le navigateur. Par exemple, si tu écris dans le flux le contenu d'un fichier png, il faudra mettre image/png.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Slovénie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2015
    Messages : 42
    Par défaut
    Salut Joel,

    Merci pour cette réponse rapide !

    Alors si j'ai bien compris ce qui est envoyé au client c'est le t.getResponseBody() qui lui contient l'outputStream qui ''contient'' le fichier html?

    Par contre je n'ai pas trop compris ce que tu voulais dire dans ton deuxième paragraphe. Qu'entends tu par modifier l'URL du javascript dans la page?
    Et pourquoi tester si l'URL se termine par .js ? ^^ (en fait j'ai juste mis le code de mon head qui représente en fait 98% de mon fichier .htm xD).


    Alors concrètement on va faire en sorte de juste renvoyer le contenu d'un fichier (présent sur notre serveur Java) au client, de telle sorte que l'on aura pas besoin de se soucier de ce qu'il y a dans le header ou dans le body?


    Désolé pour toutes mes questions, mais je débute en Java et j'ai pas encore trop l'habitude (voir pas du tout x) ) de ce langage.

    Par avance je te remercie pour ta réponse,
    Cordialement,
    FLIGHT'

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par FLIGHTWARS Voir le message
    Salut Joel,

    Merci pour cette réponse rapide !

    Alors si j'ai bien compris ce qui est envoyé au client c'est le t.getResponseBody() qui lui contient l'outputStream qui ''contient'' le fichier html?
    C'est une requête http qui est échangée entre le navigateur est le serveur : elles est composée d'un header et d'un body. L'outputStream permet d'écrire dans le body : le navigateur exploite le body grâce au contentType, qui lui dit ce que ce c'est, ce qui lui permet de savoir comment le traiter.
    Citation Envoyé par FLIGHTWARS Voir le message
    Par contre je n'ai pas trop compris ce que tu voulais dire dans ton deuxième paragraphe. Qu'entends tu par modifier l'URL du javascript dans la page?
    Et pourquoi tester si l'URL se termine par .js ? ^^ (en fait j'ai juste mis le code de mon head qui représente en fait 98% de mon fichier .htm xD).
    Dans ton html, il y a :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript" src="C:\Users\PC-Voix\Desktop\testJcharts\NEW\Highcharts-4.1.1\examples\pie-basic\jquery-1.11.2.min.js"></script>
    C'est une balise qui définit un javascript qui se trouve dans un fichier externe. Le chemin du dossier est un chemin absolu, qui n'a aucun sens pour le client, puisque c'est un dossier du serveur (sauf si client et serveur sont la même machine, mais c'est un cas particulier : autant gérer le cas général). Donc je parlais d'y mettre un chemin relatif que ton handler va utiliser pour déterminer le chemin absolu, et écrire le js dans le body.
    Citation Envoyé par FLIGHTWARS Voir le message
    Alors concrètement on va faire en sorte de juste renvoyer le contenu d'un fichier (présent sur notre serveur Java) au client, de telle sorte que l'on aura pas besoin de se soucier de ce qu'il y a dans le header ou dans le body?
    Donc, l'idée c'est d'envoyer un html au client (enfin pas vraiment envoyé, c'est la réponse en retour de la requête http du client) : cet html va être interprété par le client (le navigateur), et il va charger automatiquement certaines url qui s'y trouve (celle qu'il y a dans src, de la balise SCRIPT, ou IMG, par exemple...)

    Citation Envoyé par FLIGHTWARS Voir le message
    Désolé pour toutes mes questions, mais je débute en Java et j'ai pas encore trop l'habitude (voir pas du tout x) ) de ce langage.
    Ça n'a rien à voir avec Java en fait. C'est intéressant et formateur de faire un serveur http en Java. Mais il faut connaitre un peu les bases de http, html, etc... Dis-moi, tu fais un serveur perso pour le fun, ou c'est dans le but de faire une application web ? Parce que sinon il existe des conteneurs de servlet ou serveurs d'application déjà tout fait, et qui gère tout ça de manière infiniment plus robuste et scalable que ce tu pourras faire, du moins, sans y passer un certain temps. Parce que si tu débutes en Java, tu risques de passer à côté d'autres concepts : je ne sais pas si ta bibliothèque HttpServer gère par exemple le multithread, mais c'est une notion importante, ou, je pense aussi rien qua la notion de session...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Slovénie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2015
    Messages : 42
    Par défaut
    Merci pour les explications, c'est un peu plus clair mais je patauge toujours :/

    En fait je fais ce programme dans le cadre de mon alternance.
    Des données sont récupérées en Java et sont envoyées vers une base SQL.
    Ce que j'aimerais faire ensuite c'est récupérer ces données et les mettre en forme grâce à des graphiques (bien plus parlant que des chiffres ^^), pour pouvoir afficher cette page html sur un serveur de monitoring que j'ai monté.

    Du coup il ne serait pas possible de juste possible de balancer au client le contenu de ma page htm qui contient le header et le body?
    Et le lien de la source javascript sera un lien sur le serveur que le client pourra aller chercher comme ça la page sera correctement affichée?


    FLIGHT'

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    En gros, tu veux afficher des graphiques dans un navigateur web, avec une application en java qui les génèrent à partir de données récupérées dans une base de données.

    Tu peux faire ça avec une servlet standard, voire une simple JSP, hébergée par un tomcat. Pas besoin de t'embêter à faire un serveur http pour ça. C'est quoi ton "serveur de monitoring", ce n'est pas déjà un serveur web ?


    Ensuite,

    Citation Envoyé par FLIGHTWARS Voir le message
    Du coup il ne serait pas possible de juste possible de balancer au client le contenu de ma page htm qui contient le header et le body?
    Et le lien de la source javascript sera un lien sur le serveur que le client pourra aller chercher comme ça la page sera correctement affichée?
    C'est bien ça dont je te parles. Mais le chemin vers le javascript est un chemin absolu dans le filessytem a machine serveur, dans le html que tu montres. Or le client, en général, ce n'est pas le serveur : il n'a donc pas accès à ce fichier par ce chemin absolu. Tu pourrais copier tous le javascript dans la balise scrip, mais ça va être galère, pour pleins de raisons que je vais éluder volontairement.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Inclure fichier dans un autre
    Par jakkihm dans le forum Langage
    Réponses: 17
    Dernier message: 05/11/2006, 19h29
  2. inclure jar dans une Applet
    Par inseaiste dans le forum Applets
    Réponses: 6
    Dernier message: 24/07/2006, 14h49
  3. Inclure vi dans un script shell
    Par PierrotY dans le forum Linux
    Réponses: 3
    Dernier message: 18/05/2006, 09h28
  4. inclure installation dans installeur
    Par pitch21 dans le forum Installation
    Réponses: 3
    Dernier message: 24/02/2006, 09h16
  5. [VB.NET] Inclure MSDE dans le package
    Par SergeF dans le forum EDI/Outils
    Réponses: 4
    Dernier message: 24/06/2004, 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