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 :

[Filtre] activation de gzip


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 42
    Par défaut [Filtre] activation de gzip
    Bonjoour tout le monde,

    pour améliorer les performance de mon appli. j'ai ajouter un filter Java
    mais mon grand problèmec'est que ça ralenti énormement IE7 et firefox3 le temps de réponse et presque
    multiplié par 30 ou plus.
    mon filtre et 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    import javax.servlet.*; 
    	import javax.servlet.http.HttpServletRequest; 
    	import javax.servlet.http.HttpServletResponse; 
    	import java.io.IOException; 
    	import java.util.Enumeration; 
     
    	public class GZIPFilter implements Filter 
    	{ 
    	public void init(FilterConfig filterConfig){} 
    	public void destroy() {} 
     
    	public void doFilter (ServletRequest req, ServletResponse res, 
    	FilterChain chain) throws IOException, ServletException 
    	{ 
    	if (req instanceof HttpServletRequest && 
    	res instanceof HttpServletResponse) 
    	{ 
    	HttpServletRequest request = (HttpServletRequest)req; 
     
    	Enumeration e = request.getHeaders("Accept-Encoding"); 
    	while (e.hasMoreElements()) 
    	{ 
    	String name = (String)e.nextElement(); 
     
    	if (name != null && name.indexOf("gzip") != -1) 
    	{ // compress; 
     
    	HttpServletResponse response = (HttpServletResponse)res; 
    	GZIPResponseWrapper wr = new GZIPResponseWrapper(response); 
     
    	try 
    	{ 
    	chain.doFilter(request, wr); 
    	} 
    	finally 
    	{ 
    	wr.closeBuffer(); 
    	} 
    	return; 
    	} 
    	} 
    	} 
     
    	chain.doFilter(req, res); 
    	} 
    	}
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    import javax.servlet.http.HttpServletResponse; 
    		import javax.servlet.http.HttpServletResponseWrapper; 
    		import javax.servlet.ServletOutputStream; 
    		import java.io.PrintWriter; 
    		import java.io.IOException; 
    		import java.io.OutputStreamWriter; 
     
    		public class GZIPResponseWrapper extends HttpServletResponseWrapper 
    		{ 
    		private GZIPServletOutputStream stream; 
    		private HttpServletResponse res; 
    		private PrintWriter writer; 
     
    		public GZIPResponseWrapper(HttpServletResponse res) 
    		{ 
    		super(res); 
    		this.res = res; 
    		} 
     
    		public ServletOutputStream getOutputStream() throws IOException 
    		{ 
    		if (writer != null) 
    		throw new IllegalStateException("getWriter() has already been called for this response"); 
     
    		if (stream == null) 
    		{ 
    		res.addHeader("Content-Encoding", "gzip"); 
    		stream = new GZIPServletOutputStream(res.getOutputStream()); 
    		} 
     
    		return stream; 
    		} 
     
    		public PrintWriter getWriter() throws IOException 
    		{ 
    		if (stream != null) 
    		throw new IllegalStateException("getOutputStream() has already been called for this response"); 
     
    		if (writer == null) 
    		{ 
    		String enc = getCharacterEncoding(); 
    		writer = new PrintWriter(new OutputStreamWriter(getOutputStream(), enc)); 
    		} 
     
    		return writer; 
    		} 
     
    		public void flushBuffer() throws IOException 
    		{ 
    		if (writer != null) 
    		writer.flush(); 
    		else if (stream != null) 
    		stream.flush(); 
    		} 
     
    		public void closeBuffer() throws IOException 
    		{ 
    		if (writer != null) 
    		writer.close(); 
    		else if (stream != null) 
    		stream.close(); 
    		} 
    		}
    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
    import javax.servlet.ServletOutputStream; 
    import java.io.IOException; 
    import java.io.BufferedOutputStream; 
    import java.util.zip.GZIPOutputStream; 
     
    public class GZIPServletOutputStream extends ServletOutputStream 
    { 
    private GZIPOutputStream gzip; 
     
    public GZIPServletOutputStream(ServletOutputStream out) throws IOException 
    { 
    gzip = new GZIPOutputStream(new BufferedOutputStream(out)); 
    } 
     
    public void write(int b) throws IOException 
    { 
    gzip.write(b); 
    } 
     
    public void write(byte b[]) throws IOException 
    { 
    gzip.write(b, 0, b.length); 
    } 
     
    public void write(byte b[], int off, int len) throws IOException 
    { 
    gzip.write(b, off, len); 
    } 
     
    public void close() throws IOException 
    { 
    gzip.flush(); 
    gzip.close(); 
    } 
     
                         public void flush() throws IOException { gzip.flush(); }
                          }
    qlequ'un à proposition svp ou a déja confronté au même problème.

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 241
    Par défaut
    Bonjour,

    pourquoi faites vous potentiellement 2 appels à doFilter()?

    Cordialement,

    Desboys

    P.S.: Indentez votre code

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 42
    Par défaut
    parceque dans le cas où le navigateur n'accepte pas le gzip la
    requête/response doit continuer son cheminement.

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/06/2013, 19h35
  2. filtre Active Directory
    Par djwel dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 28/04/2009, 10h00
  3. activer/désactiver la compression GZIP des pages
    Par iubito dans le forum Développement Web en Java
    Réponses: 7
    Dernier message: 20/08/2008, 21h35
  4. [VBA-E] sommer une plage de cellules actives apres un filtre
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/04/2007, 12h07
  5. Filtre active directory
    Par dim971 dans le forum C#
    Réponses: 10
    Dernier message: 08/02/2007, 13h12

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