Author: markt
Date: Fri Jan 9 09:34:41 2015
New Revision: 1650465
URL: http://svn.apache.org/r1650465
Log:
Clean-up
- Fix Java 8 Javadoc warnings
- Correct copy/paste errors in Javadoc
- Consistent formatting
- Reduce method visibility where possible
- In-line single use methods
Modified:
tomcat/trunk/java/org/apache/coyote/OutputBuffer.java
tomcat/trunk/java/org/apache/coyote/http11/Http11OutputBuffer.java
Modified: tomcat/trunk/java/org/apache/coyote/OutputBuffer.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/OutputBuffer.java?rev=1650465&r1=1650464&r2=1650465&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/OutputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/coyote/OutputBuffer.java Fri Jan 9 09:34:41
2015
@@ -14,14 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.coyote;
import java.io.IOException;
import org.apache.tomcat.util.buf.ByteChunk;
-
/**
* Output buffer.
*
@@ -32,17 +30,20 @@ import org.apache.tomcat.util.buf.ByteCh
*/
public interface OutputBuffer {
-
/**
- * Write the response. The caller ( tomcat ) owns the chunks.
+ * Write the given data to the response. The caller owns the chunks.
*
* @param chunk data to write
* @param response used to allow buffers that can be shared by multiple
* responses.
- * @throws IOException
+ *
+ * @return The number of bytes written which may be less than available in
+ * the input chunk
+ *
+ * @throws IOException an underlying I/O error occurred
*/
- public int doWrite(ByteChunk chunk, Response response)
- throws IOException;
+ public int doWrite(ByteChunk chunk, Response response) throws IOException;
+
/**
* Bytes written to the underlying socket. This includes the effects of
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11OutputBuffer.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11OutputBuffer.java?rev=1650465&r1=1650464&r2=1650465&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11OutputBuffer.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11OutputBuffer.java Fri Jan
9 09:34:41 2015
@@ -32,11 +32,30 @@ import org.apache.tomcat.util.http.HttpM
import org.apache.tomcat.util.net.SocketWrapperBase;
import org.apache.tomcat.util.res.StringManager;
+/**
+ * Provides buffering for the HTTP headers (allowing responses to be reset
+ * before they have been committed) and the link to the Socket for writing the
+ * headers (once committed) and the response body. Note that buffering of the
+ * response body happens at a higher level.
+ */
public class Http11OutputBuffer implements OutputBuffer {
- // ----------------------------------------------------- Instance Variables
+ // -------------------------------------------------------------- Variables
+
+ /**
+ * The string manager for this package.
+ */
+ protected static final StringManager sm =
StringManager.getManager(Http11OutputBuffer.class);
+
+
+ /**
+ * Logger.
+ */
+ private static final Log log = LogFactory.getLog(Http11OutputBuffer.class);
+ // ----------------------------------------------------- Instance Variables
+
/**
* Associated Coyote response.
*/
@@ -62,20 +81,19 @@ public class Http11OutputBuffer implemen
/**
- * Position in the buffer.
+ * Position in the header buffer.
*/
protected int pos;
/**
- * Filter library.
- * Note: Filter[0] is always the "chunked" filter.
+ * Filter library for processing the response body.
*/
protected OutputFilter[] filterLibrary;
/**
- * Active filter (which is actually the top of the pipeline).
+ * Active filters for the current request.
*/
protected OutputFilter[] activeFilters;
@@ -85,11 +103,13 @@ public class Http11OutputBuffer implemen
*/
protected int lastActiveFilter;
+
/**
* Underlying output buffer.
*/
protected OutputBuffer outputStreamOutputBuffer;
+
/**
* Wrapper for socket where data will be written to.
*/
@@ -122,29 +142,17 @@ public class Http11OutputBuffer implemen
}
- // -------------------------------------------------------------- Variables
-
- /**
- * The string manager for this package.
- */
- protected static final StringManager sm =
- StringManager.getManager(Constants.Package);
-
- /**
- * Logger.
- */
- private static final Log log = LogFactory.getLog(Http11OutputBuffer.class);
-
// ------------------------------------------------------------- Properties
-
/**
- * Add an output filter to the filter library.
+ * Add an output filter to the filter library. Note that calling this
method
+ * resets the currently active filters to none.
+ *
+ * @param filter The filter to add
*/
public void addFilter(OutputFilter filter) {
- OutputFilter[] newFilterLibrary =
- new OutputFilter[filterLibrary.length + 1];
+ OutputFilter[] newFilterLibrary = new
OutputFilter[filterLibrary.length + 1];
for (int i = 0; i < filterLibrary.length; i++) {
newFilterLibrary[i] = filterLibrary[i];
}
@@ -152,22 +160,28 @@ public class Http11OutputBuffer implemen
filterLibrary = newFilterLibrary;
activeFilters = new OutputFilter[filterLibrary.length];
-
}
/**
* Get filters.
+ *
+ * @return The current filter library containing all possible filters
*/
public OutputFilter[] getFilters() {
-
return filterLibrary;
-
}
/**
- * Add an output filter to the filter library.
+ * Add an output filter to the active filters for the current response.
+ * <p>
+ * The filter does not have to be present in {@link #getFilters()}.
+ * <p>
+ * A filter can only be added to a response once. If the filter has already
+ * been added to this response then this method will be a NO-OP.
+ *
+ * @param filter The filter to add
*/
public void addActiveFilter(OutputFilter filter) {
@@ -184,37 +198,26 @@ public class Http11OutputBuffer implemen
activeFilters[++lastActiveFilter] = filter;
filter.setResponse(response);
-
}
// --------------------------------------------------- OutputBuffer Methods
- /**
- * Write the contents of a byte chunk.
- *
- * @param chunk byte chunk
- * @return number of bytes written
- * @throws IOException an underlying I/O error occurred
- */
@Override
- public int doWrite(ByteChunk chunk, Response res)
- throws IOException {
+ public int doWrite(ByteChunk chunk, Response res) throws IOException {
if (!committed) {
-
// Send the connector a request for commit. The connector should
// then validate the headers, send them (using sendHeaders) and
// set the filters accordingly.
response.action(ActionCode.COMMIT, null);
-
}
- if (lastActiveFilter == -1)
+ if (lastActiveFilter == -1) {
return outputStreamOutputBuffer.doWrite(chunk, res);
- else
+ } else {
return activeFilters[lastActiveFilter].doWrite(chunk, res);
-
+ }
}
@@ -230,22 +233,18 @@ public class Http11OutputBuffer implemen
// --------------------------------------------------------- Public Methods
-
/**
* Flush the response.
*
* @throws IOException an underlying I/O error occurred
*/
- public void flush()
- throws IOException {
+ public void flush() throws IOException {
if (!committed) {
-
// Send the connector a request for commit. The connector should
// then validate the headers, send them (using sendHeader) and
// set the filters accordingly.
response.action(ActionCode.COMMIT, null);
-
}
// go through the filters and if there is gzip filter
@@ -283,6 +282,7 @@ public class Http11OutputBuffer implemen
byteCount = 0;
}
+
/**
* Recycle the output buffer. This should be called when closing the
* connection.
@@ -292,6 +292,7 @@ public class Http11OutputBuffer implemen
socketWrapper = null;
}
+
/**
* End processing of current HTTP request.
* Note: All bytes of the current request should have been already
@@ -328,11 +329,13 @@ public class Http11OutputBuffer implemen
response.action(ActionCode.COMMIT, null);
}
- if (finished)
+ if (finished) {
return;
+ }
- if (lastActiveFilter != -1)
+ if (lastActiveFilter != -1) {
activeFilters[lastActiveFilter].end();
+ }
flushBuffer(true);
@@ -377,7 +380,6 @@ public class Http11OutputBuffer implemen
* Send the response status line.
*/
public void sendStatus() {
-
// Write protocol name
write(Constants.HTTP_11_BYTES);
headerBuffer[pos++] = Constants.SP;
@@ -395,7 +397,7 @@ public class Http11OutputBuffer implemen
write(Constants._404_BYTES);
break;
default:
- write(status);
+ write(String.valueOf(status));
}
headerBuffer[pos++] = Constants.SP;
@@ -414,6 +416,7 @@ public class Http11OutputBuffer implemen
}
// End the response status line
+ // TODO o.a.coyoye.http11.Constants is pre-loaded. Can we drop this?
if (org.apache.coyote.Constants.IS_SECURITY_ENABLED){
AccessController.doPrivileged(
new PrivilegedAction<Void>(){
@@ -429,7 +432,6 @@ public class Http11OutputBuffer implemen
headerBuffer[pos++] = Constants.CR;
headerBuffer[pos++] = Constants.LF;
}
-
}
@@ -440,14 +442,12 @@ public class Http11OutputBuffer implemen
* @param value Header value
*/
public void sendHeader(MessageBytes name, MessageBytes value) {
-
write(name);
headerBuffer[pos++] = Constants.COLON;
headerBuffer[pos++] = Constants.SP;
write(value);
headerBuffer[pos++] = Constants.CR;
headerBuffer[pos++] = Constants.LF;
-
}
@@ -455,10 +455,8 @@ public class Http11OutputBuffer implemen
* End the header block.
*/
public void endHeaders() {
-
headerBuffer[pos++] = Constants.CR;
headerBuffer[pos++] = Constants.LF;
-
}
@@ -469,8 +467,7 @@ public class Http11OutputBuffer implemen
*
* @param mb data to be written
*/
- protected void write(MessageBytes mb) {
-
+ private void write(MessageBytes mb) {
if (mb.getType() != MessageBytes.T_BYTES) {
mb.toBytes();
ByteChunk bc = mb.getByteChunk();
@@ -495,20 +492,18 @@ public class Http11OutputBuffer implemen
/**
- * This method will write the contents of the specified message bytes
- * buffer to the output stream, without filtering. This method is meant to
- * be used to write the response header.
+ * This method will write the contents of the specified byte chunk to the
+ * output stream, without filtering. This method is meant to be used to
+ * write the response header.
*
* @param bc data to be written
*/
- protected void write(ByteChunk bc) {
-
+ private void write(ByteChunk bc) {
// Writing the byte chunk to the output buffer
int length = bc.getLength();
checkLengthBeforeWrite(length);
System.arraycopy(bc.getBytes(), bc.getStart(), headerBuffer, pos,
length);
pos = pos + length;
-
}
@@ -525,7 +520,6 @@ public class Http11OutputBuffer implemen
// Writing the byte chunk to the output buffer
System.arraycopy(b, 0, headerBuffer, pos, b.length);
pos = pos + b.length;
-
}
@@ -536,10 +530,10 @@ public class Http11OutputBuffer implemen
*
* @param s data to be written
*/
- protected void write(String s) {
-
- if (s == null)
+ private void write(String s) {
+ if (s == null) {
return;
+ }
// From the Tomcat 3.3 HTTP/1.0 connector
int len = s.length();
@@ -555,21 +549,6 @@ public class Http11OutputBuffer implemen
}
headerBuffer[pos++] = (byte) c;
}
-
- }
-
-
- /**
- * This method will print the specified integer to the output stream,
- * without filtering. This method is meant to be used to write the
- * response header.
- *
- * @param i data to be written
- */
- protected void write(int i) {
-
- write(String.valueOf(i));
-
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]