You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by vi...@apache.org on 2016/08/29 18:10:36 UTC
svn commit: r1758276 - in /tomcat/trunk: java/org/apache/catalina/connector/
test/org/apache/catalina/connector/
Author: violetagg
Date: Mon Aug 29 18:10:36 2016
New Revision: 1758276
URL: http://svn.apache.org/viewvc?rev=1758276&view=rev
Log:
Introduce a new method CoyoteOutputStream.write(ByteBuffer)
Added:
tomcat/trunk/test/org/apache/catalina/connector/test_content.txt (with props)
Modified:
tomcat/trunk/java/org/apache/catalina/connector/CoyoteOutputStream.java
tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java
tomcat/trunk/test/org/apache/catalina/connector/TestCoyoteOutputStream.java
Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteOutputStream.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteOutputStream.java?rev=1758276&r1=1758275&r2=1758276&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/CoyoteOutputStream.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteOutputStream.java Mon Aug 29 18:10:36 2016
@@ -17,6 +17,7 @@
package org.apache.catalina.connector;
import java.io.IOException;
+import java.nio.ByteBuffer;
import javax.servlet.ServletOutputStream;
import javax.servlet.WriteListener;
@@ -97,6 +98,15 @@ public class CoyoteOutputStream extends
if (nonBlocking) {
checkRegisterForWrite();
}
+ }
+
+
+ public void write(ByteBuffer from) throws IOException {
+ boolean nonBlocking = checkNonBlockingWrite();
+ ob.write(from);
+ if (nonBlocking) {
+ checkRegisterForWrite();
+ }
}
Modified: tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java?rev=1758276&r1=1758275&r2=1758276&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java Mon Aug 29 18:10:36 2016
@@ -430,6 +430,17 @@ public class OutputBuffer extends Writer
}
+ public void write(ByteBuffer from) throws IOException {
+
+ if (suspended) {
+ return;
+ }
+
+ writeBytes(from);
+
+ }
+
+
private void writeBytes(byte b[], int off, int len)
throws IOException {
@@ -442,6 +453,24 @@ public class OutputBuffer extends Writer
// if called from within flush(), then immediately flush
// remaining bytes
+ if (doFlush) {
+ bb.flushBuffer();
+ }
+
+ }
+
+
+ private void writeBytes(ByteBuffer from) throws IOException {
+
+ if (closed) {
+ return;
+ }
+
+ bb.append(from);
+ bytesWritten += from.remaining();
+
+ // if called from within flush(), then immediately flush
+ // remaining bytes
if (doFlush) {
bb.flushBuffer();
}
Modified: tomcat/trunk/test/org/apache/catalina/connector/TestCoyoteOutputStream.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/connector/TestCoyoteOutputStream.java?rev=1758276&r1=1758275&r2=1758276&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/connector/TestCoyoteOutputStream.java (original)
+++ tomcat/trunk/test/org/apache/catalina/connector/TestCoyoteOutputStream.java Mon Aug 29 18:10:36 2016
@@ -16,7 +16,10 @@
*/
package org.apache.catalina.connector;
+import java.io.File;
import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.channels.FileChannel.MapMode;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.atomic.AtomicInteger;
@@ -99,6 +102,27 @@ public class TestCoyoteOutputStream exte
doNonBlockingTest(2, 1, false);
}
+ @Test
+ public void testWriteWithByteBuffer() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ Context root = tomcat.addContext("", TEMP_DIR);
+ Tomcat.addServlet(root, "testServlet", new TestServlet());
+ root.addServletMapping("/", "testServlet");
+
+ tomcat.start();
+
+ ByteChunk bc = new ByteChunk();
+ int rc = getUrl("http://localhost:" + getPort() + "/", bc, null, null);
+ Assert.assertEquals(HttpServletResponse.SC_OK, rc);
+ File file = new File("test/org/apache/catalina/connector/test_content.txt");
+ try (RandomAccessFile raf = new RandomAccessFile(file, "r");) {
+ ByteChunk expected = new ByteChunk();
+ expected.append(raf.getChannel().map(MapMode.READ_ONLY, 0, file.length()));
+ Assert.assertTrue(expected.equals(bc));
+ }
+ }
+
private void doNonBlockingTest(int asyncWriteTarget, int syncWriteTarget,
boolean useContainerThreadToSetListener) throws Exception {
@@ -250,4 +274,20 @@ public class TestCoyoteOutputStream exte
}
}
}
+
+ private static final class TestServlet extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException, IOException {
+ CoyoteOutputStream os = (CoyoteOutputStream) resp.getOutputStream();
+ File file = new File("test/org/apache/catalina/connector/test_content.txt");
+ try (RandomAccessFile raf = new RandomAccessFile(file, "r");) {
+ os.write(raf.getChannel().map(MapMode.READ_ONLY, 0, file.length()));
+ }
+ }
+
+ }
}
Added: tomcat/trunk/test/org/apache/catalina/connector/test_content.txt
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/connector/test_content.txt?rev=1758276&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/connector/test_content.txt (added)
+++ tomcat/trunk/test/org/apache/catalina/connector/test_content.txt Mon Aug 29 18:10:36 2016
@@ -0,0 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This is a test file for the WebappServiceLoader
+# It contains comment lines and blank lines
+
+test content
Propchange: tomcat/trunk/test/org/apache/catalina/connector/test_content.txt
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org