11package cn .netbuffer .filter .wrapper ;
22
3+ import javax .servlet .ServletOutputStream ;
4+ import javax .servlet .WriteListener ;
35import javax .servlet .http .HttpServletResponse ;
46import javax .servlet .http .HttpServletResponseWrapper ;
7+ import java .io .ByteArrayOutputStream ;
58import java .io .CharArrayWriter ;
69import java .io .IOException ;
710import java .io .PrintWriter ;
811
912public 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}
0 commit comments