You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2013/06/10 16:37:58 UTC
svn commit: r1491469 - in /geronimo/specs/trunk/geronimo-servlet_3.1_spec:
./ src/main/java/javax/servlet/ src/main/java/javax/servlet/http/
Author: gawor
Date: Mon Jun 10 14:37:57 2013
New Revision: 1491469
URL: http://svn.apache.org/r1491469
Log:
GERONIMO-6453: Create servlet 3.1 project with initial content. Patch from Adny McCright
Added:
geronimo/specs/trunk/geronimo-servlet_3.1_spec/
- copied from r1490867, geronimo/specs/trunk/geronimo-servlet_3.0_spec/
geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ReadListener.java (with props)
geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/WriteListener.java (with props)
geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpSessionIdListener.java (with props)
geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpUpgradeHandler.java (with props)
geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/WebConnection.java (with props)
Modified:
geronimo/specs/trunk/geronimo-servlet_3.1_spec/pom.xml
geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletInputStream.java
geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletOutputStream.java
geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletRequest.java
geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletRequestWrapper.java
geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletResponse.java
geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletResponseWrapper.java
geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpServlet.java
geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpServletRequest.java
geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpServletRequestWrapper.java
geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/Part.java
Modified: geronimo/specs/trunk/geronimo-servlet_3.1_spec/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/pom.xml?rev=1491469&r1=1490867&r2=1491469&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/pom.xml (original)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/pom.xml Mon Jun 10 14:37:57 2013
@@ -27,16 +27,16 @@
<parent>
<groupId>org.apache.geronimo.genesis</groupId>
<artifactId>genesis-java5-flava</artifactId>
- <version>2.0</version>
+ <version>2.1</version>
</parent>
<groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-servlet_3.0_spec</artifactId>
+ <artifactId>geronimo-servlet_3.1_spec</artifactId>
<packaging>bundle</packaging>
- <name>Apache Geronimo Servlet Spec 3.0</name>
- <version>1.1-SNAPSHOT</version>
+ <name>Apache Geronimo Servlet Spec 3.1</name>
+ <version>1.0-SNAPSHOT</version>
- <description>Servlet 3.0 API</description>
+ <description>Servlet 3.1 API</description>
<url>http://geronimo.apache.org/maven/${siteId}/${version}</url>
@@ -52,9 +52,9 @@
</properties>
<scm>
- <connection>scm:svn:https://svn.apache.org/repos/asf/geronimo/specs/trunk/geronimo-servlet_3.0_spec/</connection>
- <developerConnection>scm:svn:https://svn.apache.org/repos/asf/geronimo/specs/trunk/geronimo-servlet_3.0_spec/</developerConnection>
- <url>http://svn.apache.org/viewcvs.cgi/geronimo/specs/trunk/geronimo-servlet_3.0_spec/</url>
+ <connection>scm:svn:https://svn.apache.org/repos/asf/geronimo/specs/trunk/geronimo-servlet_3.1_spec/</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/geronimo/specs/trunk/geronimo-servlet_3.1_spec/</developerConnection>
+ <url>http://svn.apache.org/viewcvs.cgi/geronimo/specs/trunk/geronimo-servlet_3.1_spec/</url>
</scm>
<build>
@@ -65,27 +65,27 @@
<configuration>
<instructions>
<!-- The OSGi Alliance defined package numbers don't match up
- necessarily with the Java EE versions. Servlet 3.0 needs to
- be exported as 2.6 -->
+ necessarily with the Java EE versions. Servlet 3.1 needs to
+ be exported as 2.7 -->
<Export-Package>
- javax.servlet;version=2.6,
- javax.servlet.annotation;version=2.6,
- javax.servlet.descriptor;version=2.6,
- javax.servlet.http;version=2.6,
- javax.servlet.resources;version=2.6,
- javax.servlet;version=3.0,
- javax.servlet.annotation;version=3.0,
- javax.servlet.descriptor;version=3.0,
- javax.servlet.http;version=3.0,
- javax.servlet.resources;version=3.0,
+ javax.servlet;version=2.7,
+ javax.servlet.annotation;version=2.7,
+ javax.servlet.descriptor;version=2.7,
+ javax.servlet.http;version=2.7,
+ javax.servlet.resources;version=2.7,
+ javax.servlet;version=3.1,
+ javax.servlet.annotation;version=3.1,
+ javax.servlet.descriptor;version=3.1,
+ javax.servlet.http;version=3.1,
+ javax.servlet.resources;version=3.1,
</Export-Package>
<!-- Because of the duplicate exports, explicit imports are required -->
<Import-Package>
- javax.servlet;version=2.6,
- javax.servlet.annotation;version=2.6,
- javax.servlet.descriptor;version=2.6,
- javax.servlet.http;version=2.6,
- javax.servlet.resources;version=2.6,
+ javax.servlet;version=2.7,
+ javax.servlet.annotation;version=2.7,
+ javax.servlet.descriptor;version=2.7,
+ javax.servlet.http;version=2.7,
+ javax.servlet.resources;version=2.7,
</Import-Package>
</instructions>
</configuration>
Added: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ReadListener.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ReadListener.java?rev=1491469&view=auto
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ReadListener.java (added)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ReadListener.java Mon Jun 10 14:37:57 2013
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ */
+
+package javax.servlet;
+
+import java.io.IOException;
+import java.util.EventListener;
+
+/**
+ * This class represents a call-back mechanism that will notify implementations as HTTP request data becomes available
+ * to be read without blocking.
+ *
+ * @since Servlet 3.1
+ */
+public interface ReadListener extends EventListener {
+
+ /**
+ * When an instance of the ReadListener is registered with a ServletInputStream, this method will be invoked by the
+ * container the first time when it is possible to read data. Subsequently the container will invoke this method if
+ * and only if ServletInputStream.isReady() method has been called and has returned false.
+ *
+ * @throws IOException
+ * - if an I/O related error has occurred during processing
+ */
+ void onAllDataRead() throws IOException;
+
+ /**
+ * When an instance of the ReadListener is registered with a ServletInputStream, this method will be invoked by the
+ * container the first time when it is possible to read data. Subsequently the container will invoke this method if
+ * and only if ServletInputStream.isReady() method has been called and has returned false.
+ *
+ * @throws IOException
+ * - if an I/O related error has occurred during processing
+ */
+ void onDataAvailable() throws IOException;
+
+ /**
+ * Invoked when an error occurs processing the request.
+ */
+ void onError(Throwable t);
+}
Propchange: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ReadListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ReadListener.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ReadListener.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletInputStream.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletInputStream.java?rev=1491469&r1=1490867&r2=1491469&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletInputStream.java (original)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletInputStream.java Mon Jun 10 14:37:57 2013
@@ -50,22 +50,37 @@ public abstract class ServletInputStream
}
/**
- * Reads the input stream, one line at a time. Starting at an
- * offset, reads bytes into an array, until it reads a certain number
- * of bytes or reaches a newline character, which it reads into the
- * array as well.
+ * Returns true when all the data from the stream has been read else it returns false.
+ *
+ * @return true when all data for this particular request has been read, otherwise returns false.
+ * @since Servlet 3.1
+ */
+ public abstract boolean isFinished();
+
+ /**
+ * Returns true if data can be read without blocking else returns false.
+ *
+ * @return true if data can be obtained without blocking, otherwise returns false.
+ * @since Servlet 3.1
+ */
+ public abstract boolean isReady();
+
+ /**
+ * Reads the input stream, one line at a time. Starting at an offset, reads bytes into an array, until it reads a
+ * certain number of bytes or reaches a newline character, which it reads into the array as well.
* <p/>
- * <p>This method returns -1 if it reaches the end of the input
- * stream before reading the maximum number of bytes.
- *
- * @param b an array of bytes into which data is read
- * @param off an integer specifying the character at which
- * this method begins reading
- * @param len an integer specifying the maximum number of
- * bytes to read
- * @throws IOException if an input or output exception has occurred
- * @return an integer specifying the actual number of bytes
- * read, or -1 if the end of the stream is reached
+ * <p>
+ * This method returns -1 if it reaches the end of the input stream before reading the maximum number of bytes.
+ *
+ * @param b
+ * an array of bytes into which data is read
+ * @param off
+ * an integer specifying the character at which this method begins reading
+ * @param len
+ * an integer specifying the maximum number of bytes to read
+ * @throws IOException
+ * if an input or output exception has occurred
+ * @return an integer specifying the actual number of bytes read, or -1 if the end of the stream is reached
*/
public int readLine(byte[] b, int off, int len) throws IOException {
@@ -83,8 +98,21 @@ public abstract class ServletInputStream
}
return count > 0 ? count : -1;
}
-
-}
-
-
+ /**
+ * Instructs the ServletInputStream to invoke the provided ReadListener when it is possible to read.
+ *
+ * @param readListener
+ * - the ReadListener that should be notified when it's possible to read.
+ * @throws IllegalStateException
+ * - if one of the following conditions is true
+ * <ul>
+ * <li>the associated request is neither upgraded nor the async started</li>
+ * <li>setReadListener is called more than once within the scope of the same request.</li>
+ * </ul>
+ * @throws NullPointerException
+ * - if readListener is null
+ * @since Servlet 3.1
+ */
+ public abstract void setReadListener(ReadListener readListener);
+}
Modified: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletOutputStream.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletOutputStream.java?rev=1491469&r1=1490867&r2=1491469&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletOutputStream.java (original)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletOutputStream.java Mon Jun 10 14:37:57 2013
@@ -51,26 +51,35 @@ public abstract class ServletOutputStrea
}
/**
- * Writes a <code>String</code> to the client,
- * without a carriage return-line feed (CRLF)
- * character at the end.
- *
- * @param s the <code>String</code> to send to the client
- * @throws IOException if an input or output exception occurred
+ * This method can be used to determine if data can be written without blocking.
+ *
+ * @return true if a write to this ServletOutputStream will succeed, otherwise returns false.
+ * @since Servlet 3.1
+ */
+ public abstract boolean isReady();
+
+ /**
+ * Writes a <code>String</code> to the client, without a carriage return-line feed (CRLF) character at the end.
+ *
+ * @param s
+ * the <code>String</code> to send to the client
+ * @throws IOException
+ * if an input or output exception occurred
*/
public void print(String s) throws IOException {
- if (s == null) s = "null";
+ if (s == null)
+ s = "null";
int len = s.length();
for (int i = 0; i < len; i++) {
char c = s.charAt(i);
//
- // XXX NOTE: This is clearly incorrect for many strings,
+ // XXX NOTE: This is clearly incorrect for many strings,
// but is the only consistent approach within the current
- // servlet framework. It must suffice until servlet output
+ // servlet framework. It must suffice until servlet output
// streams properly encode their output.
//
- if ((c & 0xff00) != 0) { // high order byte must be zero
+ if ((c & 0xff00) != 0) { // high order byte must be zero
String errMsg = lStrings.getString("err.not_iso8859_1");
Object[] errArgs = new Object[1];
errArgs[0] = c;
@@ -82,13 +91,12 @@ public abstract class ServletOutputStrea
}
/**
- * Writes a <code>boolean</code> value to the client,
- * with no carriage return-line feed (CRLF)
- * character at the end.
- *
- * @param b the <code>boolean</code> value
- * to send to the client
- * @throws IOException if an input or output exception occurred
+ * Writes a <code>boolean</code> value to the client, with no carriage return-line feed (CRLF) character at the end.
+ *
+ * @param b
+ * the <code>boolean</code> value to send to the client
+ * @throws IOException
+ * if an input or output exception occurred
*/
public void print(boolean b) throws IOException {
String msg;
@@ -101,82 +109,82 @@ public abstract class ServletOutputStrea
}
/**
- * Writes a character to the client,
- * with no carriage return-line feed (CRLF)
- * at the end.
- *
- * @param c the character to send to the client
- * @throws IOException if an input or output exception occurred
+ * Writes a character to the client, with no carriage return-line feed (CRLF) at the end.
+ *
+ * @param c
+ * the character to send to the client
+ * @throws IOException
+ * if an input or output exception occurred
*/
public void print(char c) throws IOException {
print(String.valueOf(c));
}
/**
- * Writes an int to the client,
- * with no carriage return-line feed (CRLF)
- * at the end.
- *
- * @param i the int to send to the client
- * @throws IOException if an input or output exception occurred
+ * Writes an int to the client, with no carriage return-line feed (CRLF) at the end.
+ *
+ * @param i
+ * the int to send to the client
+ * @throws IOException
+ * if an input or output exception occurred
*/
public void print(int i) throws IOException {
print(String.valueOf(i));
}
/**
- * Writes a <code>long</code> value to the client,
- * with no carriage return-line feed (CRLF) at the end.
- *
- * @param l the <code>long</code> value
- * to send to the client
- * @throws IOException if an input or output exception
- * occurred
+ * Writes a <code>long</code> value to the client, with no carriage return-line feed (CRLF) at the end.
+ *
+ * @param l
+ * the <code>long</code> value to send to the client
+ * @throws IOException
+ * if an input or output exception occurred
*/
public void print(long l) throws IOException {
print(String.valueOf(l));
}
/**
- * Writes a <code>float</code> value to the client,
- * with no carriage return-line feed (CRLF) at the end.
- *
- * @param f the <code>float</code> value
- * to send to the client
- * @throws IOException if an input or output exception occurred
+ * Writes a <code>float</code> value to the client, with no carriage return-line feed (CRLF) at the end.
+ *
+ * @param f
+ * the <code>float</code> value to send to the client
+ * @throws IOException
+ * if an input or output exception occurred
*/
public void print(float f) throws IOException {
print(String.valueOf(f));
}
/**
- * Writes a <code>double</code> value to the client,
- * with no carriage return-line feed (CRLF) at the end.
- *
- * @param d the <code>double</code> value
- * to send to the client
- * @throws IOException if an input or output exception occurred
+ * Writes a <code>double</code> value to the client, with no carriage return-line feed (CRLF) at the end.
+ *
+ * @param d
+ * the <code>double</code> value to send to the client
+ * @throws IOException
+ * if an input or output exception occurred
*/
public void print(double d) throws IOException {
print(String.valueOf(d));
}
/**
- * Writes a carriage return-line feed (CRLF)
- * to the client.
- *
- * @throws IOException if an input or output exception occurred
+ * Writes a carriage return-line feed (CRLF) to the client.
+ *
+ * @throws IOException
+ * if an input or output exception occurred
*/
public void println() throws IOException {
print("\r\n");
}
/**
- * Writes a <code>String</code> to the client,
- * followed by a carriage return-line feed (CRLF).
- *
- * @param s the <code>String</code> to write to the client
- * @throws IOException if an input or output exception occurred
+ * Writes a <code>String</code> to the client, followed by a carriage return-line feed (CRLF).
+ *
+ * @param s
+ * the <code>String</code> to write to the client
+ * @throws IOException
+ * if an input or output exception occurred
*/
public void println(String s) throws IOException {
print(s);
@@ -184,13 +192,12 @@ public abstract class ServletOutputStrea
}
/**
- * Writes a <code>boolean</code> value to the client,
- * followed by a
- * carriage return-line feed (CRLF).
- *
- * @param b the <code>boolean</code> value
- * to write to the client
- * @throws IOException if an input or output exception occurred
+ * Writes a <code>boolean</code> value to the client, followed by a carriage return-line feed (CRLF).
+ *
+ * @param b
+ * the <code>boolean</code> value to write to the client
+ * @throws IOException
+ * if an input or output exception occurred
*/
public void println(boolean b) throws IOException {
print(b);
@@ -198,11 +205,12 @@ public abstract class ServletOutputStrea
}
/**
- * Writes a character to the client, followed by a carriage
- * return-line feed (CRLF).
- *
- * @param c the character to write to the client
- * @throws IOException if an input or output exception occurred
+ * Writes a character to the client, followed by a carriage return-line feed (CRLF).
+ *
+ * @param c
+ * the character to write to the client
+ * @throws IOException
+ * if an input or output exception occurred
*/
public void println(char c) throws IOException {
print(c);
@@ -210,11 +218,12 @@ public abstract class ServletOutputStrea
}
/**
- * Writes an int to the client, followed by a
- * carriage return-line feed (CRLF) character.
- *
- * @param i the int to write to the client
- * @throws IOException if an input or output exception occurred
+ * Writes an int to the client, followed by a carriage return-line feed (CRLF) character.
+ *
+ * @param i
+ * the int to write to the client
+ * @throws IOException
+ * if an input or output exception occurred
*/
public void println(int i) throws IOException {
print(i);
@@ -222,11 +231,12 @@ public abstract class ServletOutputStrea
}
/**
- * Writes a <code>long</code> value to the client, followed by a
- * carriage return-line feed (CRLF).
- *
- * @param l the <code>long</code> value to write to the client
- * @throws IOException if an input or output exception occurred
+ * Writes a <code>long</code> value to the client, followed by a carriage return-line feed (CRLF).
+ *
+ * @param l
+ * the <code>long</code> value to write to the client
+ * @throws IOException
+ * if an input or output exception occurred
*/
public void println(long l) throws IOException {
print(l);
@@ -234,13 +244,12 @@ public abstract class ServletOutputStrea
}
/**
- * Writes a <code>float</code> value to the client,
- * followed by a carriage return-line feed (CRLF).
- *
- * @param f the <code>float</code> value
- * to write to the client
- * @throws IOException if an input or output exception
- * occurred
+ * Writes a <code>float</code> value to the client, followed by a carriage return-line feed (CRLF).
+ *
+ * @param f
+ * the <code>float</code> value to write to the client
+ * @throws IOException
+ * if an input or output exception occurred
*/
public void println(float f) throws IOException {
print(f);
@@ -248,16 +257,31 @@ public abstract class ServletOutputStrea
}
/**
- * Writes a <code>double</code> value to the client,
- * followed by a carriage return-line feed (CRLF).
- *
- * @param d the <code>double</code> value
- * to write to the client
- * @throws IOException if an input or output exception occurred
+ * Writes a <code>double</code> value to the client, followed by a carriage return-line feed (CRLF).
+ *
+ * @param d
+ * the <code>double</code> value to write to the client
+ * @throws IOException
+ * if an input or output exception occurred
*/
public void println(double d) throws IOException {
print(d);
println();
}
+ /**
+ * Instructs the ServletOutputStream to invoke the provided WriteListener when it is possible to write.
+ *
+ * @param writeListener
+ * the WriteListener that should be notified when it's possible to write
+ * @throws IllegalStateException
+ * if one of the following conditions is true
+ * <ul>
+ * <li>the associated request is neither upgraded nor the async started</li>
+ * <li>setWriteListener is called more than once within the scope of the same request.</li>
+ * </ul>
+ * @throws NullPointerException
+ * if writeListener is null
+ */
+ public abstract void setWriteListener(WriteListener writeListener);
}
Modified: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletRequest.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletRequest.java?rev=1491469&r1=1490867&r2=1491469&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletRequest.java (original)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletRequest.java Mon Jun 10 14:37:57 2013
@@ -108,6 +108,15 @@ public interface ServletRequest {
int getContentLength();
/**
+ * Returns the length, in bytes, of the request body and made available by the input stream, or -1 if the length is
+ * not known. For HTTP servlets, same as the value of the CGI variable CONTENT_LENGTH.
+ *
+ * @since Servlet 3.1
+ * @return a long containing the length of the request body or -1L if the length is not known
+ */
+ long getContentLengthLong();
+
+ /**
* Returns the MIME type of the body of the request, or
* <code>null</code> if the type is not known. For HTTP servlets,
* same as the value of the CGI variable CONTENT_TYPE.
Modified: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletRequestWrapper.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletRequestWrapper.java?rev=1491469&r1=1490867&r2=1491469&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletRequestWrapper.java (original)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletRequestWrapper.java Mon Jun 10 14:37:57 2013
@@ -118,6 +118,17 @@ public class ServletRequestWrapper imple
}
/**
+ * The default behavior of this method is to return getContentLengthLong() on the wrapped request object.
+ *
+ * @return a long containing the length of the request body or -1L if the length is not known
+ * @since Servlet 3.1
+ */
+ @Override
+ public long getContentLengthLong() {
+ return this.request.getContentLengthLong();
+ }
+
+ /**
* The default behavior of this method is to return getContentType()
* on the wrapped request object.
*/
Modified: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletResponse.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletResponse.java?rev=1491469&r1=1490867&r2=1491469&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletResponse.java (original)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletResponse.java Mon Jun 10 14:37:57 2013
@@ -299,6 +299,17 @@ public interface ServletResponse {
void setContentLength(int len);
/**
+ * Sets the length of the content body in the response In HTTP servlets, this method sets the HTTP Content-Length
+ * header.
+ *
+ * @param len
+ * - a long specifying the length of the content being returned to the client; sets the Content-Length
+ * header
+ * @since Servlet 3.1
+ */
+ void setContentLengthLong(long len);
+
+ /**
* Sets the content type of the response being sent to
* the client, if the response has not been committed yet.
* The given content type may include a character encoding
Modified: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletResponseWrapper.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletResponseWrapper.java?rev=1491469&r1=1490867&r2=1491469&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletResponseWrapper.java (original)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/ServletResponseWrapper.java Mon Jun 10 14:37:57 2013
@@ -117,6 +117,16 @@ public class ServletResponseWrapper impl
}
/**
+ * The default behavior of this method is to call setContentLengthLong(long len) on the wrapped response object.
+ * @param len - a long specifying the length of the content being returned to the client; sets the Content-Length header
+ * @since Servlet 3.1
+ */
+ @Override
+ public void setContentLengthLong(long len) {
+ this.response.setContentLengthLong(len);
+ }
+
+ /**
* The default behavior of this method is to call setContentType(String type)
* on the wrapped response object.
*/
Added: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/WriteListener.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/WriteListener.java?rev=1491469&view=auto
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/WriteListener.java (added)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/WriteListener.java Mon Jun 10 14:37:57 2013
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+
+package javax.servlet;
+
+import java.io.IOException;
+import java.util.EventListener;
+
+/**
+ * Callback notification mechanism that signals to the developer it's possible to write content without blocking.
+ *
+ *
+ * @since Servlet 3.1
+ */
+public interface WriteListener extends EventListener {
+
+ /**
+ * Invoked when an error occurs writing data using the non-blocking APIs.
+ */
+ void onError(Throwable t);
+
+ /**
+ * When an instance of the WriteListener is registered with a ServletOutputStream, this method will be invoked by
+ * the container the first time when it is possible to write data. Subsequently the container will invoke this
+ * method if and only if ServletOutputStream.isReady() method has been called and has returned false.
+ *
+ * @throws IOException
+ * - if an I/O related error has occurred during processing
+ */
+ void onWritePossible() throws IOException;
+}
Propchange: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/WriteListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/WriteListener.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/WriteListener.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpServlet.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpServlet.java?rev=1491469&r1=1490867&r2=1491469&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpServlet.java (original)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpServlet.java Mon Jun 10 14:37:57 2013
@@ -34,6 +34,7 @@ import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
+import javax.servlet.WriteListener;
/**
@@ -731,6 +732,8 @@ class NoBodyOutputStream extends Servlet
private int contentLength = 0;
+ private WriteListener writeListener;
+
// file private
NoBodyOutputStream() {
}
@@ -753,7 +756,26 @@ class NoBodyOutputStream extends Servlet
// isn't this really an IllegalArgumentException?
String msg = lStrings.getString("err.io.negativelength");
- throw new IOException("negative length");
+ IOException ioex = new IOException("negative length");
+ if (writeListener != null) {
+ writeListener.onError(ioex);
+ }
+ throw ioex;
+ }
+ }
+
+ @Override
+ public boolean isReady() {
+ return true;
+ }
+
+ @Override
+ public void setWriteListener(WriteListener writeListener) {
+ this.writeListener = writeListener;
+ try {
+ writeListener.onWritePossible();
+ } catch (IOException e) {
+ // ignore
}
}
}
Modified: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpServletRequest.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpServletRequest.java?rev=1491469&r1=1490867&r2=1491469&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpServletRequest.java (original)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpServletRequest.java Mon Jun 10 14:37:57 2013
@@ -58,435 +58,361 @@ public interface HttpServletRequest exte
/**
* authenticate user using container facilities
- *
- * @param response response to use to conduct a dialog if necessary
+ *
+ * @param response
+ * response to use to conduct a dialog if necessary
* @return whether authentication was successful
- * @throws javax.servlet.ServletException if something goes wrong
- * @throws java.io.IOException if something IO related goes wrong
+ * @throws javax.servlet.ServletException
+ * if something goes wrong
+ * @throws java.io.IOException
+ * if something IO related goes wrong
* @since 3.0
*/
boolean authenticate(HttpServletResponse response) throws IOException, ServletException;
/**
- * Returns the name of the authentication scheme used to protect
- * the servlet. All servlet containers support basic, form and client
- * certificate authentication, and may additionally support digest
- * authentication.
- * If the servlet is not authenticated <code>null</code> is returned.
- * <p/>
- * <p>Same as the value of the CGI variable AUTH_TYPE.
- *
- * @return one of the static members BASIC_AUTH,
- * FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH
- * (suitable for == comparison) or
- * the container-specific string indicating
- * the authentication scheme, or
- * <code>null</code> if the request was
- * not authenticated.
+ * Change the session id of the current session associated with this request and return the new session id.
+ *
+ * @return the new session id
+ * @throws IllegalStateException
+ * - if there is no session associated with the request
+ * @since Servlet 3.1
+ */
+ String changeSessionId();
+
+ /**
+ * Returns the name of the authentication scheme used to protect the servlet. All servlet containers support basic,
+ * form and client certificate authentication, and may additionally support digest authentication. If the servlet is
+ * not authenticated <code>null</code> is returned.
+ * <p/>
+ * <p>
+ * Same as the value of the CGI variable AUTH_TYPE.
+ *
+ * @return one of the static members BASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH (suitable for ==
+ * comparison) or the container-specific string indicating the authentication scheme, or <code>null</code>
+ * if the request was not authenticated.
*/
String getAuthType();
/**
- * Returns the portion of the request URI that indicates the context
- * of the request. The context path always comes first in a request
- * URI. The path starts with a "/" character but does not end with a "/"
- * character. For servlets in the default (root) context, this method
- * returns "". The container does not decode this string.
- *
- * @return a <code>String</code> specifying the
- * portion of the request URI that indicates the context
- * of the request
+ * Returns the portion of the request URI that indicates the context of the request. The context path always comes
+ * first in a request URI. The path starts with a "/" character but does not end with a "/" character. For servlets
+ * in the default (root) context, this method returns "". The container does not decode this string.
+ *
+ * @return a <code>String</code> specifying the portion of the request URI that indicates the context of the request
*/
String getContextPath();
/**
- * Returns an array containing all of the <code>Cookie</code>
- * objects the client sent with this request.
- * This method returns <code>null</code> if no cookies were sent.
- *
- * @return an array of all the <code>Cookies</code>
- * included with this request, or <code>null</code>
- * if the request has no cookies
+ * Returns an array containing all of the <code>Cookie</code> objects the client sent with this request. This method
+ * returns <code>null</code> if no cookies were sent.
+ *
+ * @return an array of all the <code>Cookies</code> included with this request, or <code>null</code> if the request
+ * has no cookies
*/
Cookie[] getCookies();
/**
- * Returns the value of the specified request header
- * as a <code>long</code> value that represents a
- * <code>Date</code> object. Use this method with
- * headers that contain dates, such as
- * <code>If-Modified-Since</code>.
- * <p/>
- * <p>The date is returned as
- * the number of milliseconds since January 1, 1970 GMT.
- * The header name is case insensitive.
- * <p/>
- * <p>If the request did not have a header of the
- * specified name, this method returns -1. If the header
- * can't be converted to a date, the method throws
- * an <code>IllegalArgumentException</code>.
- *
- * @param name a <code>String</code> specifying the
- * name of the header
- * @return a <code>long</code> value
- * representing the date specified
- * in the header expressed as
- * the number of milliseconds
- * since January 1, 1970 GMT,
- * or -1 if the named header
- * was not included with the
- * request
- * @throws IllegalArgumentException If the header value
- * can't be converted
- * to a date
+ * Returns the value of the specified request header as a <code>long</code> value that represents a
+ * <code>Date</code> object. Use this method with headers that contain dates, such as <code>If-Modified-Since</code>
+ * .
+ * <p/>
+ * <p>
+ * The date is returned as the number of milliseconds since January 1, 1970 GMT. The header name is case
+ * insensitive.
+ * <p/>
+ * <p>
+ * If the request did not have a header of the specified name, this method returns -1. If the header can't be
+ * converted to a date, the method throws an <code>IllegalArgumentException</code>.
+ *
+ * @param name
+ * a <code>String</code> specifying the name of the header
+ * @return a <code>long</code> value representing the date specified in the header expressed as the number of
+ * milliseconds since January 1, 1970 GMT, or -1 if the named header was not included with the request
+ * @throws IllegalArgumentException
+ * If the header value can't be converted to a date
*/
long getDateHeader(String name);
/**
- * Returns the value of the specified request header
- * as a <code>String</code>. If the request did not include a header
- * of the specified name, this method returns <code>null</code>.
- * If there are multiple headers with the same name, this method
- * returns the first head in the request.
- * The header name is case insensitive. You can use
- * this method with any request header.
- *
- * @param name a <code>String</code> specifying the
- * header name
- * @return a <code>String</code> containing the
- * value of the requested
- * header, or <code>null</code>
- * if the request does not
- * have a header of that name
+ * Returns the value of the specified request header as a <code>String</code>. If the request did not include a
+ * header of the specified name, this method returns <code>null</code>. If there are multiple headers with the same
+ * name, this method returns the first head in the request. The header name is case insensitive. You can use this
+ * method with any request header.
+ *
+ * @param name
+ * a <code>String</code> specifying the header name
+ * @return a <code>String</code> containing the value of the requested header, or <code>null</code> if the request
+ * does not have a header of that name
*/
String getHeader(String name);
/**
- * Returns an enumeration of all the header names
- * this request contains. If the request has no
- * headers, this method returns an empty enumeration.
- * <p/>
- * <p>Some servlet containers do not allow
- * servlets to access headers using this method, in
- * which case this method returns <code>null</code>
- *
- * @return an enumeration of all the
- * header names sent with this
- * request; if the request has
- * no headers, an empty enumeration;
- * if the servlet container does not
- * allow servlets to use this method,
- * <code>null</code>
+ * Returns an enumeration of all the header names this request contains. If the request has no headers, this method
+ * returns an empty enumeration.
+ * <p/>
+ * <p>
+ * Some servlet containers do not allow servlets to access headers using this method, in which case this method
+ * returns <code>null</code>
+ *
+ * @return an enumeration of all the header names sent with this request; if the request has no headers, an empty
+ * enumeration; if the servlet container does not allow servlets to use this method, <code>null</code>
*/
Enumeration<String> getHeaderNames();
/**
- * Returns all the values of the specified request header
- * as an <code>Enumeration</code> of <code>String</code> objects.
+ * Returns all the values of the specified request header as an <code>Enumeration</code> of <code>String</code>
+ * objects.
* <p/>
- * <p>Some headers, such as <code>Accept-Language</code> can be sent
- * by clients as several headers each with a different value rather than
- * sending the header as a comma separated list.
- * <p/>
- * <p>If the request did not include any headers
- * of the specified name, this method returns an empty
- * <code>Enumeration</code>.
- * The header name is case insensitive. You can use
- * this method with any request header.
- *
- * @param name a <code>String</code> specifying the
- * header name
- * @return an <code>Enumeration</code> containing
- * the values of the requested header. If
- * the request does not have any headers of
- * that name return an empty
- * enumeration. If
- * the container does not allow access to
- * header information, return null
+ * <p>
+ * Some headers, such as <code>Accept-Language</code> can be sent by clients as several headers each with a
+ * different value rather than sending the header as a comma separated list.
+ * <p/>
+ * <p>
+ * If the request did not include any headers of the specified name, this method returns an empty
+ * <code>Enumeration</code>. The header name is case insensitive. You can use this method with any request header.
+ *
+ * @param name
+ * a <code>String</code> specifying the header name
+ * @return an <code>Enumeration</code> containing the values of the requested header. If the request does not have
+ * any headers of that name return an empty enumeration. If the container does not allow access to header
+ * information, return null
*/
Enumeration<String> getHeaders(String name);
/**
- * Returns the value of the specified request header
- * as an <code>int</code>. If the request does not have a header
- * of the specified name, this method returns -1. If the
- * header cannot be converted to an integer, this method
+ * Returns the value of the specified request header as an <code>int</code>. If the request does not have a header
+ * of the specified name, this method returns -1. If the header cannot be converted to an integer, this method
* throws a <code>NumberFormatException</code>.
* <p/>
- * <p>The header name is case insensitive.
- *
- * @param name a <code>String</code> specifying the name
- * of a request header
- * @return an integer expressing the value
- * of the request header or -1
- * if the request doesn't have a
- * header of this name
- * @throws NumberFormatException If the header value
- * can't be converted
- * to an <code>int</code>
+ * <p>
+ * The header name is case insensitive.
+ *
+ * @param name
+ * a <code>String</code> specifying the name of a request header
+ * @return an integer expressing the value of the request header or -1 if the request doesn't have a header of this
+ * name
+ * @throws NumberFormatException
+ * If the header value can't be converted to an <code>int</code>
*/
int getIntHeader(String name);
/**
- * Returns the name of the HTTP method with which this
- * request was made, for example, GET, POST, or PUT.
- * Same as the value of the CGI variable REQUEST_METHOD.
- *
- * @return a <code>String</code>
- * specifying the name
- * of the method with which
- * this request was made
+ * Returns the name of the HTTP method with which this request was made, for example, GET, POST, or PUT. Same as the
+ * value of the CGI variable REQUEST_METHOD.
+ *
+ * @return a <code>String</code> specifying the name of the method with which this request was made
*/
String getMethod();
/**
- * @param name part name
+ * @param name
+ * part name
* @return named part
- * @throws java.io.IOException if something IO related goes wrong
- * @throws javax.servlet.ServletException if something goes wrong
+ * @throws java.io.IOException
+ * if something IO related goes wrong
+ * @throws javax.servlet.ServletException
+ * if something goes wrong
* @since 3.0
*/
Part getPart(String name) throws IOException, ServletException;
/**
* @return all the parts
- * @throws java.io.IOException if something IO related goes wrong
- * @throws javax.servlet.ServletException if something goes wrong
+ * @throws java.io.IOException
+ * if something IO related goes wrong
+ * @throws javax.servlet.ServletException
+ * if something goes wrong
* @since 3.0
*/
Collection<Part> getParts() throws IOException, ServletException;
/**
- * Returns any extra path information associated with
- * the URL the client sent when it made this request.
- * The extra path information follows the servlet path
- * but precedes the query string and will start with
- * a "/" character.
- * <p/>
- * <p>This method returns <code>null</code> if there
- * was no extra path information.
- * <p/>
- * <p>Same as the value of the CGI variable PATH_INFO.
- *
- * @return a <code>String</code>, decoded by the
- * web container, specifying
- * extra path information that comes
- * after the servlet path but before
- * the query string in the request URL;
- * or <code>null</code> if the URL does not have
- * any extra path information
+ * Returns any extra path information associated with the URL the client sent when it made this request. The extra
+ * path information follows the servlet path but precedes the query string and will start with a "/" character.
+ * <p/>
+ * <p>
+ * This method returns <code>null</code> if there was no extra path information.
+ * <p/>
+ * <p>
+ * Same as the value of the CGI variable PATH_INFO.
+ *
+ * @return a <code>String</code>, decoded by the web container, specifying extra path information that comes after
+ * the servlet path but before the query string in the request URL; or <code>null</code> if the URL does not
+ * have any extra path information
*/
String getPathInfo();
/**
- * Returns any extra path information after the servlet name
- * but before the query string, and translates it to a real
- * path. Same as the value of the CGI variable PATH_TRANSLATED.
- * <p/>
- * <p>If the URL does not have any extra path information,
- * this method returns <code>null</code> or the servlet container
- * cannot translate the virtual path to a real path for any reason
- * (such as when the web application is executed from an archive).
+ * Returns any extra path information after the servlet name but before the query string, and translates it to a
+ * real path. Same as the value of the CGI variable PATH_TRANSLATED.
+ * <p/>
+ * <p>
+ * If the URL does not have any extra path information, this method returns <code>null</code> or the servlet
+ * container cannot translate the virtual path to a real path for any reason (such as when the web application is
+ * executed from an archive).
* <p/>
* The web container does not decode this string.
- *
- * @return a <code>String</code> specifying the
- * real path, or <code>null</code> if
- * the URL does not have any extra path
- * information
+ *
+ * @return a <code>String</code> specifying the real path, or <code>null</code> if the URL does not have any extra
+ * path information
*/
String getPathTranslated();
/**
- * Returns the query string that is contained in the request
- * URL after the path. This method returns <code>null</code>
- * if the URL does not have a query string. Same as the value
- * of the CGI variable QUERY_STRING.
- *
- * @return a <code>String</code> containing the query
- * string or <code>null</code> if the URL
- * contains no query string. The value is not
- * decoded by the container.
+ * Returns the query string that is contained in the request URL after the path. This method returns
+ * <code>null</code> if the URL does not have a query string. Same as the value of the CGI variable QUERY_STRING.
+ *
+ * @return a <code>String</code> containing the query string or <code>null</code> if the URL contains no query
+ * string. The value is not decoded by the container.
*/
String getQueryString();
/**
- * Returns the login of the user making this request, if the
- * user has been authenticated, or <code>null</code> if the user
- * has not been authenticated.
- * Whether the user name is sent with each subsequent request
- * depends on the browser and type of authentication. Same as the
- * value of the CGI variable REMOTE_USER.
- *
- * @return a <code>String</code> specifying the login
- * of the user making this request, or <code>null</code>
- * if the user login is not known
+ * Returns the login of the user making this request, if the user has been authenticated, or <code>null</code> if
+ * the user has not been authenticated. Whether the user name is sent with each subsequent request depends on the
+ * browser and type of authentication. Same as the value of the CGI variable REMOTE_USER.
+ *
+ * @return a <code>String</code> specifying the login of the user making this request, or <code>null</code> if the
+ * user login is not known
*/
String getRemoteUser();
/**
- * Returns the session ID specified by the client. This may
- * not be the same as the ID of the current valid session
- * for this request.
- * If the client did not specify a session ID, this method returns
- * <code>null</code>.
- *
- * @return a <code>String</code> specifying the session
- * ID, or <code>null</code> if the request did
- * not specify a session ID
+ * Returns the session ID specified by the client. This may not be the same as the ID of the current valid session
+ * for this request. If the client did not specify a session ID, this method returns <code>null</code>.
+ *
+ * @return a <code>String</code> specifying the session ID, or <code>null</code> if the request did not specify a
+ * session ID
* @see #isRequestedSessionIdValid
*/
String getRequestedSessionId();
/**
- * Returns the part of this request's URL from the protocol
- * name up to the query string in the first line of the HTTP request.
- * The web container does not decode this String.
- * For example:
+ * Returns the part of this request's URL from the protocol name up to the query string in the first line of the
+ * HTTP request. The web container does not decode this String. For example:
* <p/>
* <p/>
* <table summary="Examples of Returned Values">
- * <tr align=left><th>First line of HTTP request </th>
- * <th> Returned Value</th>
- * <tr><td>POST /some/path.html HTTP/1.1<td><td>/some/path.html
- * <tr><td>GET http://foo.bar/a.html HTTP/1.0
- * <td><td>/a.html
- * <tr><td>HEAD /xyz?a=b HTTP/1.1<td><td>/xyz
+ * <tr align=left>
+ * <th>First line of HTTP request</th>
+ * <th>Returned Value</th>
+ * <tr>
+ * <td>POST /some/path.html HTTP/1.1
+ * <td>
+ * <td>/some/path.html
+ * <tr>
+ * <td>GET http://foo.bar/a.html HTTP/1.0
+ * <td>
+ * <td>/a.html
+ * <tr>
+ * <td>HEAD /xyz?a=b HTTP/1.1
+ * <td>
+ * <td>/xyz
* </table>
* <p/>
- * <p>To reconstruct an URL with a scheme and host, use
- * {@link HttpUtils#getRequestURL}.
- *
- * @return a <code>String</code> containing
- * the part of the URL from the
- * protocol name up to the query string
+ * <p>
+ * To reconstruct an URL with a scheme and host, use {@link HttpUtils#getRequestURL}.
+ *
+ * @return a <code>String</code> containing the part of the URL from the protocol name up to the query string
* @see HttpUtils#getRequestURL
*/
String getRequestURI();
/**
- * Reconstructs the URL the client used to make the request.
- * The returned URL contains a protocol, server name, port
- * number, and server path, but it does not include query
- * string parameters.
- * <p/>
- * <p>Because this method returns a <code>StringBuffer</code>,
- * not a string, you can modify the URL easily, for example,
- * to append query parameters.
- * <p/>
- * <p>This method is useful for creating redirect messages
- * and for reporting errors.
- *
- * @return a <code>StringBuffer</code> object containing
- * the reconstructed URL
+ * Reconstructs the URL the client used to make the request. The returned URL contains a protocol, server name, port
+ * number, and server path, but it does not include query string parameters.
+ * <p/>
+ * <p>
+ * Because this method returns a <code>StringBuffer</code>, not a string, you can modify the URL easily, for
+ * example, to append query parameters.
+ * <p/>
+ * <p>
+ * This method is useful for creating redirect messages and for reporting errors.
+ *
+ * @return a <code>StringBuffer</code> object containing the reconstructed URL
*/
StringBuffer getRequestURL();
/**
- * Returns the part of this request's URL that calls
- * the servlet. This path starts with a "/" character
- * and includes either the servlet name or a path to
- * the servlet, but does not include any extra path
- * information or a query string. Same as the value of
- * the CGI variable SCRIPT_NAME.
- * <p/>
- * <p>This method will return an empty string ("") if the
- * servlet used to process this request was matched using
- * the "/*" pattern.
- *
- * @return a <code>String</code> containing
- * the name or path of the servlet being
- * called, as specified in the request URL,
- * decoded, or an empty string if the servlet
- * used to process the request is matched
- * using the "/*" pattern.
+ * Returns the part of this request's URL that calls the servlet. This path starts with a "/" character and includes
+ * either the servlet name or a path to the servlet, but does not include any extra path information or a query
+ * string. Same as the value of the CGI variable SCRIPT_NAME.
+ * <p/>
+ * <p>
+ * This method will return an empty string ("") if the servlet used to process this request was matched using the
+ * "/*" pattern.
+ *
+ * @return a <code>String</code> containing the name or path of the servlet being called, as specified in the
+ * request URL, decoded, or an empty string if the servlet used to process the request is matched using the
+ * "/*" pattern.
*/
String getServletPath();
/**
- * Returns the current session associated with this request,
- * or if the request does not have a session, creates one.
- *
- * @return the <code>HttpSession</code> associated
- * with this request
+ * Returns the current session associated with this request, or if the request does not have a session, creates one.
+ *
+ * @return the <code>HttpSession</code> associated with this request
* @see #getSession(boolean)
*/
HttpSession getSession();
/**
- * Returns the current <code>HttpSession</code>
- * associated with this request or, if there is no
- * current session and <code>create</code> is true, returns
- * a new session.
- * <p/>
- * <p>If <code>create</code> is <code>false</code>
- * and the request has no valid <code>HttpSession</code>,
- * this method returns <code>null</code>.
- * <p/>
- * <p>To make sure the session is properly maintained,
- * you must call this method before
- * the response is committed. If the container is using cookies
- * to maintain session integrity and is asked to create a new session
- * when the response is committed, an IllegalStateException is thrown.
- *
- * @param create <code>true</code> to create
- * a new session for this request if necessary;
- * <code>false</code> to return <code>null</code>
- * if there's no current session
- * @return the <code>HttpSession</code> associated
- * with this request or <code>null</code> if
- * <code>create</code> is <code>false</code>
- * and the request has no valid session
+ * Returns the current <code>HttpSession</code> associated with this request or, if there is no current session and
+ * <code>create</code> is true, returns a new session.
+ * <p/>
+ * <p>
+ * If <code>create</code> is <code>false</code> and the request has no valid <code>HttpSession</code>, this method
+ * returns <code>null</code>.
+ * <p/>
+ * <p>
+ * To make sure the session is properly maintained, you must call this method before the response is committed. If
+ * the container is using cookies to maintain session integrity and is asked to create a new session when the
+ * response is committed, an IllegalStateException is thrown.
+ *
+ * @param create
+ * <code>true</code> to create a new session for this request if necessary; <code>false</code> to return
+ * <code>null</code> if there's no current session
+ * @return the <code>HttpSession</code> associated with this request or <code>null</code> if <code>create</code> is
+ * <code>false</code> and the request has no valid session
* @see #getSession()
*/
HttpSession getSession(boolean create);
/**
- * Returns a <code>java.security.Principal</code> object containing
- * the name of the current authenticated user. If the user has not been
- * authenticated, the method returns <code>null</code>.
- *
- * @return a <code>java.security.Principal</code> containing
- * the name of the user making this request;
- * <code>null</code> if the user has not been
- * authenticated
+ * Returns a <code>java.security.Principal</code> object containing the name of the current authenticated user. If
+ * the user has not been authenticated, the method returns <code>null</code>.
+ *
+ * @return a <code>java.security.Principal</code> containing the name of the user making this request;
+ * <code>null</code> if the user has not been authenticated
*/
java.security.Principal getUserPrincipal();
/**
* Checks whether the requested session ID came in as a cookie.
- *
- * @return <code>true</code> if the session ID
- * came in as a
- * cookie; otherwise, <code>false</code>
+ *
+ * @return <code>true</code> if the session ID came in as a cookie; otherwise, <code>false</code>
* @see #getSession
*/
boolean isRequestedSessionIdFromCookie();
/**
- * @deprecated As of Version 2.1 of the Java Servlet
- * API, use {@link #isRequestedSessionIdFromURL}
- * instead.
+ * @deprecated As of Version 2.1 of the Java Servlet API, use {@link #isRequestedSessionIdFromURL} instead.
*/
boolean isRequestedSessionIdFromUrl();
/**
- * Checks whether the requested session ID came in as part of the
- * request URL.
- *
- * @return <code>true</code> if the session ID
- * came in as part of a URL; otherwise,
- * <code>false</code>
+ * Checks whether the requested session ID came in as part of the request URL.
+ *
+ * @return <code>true</code> if the session ID came in as part of a URL; otherwise, <code>false</code>
* @see #getSession
*/
boolean isRequestedSessionIdFromURL();
/**
* Checks whether the requested session ID is still valid.
- *
- * @return <code>true</code> if this
- * request has an id for a valid session
- * in the current session context;
+ *
+ * @return <code>true</code> if this request has an id for a valid session in the current session context;
* <code>false</code> otherwise
* @see #getRequestedSessionId
* @see #getSession
@@ -495,33 +421,46 @@ public interface HttpServletRequest exte
boolean isRequestedSessionIdValid();
/**
- * Returns a boolean indicating whether the authenticated user is included
- * in the specified logical "role". Roles and role membership can be
- * defined using deployment descriptors. If the user has not been
- * authenticated, the method returns <code>false</code>.
- *
- * @param role a <code>String</code> specifying the name
- * of the role
- * @return a <code>boolean</code> indicating whether
- * the user making this request belongs to a given role;
- * <code>false</code> if the user has not been
- * authenticated
+ * Returns a boolean indicating whether the authenticated user is included in the specified logical "role". Roles
+ * and role membership can be defined using deployment descriptors. If the user has not been authenticated, the
+ * method returns <code>false</code>.
+ *
+ * @param role
+ * a <code>String</code> specifying the name of the role
+ * @return a <code>boolean</code> indicating whether the user making this request belongs to a given role;
+ * <code>false</code> if the user has not been authenticated
*/
boolean isUserInRole(String role);
/**
- * @param username username
- * @param password password
+ * @param username
+ * username
+ * @param password
+ * password
* @since 3.0
- * @throws javax.servlet.ServletException if username/password authentication not supported,
- * if a user has already been established, or if authentication fails.
+ * @throws javax.servlet.ServletException
+ * if username/password authentication not supported, if a user has already been established, or if
+ * authentication fails.
*/
void login(String username, String password) throws ServletException;
/**
* @since 3.0
- * @throws javax.servlet.ServletException if logout fails
+ * @throws javax.servlet.ServletException
+ * if logout fails
*/
void logout() throws ServletException;
+ /**
+ * Create an instance of HttpUpgradeHandler for an given class and uses it for the http protocol upgrade processing.
+ *
+ * @param handlerClass
+ * The HttpUpgradeHandler class used for the upgrade.
+ * @return an instance of the HttpUpgradeHandler
+ * @throws IOException
+ * if an I/O error occurred during the upgrade
+ * @throws ServletException
+ * if the given handlerClass fails to be instantiated
+ */
+ <T extends HttpUpgradeHandler> T upgrade(Class<T> handlerClass) throws IOException, ServletException;
}
Modified: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpServletRequestWrapper.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpServletRequestWrapper.java?rev=1491469&r1=1490867&r2=1491469&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpServletRequestWrapper.java (original)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpServletRequestWrapper.java Mon Jun 10 14:37:57 2013
@@ -60,6 +60,16 @@ public class HttpServletRequestWrapper e
}
/**
+ * The default behavior of this method is to return changeSessionId() on the wrapped request object.
+ * @return the new session id
+ * @since Servlet 3.1
+ */
+ @Override
+ public String changeSessionId() {
+ return getHttpServletRequest().changeSessionId();
+ }
+
+ /**
* The default behavior of this method is to return getAuthType()
* on the wrapped request object.
*/
@@ -279,4 +289,16 @@ public class HttpServletRequestWrapper e
return getHttpServletRequest().isRequestedSessionIdFromUrl();
}
+ /**
+ * Create an instance of HttpUpgradeHandler for an given class and uses it for the http protocol upgrade processing.
+ * @param handlerClass - The HttpUpgradeHandler class used for the upgrade.
+ * @return an instance of the HttpUpgradeHandler
+ * @throws IOException - if an I/O error occurred during the upgrade
+ * @throws ServletException - if the given handlerClass fails to be instantiated
+ * @since Servlet 3.1
+ * @see HttpUpgradeHandler, WebConnection
+ */
+ public <T extends HttpUpgradeHandler> T upgrade(Class<T> handlerClass) throws IOException, ServletException {
+ return getHttpServletRequest().upgrade(handlerClass);
+ }
}
Added: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpSessionIdListener.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpSessionIdListener.java?rev=1491469&view=auto
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpSessionIdListener.java (added)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpSessionIdListener.java Mon Jun 10 14:37:57 2013
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+
+package javax.servlet.http;
+
+import java.util.EventListener;
+
+/**
+ * Interface for receiving notification events about HttpSession id changes.
+ * <p/>
+ * In order to receive these notification events, the implementation class must be either declared in the deployment
+ * descriptor of the web application, annotated with WebListener, or registered via one of the addListener methods
+ * defined on ServletContext.
+ * <p/>
+ * The order in which implementations of this interface are invoked is unspecified.
+ *
+ * @since Servlet 3.1
+ */
+public interface HttpSessionIdListener extends EventListener {
+
+ /**
+ * Receives notification that session id has been changed in a session.
+ *
+ * @param event
+ * the HttpSessionBindingEvent containing the session and the name and (old) value of the attribute that
+ * was replaced
+ * @param oldSessionId
+ * the old session id
+ */
+ void sessionIdChanged(HttpSessionEvent event, String oldSessionId);
+}
Propchange: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpSessionIdListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpSessionIdListener.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpSessionIdListener.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpUpgradeHandler.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpUpgradeHandler.java?rev=1491469&view=auto
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpUpgradeHandler.java (added)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpUpgradeHandler.java Mon Jun 10 14:37:57 2013
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ */
+
+package javax.servlet.http;
+
+/**
+ *
+ * This interface encapsulates the upgrade protocol processing. A HttpUpgradeHandler implementation would allow the
+ * servlet container to communicate with it.
+ *
+ * @since Servlet 3.1
+ */
+public interface HttpUpgradeHandler {
+
+ /**
+ * It is called when the client is disconnected.
+ */
+ void destroy();
+
+ /**
+ * It is called once the HTTP Upgrade process has been completed and the upgraded connection is ready to start using
+ * the new protocol.
+ *
+ * @param wc
+ * - the WebConnection object associated to this upgrade request
+ */
+ void init(WebConnection wc);
+}
Propchange: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpUpgradeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpUpgradeHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/HttpUpgradeHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/Part.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/Part.java?rev=1491469&r1=1490867&r2=1491469&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/Part.java (original)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/Part.java Mon Jun 10 14:37:57 2013
@@ -17,7 +17,6 @@
* under the License.
*/
-
package javax.servlet.http;
import java.io.IOException;
@@ -32,22 +31,102 @@ import java.util.Collection;
*/
public interface Part {
+ /**
+ * Deletes the underlying storage for a file item, including deleting any associated temporary disk file.
+ *
+ * @throws IOException
+ * if an error occurs.
+ */
void delete() throws IOException;
+ /**
+ * Gets the content type of this part.
+ *
+ * @return The content type of this part.
+ */
String getContentType();
+ /**
+ * Returns the value of the specified mime header as a String. If the Part did not include a header of the specified
+ * name, this method returns null. If there are multiple headers with the same name, this method returns the first
+ * header in the part. The header name is case insensitive. You can use this method with any request header.
+ *
+ * @param headerName
+ * a String specifying the header name
+ * @return a String containing the value of the requested header, or null if the part does not have a header of that
+ * name
+ */
String getHeader(String headerName);
+ /**
+ * Gets the header names of this Part.
+ * <p>
+ * Some servlet containers do not allow servlets to access headers using this method, in which case this method
+ * returns null
+ * <p/>
+ * Any changes to the returned Collection must not affect this Part.
+ *
+ * @return a (possibly empty) Collection of the header names of this Part
+ */
Collection<String> getHeaderNames();
+ /**
+ * Gets the values of the Part header with the given name.
+ * <p/>
+ * Any changes to the returned Collection must not affect this Part.
+ * <p/>
+ * Part header names are case insensitive.
+ *
+ * @param headerNamethe
+ * header name whose values to return
+ * @return a (possibly empty) Collection of the values of the header with the given name
+ */
Collection<String> getHeaders(String headerName);
+ /**
+ * Gets the content of this part as an InputStream
+ *
+ * @return The content of this part as an InputStream
+ * @throws IOException
+ * If an error occurs in retrieving the contet as an InputStream
+ */
InputStream getInputStream() throws IOException;
+ /**
+ * Gets the name of this part
+ *
+ * @return The name of this part as a String
+ */
String getName();
+ /**
+ * Returns the size of this fille.
+ *
+ * @return a long specifying the size of this part, in bytes.
+ */
long getSize();
+ /**
+ * Gets the file name specified by the client.
+ *
+ * @return the submitted file name
+ * @since Servlet 3.1
+ */
+ String getSubmittedFileName();
+
+ /**
+ * A convenience method to write this uploaded item to disk.
+ * <p/>
+ * This method is not guaranteed to succeed if called more than once for the same part. This allows a particular
+ * implementation to use, for example, file renaming, where possible, rather than copying all of the underlying
+ * data, thus gaining a significant performance benefit.
+ *
+ * @param fileName
+ * the name of the file to which the stream will be written. The file is created relative to the location
+ * as specified in the MultipartConfig
+ * @throws IOException
+ * if an error occurs.
+ */
void write(String fileName) throws IOException;
-
+
}
Added: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/WebConnection.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/WebConnection.java?rev=1491469&view=auto
==============================================================================
--- geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/WebConnection.java (added)
+++ geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/WebConnection.java Mon Jun 10 14:37:57 2013
@@ -0,0 +1,53 @@
+/*
+ * 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.
+ */
+
+package javax.servlet.http;
+
+import java.io.IOException;
+
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletOutputStream;
+
+/**
+ *
+ * This interface encapsulates the connection for an upgrade request. It allows the protocol handler to send service
+ * requests and status queries to the container.
+ *
+ * @since Servlet 3.1
+ */
+public interface WebConnection extends AutoCloseable {
+
+ /**
+ * Returns an input stream for this web connection.
+ *
+ * @return a ServletInputStream for reading binary data
+ * @throws IOException
+ * if an I/O error occurs
+ */
+ ServletInputStream getInputStream() throws IOException;
+
+ /**
+ * Returns an output stream for this web connection.
+ *
+ * @return a ServletOutputStream for writing binary data
+ * @throws IOException
+ * if an I/O error occurs
+ */
+ ServletOutputStream getOutputStream() throws IOException;
+}
Propchange: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/WebConnection.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/WebConnection.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/specs/trunk/geronimo-servlet_3.1_spec/src/main/java/javax/servlet/http/WebConnection.java
------------------------------------------------------------------------------
svn:mime-type = text/plain