From eb349101c9e090d08784aaa25310314cdbbf7b9a Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 21 Feb 2024 14:07:45 +0100 Subject: [PATCH] fix empty resource --- .../http/servlet/ServletResourceStatic.java | 6 ++++-- .../server/http/servlet/ServletResponseImpl.java | 3 +++ .../server/http/servlet/out/EmptyStream.java | 15 ++++++++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) 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"); } }