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