001
014
015 package com.liferay.portal.kernel.servlet;
016
017 import com.liferay.portal.kernel.io.OutputStreamWriter;
018 import com.liferay.portal.kernel.io.WriterOutputStream;
019 import com.liferay.portal.kernel.io.unsync.UnsyncPrintWriter;
020 import com.liferay.portal.kernel.log.Log;
021 import com.liferay.portal.kernel.log.LogFactoryUtil;
022
023 import java.io.OutputStream;
024 import java.io.PrintWriter;
025 import java.io.Writer;
026
027 import javax.servlet.ServletOutputStream;
028 import javax.servlet.http.HttpServletResponse;
029 import javax.servlet.http.HttpServletResponseWrapper;
030 import javax.servlet.jsp.PageContext;
031
032
035 public class PipingServletResponse extends HttpServletResponseWrapper {
036
037 public PipingServletResponse(
038 HttpServletResponse response, OutputStream outputStream) {
039
040 super(response);
041
042 if (outputStream == null) {
043 throw new NullPointerException("Output stream is null");
044 }
045
046 _servletOutputStream = new PipingServletOutputStream(outputStream);
047 }
048
049 public PipingServletResponse(
050 HttpServletResponse response, PrintWriter printWriter) {
051
052 super(response);
053
054 if (printWriter == null) {
055 throw new NullPointerException("Print writer is null");
056 }
057
058 _printWriter = printWriter;
059 }
060
061 public PipingServletResponse(
062 HttpServletResponse response, ServletOutputStream servletOutputStream) {
063
064 super(response);
065
066 if (servletOutputStream == null) {
067 throw new NullPointerException("Servlet output stream is null");
068 }
069
070 _servletOutputStream = servletOutputStream;
071 }
072
073 public PipingServletResponse(HttpServletResponse response, Writer writer) {
074 super(response);
075
076 if (writer == null) {
077 throw new NullPointerException("Writer is null");
078 }
079
080 _printWriter = new UnsyncPrintWriter(writer, true);
081 }
082
083 public PipingServletResponse(PageContext pageContext) {
084 this(
085 (HttpServletResponse)pageContext.getResponse(),
086 pageContext.getOut());
087 }
088
089 public PipingServletResponse(
090 PageContext pageContext, boolean trimNewLines) {
091
092 super((HttpServletResponse)pageContext.getResponse());
093
094 if (trimNewLines && (pageContext instanceof PageContextWrapper)) {
095 PageContextWrapper pageContextWrapper =
096 (PageContextWrapper)pageContext;
097
098 PageContext wrappedPageContext =
099 pageContextWrapper.getWrappedPageContext();
100
101 _printWriter = new UnsyncPrintWriter(
102 new TrimNewLinesJspWriter(wrappedPageContext.getOut()),
103 true);
104 }
105 else {
106 _printWriter = new UnsyncPrintWriter(pageContext.getOut(), true);
107 }
108 }
109
110 public ServletOutputStream getOutputStream() {
111 if (_servletOutputStream == null) {
112 if (_log.isWarnEnabled()) {
113 _log.warn(
114 "Getting an output stream when a writer is available is " +
115 "not recommended because it is slow");
116 }
117
118 _servletOutputStream = new PipingServletOutputStream(
119 new WriterOutputStream(
120 _printWriter, getCharacterEncoding(), true));
121 }
122
123 return _servletOutputStream;
124 }
125
126 public PrintWriter getWriter() {
127 if (_printWriter == null) {
128 if (_log.isWarnEnabled()) {
129 _log.warn(
130 "Getting a writer when an output stream is available is " +
131 "not recommended because it is slow");
132 }
133
134 _printWriter = new UnsyncPrintWriter(
135 new OutputStreamWriter(_servletOutputStream));
136 }
137
138 return _printWriter;
139 }
140
141 private static Log _log = LogFactoryUtil.getLog(
142 PipingServletResponse.class);
143
144 private PrintWriter _printWriter;
145 private ServletOutputStream _servletOutputStream;
146
147 }