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 ServletOutputStreamAdapter(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 @Override
089 public ServletOutputStream getOutputStream() {
090 if (_servletOutputStream == null) {
091 if (_log.isDebugEnabled()) {
092 _log.debug(
093 "Getting an output stream when a writer is available is " +
094 "not recommended because it is slow");
095 }
096
097 _servletOutputStream = new ServletOutputStreamAdapter(
098 new WriterOutputStream(
099 _printWriter, getCharacterEncoding(), true));
100 }
101
102 return _servletOutputStream;
103 }
104
105 @Override
106 public PrintWriter getWriter() {
107 if (_printWriter == null) {
108 if (_log.isDebugEnabled()) {
109 _log.debug(
110 "Getting a writer when an output stream is available is " +
111 "not recommended because it is slow");
112 }
113
114 _printWriter = UnsyncPrintWriterPool.borrow(
115 _servletOutputStream, getCharacterEncoding());
116 }
117
118 return _printWriter;
119 }
120
121 private static Log _log = LogFactoryUtil.getLog(
122 PipingServletResponse.class);
123
124 private PrintWriter _printWriter;
125 private ServletOutputStream _servletOutputStream;
126
127 }