diff --git a/unknow-server-http/src/main/java/unknow/server/http/servlet/ServletResourceStatic.java b/unknow-server-http/src/main/java/unknow/server/http/servlet/ServletResourceStatic.java index faee05c9..52586ab6 100644 --- a/unknow-server-http/src/main/java/unknow/server/http/servlet/ServletResourceStatic.java +++ b/unknow-server-http/src/main/java/unknow/server/http/servlet/ServletResourceStatic.java @@ -65,8 +65,10 @@ private void process(HttpServletRequest req, HttpServletResponse resp, boolean c if (!content) return; - ServletOutputStream os = resp.getOutputStream(); - os.write(data); + + try (ServletOutputStream os = resp.getOutputStream()) { + os.write(data); + } } @Override diff --git a/unknow-server-http/src/main/java/unknow/server/http/servlet/ServletResponseImpl.java b/unknow-server-http/src/main/java/unknow/server/http/servlet/ServletResponseImpl.java index fc737bbd..11767fec 100644 --- a/unknow-server-http/src/main/java/unknow/server/http/servlet/ServletResponseImpl.java +++ b/unknow-server-http/src/main/java/unknow/server/http/servlet/ServletResponseImpl.java @@ -28,6 +28,7 @@ import unknow.server.http.HttpConnection; import unknow.server.http.HttpError; import unknow.server.http.servlet.out.ChunckedOutputStream; +import unknow.server.http.servlet.out.EmptyStream; import unknow.server.http.servlet.out.LengthOutputStream; import unknow.server.http.servlet.out.Output; import unknow.server.http.servlet.out.ServletWriter; @@ -220,6 +221,8 @@ public void sendError(HttpError e, int sc, String msg) throws IOException { private T createStream() { if (contentLength < 0) return (T) new ChunckedOutputStream(p.getOut(), this, bufferSize); + if (contentLength == 0) + return (T) EmptyStream.INSTANCE; return (T) new LengthOutputStream(p.getOut(), this, contentLength); } diff --git a/unknow-server-http/src/main/java/unknow/server/http/servlet/out/EmptyStream.java b/unknow-server-http/src/main/java/unknow/server/http/servlet/out/EmptyStream.java index 153f73d5..73c0195d 100644 --- a/unknow-server-http/src/main/java/unknow/server/http/servlet/out/EmptyStream.java +++ b/unknow-server-http/src/main/java/unknow/server/http/servlet/out/EmptyStream.java @@ -46,6 +46,19 @@ public void setWriteListener(WriteListener writeListener) { // OK } @Override - public void write(int b) throws IOException { // OK + public void write(int b) throws IOException { + throw new IOException("empty stream"); + } + + @Override + public void write(byte[] b) throws IOException { + if (b.length > 0) + throw new IOException("empty stream"); + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + if (len > 0) + throw new IOException("empty stream"); } }