Skip to content

Commit 1fd2005

Browse files
committed
test request.getOutputStream
1 parent 22a9fec commit 1fd2005

File tree

3 files changed

+58
-10
lines changed

3 files changed

+58
-10
lines changed

src/main/java/cn/netbuffer/filter/ModifyHttpResponseFilter.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
import cn.netbuffer.filter.wrapper.ModifyHttpResponseWrapper;
44
import com.alibaba.fastjson.JSON;
55
import com.alibaba.fastjson.JSONObject;
6+
import org.apache.commons.lang3.StringUtils;
67

78
import javax.servlet.*;
89
import javax.servlet.annotation.WebFilter;
910
import javax.servlet.http.HttpServletResponse;
1011
import java.io.IOException;
12+
import java.io.PrintWriter;
1113

1214
@WebFilter(filterName = "ModifyHttpResponseFilter", urlPatterns = {"/json/*"})
1315
public class ModifyHttpResponseFilter implements Filter {
@@ -23,11 +25,14 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo
2325
System.out.println("-----------------before ModifyHttpResponseFilter------------------");
2426
filterChain.doFilter(servletRequest, modifyHttpResponseWrapper);
2527
System.out.println("-----------------after ModifyHttpResponseFilter------------------");
26-
JSONObject jsonObject = JSON.parseObject(modifyHttpResponseWrapper.getResult());
28+
JSONObject jsonObject = JSON.parseObject(StringUtils.isBlank(modifyHttpResponseWrapper.getResult()) ? modifyHttpResponseWrapper.getContent() : modifyHttpResponseWrapper.getResult());
2729
jsonObject.put("msg", "wrapper[" + jsonObject.getString("msg") + "]");
2830
HttpServletResponse response = (HttpServletResponse) modifyHttpResponseWrapper.getResponse();
2931
response.setContentType("application/json; charset=UTF-8");
30-
response.getWriter().write(jsonObject.toJSONString());
32+
PrintWriter printWriter = response.getWriter();
33+
printWriter.write(jsonObject.toJSONString());
34+
printWriter.flush();
35+
printWriter.close();
3136
}
3237

3338
@Override
Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,81 @@
11
package cn.netbuffer.filter.wrapper;
22

3+
import javax.servlet.ServletOutputStream;
4+
import javax.servlet.WriteListener;
35
import javax.servlet.http.HttpServletResponse;
46
import javax.servlet.http.HttpServletResponseWrapper;
7+
import java.io.ByteArrayOutputStream;
58
import java.io.CharArrayWriter;
69
import java.io.IOException;
710
import java.io.PrintWriter;
811

912
public class ModifyHttpResponseWrapper extends HttpServletResponseWrapper {
1013

11-
private PrintWriter cacheWriter;
1214
private CharArrayWriter bufferWriter;
15+
private ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
16+
private HttpServletResponse httpServletResponse;
1317

1418
public ModifyHttpResponseWrapper(HttpServletResponse response) {
1519
super(response);
1620
bufferWriter = new CharArrayWriter();
17-
cacheWriter = new PrintWriter(bufferWriter);
21+
httpServletResponse = response;
22+
}
23+
24+
@Override
25+
public ServletOutputStream getOutputStream() {
26+
return new ServletOutputStreamWrapper(this.byteArrayOutputStream, this.httpServletResponse);
1827
}
1928

2029
@Override
2130
public PrintWriter getWriter() throws IOException {
22-
return cacheWriter;
31+
return new PrintWriter(bufferWriter);
2332
}
2433

25-
/**
26-
* 获取原始的HTML页面内容。
27-
*
28-
* @return
29-
*/
3034
public String getResult() {
3135
return bufferWriter.toString();
3236
}
3337

38+
public String getContent() {
39+
return new String(byteArrayOutputStream.toByteArray());
40+
}
41+
3442
@Override
3543
public void setContentType(String type) {
3644
super.setContentType(type);
3745
}
3846

47+
private class ServletOutputStreamWrapper extends ServletOutputStream {
48+
49+
private ByteArrayOutputStream outputStream;
50+
private HttpServletResponse response;
51+
52+
public ServletOutputStreamWrapper(ByteArrayOutputStream byteArrayOutputStream, HttpServletResponse response) {
53+
this.outputStream = byteArrayOutputStream;
54+
this.response = response;
55+
}
56+
57+
@Override
58+
public boolean isReady() {
59+
return true;
60+
}
61+
62+
@Override
63+
public void setWriteListener(WriteListener listener) {
64+
}
65+
66+
@Override
67+
public void write(int b) throws IOException {
68+
this.outputStream.write(b);
69+
}
70+
71+
@Override
72+
public void flush() throws IOException {
73+
if (!this.response.isCommitted()) {
74+
byte[] body = this.outputStream.toByteArray();
75+
ServletOutputStream outputStream = this.response.getOutputStream();
76+
outputStream.write(body);
77+
outputStream.flush();
78+
}
79+
}
80+
}
3981
}

src/main/java/cn/netbuffer/servlet/JSONServlet.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t
1818
data.put("msg", "invoke success for " + this.getClass().getName());
1919
System.out.println("get json=" + data);
2020
response.getWriter().write(data.toString());
21+
// response.getOutputStream().write(data.toString().getBytes());
2122
}
2223

2324
}

0 commit comments

Comments
 (0)