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(); } }qlequ'un à proposition svp ou a déja confronté au même problème.
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(); } }
Partager