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

Développement Web en Java Discussion :

activer/désactiver la compression GZIP des pages


Sujet :

Développement Web en Java

  1. #1
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Points : 655
    Points
    655
    Par défaut activer/désactiver la compression GZIP des pages
    Bonjour

    voilà j'ai un big problem

    Je génère une page que je transmet au navigateur web (en fait c un xml mais ça on s'en fout).
    Sur mon ordi ça plante avec IE (6 sp1), ça marche avec Mozilla.
    Sur d'autres ordi de la boîte ça marche avec IE.
    (quand je dis ça marche pas, IE affiche une erreur xml invalide, et le code source c'est du binaire)

    Donc je suppose que la compression peut ne pas être supportée par tous les postes de l'entreprise.

    Le code de compression est :
    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
    		// Définie le content type text/xml
    		response.setContentType("text/xml");
     
    		// Compression du document
    		response.setHeader("Content-Encoding", "gzip");
     
    		// Désactive la mise en cache
    		response.setHeader("Cache-Control", "public" );
     
    		...
     
    		// Convertisseur
    		StringWriter strWriter = new StringWriter();
    		try {
    		  XMLSerializer serializer = new XMLSerializer(strWriter, new OutputFormat("xml","ISO-8859-1", false) );
    		  serializer.serialize( xml.getFinalDocument() );
     
    		  // Compression de la réponse
    		  java.util.zip.GZIPOutputStream gzos = new java.util.zip.GZIPOutputStream(response.getOutputStream());
    		  try {
    			gzos.write(strWriter.toString().getBytes());
    		  }
    		  finally {
    			gzos.close();
    		  }
    		}
    		finally {
    		  strWriter.close();
    		}
    Si je transforme en :
    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
    		PrintWriter out = response.getWriter();
     
    		// Définie le content type text/xml
    		response.setContentType("text/xml");
     
    		// Désactive la mise en cache
    		response.setHeader("Cache-Control", "public" );
     
    		...
     
    		// Convertisseur
    		StringWriter strWriter = new StringWriter();
    		XMLSerializer serializer = new XMLSerializer(strWriter, new OutputFormat("xml","ISO-8859-1", false) );
    		serializer.serialize( xml.getFinalDocument() );
    		out.println(strWriter.toString());
    		strWriter.close();
    ça marche.

    Mais le problème, c'est que le XML est très bavard et certains fichiers sont énoooOOÔOOooormes.

    Donc je cherche soit à corriger le problème sur IE, y'a-t'il un header à envoyer ? parce qu'en général une page web habituelle peut être gzippée et marcher... du moins il me semble.

    Ou alors en désespoir de cause, comment détecter que le navigateur n'accepte pas la compression ? et donc choisir l'un de ces 2 codes en fonction du résultat.

  2. #2
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 407
    Points
    1 407
    Par défaut
    heu et pk tu regarde pas si le navigateur qui fait la requete supporte la compression en regardant ds le header de la "request"

    et ensuite, "si" c est supporté, alors là tu compresses....


    C possible de faire comme ca ?

  3. #3
    Membre confirmé

    Inscrit en
    Juillet 2002
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 116
    Points : 514
    Points
    514
    Par défaut
    Tout à fait d'accord avec RandomX ...

    Voilà, le genre de méthode qui te permet de savoir si tu peux compresser ou pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public boolean isGzipSupported(HttpServletRequest httpservletrequest)
    {
        String s = httpservletrequest.getHeader("Accept-Encoding");
        return s != null && s.indexOf("gzip") != -1;
    }

  4. #4
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Points : 655
    Points
    655
    Par défaut
    merci c'est impeccable ce que je voulais
    ça marche dans IE mais dans Mozilla (donc je suppose aussi sur d'autres IE quia cceptent la compression), j'ai une erreur.

    Voici le code:
    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
    48
    49
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    		throws ServletException, IOException {
     
    		boolean gzip = true;
    		String s = request.getHeader("Accept-Encoding"); 
    		if (s == null || s.indexOf("gzip") == -1)
    			gzip = false; 
     
    		PrintWriter out = response.getWriter();
     
    		// Définie le content type text/xml
    		response.setContentType("text/xml");
     
    		// Compression du document
    		if (gzip)
    			response.setHeader("Content-Encoding", "gzip");
     
    		// Désactive la mise en cache
    		response.setHeader("Cache-Control", "public" );
     
    		...
     
    		// Convertisseur
    		StringWriter strWriter = new StringWriter();
    		try {
    		  XMLSerializer serializer = new XMLSerializer(strWriter, new OutputFormat("xml","ISO-8859-1", false) );
    		  serializer.serialize( xml.getFinalDocument() );
     
    		  if (gzip) {
    			  // Compression de la réponse
    			  java.util.zip.GZIPOutputStream gzos = new java.util.zip.GZIPOutputStream(response.getOutputStream());
    			  try {
    				gzos.write(strWriter.toString().getBytes());
    			  }
    			  finally {
    				gzos.close();
    			  }
    		  }
    		  else {
    			out.println(strWriter.toString());
    		  }
    		}
    		finally {
    		  strWriter.close();
    		}
     
    		out.flush();
    		out.close();
    	}
    L'erreur :
    java.lang.IllegalStateException: "getWriter()" a déjà été appelé pour cette réponse

    je capte pas bien

  5. #5
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 407
    Points
    1 407
    Par défaut
    je pesne que c parce que tu lui passe un autre writer alors que t'as déja setter le premier par getWriter.

    strWriter.toString() applique un nouveau writer.

    @+

  6. #6
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Points : 655
    Points
    655
    Par défaut
    pb résolu

    j'ai remplacé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          PrintWriter out = response.getWriter();
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		PrintWriter out = null;
    		if (!gzip)
    			out = response.getWriter();

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 42
    Points : 37
    Points
    37
    Par défaut gzip
    j'ai le même en problème en utilisant autre chose mais ça ralentit énormément
    IE7 et firefox3.
    ma question ta classe XMLSerializer elle appartient a quel API stp?

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Citation Envoyé par ms2000 Voir le message
    j'ai le même en problème en utilisant autre chose mais ça ralentit énormément
    IE7 et firefox3.
    ma question ta classe XMLSerializer elle appartient a quel API stp?
    http://www.google.fr/search?hl=fr&q=...chercher&meta=

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

Discussions similaires

  1. Désactiver le rafraichissement automatique des pages web aspx
    Par Espoirwakal dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 26/11/2011, 12h33
  2. [Tomcat 6] Compression GZIP des pages à la volée
    Par kilicool dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 28/03/2011, 23h50
  3. Tomcat : Compression / Encodage des pages
    Par kilicool dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 28/03/2011, 22h43
  4. compression Gzip d'une page html
    Par vivian dans le forum Langage
    Réponses: 6
    Dernier message: 03/07/2006, 18h10
  5. Activer / désactiver des périphériques
    Par adage2000 dans le forum MFC
    Réponses: 3
    Dernier message: 28/04/2005, 16h51

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