[Simpleweb-Support] HTTP Compression
Brought to you by:
niallg
From: Carfield Y. <car...@ca...> - 2006-01-14 04:28:42
|
Try to implement HTTP compression, it work fine at all browser I've accessable: safari, firefox, opera, internet explorer. However, there are still socket exception and I don't know why: java.io.IOException: Stream closed at simple.http.MonitoredOutputStream.ensureOpen(Unknown Source) at simple.http.MonitoredOutputStream.write(Unknown Source) at simple.http.ResponseStream.write(Unknown Source) at java.util.zip.GZIPOutputStream.finish(GZIPOutputStream.java:95) at java.util.zip.DeflaterOutputStream.close(DeflaterOutputStream.jav= a:141) at hk.com.carfield.web.simple.Controller.rawDisplay(Controller.java:= 126) at hk.com.carfield.web.simple.Controller.handleRequest(Controller.ja= va:64) at hk.com.carfield.web.simple.Controller.process(Controller.java:137= ) at simple.http.serve.BasicResource.handle(Unknown Source) at simple.http.serve.ResourceProcessor.handle(Unknown Source) at simple.http.Dispatcher.run(Unknown Source) at simple.util.process.Daemon.execute(Unknown Source) at simple.util.process.Daemon.run(Unknown Source) And method rawDisplay is just a method to show the file content directly: =09private void rawDisplay(Response res, File location) throws IOException, =09=09=09FileNotFoundException { =09=09res.set("Content-Encoding", "gzip"); =09=09res.set("Vary", "Accept-Encoding"); =09=09if (location.isFile()) { =09=09=09final InputStream is =3D new FileInputStream(location); =09=09=09final OutputStream os =3D res.getOutputStream(); =09=09=09OutputStream gos =3D null; =09=09=09try { =09=09=09=09gos =3D new GZIPOutputStream(os); =09=09=09=09final String mime =3D context.getMimeType(location.getName()); =09=09=09=09res.set("Content-Type", mime); =09=09=09=09IOUtils.copy(is, gos); =09=09=09} finally { =09=09=09=09is.close(); =09=09=09=09if(gos !=3D null) =09=09=09=09=09gos.close(); =09=09=09=09else =09=09=09=09=09os.close(); =09=09=09} =09=09} =09} The other exception is: java.lang.RuntimeException: java.io.IOException: Stream closed at hk.com.carfield.web.simple.Controller.setDocument(Controller.java= :100) at hk.com.carfield.web.simple.Controller.handleRequest(Controller.ja= va:69) at hk.com.carfield.web.simple.Controller.process(Controller.java:137= ) at simple.http.serve.BasicResource.handle(Unknown Source) at simple.http.serve.ResourceProcessor.handle(Unknown Source) at simple.http.Dispatcher.run(Unknown Source) at simple.util.process.Daemon.execute(Unknown Source) at simple.util.process.Daemon.run(Unknown Source) Caused by: java.io.IOException: Stream closed at simple.http.MonitoredOutputStream.ensureOpen(Unknown Source) at simple.http.MonitoredOutputStream.write(Unknown Source) at simple.http.ResponseStream.write(Unknown Source) at java.io.OutputStream.write(OutputStream.java:58) at java.util.zip.GZIPOutputStream.writeHeader(GZIPOutputStream.java:= 123) at java.util.zip.GZIPOutputStream.<init>(GZIPOutputStream.java:48) at java.util.zip.GZIPOutputStream.<init>(GZIPOutputStream.java:58) at hk.com.carfield.web.simple.Controller.setDocument(Controller.java= :97) ... 7 more =09private void setDocument(Response response, =09=09=09Document document) throws IOException { =09=09res.set("Content-Encoding", "gzip"); =09=09res.set("Vary", "Accept-Encoding"); =09=09final OutputStream os =3D response.getOutputStream(); =09=09OutputStream gos =3D null; =09=09try { =09=09=09gos =3D new GZIPOutputStream(os); =09=09=09document.write(gos); =09=09} catch (Exception e) { =09=09=09throw new RuntimeException(e); =09=09} finally { =09=09=09if(gos !=3D null) =09=09=09=09gos.close(); =09=09=09else =09=09=09=09os.close(); =09=09} =09} Anyone have any idea? |