init
This commit is contained in:
453
java/javax/servlet/http/Cookie.java
Normal file
453
java/javax/servlet/http/Cookie.java
Normal file
@@ -0,0 +1,453 @@
|
||||
/*
|
||||
* 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.Serializable;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.BitSet;
|
||||
import java.util.Locale;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
/**
|
||||
* Creates a cookie, a small amount of information sent by a servlet to a Web
|
||||
* browser, saved by the browser, and later sent back to the server. A cookie's
|
||||
* value can uniquely identify a client, so cookies are commonly used for
|
||||
* session management.
|
||||
* <p>
|
||||
* A cookie has a name, a single value, and optional attributes such as a
|
||||
* comment, path and domain qualifiers, a maximum age, and a version number.
|
||||
* Some Web browsers have bugs in how they handle the optional attributes, so
|
||||
* use them sparingly to improve the interoperability of your servlets.
|
||||
* <p>
|
||||
* The servlet sends cookies to the browser by using the
|
||||
* {@link HttpServletResponse#addCookie} method, which adds fields to HTTP
|
||||
* response headers to send cookies to the browser, one at a time. The browser
|
||||
* is expected to support 20 cookies for each Web server, 300 cookies total, and
|
||||
* may limit cookie size to 4 KB each.
|
||||
* <p>
|
||||
* The browser returns cookies to the servlet by adding fields to HTTP request
|
||||
* headers. Cookies can be retrieved from a request by using the
|
||||
* {@link HttpServletRequest#getCookies} method. Several cookies might have the
|
||||
* same name but different path attributes.
|
||||
* <p>
|
||||
* Cookies affect the caching of the Web pages that use them. HTTP 1.0 does not
|
||||
* cache pages that use cookies created with this class. This class does not
|
||||
* support the cache control defined with HTTP 1.1.
|
||||
* <p>
|
||||
* This class supports both the RFC 2109 and the RFC 6265 specifications.
|
||||
* By default, cookies are created using RFC 6265.
|
||||
*/
|
||||
public class Cookie implements Cloneable, Serializable {
|
||||
|
||||
private static final CookieNameValidator validation;
|
||||
static {
|
||||
boolean strictNaming;
|
||||
String prop = System.getProperty("org.apache.tomcat.util.http.ServerCookie.STRICT_NAMING");
|
||||
if (prop != null) {
|
||||
strictNaming = Boolean.parseBoolean(prop);
|
||||
} else {
|
||||
strictNaming = Boolean.getBoolean("org.apache.catalina.STRICT_SERVLET_COMPLIANCE");
|
||||
}
|
||||
|
||||
if (strictNaming) {
|
||||
validation = new RFC2109Validator();
|
||||
}
|
||||
else {
|
||||
validation = new RFC6265Validator();
|
||||
}
|
||||
}
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final String name;
|
||||
private String value;
|
||||
|
||||
private int version = 0; // ;Version=1 ... means RFC 2109 style
|
||||
|
||||
//
|
||||
// Attributes encoded in the header's cookie fields.
|
||||
//
|
||||
private String comment; // ;Comment=VALUE ... describes cookie's use
|
||||
private String domain; // ;Domain=VALUE ... domain that sees cookie
|
||||
private int maxAge = -1; // ;Max-Age=VALUE ... cookies auto-expire
|
||||
private String path; // ;Path=VALUE ... URLs that see the cookie
|
||||
private boolean secure; // ;Secure ... e.g. use SSL
|
||||
private boolean httpOnly; // Not in cookie specs, but supported by browsers
|
||||
|
||||
/**
|
||||
* Constructs a cookie with a specified name and value.
|
||||
* <p>
|
||||
* The name must conform to RFC 2109. That means it can contain only ASCII
|
||||
* alphanumeric characters and cannot contain commas, semicolons, or white
|
||||
* space or begin with a $ character. The cookie's name cannot be changed
|
||||
* after creation.
|
||||
* <p>
|
||||
* The value can be anything the server chooses to send. Its value is
|
||||
* probably of interest only to the server. The cookie's value can be
|
||||
* changed after creation with the <code>setValue</code> method.
|
||||
* <p>
|
||||
* By default, cookies are created according to the Netscape cookie
|
||||
* specification. The version can be changed with the
|
||||
* <code>setVersion</code> method.
|
||||
*
|
||||
* @param name
|
||||
* a <code>String</code> specifying the name of the cookie
|
||||
* @param value
|
||||
* a <code>String</code> specifying the value of the cookie
|
||||
* @throws IllegalArgumentException
|
||||
* if the cookie name contains illegal characters (for example,
|
||||
* a comma, space, or semicolon) or it is one of the tokens
|
||||
* reserved for use by the cookie protocol
|
||||
* @see #setValue
|
||||
* @see #setVersion
|
||||
*/
|
||||
public Cookie(String name, String value) {
|
||||
validation.validate(name);
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies a comment that describes a cookie's purpose. The comment is
|
||||
* useful if the browser presents the cookie to the user. Comments are not
|
||||
* supported by Netscape Version 0 cookies.
|
||||
*
|
||||
* @param purpose
|
||||
* a <code>String</code> specifying the comment to display to the
|
||||
* user
|
||||
* @see #getComment
|
||||
*/
|
||||
public void setComment(String purpose) {
|
||||
comment = purpose;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the comment describing the purpose of this cookie, or
|
||||
* <code>null</code> if the cookie has no comment.
|
||||
*
|
||||
* @return a <code>String</code> containing the comment, or
|
||||
* <code>null</code> if none
|
||||
* @see #setComment
|
||||
*/
|
||||
public String getComment() {
|
||||
return comment;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies the domain within which this cookie should be presented.
|
||||
* <p>
|
||||
* The form of the domain name is specified by RFC 2109. A domain name
|
||||
* begins with a dot (<code>.foo.com</code>) and means that the cookie is
|
||||
* visible to servers in a specified Domain Name System (DNS) zone (for
|
||||
* example, <code>www.foo.com</code>, but not <code>a.b.foo.com</code>). By
|
||||
* default, cookies are only returned to the server that sent them.
|
||||
*
|
||||
* @param pattern
|
||||
* a <code>String</code> containing the domain name within which
|
||||
* this cookie is visible; form is according to RFC 2109
|
||||
* @see #getDomain
|
||||
*/
|
||||
public void setDomain(String pattern) {
|
||||
domain = pattern.toLowerCase(Locale.ENGLISH); // IE allegedly needs this
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the domain name set for this cookie. The form of the domain name
|
||||
* is set by RFC 2109.
|
||||
*
|
||||
* @return a <code>String</code> containing the domain name
|
||||
* @see #setDomain
|
||||
*/
|
||||
public String getDomain() {
|
||||
return domain;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the maximum age of the cookie in seconds.
|
||||
* <p>
|
||||
* A positive value indicates that the cookie will expire after that many
|
||||
* seconds have passed. Note that the value is the <i>maximum</i> age when
|
||||
* the cookie will expire, not the cookie's current age.
|
||||
* <p>
|
||||
* A negative value means that the cookie is not stored persistently and
|
||||
* will be deleted when the Web browser exits. A zero value causes the
|
||||
* cookie to be deleted.
|
||||
*
|
||||
* @param expiry
|
||||
* an integer specifying the maximum age of the cookie in
|
||||
* seconds; if negative, means the cookie is not stored; if zero,
|
||||
* deletes the cookie
|
||||
* @see #getMaxAge
|
||||
*/
|
||||
public void setMaxAge(int expiry) {
|
||||
maxAge = expiry;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum age of the cookie, specified in seconds, By default,
|
||||
* <code>-1</code> indicating the cookie will persist until browser
|
||||
* shutdown.
|
||||
*
|
||||
* @return an integer specifying the maximum age of the cookie in seconds; if
|
||||
* negative, means the cookie persists until browser shutdown
|
||||
* @see #setMaxAge
|
||||
*/
|
||||
public int getMaxAge() {
|
||||
return maxAge;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies a path for the cookie to which the client should return the
|
||||
* cookie.
|
||||
* <p>
|
||||
* The cookie is visible to all the pages in the directory you specify, and
|
||||
* all the pages in that directory's subdirectories. A cookie's path must
|
||||
* include the servlet that set the cookie, for example, <i>/catalog</i>,
|
||||
* which makes the cookie visible to all directories on the server under
|
||||
* <i>/catalog</i>.
|
||||
* <p>
|
||||
* Consult RFC 2109 (available on the Internet) for more information on
|
||||
* setting path names for cookies.
|
||||
*
|
||||
* @param uri
|
||||
* a <code>String</code> specifying a path
|
||||
* @see #getPath
|
||||
*/
|
||||
public void setPath(String uri) {
|
||||
path = uri;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the path on the server to which the browser returns this cookie.
|
||||
* The cookie is visible to all subpaths on the server.
|
||||
*
|
||||
* @return a <code>String</code> specifying a path that contains a servlet
|
||||
* name, for example, <i>/catalog</i>
|
||||
* @see #setPath
|
||||
*/
|
||||
public String getPath() {
|
||||
return path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates to the browser whether the cookie should only be sent using a
|
||||
* secure protocol, such as HTTPS or SSL.
|
||||
* <p>
|
||||
* The default value is <code>false</code>.
|
||||
*
|
||||
* @param flag
|
||||
* if <code>true</code>, sends the cookie from the browser to the
|
||||
* server only when using a secure protocol; if
|
||||
* <code>false</code>, sent on any protocol
|
||||
* @see #getSecure
|
||||
*/
|
||||
public void setSecure(boolean flag) {
|
||||
secure = flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns <code>true</code> if the browser is sending cookies only over a
|
||||
* secure protocol, or <code>false</code> if the browser can send cookies
|
||||
* using any protocol.
|
||||
*
|
||||
* @return <code>true</code> if the browser uses a secure protocol;
|
||||
* otherwise, <code>true</code>
|
||||
* @see #setSecure
|
||||
*/
|
||||
public boolean getSecure() {
|
||||
return secure;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the cookie. The name cannot be changed after
|
||||
* creation.
|
||||
*
|
||||
* @return a <code>String</code> specifying the cookie's name
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assigns a new value to a cookie after the cookie is created. If you use a
|
||||
* binary value, you may want to use BASE64 encoding.
|
||||
* <p>
|
||||
* With Version 0 cookies, values should not contain white space, brackets,
|
||||
* parentheses, equals signs, commas, double quotes, slashes, question
|
||||
* marks, at signs, colons, and semicolons. Empty values may not behave the
|
||||
* same way on all browsers.
|
||||
*
|
||||
* @param newValue
|
||||
* a <code>String</code> specifying the new value
|
||||
* @see #getValue
|
||||
* @see Cookie
|
||||
*/
|
||||
public void setValue(String newValue) {
|
||||
value = newValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of the cookie.
|
||||
*
|
||||
* @return a <code>String</code> containing the cookie's present value
|
||||
* @see #setValue
|
||||
* @see Cookie
|
||||
*/
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the version of the protocol this cookie complies with. Version 1
|
||||
* complies with RFC 2109, and version 0 complies with the original cookie
|
||||
* specification drafted by Netscape. Cookies provided by a browser use and
|
||||
* identify the browser's cookie version.
|
||||
*
|
||||
* @return 0 if the cookie complies with the original Netscape specification;
|
||||
* 1 if the cookie complies with RFC 2109
|
||||
* @see #setVersion
|
||||
*/
|
||||
public int getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the version of the cookie protocol this cookie complies with.
|
||||
* Version 0 complies with the original Netscape cookie specification.
|
||||
* Version 1 complies with RFC 2109.
|
||||
* <p>
|
||||
* Since RFC 2109 is still somewhat new, consider version 1 as experimental;
|
||||
* do not use it yet on production sites.
|
||||
*
|
||||
* @param v
|
||||
* 0 if the cookie should comply with the original Netscape
|
||||
* specification; 1 if the cookie should comply with RFC 2109
|
||||
* @see #getVersion
|
||||
*/
|
||||
public void setVersion(int v) {
|
||||
version = v;
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the standard <code>java.lang.Object.clone</code> method to
|
||||
* return a copy of this cookie.
|
||||
*/
|
||||
@Override
|
||||
public Object clone() {
|
||||
try {
|
||||
return super.clone();
|
||||
} catch (CloneNotSupportedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the flag that controls if this cookie will be hidden from scripts on
|
||||
* the client side.
|
||||
*
|
||||
* @param httpOnly The new value of the flag
|
||||
*
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
public void setHttpOnly(boolean httpOnly) {
|
||||
this.httpOnly = httpOnly;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the flag that controls if this cookie will be hidden from scripts on
|
||||
* the client side.
|
||||
*
|
||||
* @return <code>true</code> if the cookie is hidden from scripts, else
|
||||
* <code>false</code>
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
public boolean isHttpOnly() {
|
||||
return httpOnly;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class CookieNameValidator {
|
||||
private static final String LSTRING_FILE = "javax.servlet.http.LocalStrings";
|
||||
protected static final ResourceBundle lStrings = ResourceBundle.getBundle(LSTRING_FILE);
|
||||
|
||||
protected final BitSet allowed;
|
||||
|
||||
protected CookieNameValidator(String separators) {
|
||||
allowed = new BitSet(128);
|
||||
allowed.set(0x20, 0x7f); // any CHAR except CTLs or separators
|
||||
for (int i = 0; i < separators.length(); i++) {
|
||||
char ch = separators.charAt(i);
|
||||
allowed.clear(ch);
|
||||
}
|
||||
}
|
||||
|
||||
void validate(String name) {
|
||||
if (name == null || name.length() == 0) {
|
||||
throw new IllegalArgumentException(lStrings.getString("err.cookie_name_blank"));
|
||||
}
|
||||
if (!isToken(name)) {
|
||||
String errMsg = lStrings.getString("err.cookie_name_is_token");
|
||||
throw new IllegalArgumentException(MessageFormat.format(errMsg, name));
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isToken(String possibleToken) {
|
||||
int len = possibleToken.length();
|
||||
|
||||
for (int i = 0; i < len; i++) {
|
||||
char c = possibleToken.charAt(i);
|
||||
if (!allowed.get(c)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
class RFC6265Validator extends CookieNameValidator {
|
||||
private static final String RFC2616_SEPARATORS = "()<>@,;:\\\"/[]?={} \t";
|
||||
|
||||
RFC6265Validator() {
|
||||
super(RFC2616_SEPARATORS);
|
||||
}
|
||||
}
|
||||
|
||||
class RFC2109Validator extends RFC6265Validator {
|
||||
RFC2109Validator() {
|
||||
// special treatment to allow for FWD_SLASH_IS_SEPARATOR property
|
||||
boolean allowSlash;
|
||||
String prop = System.getProperty("org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR");
|
||||
if (prop != null) {
|
||||
allowSlash = !Boolean.parseBoolean(prop);
|
||||
} else {
|
||||
allowSlash = !Boolean.getBoolean("org.apache.catalina.STRICT_SERVLET_COMPLIANCE");
|
||||
}
|
||||
if (allowSlash) {
|
||||
allowed.set('/');
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void validate(String name) {
|
||||
super.validate(name);
|
||||
if (name.charAt(0) == '$') {
|
||||
String errMsg = lStrings.getString("err.cookie_name_is_token");
|
||||
throw new IllegalArgumentException(MessageFormat.format(errMsg, name));
|
||||
}
|
||||
}
|
||||
}
|
||||
908
java/javax/servlet/http/HttpServlet.java
Normal file
908
java/javax/servlet/http/HttpServlet.java
Normal file
@@ -0,0 +1,908 @@
|
||||
/*
|
||||
* 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 java.io.OutputStreamWriter;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Enumeration;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
import javax.servlet.DispatcherType;
|
||||
import javax.servlet.GenericServlet;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
|
||||
|
||||
/**
|
||||
* Provides an abstract class to be subclassed to create
|
||||
* an HTTP servlet suitable for a Web site. A subclass of
|
||||
* <code>HttpServlet</code> must override at least
|
||||
* one method, usually one of these:
|
||||
*
|
||||
* <ul>
|
||||
* <li> <code>doGet</code>, if the servlet supports HTTP GET requests
|
||||
* <li> <code>doPost</code>, for HTTP POST requests
|
||||
* <li> <code>doPut</code>, for HTTP PUT requests
|
||||
* <li> <code>doDelete</code>, for HTTP DELETE requests
|
||||
* <li> <code>init</code> and <code>destroy</code>,
|
||||
* to manage resources that are held for the life of the servlet
|
||||
* <li> <code>getServletInfo</code>, which the servlet uses to
|
||||
* provide information about itself
|
||||
* </ul>
|
||||
*
|
||||
* <p>There's almost no reason to override the <code>service</code>
|
||||
* method. <code>service</code> handles standard HTTP
|
||||
* requests by dispatching them to the handler methods
|
||||
* for each HTTP request type (the <code>do</code><i>Method</i>
|
||||
* methods listed above).
|
||||
*
|
||||
* <p>Likewise, there's almost no reason to override the
|
||||
* <code>doOptions</code> and <code>doTrace</code> methods.
|
||||
*
|
||||
* <p>Servlets typically run on multithreaded servers,
|
||||
* so be aware that a servlet must handle concurrent
|
||||
* requests and be careful to synchronize access to shared resources.
|
||||
* Shared resources include in-memory data such as
|
||||
* instance or class variables and external objects
|
||||
* such as files, database connections, and network
|
||||
* connections.
|
||||
* See the
|
||||
* <a href="http://java.sun.com/Series/Tutorial/java/threads/multithreaded.html">
|
||||
* Java Tutorial on Multithreaded Programming</a> for more
|
||||
* information on handling multiple threads in a Java program.
|
||||
*/
|
||||
public abstract class HttpServlet extends GenericServlet {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private static final String METHOD_DELETE = "DELETE";
|
||||
private static final String METHOD_HEAD = "HEAD";
|
||||
private static final String METHOD_GET = "GET";
|
||||
private static final String METHOD_OPTIONS = "OPTIONS";
|
||||
private static final String METHOD_POST = "POST";
|
||||
private static final String METHOD_PUT = "PUT";
|
||||
private static final String METHOD_TRACE = "TRACE";
|
||||
|
||||
private static final String HEADER_IFMODSINCE = "If-Modified-Since";
|
||||
private static final String HEADER_LASTMOD = "Last-Modified";
|
||||
|
||||
private static final String LSTRING_FILE =
|
||||
"javax.servlet.http.LocalStrings";
|
||||
private static final ResourceBundle lStrings =
|
||||
ResourceBundle.getBundle(LSTRING_FILE);
|
||||
|
||||
|
||||
/**
|
||||
* Does nothing, because this is an abstract class.
|
||||
*/
|
||||
public HttpServlet() {
|
||||
// NOOP
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called by the server (via the <code>service</code> method) to
|
||||
* allow a servlet to handle a GET request.
|
||||
*
|
||||
* <p>Overriding this method to support a GET request also
|
||||
* automatically supports an HTTP HEAD request. A HEAD
|
||||
* request is a GET request that returns no body in the
|
||||
* response, only the request header fields.
|
||||
*
|
||||
* <p>When overriding this method, read the request data,
|
||||
* write the response headers, get the response's writer or
|
||||
* output stream object, and finally, write the response data.
|
||||
* It's best to include content type and encoding. When using
|
||||
* a <code>PrintWriter</code> object to return the response,
|
||||
* set the content type before accessing the
|
||||
* <code>PrintWriter</code> object.
|
||||
*
|
||||
* <p>The servlet container must write the headers before
|
||||
* committing the response, because in HTTP the headers must be sent
|
||||
* before the response body.
|
||||
*
|
||||
* <p>Where possible, set the Content-Length header (with the
|
||||
* {@link javax.servlet.ServletResponse#setContentLength} method),
|
||||
* to allow the servlet container to use a persistent connection
|
||||
* to return its response to the client, improving performance.
|
||||
* The content length is automatically set if the entire response fits
|
||||
* inside the response buffer.
|
||||
*
|
||||
* <p>When using HTTP 1.1 chunked encoding (which means that the response
|
||||
* has a Transfer-Encoding header), do not set the Content-Length header.
|
||||
*
|
||||
* <p>The GET method should be safe, that is, without
|
||||
* any side effects for which users are held responsible.
|
||||
* For example, most form queries have no side effects.
|
||||
* If a client request is intended to change stored data,
|
||||
* the request should use some other HTTP method.
|
||||
*
|
||||
* <p>The GET method should also be idempotent, meaning
|
||||
* that it can be safely repeated. Sometimes making a
|
||||
* method safe also makes it idempotent. For example,
|
||||
* repeating queries is both safe and idempotent, but
|
||||
* buying a product online or modifying data is neither
|
||||
* safe nor idempotent.
|
||||
*
|
||||
* <p>If the request is incorrectly formatted, <code>doGet</code>
|
||||
* returns an HTTP "Bad Request" message.
|
||||
*
|
||||
* @param req an {@link HttpServletRequest} object that
|
||||
* contains the request the client has made
|
||||
* of the servlet
|
||||
*
|
||||
* @param resp an {@link HttpServletResponse} object that
|
||||
* contains the response the servlet sends
|
||||
* to the client
|
||||
*
|
||||
* @exception IOException if an input or output error is
|
||||
* detected when the servlet handles
|
||||
* the GET request
|
||||
*
|
||||
* @exception ServletException if the request for the GET
|
||||
* could not be handled
|
||||
*
|
||||
* @see javax.servlet.ServletResponse#setContentType
|
||||
*/
|
||||
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
|
||||
throws ServletException, IOException
|
||||
{
|
||||
String protocol = req.getProtocol();
|
||||
String msg = lStrings.getString("http.method_get_not_supported");
|
||||
if (protocol.endsWith("1.1")) {
|
||||
resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
|
||||
} else {
|
||||
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the time the <code>HttpServletRequest</code>
|
||||
* object was last modified,
|
||||
* in milliseconds since midnight January 1, 1970 GMT.
|
||||
* If the time is unknown, this method returns a negative
|
||||
* number (the default).
|
||||
*
|
||||
* <p>Servlets that support HTTP GET requests and can quickly determine
|
||||
* their last modification time should override this method.
|
||||
* This makes browser and proxy caches work more effectively,
|
||||
* reducing the load on server and network resources.
|
||||
*
|
||||
* @param req the <code>HttpServletRequest</code>
|
||||
* object that is sent to the servlet
|
||||
*
|
||||
* @return a <code>long</code> integer specifying
|
||||
* the time the <code>HttpServletRequest</code>
|
||||
* object was last modified, in milliseconds
|
||||
* since midnight, January 1, 1970 GMT, or
|
||||
* -1 if the time is not known
|
||||
*/
|
||||
protected long getLastModified(HttpServletRequest req) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p>Receives an HTTP HEAD request from the protected
|
||||
* <code>service</code> method and handles the
|
||||
* request.
|
||||
* The client sends a HEAD request when it wants
|
||||
* to see only the headers of a response, such as
|
||||
* Content-Type or Content-Length. The HTTP HEAD
|
||||
* method counts the output bytes in the response
|
||||
* to set the Content-Length header accurately.
|
||||
*
|
||||
* <p>If you override this method, you can avoid computing
|
||||
* the response body and just set the response headers
|
||||
* directly to improve performance. Make sure that the
|
||||
* <code>doHead</code> method you write is both safe
|
||||
* and idempotent (that is, protects itself from being
|
||||
* called multiple times for one HTTP HEAD request).
|
||||
*
|
||||
* <p>If the HTTP HEAD request is incorrectly formatted,
|
||||
* <code>doHead</code> returns an HTTP "Bad Request"
|
||||
* message.
|
||||
*
|
||||
* @param req the request object that is passed to the servlet
|
||||
*
|
||||
* @param resp the response object that the servlet
|
||||
* uses to return the headers to the client
|
||||
*
|
||||
* @exception IOException if an input or output error occurs
|
||||
*
|
||||
* @exception ServletException if the request for the HEAD
|
||||
* could not be handled
|
||||
*/
|
||||
protected void doHead(HttpServletRequest req, HttpServletResponse resp)
|
||||
throws ServletException, IOException {
|
||||
|
||||
if (DispatcherType.INCLUDE.equals(req.getDispatcherType())) {
|
||||
doGet(req, resp);
|
||||
} else {
|
||||
NoBodyResponse response = new NoBodyResponse(resp);
|
||||
doGet(req, response);
|
||||
response.setContentLength();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called by the server (via the <code>service</code> method)
|
||||
* to allow a servlet to handle a POST request.
|
||||
*
|
||||
* The HTTP POST method allows the client to send
|
||||
* data of unlimited length to the Web server a single time
|
||||
* and is useful when posting information such as
|
||||
* credit card numbers.
|
||||
*
|
||||
* <p>When overriding this method, read the request data,
|
||||
* write the response headers, get the response's writer or output
|
||||
* stream object, and finally, write the response data. It's best
|
||||
* to include content type and encoding. When using a
|
||||
* <code>PrintWriter</code> object to return the response, set the
|
||||
* content type before accessing the <code>PrintWriter</code> object.
|
||||
*
|
||||
* <p>The servlet container must write the headers before committing the
|
||||
* response, because in HTTP the headers must be sent before the
|
||||
* response body.
|
||||
*
|
||||
* <p>Where possible, set the Content-Length header (with the
|
||||
* {@link javax.servlet.ServletResponse#setContentLength} method),
|
||||
* to allow the servlet container to use a persistent connection
|
||||
* to return its response to the client, improving performance.
|
||||
* The content length is automatically set if the entire response fits
|
||||
* inside the response buffer.
|
||||
*
|
||||
* <p>When using HTTP 1.1 chunked encoding (which means that the response
|
||||
* has a Transfer-Encoding header), do not set the Content-Length header.
|
||||
*
|
||||
* <p>This method does not need to be either safe or idempotent.
|
||||
* Operations requested through POST can have side effects for
|
||||
* which the user can be held accountable, for example,
|
||||
* updating stored data or buying items online.
|
||||
*
|
||||
* <p>If the HTTP POST request is incorrectly formatted,
|
||||
* <code>doPost</code> returns an HTTP "Bad Request" message.
|
||||
*
|
||||
*
|
||||
* @param req an {@link HttpServletRequest} object that
|
||||
* contains the request the client has made
|
||||
* of the servlet
|
||||
*
|
||||
* @param resp an {@link HttpServletResponse} object that
|
||||
* contains the response the servlet sends
|
||||
* to the client
|
||||
*
|
||||
* @exception IOException if an input or output error is
|
||||
* detected when the servlet handles
|
||||
* the request
|
||||
*
|
||||
* @exception ServletException if the request for the POST
|
||||
* could not be handled
|
||||
*
|
||||
* @see javax.servlet.ServletOutputStream
|
||||
* @see javax.servlet.ServletResponse#setContentType
|
||||
*/
|
||||
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
||||
throws ServletException, IOException {
|
||||
|
||||
String protocol = req.getProtocol();
|
||||
String msg = lStrings.getString("http.method_post_not_supported");
|
||||
if (protocol.endsWith("1.1")) {
|
||||
resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
|
||||
} else {
|
||||
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called by the server (via the <code>service</code> method)
|
||||
* to allow a servlet to handle a PUT request.
|
||||
*
|
||||
* The PUT operation allows a client to
|
||||
* place a file on the server and is similar to
|
||||
* sending a file by FTP.
|
||||
*
|
||||
* <p>When overriding this method, leave intact
|
||||
* any content headers sent with the request (including
|
||||
* Content-Length, Content-Type, Content-Transfer-Encoding,
|
||||
* Content-Encoding, Content-Base, Content-Language, Content-Location,
|
||||
* Content-MD5, and Content-Range). If your method cannot
|
||||
* handle a content header, it must issue an error message
|
||||
* (HTTP 501 - Not Implemented) and discard the request.
|
||||
* For more information on HTTP 1.1, see RFC 2616
|
||||
* <a href="http://www.ietf.org/rfc/rfc2616.txt"></a>.
|
||||
*
|
||||
* <p>This method does not need to be either safe or idempotent.
|
||||
* Operations that <code>doPut</code> performs can have side
|
||||
* effects for which the user can be held accountable. When using
|
||||
* this method, it may be useful to save a copy of the
|
||||
* affected URL in temporary storage.
|
||||
*
|
||||
* <p>If the HTTP PUT request is incorrectly formatted,
|
||||
* <code>doPut</code> returns an HTTP "Bad Request" message.
|
||||
*
|
||||
* @param req the {@link HttpServletRequest} object that
|
||||
* contains the request the client made of
|
||||
* the servlet
|
||||
*
|
||||
* @param resp the {@link HttpServletResponse} object that
|
||||
* contains the response the servlet returns
|
||||
* to the client
|
||||
*
|
||||
* @exception IOException if an input or output error occurs
|
||||
* while the servlet is handling the
|
||||
* PUT request
|
||||
*
|
||||
* @exception ServletException if the request for the PUT
|
||||
* cannot be handled
|
||||
*/
|
||||
protected void doPut(HttpServletRequest req, HttpServletResponse resp)
|
||||
throws ServletException, IOException {
|
||||
|
||||
String protocol = req.getProtocol();
|
||||
String msg = lStrings.getString("http.method_put_not_supported");
|
||||
if (protocol.endsWith("1.1")) {
|
||||
resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
|
||||
} else {
|
||||
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called by the server (via the <code>service</code> method)
|
||||
* to allow a servlet to handle a DELETE request.
|
||||
*
|
||||
* The DELETE operation allows a client to remove a document
|
||||
* or Web page from the server.
|
||||
*
|
||||
* <p>This method does not need to be either safe
|
||||
* or idempotent. Operations requested through
|
||||
* DELETE can have side effects for which users
|
||||
* can be held accountable. When using
|
||||
* this method, it may be useful to save a copy of the
|
||||
* affected URL in temporary storage.
|
||||
*
|
||||
* <p>If the HTTP DELETE request is incorrectly formatted,
|
||||
* <code>doDelete</code> returns an HTTP "Bad Request"
|
||||
* message.
|
||||
*
|
||||
* @param req the {@link HttpServletRequest} object that
|
||||
* contains the request the client made of
|
||||
* the servlet
|
||||
*
|
||||
*
|
||||
* @param resp the {@link HttpServletResponse} object that
|
||||
* contains the response the servlet returns
|
||||
* to the client
|
||||
*
|
||||
* @exception IOException if an input or output error occurs
|
||||
* while the servlet is handling the
|
||||
* DELETE request
|
||||
*
|
||||
* @exception ServletException if the request for the
|
||||
* DELETE cannot be handled
|
||||
*/
|
||||
protected void doDelete(HttpServletRequest req,
|
||||
HttpServletResponse resp)
|
||||
throws ServletException, IOException {
|
||||
|
||||
String protocol = req.getProtocol();
|
||||
String msg = lStrings.getString("http.method_delete_not_supported");
|
||||
if (protocol.endsWith("1.1")) {
|
||||
resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
|
||||
} else {
|
||||
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static Method[] getAllDeclaredMethods(Class<?> c) {
|
||||
|
||||
if (c.equals(javax.servlet.http.HttpServlet.class)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Method[] parentMethods = getAllDeclaredMethods(c.getSuperclass());
|
||||
Method[] thisMethods = c.getDeclaredMethods();
|
||||
|
||||
if ((parentMethods != null) && (parentMethods.length > 0)) {
|
||||
Method[] allMethods =
|
||||
new Method[parentMethods.length + thisMethods.length];
|
||||
System.arraycopy(parentMethods, 0, allMethods, 0,
|
||||
parentMethods.length);
|
||||
System.arraycopy(thisMethods, 0, allMethods, parentMethods.length,
|
||||
thisMethods.length);
|
||||
|
||||
thisMethods = allMethods;
|
||||
}
|
||||
|
||||
return thisMethods;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called by the server (via the <code>service</code> method)
|
||||
* to allow a servlet to handle a OPTIONS request.
|
||||
*
|
||||
* The OPTIONS request determines which HTTP methods
|
||||
* the server supports and
|
||||
* returns an appropriate header. For example, if a servlet
|
||||
* overrides <code>doGet</code>, this method returns the
|
||||
* following header:
|
||||
*
|
||||
* <p><code>Allow: GET, HEAD, TRACE, OPTIONS</code>
|
||||
*
|
||||
* <p>There's no need to override this method unless the
|
||||
* servlet implements new HTTP methods, beyond those
|
||||
* implemented by HTTP 1.1.
|
||||
*
|
||||
* @param req the {@link HttpServletRequest} object that
|
||||
* contains the request the client made of
|
||||
* the servlet
|
||||
*
|
||||
* @param resp the {@link HttpServletResponse} object that
|
||||
* contains the response the servlet returns
|
||||
* to the client
|
||||
*
|
||||
* @exception IOException if an input or output error occurs
|
||||
* while the servlet is handling the
|
||||
* OPTIONS request
|
||||
*
|
||||
* @exception ServletException if the request for the
|
||||
* OPTIONS cannot be handled
|
||||
*/
|
||||
protected void doOptions(HttpServletRequest req,
|
||||
HttpServletResponse resp)
|
||||
throws ServletException, IOException {
|
||||
|
||||
Method[] methods = getAllDeclaredMethods(this.getClass());
|
||||
|
||||
boolean ALLOW_GET = false;
|
||||
boolean ALLOW_HEAD = false;
|
||||
boolean ALLOW_POST = false;
|
||||
boolean ALLOW_PUT = false;
|
||||
boolean ALLOW_DELETE = false;
|
||||
boolean ALLOW_TRACE = true;
|
||||
boolean ALLOW_OPTIONS = true;
|
||||
|
||||
// Tomcat specific hack to see if TRACE is allowed
|
||||
Class<?> clazz = null;
|
||||
try {
|
||||
clazz = Class.forName("org.apache.catalina.connector.RequestFacade");
|
||||
Method getAllowTrace = clazz.getMethod("getAllowTrace", (Class<?>[]) null);
|
||||
ALLOW_TRACE = ((Boolean) getAllowTrace.invoke(req, (Object[]) null)).booleanValue();
|
||||
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException |
|
||||
IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
||||
// Ignore. Not running on Tomcat. TRACE is always allowed.
|
||||
}
|
||||
// End of Tomcat specific hack
|
||||
|
||||
for (int i=0; i<methods.length; i++) {
|
||||
Method m = methods[i];
|
||||
|
||||
if (m.getName().equals("doGet")) {
|
||||
ALLOW_GET = true;
|
||||
ALLOW_HEAD = true;
|
||||
}
|
||||
if (m.getName().equals("doPost"))
|
||||
ALLOW_POST = true;
|
||||
if (m.getName().equals("doPut"))
|
||||
ALLOW_PUT = true;
|
||||
if (m.getName().equals("doDelete"))
|
||||
ALLOW_DELETE = true;
|
||||
}
|
||||
|
||||
String allow = null;
|
||||
if (ALLOW_GET)
|
||||
allow=METHOD_GET;
|
||||
if (ALLOW_HEAD)
|
||||
if (allow==null) allow=METHOD_HEAD;
|
||||
else allow += ", " + METHOD_HEAD;
|
||||
if (ALLOW_POST)
|
||||
if (allow==null) allow=METHOD_POST;
|
||||
else allow += ", " + METHOD_POST;
|
||||
if (ALLOW_PUT)
|
||||
if (allow==null) allow=METHOD_PUT;
|
||||
else allow += ", " + METHOD_PUT;
|
||||
if (ALLOW_DELETE)
|
||||
if (allow==null) allow=METHOD_DELETE;
|
||||
else allow += ", " + METHOD_DELETE;
|
||||
if (ALLOW_TRACE)
|
||||
if (allow==null) allow=METHOD_TRACE;
|
||||
else allow += ", " + METHOD_TRACE;
|
||||
if (ALLOW_OPTIONS)
|
||||
if (allow==null) allow=METHOD_OPTIONS;
|
||||
else allow += ", " + METHOD_OPTIONS;
|
||||
|
||||
resp.setHeader("Allow", allow);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called by the server (via the <code>service</code> method)
|
||||
* to allow a servlet to handle a TRACE request.
|
||||
*
|
||||
* A TRACE returns the headers sent with the TRACE
|
||||
* request to the client, so that they can be used in
|
||||
* debugging. There's no need to override this method.
|
||||
*
|
||||
* @param req the {@link HttpServletRequest} object that
|
||||
* contains the request the client made of
|
||||
* the servlet
|
||||
*
|
||||
* @param resp the {@link HttpServletResponse} object that
|
||||
* contains the response the servlet returns
|
||||
* to the client
|
||||
*
|
||||
* @exception IOException if an input or output error occurs
|
||||
* while the servlet is handling the
|
||||
* TRACE request
|
||||
*
|
||||
* @exception ServletException if the request for the
|
||||
* TRACE cannot be handled
|
||||
*/
|
||||
protected void doTrace(HttpServletRequest req, HttpServletResponse resp)
|
||||
throws ServletException, IOException
|
||||
{
|
||||
|
||||
int responseLength;
|
||||
|
||||
String CRLF = "\r\n";
|
||||
StringBuilder buffer = new StringBuilder("TRACE ").append(req.getRequestURI())
|
||||
.append(" ").append(req.getProtocol());
|
||||
|
||||
Enumeration<String> reqHeaderEnum = req.getHeaderNames();
|
||||
|
||||
while( reqHeaderEnum.hasMoreElements() ) {
|
||||
String headerName = reqHeaderEnum.nextElement();
|
||||
buffer.append(CRLF).append(headerName).append(": ")
|
||||
.append(req.getHeader(headerName));
|
||||
}
|
||||
|
||||
buffer.append(CRLF);
|
||||
|
||||
responseLength = buffer.length();
|
||||
|
||||
resp.setContentType("message/http");
|
||||
resp.setContentLength(responseLength);
|
||||
ServletOutputStream out = resp.getOutputStream();
|
||||
out.print(buffer.toString());
|
||||
out.close();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Receives standard HTTP requests from the public
|
||||
* <code>service</code> method and dispatches
|
||||
* them to the <code>do</code><i>Method</i> methods defined in
|
||||
* this class. This method is an HTTP-specific version of the
|
||||
* {@link javax.servlet.Servlet#service} method. There's no
|
||||
* need to override this method.
|
||||
*
|
||||
* @param req the {@link HttpServletRequest} object that
|
||||
* contains the request the client made of
|
||||
* the servlet
|
||||
*
|
||||
* @param resp the {@link HttpServletResponse} object that
|
||||
* contains the response the servlet returns
|
||||
* to the client
|
||||
*
|
||||
* @exception IOException if an input or output error occurs
|
||||
* while the servlet is handling the
|
||||
* HTTP request
|
||||
*
|
||||
* @exception ServletException if the HTTP request
|
||||
* cannot be handled
|
||||
*
|
||||
* @see javax.servlet.Servlet#service
|
||||
*/
|
||||
protected void service(HttpServletRequest req, HttpServletResponse resp)
|
||||
throws ServletException, IOException {
|
||||
|
||||
String method = req.getMethod();
|
||||
|
||||
if (method.equals(METHOD_GET)) {
|
||||
long lastModified = getLastModified(req);
|
||||
if (lastModified == -1) {
|
||||
// servlet doesn't support if-modified-since, no reason
|
||||
// to go through further expensive logic
|
||||
doGet(req, resp);
|
||||
} else {
|
||||
long ifModifiedSince;
|
||||
try {
|
||||
ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
|
||||
} catch (IllegalArgumentException iae) {
|
||||
// Invalid date header - proceed as if none was set
|
||||
ifModifiedSince = -1;
|
||||
}
|
||||
if (ifModifiedSince < (lastModified / 1000 * 1000)) {
|
||||
// If the servlet mod time is later, call doGet()
|
||||
// Round down to the nearest second for a proper compare
|
||||
// A ifModifiedSince of -1 will always be less
|
||||
maybeSetLastModified(resp, lastModified);
|
||||
doGet(req, resp);
|
||||
} else {
|
||||
resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
|
||||
}
|
||||
}
|
||||
|
||||
} else if (method.equals(METHOD_HEAD)) {
|
||||
long lastModified = getLastModified(req);
|
||||
maybeSetLastModified(resp, lastModified);
|
||||
doHead(req, resp);
|
||||
|
||||
} else if (method.equals(METHOD_POST)) {
|
||||
doPost(req, resp);
|
||||
|
||||
} else if (method.equals(METHOD_PUT)) {
|
||||
doPut(req, resp);
|
||||
|
||||
} else if (method.equals(METHOD_DELETE)) {
|
||||
doDelete(req, resp);
|
||||
|
||||
} else if (method.equals(METHOD_OPTIONS)) {
|
||||
doOptions(req,resp);
|
||||
|
||||
} else if (method.equals(METHOD_TRACE)) {
|
||||
doTrace(req,resp);
|
||||
|
||||
} else {
|
||||
//
|
||||
// Note that this means NO servlet supports whatever
|
||||
// method was requested, anywhere on this server.
|
||||
//
|
||||
|
||||
String errMsg = lStrings.getString("http.method_not_implemented");
|
||||
Object[] errArgs = new Object[1];
|
||||
errArgs[0] = method;
|
||||
errMsg = MessageFormat.format(errMsg, errArgs);
|
||||
|
||||
resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Sets the Last-Modified entity header field, if it has not
|
||||
* already been set and if the value is meaningful. Called before
|
||||
* doGet, to ensure that headers are set before response data is
|
||||
* written. A subclass might have set this header already, so we
|
||||
* check.
|
||||
*/
|
||||
private void maybeSetLastModified(HttpServletResponse resp,
|
||||
long lastModified) {
|
||||
if (resp.containsHeader(HEADER_LASTMOD))
|
||||
return;
|
||||
if (lastModified >= 0)
|
||||
resp.setDateHeader(HEADER_LASTMOD, lastModified);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Dispatches client requests to the protected
|
||||
* <code>service</code> method. There's no need to
|
||||
* override this method.
|
||||
*
|
||||
* @param req the {@link HttpServletRequest} object that
|
||||
* contains the request the client made of
|
||||
* the servlet
|
||||
*
|
||||
* @param res the {@link HttpServletResponse} object that
|
||||
* contains the response the servlet returns
|
||||
* to the client
|
||||
*
|
||||
* @exception IOException if an input or output error occurs
|
||||
* while the servlet is handling the
|
||||
* HTTP request
|
||||
*
|
||||
* @exception ServletException if the HTTP request cannot
|
||||
* be handled
|
||||
*
|
||||
* @see javax.servlet.Servlet#service
|
||||
*/
|
||||
@Override
|
||||
public void service(ServletRequest req, ServletResponse res)
|
||||
throws ServletException, IOException {
|
||||
|
||||
HttpServletRequest request;
|
||||
HttpServletResponse response;
|
||||
|
||||
try {
|
||||
request = (HttpServletRequest) req;
|
||||
response = (HttpServletResponse) res;
|
||||
} catch (ClassCastException e) {
|
||||
throw new ServletException(lStrings.getString("http.non_http"));
|
||||
}
|
||||
service(request, response);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* A response wrapper for use in (dumb) "HEAD" support.
|
||||
* This just swallows that body, counting the bytes in order to set
|
||||
* the content length appropriately. All other methods delegate to the
|
||||
* wrapped HTTP Servlet Response object.
|
||||
*/
|
||||
// file private
|
||||
class NoBodyResponse extends HttpServletResponseWrapper {
|
||||
private final NoBodyOutputStream noBody;
|
||||
private PrintWriter writer;
|
||||
private boolean didSetContentLength;
|
||||
|
||||
// file private
|
||||
NoBodyResponse(HttpServletResponse r) {
|
||||
super(r);
|
||||
noBody = new NoBodyOutputStream(this);
|
||||
}
|
||||
|
||||
// file private
|
||||
void setContentLength() {
|
||||
if (!didSetContentLength) {
|
||||
if (writer != null) {
|
||||
writer.flush();
|
||||
}
|
||||
super.setContentLength(noBody.getContentLength());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// SERVLET RESPONSE interface methods
|
||||
|
||||
@Override
|
||||
public void setContentLength(int len) {
|
||||
super.setContentLength(len);
|
||||
didSetContentLength = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setContentLengthLong(long len) {
|
||||
super.setContentLengthLong(len);
|
||||
didSetContentLength = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHeader(String name, String value) {
|
||||
super.setHeader(name, value);
|
||||
checkHeader(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addHeader(String name, String value) {
|
||||
super.addHeader(name, value);
|
||||
checkHeader(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIntHeader(String name, int value) {
|
||||
super.setIntHeader(name, value);
|
||||
checkHeader(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addIntHeader(String name, int value) {
|
||||
super.addIntHeader(name, value);
|
||||
checkHeader(name);
|
||||
}
|
||||
|
||||
private void checkHeader(String name) {
|
||||
if ("content-length".equalsIgnoreCase(name)) {
|
||||
didSetContentLength = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ServletOutputStream getOutputStream() throws IOException {
|
||||
return noBody;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PrintWriter getWriter() throws UnsupportedEncodingException {
|
||||
|
||||
if (writer == null) {
|
||||
OutputStreamWriter w;
|
||||
|
||||
w = new OutputStreamWriter(noBody, getCharacterEncoding());
|
||||
writer = new PrintWriter(w);
|
||||
}
|
||||
return writer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Servlet output stream that gobbles up all its data.
|
||||
*/
|
||||
|
||||
// file private
|
||||
class NoBodyOutputStream extends ServletOutputStream {
|
||||
|
||||
private static final String LSTRING_FILE =
|
||||
"javax.servlet.http.LocalStrings";
|
||||
private static final ResourceBundle lStrings =
|
||||
ResourceBundle.getBundle(LSTRING_FILE);
|
||||
|
||||
private final HttpServletResponse response;
|
||||
private boolean flushed = false;
|
||||
private int contentLength = 0;
|
||||
|
||||
// file private
|
||||
NoBodyOutputStream(HttpServletResponse response) {
|
||||
this.response = response;
|
||||
}
|
||||
|
||||
// file private
|
||||
int getContentLength() {
|
||||
return contentLength;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(int b) throws IOException {
|
||||
contentLength++;
|
||||
checkCommit();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(byte buf[], int offset, int len) throws IOException {
|
||||
if (buf == null) {
|
||||
throw new NullPointerException(
|
||||
lStrings.getString("err.io.nullArray"));
|
||||
}
|
||||
|
||||
if (offset < 0 || len < 0 || offset+len > buf.length) {
|
||||
String msg = lStrings.getString("err.io.indexOutOfBounds");
|
||||
Object[] msgArgs = new Object[3];
|
||||
msgArgs[0] = Integer.valueOf(offset);
|
||||
msgArgs[1] = Integer.valueOf(len);
|
||||
msgArgs[2] = Integer.valueOf(buf.length);
|
||||
msg = MessageFormat.format(msg, msgArgs);
|
||||
throw new IndexOutOfBoundsException(msg);
|
||||
}
|
||||
|
||||
contentLength += len;
|
||||
checkCommit();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReady() {
|
||||
// TODO SERVLET 3.1
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWriteListener(javax.servlet.WriteListener listener) {
|
||||
// TODO SERVLET 3.1
|
||||
}
|
||||
|
||||
private void checkCommit() throws IOException {
|
||||
if (!flushed && contentLength > response.getBufferSize()) {
|
||||
response.flushBuffer();
|
||||
flushed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
537
java/javax/servlet/http/HttpServletRequest.java
Normal file
537
java/javax/servlet/http/HttpServletRequest.java
Normal file
@@ -0,0 +1,537 @@
|
||||
/*
|
||||
* 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 java.util.Collection;
|
||||
import java.util.Enumeration;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletRequest;
|
||||
|
||||
/**
|
||||
* Extends the {@link javax.servlet.ServletRequest} interface to provide request
|
||||
* information for HTTP servlets.
|
||||
* <p>
|
||||
* The servlet container creates an <code>HttpServletRequest</code> object and
|
||||
* passes it as an argument to the servlet's service methods
|
||||
* (<code>doGet</code>, <code>doPost</code>, etc).
|
||||
*/
|
||||
public interface HttpServletRequest extends ServletRequest {
|
||||
|
||||
/**
|
||||
* String identifier for Basic authentication. Value "BASIC"
|
||||
*/
|
||||
public static final String BASIC_AUTH = "BASIC";
|
||||
/**
|
||||
* String identifier for Form authentication. Value "FORM"
|
||||
*/
|
||||
public static final String FORM_AUTH = "FORM";
|
||||
/**
|
||||
* String identifier for Client Certificate authentication. Value
|
||||
* "CLIENT_CERT"
|
||||
*/
|
||||
public static final String CLIENT_CERT_AUTH = "CLIENT_CERT";
|
||||
/**
|
||||
* String identifier for Digest authentication. Value "DIGEST"
|
||||
*/
|
||||
public static final String DIGEST_AUTH = "DIGEST";
|
||||
|
||||
/**
|
||||
* 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>
|
||||
* 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.
|
||||
*/
|
||||
public String getAuthType();
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
public 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>
|
||||
* The date is returned as the number of milliseconds since January 1, 1970
|
||||
* GMT. The header name is case insensitive.
|
||||
* <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
|
||||
* @exception IllegalArgumentException
|
||||
* If the header value can't be converted to a date
|
||||
*/
|
||||
public 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
|
||||
*/
|
||||
public String getHeader(String name);
|
||||
|
||||
/**
|
||||
* Returns all the values of the specified request header as an
|
||||
* <code>Enumeration</code> of <code>String</code> objects.
|
||||
* <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>
|
||||
* 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
|
||||
*/
|
||||
public Enumeration<String> getHeaders(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>
|
||||
* 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>
|
||||
*/
|
||||
public Enumeration<String> getHeaderNames();
|
||||
|
||||
/**
|
||||
* 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>
|
||||
* 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
|
||||
* @exception NumberFormatException
|
||||
* If the header value can't be converted to an
|
||||
* <code>int</code>
|
||||
*/
|
||||
public 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
|
||||
*/
|
||||
public String getMethod();
|
||||
|
||||
/**
|
||||
* 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>
|
||||
* This method returns <code>null</code> if there was no extra path
|
||||
* information.
|
||||
* <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
|
||||
*/
|
||||
public 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>
|
||||
* 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). 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
|
||||
*/
|
||||
public String getPathTranslated();
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
public String getContextPath();
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
public 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
|
||||
*/
|
||||
public String getRemoteUser();
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
public boolean isUserInRole(String role);
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
public java.security.Principal getUserPrincipal();
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
public 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:
|
||||
* <table>
|
||||
* <caption>Examples of Returned Values</caption>
|
||||
* <tr>
|
||||
* <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>
|
||||
* To reconstruct a URL with a scheme and host, use
|
||||
* {@link #getRequestURL}.
|
||||
*
|
||||
* @return a <code>String</code> containing the part of the URL from the
|
||||
* protocol name up to the query string
|
||||
* @see #getRequestURL
|
||||
*/
|
||||
public 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>
|
||||
* Because this method returns a <code>StringBuffer</code>, not a string,
|
||||
* you can modify the URL easily, for example, to append query parameters.
|
||||
* <p>
|
||||
* This method is useful for creating redirect messages and for reporting
|
||||
* errors.
|
||||
*
|
||||
* @return a <code>StringBuffer</code> object containing the reconstructed
|
||||
* URL
|
||||
*/
|
||||
public 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>
|
||||
* 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.
|
||||
*/
|
||||
public String getServletPath();
|
||||
|
||||
/**
|
||||
* 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>
|
||||
* If <code>create</code> is <code>false</code> and the request has no valid
|
||||
* <code>HttpSession</code>, this method returns <code>null</code>.
|
||||
* <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()
|
||||
*/
|
||||
public HttpSession getSession(boolean create);
|
||||
|
||||
/**
|
||||
* 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)
|
||||
*/
|
||||
public HttpSession getSession();
|
||||
|
||||
/**
|
||||
* Changes the session ID of the session associated with this request. This
|
||||
* method does not create a new session object it only changes the ID of the
|
||||
* current session.
|
||||
*
|
||||
* @return the new session ID allocated to the session
|
||||
* @see HttpSessionIdListener
|
||||
* @since Servlet 3.1
|
||||
*/
|
||||
public String changeSessionId();
|
||||
|
||||
/**
|
||||
* 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; <code>false</code> otherwise
|
||||
* @see #getRequestedSessionId
|
||||
* @see #getSession
|
||||
*/
|
||||
public boolean isRequestedSessionIdValid();
|
||||
|
||||
/**
|
||||
* 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>
|
||||
* @see #getSession
|
||||
*/
|
||||
public boolean isRequestedSessionIdFromCookie();
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
public boolean isRequestedSessionIdFromURL();
|
||||
|
||||
/**
|
||||
* @return {@link #isRequestedSessionIdFromURL()}
|
||||
* @deprecated As of Version 2.1 of the Java Servlet API, use
|
||||
* {@link #isRequestedSessionIdFromURL} instead.
|
||||
*/
|
||||
@SuppressWarnings("dep-ann")
|
||||
// Spec API does not use @Deprecated
|
||||
public boolean isRequestedSessionIdFromUrl();
|
||||
|
||||
/**
|
||||
* Triggers the same authentication process as would be triggered if the
|
||||
* request is for a resource that is protected by a security constraint.
|
||||
*
|
||||
* @param response The response to use to return any authentication
|
||||
* challenge
|
||||
* @return <code>true</code> if the user is successfully authenticated and
|
||||
* <code>false</code> if not
|
||||
*
|
||||
* @throws IOException if the authentication process attempted to read from
|
||||
* the request or write to the response and an I/O error occurred
|
||||
* @throws IllegalStateException if the authentication process attempted to
|
||||
* write to the response after it had been committed
|
||||
* @throws ServletException if the authentication failed and the caller is
|
||||
* expected to handle the failure
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
public boolean authenticate(HttpServletResponse response)
|
||||
throws IOException, ServletException;
|
||||
|
||||
/**
|
||||
* Authenticate the provided user name and password and then associated the
|
||||
* authenticated user with the request.
|
||||
*
|
||||
* @param username The user name to authenticate
|
||||
* @param password The password to use to authenticate the user
|
||||
*
|
||||
* @throws ServletException
|
||||
* If any of {@link #getRemoteUser()},
|
||||
* {@link #getUserPrincipal()} or {@link #getAuthType()} are
|
||||
* non-null, if the configured authenticator does not support
|
||||
* user name and password authentication or if the
|
||||
* authentication fails
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
public void login(String username, String password) throws ServletException;
|
||||
|
||||
/**
|
||||
* Removes any authenticated user from the request.
|
||||
*
|
||||
* @throws ServletException
|
||||
* If the logout fails
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
public void logout() throws ServletException;
|
||||
|
||||
/**
|
||||
* Return a collection of all uploaded Parts.
|
||||
*
|
||||
* @return A collection of all uploaded Parts.
|
||||
* @throws IOException
|
||||
* if an I/O error occurs
|
||||
* @throws IllegalStateException
|
||||
* if size limits are exceeded or no multipart configuration is
|
||||
* provided
|
||||
* @throws ServletException
|
||||
* if the request is not multipart/form-data
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
public Collection<Part> getParts() throws IOException,
|
||||
ServletException;
|
||||
|
||||
/**
|
||||
* Gets the named Part or null if the Part does not exist. Triggers upload
|
||||
* of all Parts.
|
||||
*
|
||||
* @param name The name of the Part to obtain
|
||||
*
|
||||
* @return The named Part or null if the Part does not exist
|
||||
* @throws IOException
|
||||
* if an I/O error occurs
|
||||
* @throws IllegalStateException
|
||||
* if size limits are exceeded
|
||||
* @throws ServletException
|
||||
* if the request is not multipart/form-data
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
public Part getPart(String name) throws IOException,
|
||||
ServletException;
|
||||
|
||||
/**
|
||||
* Start the HTTP upgrade process and pass the connection to the provided
|
||||
* protocol handler once the current request/response pair has completed
|
||||
* processing. Calling this method sets the response status to {@link
|
||||
* HttpServletResponse#SC_SWITCHING_PROTOCOLS} and flushes the response.
|
||||
* Protocol specific headers must have already been set before this method
|
||||
* is called.
|
||||
*
|
||||
* @param <T> The type of the upgrade handler
|
||||
* @param httpUpgradeHandlerClass The class that implements the upgrade
|
||||
* handler
|
||||
*
|
||||
* @return A newly created instance of the specified upgrade handler type
|
||||
*
|
||||
* @throws IOException
|
||||
* if an I/O error occurred during the upgrade
|
||||
* @throws ServletException
|
||||
* if the given httpUpgradeHandlerClass fails to be instantiated
|
||||
* @since Servlet 3.1
|
||||
*/
|
||||
public <T extends HttpUpgradeHandler> T upgrade(
|
||||
Class<T> httpUpgradeHandlerClass) throws java.io.IOException, ServletException;
|
||||
}
|
||||
378
java/javax/servlet/http/HttpServletRequestWrapper.java
Normal file
378
java/javax/servlet/http/HttpServletRequestWrapper.java
Normal file
@@ -0,0 +1,378 @@
|
||||
/*
|
||||
* 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 java.util.Collection;
|
||||
import java.util.Enumeration;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletRequestWrapper;
|
||||
|
||||
/**
|
||||
* Provides a convenient implementation of the HttpServletRequest interface that
|
||||
* can be subclassed by developers wishing to adapt the request to a Servlet.
|
||||
* This class implements the Wrapper or Decorator pattern. Methods default to
|
||||
* calling through to the wrapped request object.
|
||||
*
|
||||
* @see javax.servlet.http.HttpServletRequest
|
||||
* @since v 2.3
|
||||
*/
|
||||
public class HttpServletRequestWrapper extends ServletRequestWrapper implements
|
||||
HttpServletRequest {
|
||||
|
||||
/**
|
||||
* Constructs a request object wrapping the given request.
|
||||
*
|
||||
* @param request The request to wrap
|
||||
*
|
||||
* @throws java.lang.IllegalArgumentException
|
||||
* if the request is null
|
||||
*/
|
||||
public HttpServletRequestWrapper(HttpServletRequest request) {
|
||||
super(request);
|
||||
}
|
||||
|
||||
private HttpServletRequest _getHttpServletRequest() {
|
||||
return (HttpServletRequest) super.getRequest();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getAuthType() on the
|
||||
* wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public String getAuthType() {
|
||||
return this._getHttpServletRequest().getAuthType();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getCookies() on the
|
||||
* wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public Cookie[] getCookies() {
|
||||
return this._getHttpServletRequest().getCookies();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getDateHeader(String
|
||||
* name) on the wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public long getDateHeader(String name) {
|
||||
return this._getHttpServletRequest().getDateHeader(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getHeader(String name)
|
||||
* on the wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public String getHeader(String name) {
|
||||
return this._getHttpServletRequest().getHeader(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getHeaders(String name)
|
||||
* on the wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public Enumeration<String> getHeaders(String name) {
|
||||
return this._getHttpServletRequest().getHeaders(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getHeaderNames() on the
|
||||
* wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public Enumeration<String> getHeaderNames() {
|
||||
return this._getHttpServletRequest().getHeaderNames();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getIntHeader(String
|
||||
* name) on the wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public int getIntHeader(String name) {
|
||||
return this._getHttpServletRequest().getIntHeader(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getMethod() on the
|
||||
* wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public String getMethod() {
|
||||
return this._getHttpServletRequest().getMethod();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getPathInfo() on the
|
||||
* wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public String getPathInfo() {
|
||||
return this._getHttpServletRequest().getPathInfo();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getPathTranslated() on
|
||||
* the wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public String getPathTranslated() {
|
||||
return this._getHttpServletRequest().getPathTranslated();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getContextPath() on the
|
||||
* wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public String getContextPath() {
|
||||
return this._getHttpServletRequest().getContextPath();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getQueryString() on the
|
||||
* wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public String getQueryString() {
|
||||
return this._getHttpServletRequest().getQueryString();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getRemoteUser() on the
|
||||
* wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public String getRemoteUser() {
|
||||
return this._getHttpServletRequest().getRemoteUser();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return isUserInRole(String
|
||||
* role) on the wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public boolean isUserInRole(String role) {
|
||||
return this._getHttpServletRequest().isUserInRole(role);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getUserPrincipal() on
|
||||
* the wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public java.security.Principal getUserPrincipal() {
|
||||
return this._getHttpServletRequest().getUserPrincipal();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getRequestedSessionId()
|
||||
* on the wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public String getRequestedSessionId() {
|
||||
return this._getHttpServletRequest().getRequestedSessionId();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getRequestURI() on the
|
||||
* wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public String getRequestURI() {
|
||||
return this._getHttpServletRequest().getRequestURI();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getRequestURL() on the
|
||||
* wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public StringBuffer getRequestURL() {
|
||||
return this._getHttpServletRequest().getRequestURL();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getServletPath() on the
|
||||
* wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public String getServletPath() {
|
||||
return this._getHttpServletRequest().getServletPath();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getSession(boolean
|
||||
* create) on the wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public HttpSession getSession(boolean create) {
|
||||
return this._getHttpServletRequest().getSession(create);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return getSession() on the
|
||||
* wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public HttpSession getSession() {
|
||||
return this._getHttpServletRequest().getSession();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to call changeSessionId() on the
|
||||
* wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public String changeSessionId() {
|
||||
return this._getHttpServletRequest().changeSessionId();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return
|
||||
* isRequestedSessionIdValid() on the wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public boolean isRequestedSessionIdValid() {
|
||||
return this._getHttpServletRequest().isRequestedSessionIdValid();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return
|
||||
* isRequestedSessionIdFromCookie() on the wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public boolean isRequestedSessionIdFromCookie() {
|
||||
return this._getHttpServletRequest().isRequestedSessionIdFromCookie();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return
|
||||
* isRequestedSessionIdFromURL() on the wrapped request object.
|
||||
*/
|
||||
@Override
|
||||
public boolean isRequestedSessionIdFromURL() {
|
||||
return this._getHttpServletRequest().isRequestedSessionIdFromURL();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return
|
||||
* isRequestedSessionIdFromUrl() on the wrapped request object.
|
||||
*
|
||||
* @deprecated As of Version 3.0 of the Java Servlet API
|
||||
*/
|
||||
@Override
|
||||
@SuppressWarnings("dep-ann")
|
||||
// Spec API does not use @Deprecated
|
||||
public boolean isRequestedSessionIdFromUrl() {
|
||||
return this._getHttpServletRequest().isRequestedSessionIdFromUrl();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* <p>
|
||||
* The default behavior of this method is to return
|
||||
* {@link HttpServletRequest#authenticate(HttpServletResponse)}
|
||||
* on the wrapped request object.
|
||||
*
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
@Override
|
||||
public boolean authenticate(HttpServletResponse response)
|
||||
throws IOException, ServletException {
|
||||
return this._getHttpServletRequest().authenticate(response);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* <p>
|
||||
* The default behavior of this method is to return
|
||||
* {@link HttpServletRequest#login(String, String)}
|
||||
* on the wrapped request object.
|
||||
*
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
@Override
|
||||
public void login(String username, String password) throws ServletException {
|
||||
this._getHttpServletRequest().login(username, password);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* <p>
|
||||
* The default behavior of this method is to return
|
||||
* {@link HttpServletRequest#logout()}
|
||||
* on the wrapped request object.
|
||||
*
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
@Override
|
||||
public void logout() throws ServletException {
|
||||
this._getHttpServletRequest().logout();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* <p>
|
||||
* The default behavior of this method is to return
|
||||
* {@link HttpServletRequest#getParts()}
|
||||
* on the wrapped request object.
|
||||
*
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
@Override
|
||||
public Collection<Part> getParts() throws IOException,
|
||||
ServletException {
|
||||
return this._getHttpServletRequest().getParts();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* <p>
|
||||
* The default behavior of this method is to return
|
||||
* {@link HttpServletRequest#getPart(String)}
|
||||
* on the wrapped request object.
|
||||
*
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
@Override
|
||||
public Part getPart(String name) throws IOException,
|
||||
ServletException {
|
||||
return this._getHttpServletRequest().getPart(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* <p>
|
||||
* The default behavior of this method is to return
|
||||
* {@link HttpServletRequest#upgrade(Class)} on the wrapped request object.
|
||||
*
|
||||
* @since Servlet 3.1
|
||||
*/
|
||||
@Override
|
||||
public <T extends HttpUpgradeHandler> T upgrade(
|
||||
Class<T> httpUpgradeHandlerClass) throws IOException, ServletException {
|
||||
return this._getHttpServletRequest().upgrade(httpUpgradeHandlerClass);
|
||||
}
|
||||
}
|
||||
609
java/javax/servlet/http/HttpServletResponse.java
Normal file
609
java/javax/servlet/http/HttpServletResponse.java
Normal file
@@ -0,0 +1,609 @@
|
||||
/*
|
||||
* 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 java.util.Collection;
|
||||
|
||||
import javax.servlet.ServletResponse;
|
||||
|
||||
/**
|
||||
* Extends the {@link ServletResponse} interface to provide HTTP-specific
|
||||
* functionality in sending a response. For example, it has methods to access
|
||||
* HTTP headers and cookies.
|
||||
* <p>
|
||||
* The servlet container creates an <code>HttpServletResponse</code> object and
|
||||
* passes it as an argument to the servlet's service methods (<code>doGet</code>, <code>doPost</code>, etc).
|
||||
*
|
||||
* @see javax.servlet.ServletResponse
|
||||
*/
|
||||
public interface HttpServletResponse extends ServletResponse {
|
||||
|
||||
/**
|
||||
* Adds the specified cookie to the response. This method can be called
|
||||
* multiple times to set more than one cookie.
|
||||
*
|
||||
* @param cookie
|
||||
* the Cookie to return to the client
|
||||
*/
|
||||
public void addCookie(Cookie cookie);
|
||||
|
||||
/**
|
||||
* Returns a boolean indicating whether the named response header has
|
||||
* already been set.
|
||||
*
|
||||
* @param name
|
||||
* the header name
|
||||
* @return <code>true</code> if the named response header has already been
|
||||
* set; <code>false</code> otherwise
|
||||
*/
|
||||
public boolean containsHeader(String name);
|
||||
|
||||
/**
|
||||
* Encodes the specified URL by including the session ID in it, or, if
|
||||
* encoding is not needed, returns the URL unchanged. The implementation of
|
||||
* this method includes the logic to determine whether the session ID needs
|
||||
* to be encoded in the URL. For example, if the browser supports cookies,
|
||||
* or session tracking is turned off, URL encoding is unnecessary.
|
||||
* <p>
|
||||
* For robust session tracking, all URLs emitted by a servlet should be run
|
||||
* through this method. Otherwise, URL rewriting cannot be used with
|
||||
* browsers which do not support cookies.
|
||||
*
|
||||
* @param url
|
||||
* the url to be encoded.
|
||||
* @return the encoded URL if encoding is needed; the unchanged URL
|
||||
* otherwise.
|
||||
*/
|
||||
public String encodeURL(String url);
|
||||
|
||||
/**
|
||||
* Encodes the specified URL for use in the <code>sendRedirect</code> method
|
||||
* or, if encoding is not needed, returns the URL unchanged. The
|
||||
* implementation of this method includes the logic to determine whether the
|
||||
* session ID needs to be encoded in the URL. Because the rules for making
|
||||
* this determination can differ from those used to decide whether to encode
|
||||
* a normal link, this method is separated from the <code>encodeURL</code>
|
||||
* method.
|
||||
* <p>
|
||||
* All URLs sent to the <code>HttpServletResponse.sendRedirect</code> method
|
||||
* should be run through this method. Otherwise, URL rewriting cannot be
|
||||
* used with browsers which do not support cookies.
|
||||
*
|
||||
* @param url
|
||||
* the url to be encoded.
|
||||
* @return the encoded URL if encoding is needed; the unchanged URL
|
||||
* otherwise.
|
||||
* @see #sendRedirect
|
||||
* @see #encodeUrl
|
||||
*/
|
||||
public String encodeRedirectURL(String url);
|
||||
|
||||
/**
|
||||
* @param url
|
||||
* the url to be encoded.
|
||||
* @return the encoded URL if encoding is needed; the unchanged URL
|
||||
* otherwise.
|
||||
* @deprecated As of version 2.1, use encodeURL(String url) instead
|
||||
*/
|
||||
@SuppressWarnings("dep-ann")
|
||||
// Spec API does not use @Deprecated
|
||||
public String encodeUrl(String url);
|
||||
|
||||
/**
|
||||
* @param url
|
||||
* the url to be encoded.
|
||||
* @return the encoded URL if encoding is needed; the unchanged URL
|
||||
* otherwise.
|
||||
* @deprecated As of version 2.1, use encodeRedirectURL(String url) instead
|
||||
*/
|
||||
@SuppressWarnings("dep-ann")
|
||||
// Spec API does not use @Deprecated
|
||||
public String encodeRedirectUrl(String url);
|
||||
|
||||
/**
|
||||
* Sends an error response to the client using the specified status code and
|
||||
* clears the output buffer. The server defaults to creating the response to
|
||||
* look like an HTML-formatted server error page containing the specified
|
||||
* message, setting the content type to "text/html", leaving cookies and
|
||||
* other headers unmodified. If an error-page declaration has been made for
|
||||
* the web application corresponding to the status code passed in, it will
|
||||
* be served back in preference to the suggested msg parameter.
|
||||
* <p>
|
||||
* If the response has already been committed, this method throws an
|
||||
* IllegalStateException. After using this method, the response should be
|
||||
* considered to be committed and should not be written to.
|
||||
*
|
||||
* @param sc
|
||||
* the error status code
|
||||
* @param msg
|
||||
* the descriptive message
|
||||
* @exception IOException
|
||||
* If an input or output exception occurs
|
||||
* @exception IllegalStateException
|
||||
* If the response was committed
|
||||
*/
|
||||
public void sendError(int sc, String msg) throws IOException;
|
||||
|
||||
/**
|
||||
* Sends an error response to the client using the specified status code and
|
||||
* clears the buffer. This is equivalent to calling {@link #sendError(int,
|
||||
* String)} with the same status code and <code>null</code> for the message.
|
||||
*
|
||||
* @param sc
|
||||
* the error status code
|
||||
* @exception IOException
|
||||
* If an input or output exception occurs
|
||||
* @exception IllegalStateException
|
||||
* If the response was committed before this method call
|
||||
*/
|
||||
public void sendError(int sc) throws IOException;
|
||||
|
||||
/**
|
||||
* Sends a temporary redirect response to the client using the specified
|
||||
* redirect location URL. This method can accept relative URLs; the servlet
|
||||
* container must convert the relative URL to an absolute URL before sending
|
||||
* the response to the client. If the location is relative without a leading
|
||||
* '/' the container interprets it as relative to the current request URI.
|
||||
* If the location is relative with a leading '/' the container interprets
|
||||
* it as relative to the servlet container root.
|
||||
* <p>
|
||||
* If the response has already been committed, this method throws an
|
||||
* IllegalStateException. After using this method, the response should be
|
||||
* considered to be committed and should not be written to.
|
||||
*
|
||||
* @param location
|
||||
* the redirect location URL
|
||||
* @exception IOException
|
||||
* If an input or output exception occurs
|
||||
* @exception IllegalStateException
|
||||
* If the response was committed or if a partial URL is given
|
||||
* and cannot be converted into a valid URL
|
||||
*/
|
||||
public void sendRedirect(String location) throws IOException;
|
||||
|
||||
/**
|
||||
* Sets a response header with the given name and date-value. The date is
|
||||
* specified in terms of milliseconds since the epoch. If the header had
|
||||
* already been set, the new value overwrites the previous one. The
|
||||
* <code>containsHeader</code> method can be used to test for the presence
|
||||
* of a header before setting its value.
|
||||
*
|
||||
* @param name
|
||||
* the name of the header to set
|
||||
* @param date
|
||||
* the assigned date value
|
||||
* @see #containsHeader
|
||||
* @see #addDateHeader
|
||||
*/
|
||||
public void setDateHeader(String name, long date);
|
||||
|
||||
/**
|
||||
* Adds a response header with the given name and date-value. The date is
|
||||
* specified in terms of milliseconds since the epoch. This method allows
|
||||
* response headers to have multiple values.
|
||||
*
|
||||
* @param name
|
||||
* the name of the header to set
|
||||
* @param date
|
||||
* the additional date value
|
||||
* @see #setDateHeader
|
||||
*/
|
||||
public void addDateHeader(String name, long date);
|
||||
|
||||
/**
|
||||
* Sets a response header with the given name and value. If the header had
|
||||
* already been set, the new value overwrites the previous one. The
|
||||
* <code>containsHeader</code> method can be used to test for the presence
|
||||
* of a header before setting its value.
|
||||
*
|
||||
* @param name
|
||||
* the name of the header
|
||||
* @param value
|
||||
* the header value If it contains octet string, it should be
|
||||
* encoded according to RFC 2047
|
||||
* (http://www.ietf.org/rfc/rfc2047.txt)
|
||||
* @see #containsHeader
|
||||
* @see #addHeader
|
||||
*/
|
||||
public void setHeader(String name, String value);
|
||||
|
||||
/**
|
||||
* Adds a response header with the given name and value. This method allows
|
||||
* response headers to have multiple values.
|
||||
*
|
||||
* @param name
|
||||
* the name of the header
|
||||
* @param value
|
||||
* the additional header value If it contains octet string, it
|
||||
* should be encoded according to RFC 2047
|
||||
* (http://www.ietf.org/rfc/rfc2047.txt)
|
||||
* @see #setHeader
|
||||
*/
|
||||
public void addHeader(String name, String value);
|
||||
|
||||
/**
|
||||
* Sets a response header with the given name and integer value. If the
|
||||
* header had already been set, the new value overwrites the previous one.
|
||||
* The <code>containsHeader</code> method can be used to test for the
|
||||
* presence of a header before setting its value.
|
||||
*
|
||||
* @param name
|
||||
* the name of the header
|
||||
* @param value
|
||||
* the assigned integer value
|
||||
* @see #containsHeader
|
||||
* @see #addIntHeader
|
||||
*/
|
||||
public void setIntHeader(String name, int value);
|
||||
|
||||
/**
|
||||
* Adds a response header with the given name and integer value. This method
|
||||
* allows response headers to have multiple values.
|
||||
*
|
||||
* @param name
|
||||
* the name of the header
|
||||
* @param value
|
||||
* the assigned integer value
|
||||
* @see #setIntHeader
|
||||
*/
|
||||
public void addIntHeader(String name, int value);
|
||||
|
||||
/**
|
||||
* Sets the status code for this response. This method is used to set the
|
||||
* return status code when there is no error (for example, for the status
|
||||
* codes SC_OK or SC_MOVED_TEMPORARILY). If there is an error, and the
|
||||
* caller wishes to invoke an error-page defined in the web application, the
|
||||
* <code>sendError</code> method should be used instead.
|
||||
* <p>
|
||||
* The container clears the buffer and sets the Location header, preserving
|
||||
* cookies and other headers.
|
||||
*
|
||||
* @param sc
|
||||
* the status code
|
||||
* @see #sendError
|
||||
*/
|
||||
public void setStatus(int sc);
|
||||
|
||||
/**
|
||||
* Sets the status code and message for this response.
|
||||
*
|
||||
* @param sc
|
||||
* the status code
|
||||
* @param sm
|
||||
* the status message
|
||||
* @deprecated As of version 2.1, due to ambiguous meaning of the message
|
||||
* parameter. To set a status code use
|
||||
* <code>setStatus(int)</code>, to send an error with a
|
||||
* description use <code>sendError(int, String)</code>.
|
||||
*/
|
||||
@SuppressWarnings("dep-ann")
|
||||
// Spec API does not use @Deprecated
|
||||
public void setStatus(int sc, String sm);
|
||||
|
||||
/**
|
||||
* Get the HTTP status code for this Response.
|
||||
*
|
||||
* @return The HTTP status code for this Response
|
||||
*
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
public int getStatus();
|
||||
|
||||
/**
|
||||
* Return the value for the specified header, or <code>null</code> if this
|
||||
* header has not been set. If more than one value was added for this
|
||||
* name, only the first is returned; use {@link #getHeaders(String)} to
|
||||
* retrieve all of them.
|
||||
*
|
||||
* @param name Header name to look up
|
||||
*
|
||||
* @return The first value for the specified header. This is the raw value
|
||||
* so if multiple values are specified in the first header then they
|
||||
* will be returned as a single header value .
|
||||
*
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
public String getHeader(String name);
|
||||
|
||||
/**
|
||||
* Return a Collection of all the header values associated with the
|
||||
* specified header name.
|
||||
*
|
||||
* @param name Header name to look up
|
||||
*
|
||||
* @return The values for the specified header. These are the raw values so
|
||||
* if multiple values are specified in a single header that will be
|
||||
* returned as a single header value.
|
||||
*
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
public Collection<String> getHeaders(String name);
|
||||
|
||||
/**
|
||||
* Get the header names set for this HTTP response.
|
||||
*
|
||||
* @return The header names set for this HTTP response.
|
||||
*
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
public Collection<String> getHeaderNames();
|
||||
|
||||
/*
|
||||
* Server status codes; see RFC 2068.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Status code (100) indicating the client can continue.
|
||||
*/
|
||||
public static final int SC_CONTINUE = 100;
|
||||
|
||||
/**
|
||||
* Status code (101) indicating the server is switching protocols according
|
||||
* to Upgrade header.
|
||||
*/
|
||||
public static final int SC_SWITCHING_PROTOCOLS = 101;
|
||||
|
||||
/**
|
||||
* Status code (200) indicating the request succeeded normally.
|
||||
*/
|
||||
public static final int SC_OK = 200;
|
||||
|
||||
/**
|
||||
* Status code (201) indicating the request succeeded and created a new
|
||||
* resource on the server.
|
||||
*/
|
||||
public static final int SC_CREATED = 201;
|
||||
|
||||
/**
|
||||
* Status code (202) indicating that a request was accepted for processing,
|
||||
* but was not completed.
|
||||
*/
|
||||
public static final int SC_ACCEPTED = 202;
|
||||
|
||||
/**
|
||||
* Status code (203) indicating that the meta information presented by the
|
||||
* client did not originate from the server.
|
||||
*/
|
||||
public static final int SC_NON_AUTHORITATIVE_INFORMATION = 203;
|
||||
|
||||
/**
|
||||
* Status code (204) indicating that the request succeeded but that there
|
||||
* was no new information to return.
|
||||
*/
|
||||
public static final int SC_NO_CONTENT = 204;
|
||||
|
||||
/**
|
||||
* Status code (205) indicating that the agent <em>SHOULD</em> reset the
|
||||
* document view which caused the request to be sent.
|
||||
*/
|
||||
public static final int SC_RESET_CONTENT = 205;
|
||||
|
||||
/**
|
||||
* Status code (206) indicating that the server has fulfilled the partial
|
||||
* GET request for the resource.
|
||||
*/
|
||||
public static final int SC_PARTIAL_CONTENT = 206;
|
||||
|
||||
/**
|
||||
* Status code (300) indicating that the requested resource corresponds to
|
||||
* any one of a set of representations, each with its own specific location.
|
||||
*/
|
||||
public static final int SC_MULTIPLE_CHOICES = 300;
|
||||
|
||||
/**
|
||||
* Status code (301) indicating that the resource has permanently moved to a
|
||||
* new location, and that future references should use a new URI with their
|
||||
* requests.
|
||||
*/
|
||||
public static final int SC_MOVED_PERMANENTLY = 301;
|
||||
|
||||
/**
|
||||
* Status code (302) indicating that the resource has temporarily moved to
|
||||
* another location, but that future references should still use the
|
||||
* original URI to access the resource. This definition is being retained
|
||||
* for backwards compatibility. SC_FOUND is now the preferred definition.
|
||||
*/
|
||||
public static final int SC_MOVED_TEMPORARILY = 302;
|
||||
|
||||
/**
|
||||
* Status code (302) indicating that the resource reside temporarily under a
|
||||
* different URI. Since the redirection might be altered on occasion, the
|
||||
* client should continue to use the Request-URI for future
|
||||
* requests.(HTTP/1.1) To represent the status code (302), it is recommended
|
||||
* to use this variable.
|
||||
*/
|
||||
public static final int SC_FOUND = 302;
|
||||
|
||||
/**
|
||||
* Status code (303) indicating that the response to the request can be
|
||||
* found under a different URI.
|
||||
*/
|
||||
public static final int SC_SEE_OTHER = 303;
|
||||
|
||||
/**
|
||||
* Status code (304) indicating that a conditional GET operation found that
|
||||
* the resource was available and not modified.
|
||||
*/
|
||||
public static final int SC_NOT_MODIFIED = 304;
|
||||
|
||||
/**
|
||||
* Status code (305) indicating that the requested resource <em>MUST</em> be
|
||||
* accessed through the proxy given by the <code><em>Location</em></code>
|
||||
* field.
|
||||
*/
|
||||
public static final int SC_USE_PROXY = 305;
|
||||
|
||||
/**
|
||||
* Status code (307) indicating that the requested resource resides
|
||||
* temporarily under a different URI. The temporary URI <em>SHOULD</em> be
|
||||
* given by the <code><em>Location</em></code> field in the response.
|
||||
*/
|
||||
public static final int SC_TEMPORARY_REDIRECT = 307;
|
||||
|
||||
/**
|
||||
* Status code (400) indicating the request sent by the client was
|
||||
* syntactically incorrect.
|
||||
*/
|
||||
public static final int SC_BAD_REQUEST = 400;
|
||||
|
||||
/**
|
||||
* Status code (401) indicating that the request requires HTTP
|
||||
* authentication.
|
||||
*/
|
||||
public static final int SC_UNAUTHORIZED = 401;
|
||||
|
||||
/**
|
||||
* Status code (402) reserved for future use.
|
||||
*/
|
||||
public static final int SC_PAYMENT_REQUIRED = 402;
|
||||
|
||||
/**
|
||||
* Status code (403) indicating the server understood the request but
|
||||
* refused to fulfill it.
|
||||
*/
|
||||
public static final int SC_FORBIDDEN = 403;
|
||||
|
||||
/**
|
||||
* Status code (404) indicating that the requested resource is not
|
||||
* available.
|
||||
*/
|
||||
public static final int SC_NOT_FOUND = 404;
|
||||
|
||||
/**
|
||||
* Status code (405) indicating that the method specified in the
|
||||
* <code><em>Request-Line</em></code> is not allowed for the resource
|
||||
* identified by the <code><em>Request-URI</em></code>.
|
||||
*/
|
||||
public static final int SC_METHOD_NOT_ALLOWED = 405;
|
||||
|
||||
/**
|
||||
* Status code (406) indicating that the resource identified by the request
|
||||
* is only capable of generating response entities which have content
|
||||
* characteristics not acceptable according to the accept headers sent in
|
||||
* the request.
|
||||
*/
|
||||
public static final int SC_NOT_ACCEPTABLE = 406;
|
||||
|
||||
/**
|
||||
* Status code (407) indicating that the client <em>MUST</em> first
|
||||
* authenticate itself with the proxy.
|
||||
*/
|
||||
public static final int SC_PROXY_AUTHENTICATION_REQUIRED = 407;
|
||||
|
||||
/**
|
||||
* Status code (408) indicating that the client did not produce a request
|
||||
* within the time that the server was prepared to wait.
|
||||
*/
|
||||
public static final int SC_REQUEST_TIMEOUT = 408;
|
||||
|
||||
/**
|
||||
* Status code (409) indicating that the request could not be completed due
|
||||
* to a conflict with the current state of the resource.
|
||||
*/
|
||||
public static final int SC_CONFLICT = 409;
|
||||
|
||||
/**
|
||||
* Status code (410) indicating that the resource is no longer available at
|
||||
* the server and no forwarding address is known. This condition
|
||||
* <em>SHOULD</em> be considered permanent.
|
||||
*/
|
||||
public static final int SC_GONE = 410;
|
||||
|
||||
/**
|
||||
* Status code (411) indicating that the request cannot be handled without a
|
||||
* defined <code><em>Content-Length</em></code>.
|
||||
*/
|
||||
public static final int SC_LENGTH_REQUIRED = 411;
|
||||
|
||||
/**
|
||||
* Status code (412) indicating that the precondition given in one or more
|
||||
* of the request-header fields evaluated to false when it was tested on the
|
||||
* server.
|
||||
*/
|
||||
public static final int SC_PRECONDITION_FAILED = 412;
|
||||
|
||||
/**
|
||||
* Status code (413) indicating that the server is refusing to process the
|
||||
* request because the request entity is larger than the server is willing
|
||||
* or able to process.
|
||||
*/
|
||||
public static final int SC_REQUEST_ENTITY_TOO_LARGE = 413;
|
||||
|
||||
/**
|
||||
* Status code (414) indicating that the server is refusing to service the
|
||||
* request because the <code><em>Request-URI</em></code> is longer than the
|
||||
* server is willing to interpret.
|
||||
*/
|
||||
public static final int SC_REQUEST_URI_TOO_LONG = 414;
|
||||
|
||||
/**
|
||||
* Status code (415) indicating that the server is refusing to service the
|
||||
* request because the entity of the request is in a format not supported by
|
||||
* the requested resource for the requested method.
|
||||
*/
|
||||
public static final int SC_UNSUPPORTED_MEDIA_TYPE = 415;
|
||||
|
||||
/**
|
||||
* Status code (416) indicating that the server cannot serve the requested
|
||||
* byte range.
|
||||
*/
|
||||
public static final int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
|
||||
|
||||
/**
|
||||
* Status code (417) indicating that the server could not meet the
|
||||
* expectation given in the Expect request header.
|
||||
*/
|
||||
public static final int SC_EXPECTATION_FAILED = 417;
|
||||
|
||||
/**
|
||||
* Status code (500) indicating an error inside the HTTP server which
|
||||
* prevented it from fulfilling the request.
|
||||
*/
|
||||
public static final int SC_INTERNAL_SERVER_ERROR = 500;
|
||||
|
||||
/**
|
||||
* Status code (501) indicating the HTTP server does not support the
|
||||
* functionality needed to fulfill the request.
|
||||
*/
|
||||
public static final int SC_NOT_IMPLEMENTED = 501;
|
||||
|
||||
/**
|
||||
* Status code (502) indicating that the HTTP server received an invalid
|
||||
* response from a server it consulted when acting as a proxy or gateway.
|
||||
*/
|
||||
public static final int SC_BAD_GATEWAY = 502;
|
||||
|
||||
/**
|
||||
* Status code (503) indicating that the HTTP server is temporarily
|
||||
* overloaded, and unable to handle the request.
|
||||
*/
|
||||
public static final int SC_SERVICE_UNAVAILABLE = 503;
|
||||
|
||||
/**
|
||||
* Status code (504) indicating that the server did not receive a timely
|
||||
* response from the upstream server while acting as a gateway or proxy.
|
||||
*/
|
||||
public static final int SC_GATEWAY_TIMEOUT = 504;
|
||||
|
||||
/**
|
||||
* Status code (505) indicating that the server does not support or refuses
|
||||
* to support the HTTP protocol version that was used in the request
|
||||
* message.
|
||||
*/
|
||||
public static final int SC_HTTP_VERSION_NOT_SUPPORTED = 505;
|
||||
}
|
||||
272
java/javax/servlet/http/HttpServletResponseWrapper.java
Normal file
272
java/javax/servlet/http/HttpServletResponseWrapper.java
Normal file
@@ -0,0 +1,272 @@
|
||||
/*
|
||||
* 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 java.util.Collection;
|
||||
|
||||
import javax.servlet.ServletResponseWrapper;
|
||||
|
||||
/**
|
||||
* Provides a convenient implementation of the HttpServletResponse interface
|
||||
* that can be subclassed by developers wishing to adapt the response from a
|
||||
* Servlet. This class implements the Wrapper or Decorator pattern. Methods
|
||||
* default to calling through to the wrapped response object.
|
||||
*
|
||||
* @since v 2.3
|
||||
* @see javax.servlet.http.HttpServletResponse
|
||||
*/
|
||||
public class HttpServletResponseWrapper extends ServletResponseWrapper
|
||||
implements HttpServletResponse {
|
||||
|
||||
/**
|
||||
* Constructs a response adaptor wrapping the given response.
|
||||
*
|
||||
* @param response The response to be wrapped
|
||||
*
|
||||
* @throws java.lang.IllegalArgumentException
|
||||
* if the response is null
|
||||
*/
|
||||
public HttpServletResponseWrapper(HttpServletResponse response) {
|
||||
super(response);
|
||||
}
|
||||
|
||||
private HttpServletResponse _getHttpServletResponse() {
|
||||
return (HttpServletResponse) super.getResponse();
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to call addCookie(Cookie cookie)
|
||||
* on the wrapped response object.
|
||||
*/
|
||||
@Override
|
||||
public void addCookie(Cookie cookie) {
|
||||
this._getHttpServletResponse().addCookie(cookie);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to call containsHeader(String
|
||||
* name) on the wrapped response object.
|
||||
*/
|
||||
@Override
|
||||
public boolean containsHeader(String name) {
|
||||
return this._getHttpServletResponse().containsHeader(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to call encodeURL(String url) on
|
||||
* the wrapped response object.
|
||||
*/
|
||||
@Override
|
||||
public String encodeURL(String url) {
|
||||
return this._getHttpServletResponse().encodeURL(url);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return encodeRedirectURL(String
|
||||
* url) on the wrapped response object.
|
||||
*/
|
||||
@Override
|
||||
public String encodeRedirectURL(String url) {
|
||||
return this._getHttpServletResponse().encodeRedirectURL(url);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to call encodeUrl(String url) on
|
||||
* the wrapped response object.
|
||||
*
|
||||
* @deprecated As of Version 3.0 of the Java Servlet API
|
||||
*/
|
||||
@Override
|
||||
@SuppressWarnings("dep-ann")
|
||||
// Spec API does not use @Deprecated
|
||||
public String encodeUrl(String url) {
|
||||
return this._getHttpServletResponse().encodeUrl(url);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return encodeRedirectUrl(String
|
||||
* url) on the wrapped response object.
|
||||
*
|
||||
* @deprecated As of Version 3.0 of the Java Servlet API
|
||||
*/
|
||||
@Override
|
||||
@SuppressWarnings("dep-ann")
|
||||
// Spec API does not use @Deprecated
|
||||
public String encodeRedirectUrl(String url) {
|
||||
return this._getHttpServletResponse().encodeRedirectUrl(url);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to call sendError(int sc, String
|
||||
* msg) on the wrapped response object.
|
||||
*/
|
||||
@Override
|
||||
public void sendError(int sc, String msg) throws IOException {
|
||||
this._getHttpServletResponse().sendError(sc, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to call sendError(int sc) on the
|
||||
* wrapped response object.
|
||||
*/
|
||||
@Override
|
||||
public void sendError(int sc) throws IOException {
|
||||
this._getHttpServletResponse().sendError(sc);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return sendRedirect(String
|
||||
* location) on the wrapped response object.
|
||||
*/
|
||||
@Override
|
||||
public void sendRedirect(String location) throws IOException {
|
||||
this._getHttpServletResponse().sendRedirect(location);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to call setDateHeader(String name,
|
||||
* long date) on the wrapped response object.
|
||||
*/
|
||||
@Override
|
||||
public void setDateHeader(String name, long date) {
|
||||
this._getHttpServletResponse().setDateHeader(name, date);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to call addDateHeader(String name,
|
||||
* long date) on the wrapped response object.
|
||||
*/
|
||||
@Override
|
||||
public void addDateHeader(String name, long date) {
|
||||
this._getHttpServletResponse().addDateHeader(name, date);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return setHeader(String name,
|
||||
* String value) on the wrapped response object.
|
||||
*/
|
||||
@Override
|
||||
public void setHeader(String name, String value) {
|
||||
this._getHttpServletResponse().setHeader(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to return addHeader(String name,
|
||||
* String value) on the wrapped response object.
|
||||
*/
|
||||
@Override
|
||||
public void addHeader(String name, String value) {
|
||||
this._getHttpServletResponse().addHeader(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to call setIntHeader(String name,
|
||||
* int value) on the wrapped response object.
|
||||
*/
|
||||
@Override
|
||||
public void setIntHeader(String name, int value) {
|
||||
this._getHttpServletResponse().setIntHeader(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to call addIntHeader(String name,
|
||||
* int value) on the wrapped response object.
|
||||
*/
|
||||
@Override
|
||||
public void addIntHeader(String name, int value) {
|
||||
this._getHttpServletResponse().addIntHeader(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to call setStatus(int sc) on the
|
||||
* wrapped response object.
|
||||
*/
|
||||
@Override
|
||||
public void setStatus(int sc) {
|
||||
this._getHttpServletResponse().setStatus(sc);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default behavior of this method is to call setStatus(int sc, String
|
||||
* sm) on the wrapped response object.
|
||||
*
|
||||
* @deprecated As of Version 3.0 of the Java Servlet API
|
||||
*/
|
||||
@Override
|
||||
@SuppressWarnings("dep-ann")
|
||||
// Spec API does not use @Deprecated
|
||||
public void setStatus(int sc, String sm) {
|
||||
this._getHttpServletResponse().setStatus(sc, sm);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* <p>
|
||||
* The default implementation is to call
|
||||
* {@link HttpServletResponse#getStatus()}
|
||||
* on the wrapped {@link HttpServletResponse}.
|
||||
*
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
@Override
|
||||
public int getStatus() {
|
||||
return this._getHttpServletResponse().getStatus();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* <p>
|
||||
* The default implementation is to call
|
||||
* {@link HttpServletResponse#getHeader(String)}
|
||||
* on the wrapped {@link HttpServletResponse}.
|
||||
*
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
@Override
|
||||
public String getHeader(String name) {
|
||||
return this._getHttpServletResponse().getHeader(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* <p>
|
||||
* The default implementation is to call
|
||||
* {@link HttpServletResponse#getHeaders(String)}
|
||||
* on the wrapped {@link HttpServletResponse}.
|
||||
*
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
@Override
|
||||
public Collection<String> getHeaders(String name) {
|
||||
return this._getHttpServletResponse().getHeaders(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* <p>
|
||||
* The default implementation is to call
|
||||
* {@link HttpServletResponse#getHeaderNames()}
|
||||
* on the wrapped {@link HttpServletResponse}.
|
||||
*
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
@Override
|
||||
public Collection<String> getHeaderNames() {
|
||||
return this._getHttpServletResponse().getHeaderNames();
|
||||
}
|
||||
}
|
||||
286
java/javax/servlet/http/HttpSession.java
Normal file
286
java/javax/servlet/http/HttpSession.java
Normal file
@@ -0,0 +1,286 @@
|
||||
/*
|
||||
* 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.Enumeration;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
|
||||
/**
|
||||
* Provides a way to identify a user across more than one page request or visit
|
||||
* to a Web site and to store information about that user.
|
||||
* <p>
|
||||
* The servlet container uses this interface to create a session between an HTTP
|
||||
* client and an HTTP server. The session persists for a specified time period,
|
||||
* across more than one connection or page request from the user. A session
|
||||
* usually corresponds to one user, who may visit a site many times. The server
|
||||
* can maintain a session in many ways such as using cookies or rewriting URLs.
|
||||
* <p>
|
||||
* This interface allows servlets to
|
||||
* <ul>
|
||||
* <li>View and manipulate information about a session, such as the session
|
||||
* identifier, creation time, and last accessed time
|
||||
* <li>Bind objects to sessions, allowing user information to persist across
|
||||
* multiple user connections
|
||||
* </ul>
|
||||
* <p>
|
||||
* When an application stores an object in or removes an object from a session,
|
||||
* the session checks whether the object implements
|
||||
* {@link HttpSessionBindingListener}. If it does, the servlet notifies the
|
||||
* object that it has been bound to or unbound from the session. Notifications
|
||||
* are sent after the binding methods complete. For session that are invalidated
|
||||
* or expire, notifications are sent after the session has been invalidated or
|
||||
* expired.
|
||||
* <p>
|
||||
* When container migrates a session between VMs in a distributed container
|
||||
* setting, all session attributes implementing the
|
||||
* {@link HttpSessionActivationListener} interface are notified.
|
||||
* <p>
|
||||
* A servlet should be able to handle cases in which the client does not choose
|
||||
* to join a session, such as when cookies are intentionally turned off. Until
|
||||
* the client joins the session, <code>isNew</code> returns <code>true</code>.
|
||||
* If the client chooses not to join the session, <code>getSession</code> will
|
||||
* return a different session on each request, and <code>isNew</code> will
|
||||
* always return <code>true</code>.
|
||||
* <p>
|
||||
* Session information is scoped only to the current web application (
|
||||
* <code>ServletContext</code>), so information stored in one context will not
|
||||
* be directly visible in another.
|
||||
*
|
||||
* @see HttpSessionBindingListener
|
||||
*/
|
||||
public interface HttpSession {
|
||||
|
||||
/**
|
||||
* Returns the time when this session was created, measured in milliseconds
|
||||
* since midnight January 1, 1970 GMT.
|
||||
*
|
||||
* @return a <code>long</code> specifying when this session was created,
|
||||
* expressed in milliseconds since 1/1/1970 GMT
|
||||
* @exception IllegalStateException
|
||||
* if this method is called on an invalidated session
|
||||
*/
|
||||
public long getCreationTime();
|
||||
|
||||
/**
|
||||
* Returns a string containing the unique identifier assigned to this
|
||||
* session. The identifier is assigned by the servlet container and is
|
||||
* implementation dependent.
|
||||
*
|
||||
* @return a string specifying the identifier assigned to this session
|
||||
* @exception IllegalStateException
|
||||
* if this method is called on an invalidated session
|
||||
*/
|
||||
public String getId();
|
||||
|
||||
/**
|
||||
* Returns the last time the client sent a request associated with this
|
||||
* session, as the number of milliseconds since midnight January 1, 1970
|
||||
* GMT, and marked by the time the container received the request.
|
||||
* <p>
|
||||
* Actions that your application takes, such as getting or setting a value
|
||||
* associated with the session, do not affect the access time.
|
||||
*
|
||||
* @return a <code>long</code> representing the last time the client sent a
|
||||
* request associated with this session, expressed in milliseconds
|
||||
* since 1/1/1970 GMT
|
||||
* @exception IllegalStateException
|
||||
* if this method is called on an invalidated session
|
||||
*/
|
||||
public long getLastAccessedTime();
|
||||
|
||||
/**
|
||||
* Returns the ServletContext to which this session belongs.
|
||||
*
|
||||
* @return The ServletContext object for the web application
|
||||
* @since 2.3
|
||||
*/
|
||||
public ServletContext getServletContext();
|
||||
|
||||
/**
|
||||
* Specifies the time, in seconds, between client requests before the
|
||||
* servlet container will invalidate this session. A zero or negative time
|
||||
* indicates that the session should never timeout.
|
||||
*
|
||||
* @param interval
|
||||
* An integer specifying the number of seconds
|
||||
*/
|
||||
public void setMaxInactiveInterval(int interval);
|
||||
|
||||
/**
|
||||
* Returns the maximum time interval, in seconds, that the servlet container
|
||||
* will keep this session open between client accesses. After this interval,
|
||||
* the servlet container will invalidate the session. The maximum time
|
||||
* interval can be set with the <code>setMaxInactiveInterval</code> method.
|
||||
* A zero or negative time indicates that the session should never timeout.
|
||||
*
|
||||
* @return an integer specifying the number of seconds this session remains
|
||||
* open between client requests
|
||||
* @see #setMaxInactiveInterval
|
||||
*/
|
||||
public int getMaxInactiveInterval();
|
||||
|
||||
/**
|
||||
* Do not use.
|
||||
* @return A dummy implementation of HttpSessionContext
|
||||
* @deprecated As of Version 2.1, this method is deprecated and has no
|
||||
* replacement. It will be removed in a future version of the
|
||||
* Java Servlet API.
|
||||
*/
|
||||
@SuppressWarnings("dep-ann")
|
||||
// Spec API does not use @Deprecated
|
||||
public HttpSessionContext getSessionContext();
|
||||
|
||||
/**
|
||||
* Returns the object bound with the specified name in this session, or
|
||||
* <code>null</code> if no object is bound under the name.
|
||||
*
|
||||
* @param name
|
||||
* a string specifying the name of the object
|
||||
* @return the object with the specified name
|
||||
* @exception IllegalStateException
|
||||
* if this method is called on an invalidated session
|
||||
*/
|
||||
public Object getAttribute(String name);
|
||||
|
||||
/**
|
||||
* @param name
|
||||
* a string specifying the name of the object
|
||||
* @return the object with the specified name
|
||||
* @exception IllegalStateException
|
||||
* if this method is called on an invalidated session
|
||||
* @deprecated As of Version 2.2, this method is replaced by
|
||||
* {@link #getAttribute}.
|
||||
*/
|
||||
@SuppressWarnings("dep-ann")
|
||||
// Spec API does not use @Deprecated
|
||||
public Object getValue(String name);
|
||||
|
||||
/**
|
||||
* Returns an <code>Enumeration</code> of <code>String</code> objects
|
||||
* containing the names of all the objects bound to this session.
|
||||
*
|
||||
* @return an <code>Enumeration</code> of <code>String</code> objects
|
||||
* specifying the names of all the objects bound to this session
|
||||
* @exception IllegalStateException
|
||||
* if this method is called on an invalidated session
|
||||
*/
|
||||
public Enumeration<String> getAttributeNames();
|
||||
|
||||
/**
|
||||
* @return an array of <code>String</code> objects specifying the names of
|
||||
* all the objects bound to this session
|
||||
* @exception IllegalStateException
|
||||
* if this method is called on an invalidated session
|
||||
* @deprecated As of Version 2.2, this method is replaced by
|
||||
* {@link #getAttributeNames}
|
||||
*/
|
||||
@SuppressWarnings("dep-ann")
|
||||
// Spec API does not use @Deprecated
|
||||
public String[] getValueNames();
|
||||
|
||||
/**
|
||||
* Binds an object to this session, using the name specified. If an object
|
||||
* of the same name is already bound to the session, the object is replaced.
|
||||
* <p>
|
||||
* After this method executes, and if the new object implements
|
||||
* <code>HttpSessionBindingListener</code>, the container calls
|
||||
* <code>HttpSessionBindingListener.valueBound</code>. The container then
|
||||
* notifies any <code>HttpSessionAttributeListener</code>s in the web
|
||||
* application.
|
||||
* <p>
|
||||
* If an object was already bound to this session of this name that
|
||||
* implements <code>HttpSessionBindingListener</code>, its
|
||||
* <code>HttpSessionBindingListener.valueUnbound</code> method is called.
|
||||
* <p>
|
||||
* If the value passed in is null, this has the same effect as calling
|
||||
* <code>removeAttribute()</code>.
|
||||
*
|
||||
* @param name
|
||||
* the name to which the object is bound; cannot be null
|
||||
* @param value
|
||||
* the object to be bound
|
||||
* @exception IllegalStateException
|
||||
* if this method is called on an invalidated session
|
||||
*/
|
||||
public void setAttribute(String name, Object value);
|
||||
|
||||
/**
|
||||
* @param name
|
||||
* the name to which the object is bound; cannot be null
|
||||
* @param value
|
||||
* the object to be bound; cannot be null
|
||||
* @exception IllegalStateException
|
||||
* if this method is called on an invalidated session
|
||||
* @deprecated As of Version 2.2, this method is replaced by
|
||||
* {@link #setAttribute}
|
||||
*/
|
||||
@SuppressWarnings("dep-ann")
|
||||
// Spec API does not use @Deprecated
|
||||
public void putValue(String name, Object value);
|
||||
|
||||
/**
|
||||
* Removes the object bound with the specified name from this session. If
|
||||
* the session does not have an object bound with the specified name, this
|
||||
* method does nothing.
|
||||
* <p>
|
||||
* After this method executes, and if the object implements
|
||||
* <code>HttpSessionBindingListener</code>, the container calls
|
||||
* <code>HttpSessionBindingListener.valueUnbound</code>. The container then
|
||||
* notifies any <code>HttpSessionAttributeListener</code>s in the web
|
||||
* application.
|
||||
*
|
||||
* @param name
|
||||
* the name of the object to remove from this session
|
||||
* @exception IllegalStateException
|
||||
* if this method is called on an invalidated session
|
||||
*/
|
||||
public void removeAttribute(String name);
|
||||
|
||||
/**
|
||||
* @param name
|
||||
* the name of the object to remove from this session
|
||||
* @exception IllegalStateException
|
||||
* if this method is called on an invalidated session
|
||||
* @deprecated As of Version 2.2, this method is replaced by
|
||||
* {@link #removeAttribute}
|
||||
*/
|
||||
@SuppressWarnings("dep-ann")
|
||||
// Spec API does not use @Deprecated
|
||||
public void removeValue(String name);
|
||||
|
||||
/**
|
||||
* Invalidates this session then unbinds any objects bound to it.
|
||||
*
|
||||
* @exception IllegalStateException
|
||||
* if this method is called on an already invalidated session
|
||||
*/
|
||||
public void invalidate();
|
||||
|
||||
/**
|
||||
* Returns <code>true</code> if the client does not yet know about the
|
||||
* session or if the client chooses not to join the session. For example, if
|
||||
* the server used only cookie-based sessions, and the client had disabled
|
||||
* the use of cookies, then a session would be new on each request.
|
||||
*
|
||||
* @return <code>true</code> if the server has created a session, but the
|
||||
* client has not yet joined
|
||||
* @exception IllegalStateException
|
||||
* if this method is called on an already invalidated session
|
||||
*/
|
||||
public boolean isNew();
|
||||
}
|
||||
46
java/javax/servlet/http/HttpSessionActivationListener.java
Normal file
46
java/javax/servlet/http/HttpSessionActivationListener.java
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* Objects that are bound to a session may listen to container events notifying
|
||||
* them that sessions will be passivated and that session will be activated. A
|
||||
* container that migrates session between VMs or persists sessions is required
|
||||
* to notify all attributes bound to sessions implementing
|
||||
* HttpSessionActivationListener.
|
||||
*
|
||||
* @since 2.3
|
||||
*/
|
||||
public interface HttpSessionActivationListener extends EventListener {
|
||||
|
||||
/**
|
||||
* Notification that the session is about to be passivated.
|
||||
*
|
||||
* @param se Information about the session this is about to be passivated
|
||||
*/
|
||||
public void sessionWillPassivate(HttpSessionEvent se);
|
||||
|
||||
/**
|
||||
* Notification that the session has just been activated.
|
||||
*
|
||||
* @param se Information about the session this has just been activated
|
||||
*/
|
||||
public void sessionDidActivate(HttpSessionEvent se);
|
||||
}
|
||||
|
||||
52
java/javax/servlet/http/HttpSessionAttributeListener.java
Normal file
52
java/javax/servlet/http/HttpSessionAttributeListener.java
Normal file
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* This listener interface can be implemented in order to get notifications of
|
||||
* changes to the attribute lists of sessions within this web application.
|
||||
*
|
||||
* @since v 2.3
|
||||
*/
|
||||
public interface HttpSessionAttributeListener extends EventListener {
|
||||
|
||||
/**
|
||||
* Notification that an attribute has been added to a session. Called after
|
||||
* the attribute is added.
|
||||
*
|
||||
* @param se Information about the added attribute
|
||||
*/
|
||||
public void attributeAdded(HttpSessionBindingEvent se);
|
||||
|
||||
/**
|
||||
* Notification that an attribute has been removed from a session. Called
|
||||
* after the attribute is removed.
|
||||
*
|
||||
* @param se Information about the removed attribute
|
||||
*/
|
||||
public void attributeRemoved(HttpSessionBindingEvent se);
|
||||
|
||||
/**
|
||||
* Notification that an attribute has been replaced in a session. Called
|
||||
* after the attribute is replaced.
|
||||
*
|
||||
* @param se Information about the replaced attribute
|
||||
*/
|
||||
public void attributeReplaced(HttpSessionBindingEvent se);
|
||||
}
|
||||
119
java/javax/servlet/http/HttpSessionBindingEvent.java
Normal file
119
java/javax/servlet/http/HttpSessionBindingEvent.java
Normal file
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* Events of this type are either sent to an object that implements
|
||||
* {@link HttpSessionBindingListener} when it is bound or unbound from a
|
||||
* session, or to a {@link HttpSessionAttributeListener} that has been
|
||||
* configured in the deployment descriptor when any attribute is bound, unbound
|
||||
* or replaced in a session.
|
||||
* <p>
|
||||
* The session binds the object by a call to
|
||||
* <code>HttpSession.setAttribute</code> and unbinds the object by a call to
|
||||
* <code>HttpSession.removeAttribute</code>.
|
||||
*
|
||||
* @see HttpSession
|
||||
* @see HttpSessionBindingListener
|
||||
* @see HttpSessionAttributeListener
|
||||
*/
|
||||
public class HttpSessionBindingEvent extends HttpSessionEvent {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/* The name to which the object is being bound or unbound */
|
||||
private final String name;
|
||||
|
||||
/* The object is being bound or unbound */
|
||||
private final Object value;
|
||||
|
||||
/**
|
||||
* Constructs an event that notifies an object that it has been bound to or
|
||||
* unbound from a session. To receive the event, the object must implement
|
||||
* {@link HttpSessionBindingListener}.
|
||||
*
|
||||
* @param session
|
||||
* the session to which the object is bound or unbound
|
||||
* @param name
|
||||
* the name with which the object is bound or unbound
|
||||
* @see #getName()
|
||||
* @see #getSession()
|
||||
*/
|
||||
public HttpSessionBindingEvent(HttpSession session, String name) {
|
||||
super(session);
|
||||
this.name = name;
|
||||
this.value = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs an event that notifies an object that it has been bound to or
|
||||
* unbound from a session. To receive the event, the object must implement
|
||||
* {@link HttpSessionBindingListener}.
|
||||
*
|
||||
* @param session
|
||||
* the session to which the object is bound or unbound
|
||||
* @param name
|
||||
* the name with which the object is bound or unbound
|
||||
* @param value
|
||||
* the object that is bound or unbound
|
||||
* @see #getName()
|
||||
* @see #getSession()
|
||||
* @see #getValue()
|
||||
*/
|
||||
public HttpSessionBindingEvent(HttpSession session, String name,
|
||||
Object value) {
|
||||
super(session);
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the session that changed.
|
||||
* @return The session that changed
|
||||
*/
|
||||
@Override
|
||||
public HttpSession getSession() {
|
||||
return super.getSession();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name with which the attribute is bound to or unbound from the
|
||||
* session.
|
||||
*
|
||||
* @return a string specifying the name with which the object is bound to or
|
||||
* unbound from the session
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of the attribute that has been added, removed or
|
||||
* replaced.
|
||||
*
|
||||
* @return If the attribute was added (or bound), this is the value of the
|
||||
* attribute. If the attribute was removed (or unbound), this is the
|
||||
* value of the removed attribute. If the attribute was replaced,
|
||||
* this is the old value of the attribute.
|
||||
*
|
||||
* @since 2.3
|
||||
*/
|
||||
public Object getValue() {
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
53
java/javax/servlet/http/HttpSessionBindingListener.java
Normal file
53
java/javax/servlet/http/HttpSessionBindingListener.java
Normal file
@@ -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.util.EventListener;
|
||||
|
||||
/**
|
||||
* Causes an object to be notified when it is bound to or unbound from a
|
||||
* session. The object is notified by an {@link HttpSessionBindingEvent} object.
|
||||
* This may be as a result of a servlet programmer explicitly unbinding an
|
||||
* attribute from a session, due to a session being invalidated, or due to a
|
||||
* session timing out.
|
||||
*
|
||||
* @see HttpSession
|
||||
* @see HttpSessionBindingEvent
|
||||
*/
|
||||
public interface HttpSessionBindingListener extends EventListener {
|
||||
|
||||
/**
|
||||
* Notifies the object that it is being bound to a session and identifies
|
||||
* the session.
|
||||
*
|
||||
* @param event
|
||||
* the event that identifies the session
|
||||
* @see #valueUnbound
|
||||
*/
|
||||
public void valueBound(HttpSessionBindingEvent event);
|
||||
|
||||
/**
|
||||
* Notifies the object that it is being unbound from a session and
|
||||
* identifies the session.
|
||||
*
|
||||
* @param event
|
||||
* the event that identifies the session
|
||||
* @see #valueBound
|
||||
*/
|
||||
public void valueUnbound(HttpSessionBindingEvent event);
|
||||
}
|
||||
55
java/javax/servlet/http/HttpSessionContext.java
Normal file
55
java/javax/servlet/http/HttpSessionContext.java
Normal file
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* 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.Enumeration;
|
||||
|
||||
/**
|
||||
* Do not use.
|
||||
* @deprecated As of Java(tm) Servlet API 2.1 for security reasons, with no
|
||||
* replacement. This interface will be removed in a future version
|
||||
* of this API.
|
||||
* @see HttpSession
|
||||
* @see HttpSessionBindingEvent
|
||||
* @see HttpSessionBindingListener
|
||||
*/
|
||||
@SuppressWarnings("dep-ann")
|
||||
// Spec API does not use @Deprecated
|
||||
public interface HttpSessionContext {
|
||||
|
||||
/**
|
||||
* Do not use.
|
||||
* @param sessionId Ignored
|
||||
* @return Always <code>null</code>
|
||||
* @deprecated As of Java Servlet API 2.1 with no replacement. This method
|
||||
* must return null and will be removed in a future version of
|
||||
* this API.
|
||||
*/
|
||||
// Spec API does not use @Deprecated
|
||||
public HttpSession getSession(String sessionId);
|
||||
|
||||
/**
|
||||
* Do not use.
|
||||
* @return Always an empty Enumeration
|
||||
* @deprecated As of Java Servlet API 2.1 with no replacement. This method
|
||||
* must return an empty <code>Enumeration</code> and will be
|
||||
* removed in a future version of this API.
|
||||
*/
|
||||
// Spec API does not use @Deprecated
|
||||
public Enumeration<String> getIds();
|
||||
}
|
||||
45
java/javax/servlet/http/HttpSessionEvent.java
Normal file
45
java/javax/servlet/http/HttpSessionEvent.java
Normal file
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* 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 is the class representing event notifications for changes to sessions
|
||||
* within a web application.
|
||||
*
|
||||
* @since v 2.3
|
||||
*/
|
||||
public class HttpSessionEvent extends java.util.EventObject {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* Construct a session event from the given source.
|
||||
*
|
||||
* @param source The HTTP session where the change took place
|
||||
*/
|
||||
public HttpSessionEvent(HttpSession source) {
|
||||
super(source);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the session that changed.
|
||||
*
|
||||
* @return The session that changed
|
||||
*/
|
||||
public HttpSession getSession() {
|
||||
return (HttpSession) super.getSource();
|
||||
}
|
||||
}
|
||||
41
java/javax/servlet/http/HttpSessionIdListener.java
Normal file
41
java/javax/servlet/http/HttpSessionIdListener.java
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* Implementations of this interface are notified when an {@link HttpSession}'s
|
||||
* ID changes. To receive notification events, the implementation class must be
|
||||
* configured in the deployment descriptor for the web application, annotated
|
||||
* with {@link javax.servlet.annotation.WebListener} or registered by calling an
|
||||
* addListener method on the {@link javax.servlet.ServletContext}.
|
||||
*
|
||||
* @see HttpSessionEvent
|
||||
* @see HttpServletRequest#changeSessionId()
|
||||
* @since Servlet 3.1
|
||||
*/
|
||||
public interface HttpSessionIdListener extends EventListener {
|
||||
|
||||
/**
|
||||
* Notification that a session ID has been changed.
|
||||
*
|
||||
* @param se the notification event
|
||||
* @param oldSessionId the old session ID
|
||||
*/
|
||||
public void sessionIdChanged(HttpSessionEvent se, String oldSessionId);
|
||||
}
|
||||
47
java/javax/servlet/http/HttpSessionListener.java
Normal file
47
java/javax/servlet/http/HttpSessionListener.java
Normal file
@@ -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;
|
||||
|
||||
/**
|
||||
* Implementations of this interface are notified of changes to the list of
|
||||
* active sessions in a web application. To receive notification events, the
|
||||
* implementation class must be configured in the deployment descriptor for the
|
||||
* web application.
|
||||
*
|
||||
* @see HttpSessionEvent
|
||||
* @since v 2.3
|
||||
*/
|
||||
public interface HttpSessionListener extends EventListener {
|
||||
|
||||
/**
|
||||
* Notification that a session was created.
|
||||
*
|
||||
* @param se
|
||||
* the notification event
|
||||
*/
|
||||
public void sessionCreated(HttpSessionEvent se);
|
||||
|
||||
/**
|
||||
* Notification that a session is about to be invalidated.
|
||||
*
|
||||
* @param se
|
||||
* the notification event
|
||||
*/
|
||||
public void sessionDestroyed(HttpSessionEvent se);
|
||||
}
|
||||
42
java/javax/servlet/http/HttpUpgradeHandler.java
Normal file
42
java/javax/servlet/http/HttpUpgradeHandler.java
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* Interface between the HTTP upgrade process and the new protocol.
|
||||
*
|
||||
* @since Servlet 3.1
|
||||
*/
|
||||
public interface HttpUpgradeHandler {
|
||||
|
||||
/**
|
||||
* This method is called once the request/response pair where
|
||||
* {@link HttpServletRequest#upgrade(Class)} is called has completed
|
||||
* processing and is the point where control of the connection passes from
|
||||
* the container to the {@link HttpUpgradeHandler}.
|
||||
*
|
||||
* @param connection The connection that has been upgraded
|
||||
*
|
||||
* @since Servlet 3.1
|
||||
*/
|
||||
void init(WebConnection connection);
|
||||
|
||||
/**
|
||||
* This method is called after the upgraded connection has been closed.
|
||||
*/
|
||||
void destroy();
|
||||
}
|
||||
281
java/javax/servlet/http/HttpUtils.java
Normal file
281
java/javax/servlet/http/HttpUtils.java
Normal file
@@ -0,0 +1,281 @@
|
||||
/*
|
||||
* 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 java.util.Hashtable;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import javax.servlet.ServletInputStream;
|
||||
|
||||
/**
|
||||
* @deprecated As of Java(tm) Servlet API 2.3.
|
||||
* These methods were only useful
|
||||
* with the default encoding and have been moved
|
||||
* to the request interfaces.
|
||||
*/
|
||||
@SuppressWarnings("dep-ann") // Spec API does not use @Deprecated
|
||||
public class HttpUtils {
|
||||
|
||||
private static final String LSTRING_FILE =
|
||||
"javax.servlet.http.LocalStrings";
|
||||
private static final ResourceBundle lStrings =
|
||||
ResourceBundle.getBundle(LSTRING_FILE);
|
||||
|
||||
|
||||
/**
|
||||
* Constructs an empty <code>HttpUtils</code> object.
|
||||
*
|
||||
*/
|
||||
public HttpUtils() {
|
||||
// NOOP
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses a query string passed from the client to the
|
||||
* server and builds a <code>HashTable</code> object
|
||||
* with key-value pairs.
|
||||
* The query string should be in the form of a string
|
||||
* packaged by the GET or POST method, that is, it
|
||||
* should have key-value pairs in the form <i>key=value</i>,
|
||||
* with each pair separated from the next by a & character.
|
||||
*
|
||||
* <p>A key can appear more than once in the query string
|
||||
* with different values. However, the key appears only once in
|
||||
* the hashtable, with its value being
|
||||
* an array of strings containing the multiple values sent
|
||||
* by the query string.
|
||||
*
|
||||
* <p>The keys and values in the hashtable are stored in their
|
||||
* decoded form, so
|
||||
* any + characters are converted to spaces, and characters
|
||||
* sent in hexadecimal notation (like <i>%xx</i>) are
|
||||
* converted to ASCII characters.
|
||||
*
|
||||
* @param s a string containing the query to be parsed
|
||||
*
|
||||
* @return a <code>HashTable</code> object built
|
||||
* from the parsed key-value pairs
|
||||
*
|
||||
* @exception IllegalArgumentException if the query string
|
||||
* is invalid
|
||||
*
|
||||
*/
|
||||
public static Hashtable<String,String[]> parseQueryString(String s) {
|
||||
|
||||
String valArray[] = null;
|
||||
|
||||
if (s == null) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
Hashtable<String,String[]> ht = new Hashtable<>();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
StringTokenizer st = new StringTokenizer(s, "&");
|
||||
while (st.hasMoreTokens()) {
|
||||
String pair = st.nextToken();
|
||||
int pos = pair.indexOf('=');
|
||||
if (pos == -1) {
|
||||
// XXX
|
||||
// should give more detail about the illegal argument
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
String key = parseName(pair.substring(0, pos), sb);
|
||||
String val = parseName(pair.substring(pos+1, pair.length()), sb);
|
||||
if (ht.containsKey(key)) {
|
||||
String oldVals[] = ht.get(key);
|
||||
valArray = new String[oldVals.length + 1];
|
||||
for (int i = 0; i < oldVals.length; i++)
|
||||
valArray[i] = oldVals[i];
|
||||
valArray[oldVals.length] = val;
|
||||
} else {
|
||||
valArray = new String[1];
|
||||
valArray[0] = val;
|
||||
}
|
||||
ht.put(key, valArray);
|
||||
}
|
||||
return ht;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Parses data from an HTML form that the client sends to
|
||||
* the server using the HTTP POST method and the
|
||||
* <i>application/x-www-form-urlencoded</i> MIME type.
|
||||
*
|
||||
* <p>The data sent by the POST method contains key-value
|
||||
* pairs. A key can appear more than once in the POST data
|
||||
* with different values. However, the key appears only once in
|
||||
* the hashtable, with its value being
|
||||
* an array of strings containing the multiple values sent
|
||||
* by the POST method.
|
||||
*
|
||||
* <p>The keys and values in the hashtable are stored in their
|
||||
* decoded form, so
|
||||
* any + characters are converted to spaces, and characters
|
||||
* sent in hexadecimal notation (like <i>%xx</i>) are
|
||||
* converted to ASCII characters.
|
||||
*
|
||||
*
|
||||
*
|
||||
* @param len an integer specifying the length,
|
||||
* in characters, of the
|
||||
* <code>ServletInputStream</code>
|
||||
* object that is also passed to this
|
||||
* method
|
||||
*
|
||||
* @param in the <code>ServletInputStream</code>
|
||||
* object that contains the data sent
|
||||
* from the client
|
||||
*
|
||||
* @return a <code>HashTable</code> object built
|
||||
* from the parsed key-value pairs
|
||||
*
|
||||
*
|
||||
* @exception IllegalArgumentException if the data
|
||||
* sent by the POST method is invalid
|
||||
*
|
||||
*/
|
||||
public static Hashtable<String,String[]> parsePostData(int len,
|
||||
ServletInputStream in) {
|
||||
// XXX
|
||||
// should a length of 0 be an IllegalArgumentException
|
||||
|
||||
// cheap hack to return an empty hash
|
||||
if (len <=0)
|
||||
return new Hashtable<>();
|
||||
|
||||
if (in == null) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
// Make sure we read the entire POSTed body.
|
||||
byte[] postedBytes = new byte [len];
|
||||
try {
|
||||
int offset = 0;
|
||||
|
||||
do {
|
||||
int inputLen = in.read (postedBytes, offset, len - offset);
|
||||
if (inputLen <= 0) {
|
||||
String msg = lStrings.getString("err.io.short_read");
|
||||
throw new IllegalArgumentException (msg);
|
||||
}
|
||||
offset += inputLen;
|
||||
} while ((len - offset) > 0);
|
||||
|
||||
} catch (IOException e) {
|
||||
throw new IllegalArgumentException(e.getMessage(), e);
|
||||
}
|
||||
|
||||
// XXX we shouldn't assume that the only kind of POST body
|
||||
// is FORM data encoded using ASCII or ISO Latin/1 ... or
|
||||
// that the body should always be treated as FORM data.
|
||||
try {
|
||||
String postedBody = new String(postedBytes, 0, len, "8859_1");
|
||||
return parseQueryString(postedBody);
|
||||
} catch (java.io.UnsupportedEncodingException e) {
|
||||
// XXX function should accept an encoding parameter & throw this
|
||||
// exception. Otherwise throw something expected.
|
||||
throw new IllegalArgumentException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Parse a name in the query string.
|
||||
*/
|
||||
private static String parseName(String s, StringBuilder sb) {
|
||||
sb.setLength(0);
|
||||
for (int i = 0; i < s.length(); i++) {
|
||||
char c = s.charAt(i);
|
||||
switch (c) {
|
||||
case '+':
|
||||
sb.append(' ');
|
||||
break;
|
||||
case '%':
|
||||
try {
|
||||
sb.append((char) Integer.parseInt(s.substring(i+1, i+3),
|
||||
16));
|
||||
i += 2;
|
||||
} catch (NumberFormatException e) {
|
||||
// XXX
|
||||
// need to be more specific about illegal arg
|
||||
throw new IllegalArgumentException();
|
||||
} catch (StringIndexOutOfBoundsException e) {
|
||||
String rest = s.substring(i);
|
||||
sb.append(rest);
|
||||
if (rest.length()==2)
|
||||
i++;
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
sb.append(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Reconstructs the URL the client used to make the request,
|
||||
* using information in the <code>HttpServletRequest</code> object.
|
||||
* The returned URL contains a protocol, server name, port
|
||||
* number, and server path, but it does not include query
|
||||
* string parameters.
|
||||
*
|
||||
* <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>This method is useful for creating redirect messages
|
||||
* and for reporting errors.
|
||||
*
|
||||
* @param req a <code>HttpServletRequest</code> object
|
||||
* containing the client's request
|
||||
*
|
||||
* @return a <code>StringBuffer</code> object containing
|
||||
* the reconstructed URL
|
||||
*
|
||||
*/
|
||||
public static StringBuffer getRequestURL (HttpServletRequest req) {
|
||||
StringBuffer url = new StringBuffer ();
|
||||
String scheme = req.getScheme ();
|
||||
int port = req.getServerPort ();
|
||||
String urlPath = req.getRequestURI();
|
||||
|
||||
url.append (scheme); // http, https
|
||||
url.append ("://");
|
||||
url.append (req.getServerName ());
|
||||
if ((scheme.equals ("http") && port != 80) || (scheme.equals ("https") && port != 443)) {
|
||||
url.append (':');
|
||||
url.append (req.getServerPort ());
|
||||
}
|
||||
|
||||
url.append(urlPath);
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
27
java/javax/servlet/http/LocalStrings.properties
Normal file
27
java/javax/servlet/http/LocalStrings.properties
Normal file
@@ -0,0 +1,27 @@
|
||||
# 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.
|
||||
|
||||
err.cookie_name_blank=Cookie name may not be null or zero length
|
||||
err.cookie_name_is_token=Cookie name [{0}] is a reserved token
|
||||
err.io.indexOutOfBounds=Invalid offset [{0}] and / or length [{1}] specified for array of size [{2}]
|
||||
err.io.nullArray=Null passed for byte array in write method
|
||||
err.io.short_read=Short Read
|
||||
|
||||
http.method_delete_not_supported=HTTP method DELETE is not supported by this URL
|
||||
http.method_get_not_supported=HTTP method GET is not supported by this URL
|
||||
http.method_not_implemented=Method [{0}] is not implemented by this Servlet for this URI
|
||||
http.method_post_not_supported=HTTP method POST is not supported by this URL
|
||||
http.method_put_not_supported=HTTP method PUT is not supported by this URL
|
||||
http.non_http=Non HTTP request or response
|
||||
16
java/javax/servlet/http/LocalStrings_de.properties
Normal file
16
java/javax/servlet/http/LocalStrings_de.properties
Normal file
@@ -0,0 +1,16 @@
|
||||
# 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.
|
||||
|
||||
http.method_not_implemented=Methode [{0}] ist von diesem Servlet für diese URI nicht implementiert
|
||||
25
java/javax/servlet/http/LocalStrings_es.properties
Normal file
25
java/javax/servlet/http/LocalStrings_es.properties
Normal file
@@ -0,0 +1,25 @@
|
||||
# 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.
|
||||
|
||||
err.cookie_name_blank=El nombre del Cookie no puede ser nulo o de longitud cero
|
||||
err.cookie_name_is_token=El nombre de Cookie [{0}] es una palabra reservada
|
||||
err.io.nullArray=Se pasó un valor Null para el arreglo byte en el método de escritura
|
||||
err.io.short_read=Lectura Corta
|
||||
|
||||
http.method_delete_not_supported=El Metodo HTTP DELETE no es soportado por esta URL
|
||||
http.method_get_not_supported=El Metodo HTTP GET no está soportado por esta URL
|
||||
http.method_not_implemented=El Metodo [{0}] no esta implementado por este servlet para esta URI
|
||||
http.method_post_not_supported=El Metodo HTTP POST no está soportado por esta URL
|
||||
http.method_put_not_supported=El Metodo HTTP PUT no está soportado por esta URL
|
||||
27
java/javax/servlet/http/LocalStrings_fr.properties
Normal file
27
java/javax/servlet/http/LocalStrings_fr.properties
Normal file
@@ -0,0 +1,27 @@
|
||||
# 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.
|
||||
|
||||
err.cookie_name_blank=Le nom de cookie ne doit pas être null ou vide
|
||||
err.cookie_name_is_token=Le nom de cookie [{0}] est un "token" réservé
|
||||
err.io.indexOutOfBounds=L''offset [{0}] et/ou la longueur [{1}] spécifiés pour la taille du tableau [{2}] sont invalides
|
||||
err.io.nullArray=Null a été passée comme tableau d'octets à la méthode d'écriture
|
||||
err.io.short_read=Lecture partielle
|
||||
|
||||
http.method_delete_not_supported=La méthode HTTP DELETE n'est pas supportée par cette URL
|
||||
http.method_get_not_supported=La méthode HTTP GET n'est pas supportée par cette URL
|
||||
http.method_not_implemented=Le méthode [{0}] n''est pas implémentée par ce Servlet pour cette URI
|
||||
http.method_post_not_supported=La méthode HTTP POST n'est pas supportée par cette URL
|
||||
http.method_put_not_supported=La méthode HTTP PUT n'est pas supportée par cette URL
|
||||
http.non_http=Requête ou réponse non HTTP
|
||||
27
java/javax/servlet/http/LocalStrings_ja.properties
Normal file
27
java/javax/servlet/http/LocalStrings_ja.properties
Normal file
@@ -0,0 +1,27 @@
|
||||
# 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.
|
||||
|
||||
err.cookie_name_blank=Cookie名はnullまたは長さゼロであってはなりません.\n
|
||||
err.cookie_name_is_token=クッキー名 [{0}] は予約済のトークンです。
|
||||
err.io.indexOutOfBounds=サイズ[{2}]の配列に指定されたオフセット[{0}]または長さ[{1}]が無効です。
|
||||
err.io.nullArray=write メソッドに渡されたバイト配列は null です。
|
||||
err.io.short_read=読み込みがすぐに終わりました。
|
||||
|
||||
http.method_delete_not_supported=HTTPのDELETEメソッドは、このURLではサポートされていません。
|
||||
http.method_get_not_supported=HTTPのGETメソッドは、このURLではサポートされていません。
|
||||
http.method_not_implemented=メソッド [{0}] はRFC 2068には定義されておらず、サーブレットAPIではサポートされません。
|
||||
http.method_post_not_supported=HTTPのPOSTメソッドは、このURLではサポートされていません。
|
||||
http.method_put_not_supported=HTTPのPUTメソッドは、このURLではサポートされていません。
|
||||
http.non_http=リクエストが HTTP リクエストではない、あるいはレスポンスが HTTP レスポンスではありません。
|
||||
27
java/javax/servlet/http/LocalStrings_ko.properties
Normal file
27
java/javax/servlet/http/LocalStrings_ko.properties
Normal file
@@ -0,0 +1,27 @@
|
||||
# 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.
|
||||
|
||||
err.cookie_name_blank=쿠키 이름이 널이거나 길이가 0인 문자열이어서는 안됩니다.
|
||||
err.cookie_name_is_token=쿠키 이름 [{0}]은(는) 예약된 토큰입니다.
|
||||
err.io.indexOutOfBounds=크기 [{2}]인 배열에 대하여, 유효하지 않은 offset [{0}] 그리고/또는 길이 [{1}].
|
||||
err.io.nullArray=write 메소드에 널인 바이트 배열이 전달되었습니다.
|
||||
err.io.short_read=Short Read
|
||||
|
||||
http.method_delete_not_supported=HTTP 메소드 DELETE는 이 URL에 의해 지원되지 않습니다.
|
||||
http.method_get_not_supported=HTTP 메소드 GET은 이 URL에 의해 지원되지 않습니다.
|
||||
http.method_not_implemented=이 URI를 위한 서블릿은 메소드 [{0}]을(를) 구현하지 않았습니다.
|
||||
http.method_post_not_supported=HTTP 메소드인 POST는 이 URL에 의해 지원되지 않습니다.
|
||||
http.method_put_not_supported=HTTP 메소드 PUT은 이 URL에 의해 지원되지 않습니다.
|
||||
http.non_http=HTTP 요청이 아니거나, HTTP 응답이 아닙니다.
|
||||
25
java/javax/servlet/http/LocalStrings_zh_CN.properties
Normal file
25
java/javax/servlet/http/LocalStrings_zh_CN.properties
Normal file
@@ -0,0 +1,25 @@
|
||||
# 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.
|
||||
|
||||
err.cookie_name_blank=Cookie名称不能为null或零长度
|
||||
err.io.nullArray=Null在write方法中传递给字节数组
|
||||
err.io.short_read=短.读
|
||||
|
||||
http.method_delete_not_supported=当前URL不支持HTTP的DELETE方法
|
||||
http.method_get_not_supported=此URL不支持Http方法GET
|
||||
http.method_not_implemented=这个servlet没有为这个URI实现方法[{0}]
|
||||
http.method_post_not_supported=此URL不支持Http方法POST
|
||||
http.method_put_not_supported=此URL不支持HTTP方法PUT
|
||||
http.non_http=没有HTTP请求或响应
|
||||
137
java/javax/servlet/http/Part.java
Normal file
137
java/javax/servlet/http/Part.java
Normal file
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
* 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 java.io.InputStream;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* This class represents a part as uploaded to the server as part of a
|
||||
* <code>multipart/form-data</code> request body. The part may represent either
|
||||
* an uploaded file or form data.
|
||||
*
|
||||
* @since Servlet 3.0
|
||||
*/
|
||||
public interface Part {
|
||||
|
||||
/**
|
||||
* Obtain an <code>InputStream</code> that can be used to retrieve the
|
||||
* contents of the file.
|
||||
*
|
||||
* @return An InputStream for the contents of the file
|
||||
*
|
||||
* @throws IOException if an I/O occurs while obtaining the stream
|
||||
*/
|
||||
public InputStream getInputStream() throws IOException;
|
||||
|
||||
/**
|
||||
* Obtain the content type passed by the browser.
|
||||
*
|
||||
* @return The content type passed by the browser or <code>null</code> if
|
||||
* not defined.
|
||||
*/
|
||||
public String getContentType();
|
||||
|
||||
/**
|
||||
* Obtain the name of the field in the multipart form corresponding to this
|
||||
* part.
|
||||
*
|
||||
* @return The name of the field in the multipart form corresponding to this
|
||||
* part.
|
||||
*/
|
||||
public String getName();
|
||||
|
||||
/**
|
||||
* If this part represents an uploaded file, gets the file name submitted
|
||||
* in the upload. Returns {@code null} if no file name is available or if
|
||||
* this part is not a file upload.
|
||||
*
|
||||
* @return the submitted file name or {@code null}.
|
||||
*
|
||||
* @since Servlet 3.1
|
||||
*/
|
||||
public String getSubmittedFileName();
|
||||
|
||||
/**
|
||||
* Obtain the size of this part.
|
||||
*
|
||||
* @return The size of the part if bytes
|
||||
*/
|
||||
public long getSize();
|
||||
|
||||
/**
|
||||
* A convenience method to write an uploaded part to disk. The client code
|
||||
* is not concerned with whether or not the part is stored in memory, or on
|
||||
* disk in a temporary location. They just want to write the uploaded part
|
||||
* to a file.
|
||||
*
|
||||
* 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 location into which the uploaded part should be
|
||||
* stored. Relative locations are relative to {@link
|
||||
* javax.servlet.MultipartConfigElement#getLocation()}
|
||||
*
|
||||
* @throws IOException if an I/O occurs while attempting to write the part
|
||||
*/
|
||||
public void write(String fileName) throws IOException;
|
||||
|
||||
/**
|
||||
* Deletes the underlying storage for a part, including deleting any
|
||||
* associated temporary disk file. Although the container will delete this
|
||||
* storage automatically this method can be used to ensure that this is done
|
||||
* at an earlier time, thus preserving system resources.
|
||||
* <p>
|
||||
* Containers are only required to delete the associated storage when the
|
||||
* Part instance is garbage collected. Apache Tomcat will delete the
|
||||
* associated storage when the associated request has finished processing.
|
||||
* Behaviour of other containers may be different.
|
||||
*
|
||||
* @throws IOException if an I/O occurs while attempting to delete the part
|
||||
*/
|
||||
public void delete() throws IOException;
|
||||
|
||||
/**
|
||||
* Obtains the value of the specified part header as a String. If there are
|
||||
* multiple headers with the same name, this method returns the first header
|
||||
* in the part. The header name is case insensitive.
|
||||
*
|
||||
* @param name Header name
|
||||
* @return The header value or <code>null</code> if the header is not
|
||||
* present
|
||||
*/
|
||||
public String getHeader(String name);
|
||||
|
||||
/**
|
||||
* Obtain all the values of the specified part header.
|
||||
* @param name The name of the header of interest. The header name is case
|
||||
* insensitive.
|
||||
* @return All the values of the specified part header. If the part did not
|
||||
* include any headers of the specified name, this method returns an
|
||||
* empty Collection.
|
||||
*/
|
||||
public Collection<String> getHeaders(String name);
|
||||
|
||||
/**
|
||||
* Get the header names provided for this part.
|
||||
* @return a Collection of all the header names provided for this part.
|
||||
*/
|
||||
public Collection<String> getHeaderNames();
|
||||
}
|
||||
51
java/javax/servlet/http/WebConnection.java
Normal file
51
java/javax/servlet/http/WebConnection.java
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* The interface used by a {@link HttpUpgradeHandler} to interact with an upgraded
|
||||
* HTTP connection.
|
||||
*
|
||||
* @since Servlet 3.1
|
||||
*/
|
||||
public interface WebConnection extends AutoCloseable {
|
||||
|
||||
/**
|
||||
* Provides access to the {@link ServletInputStream} for reading data from
|
||||
* the client.
|
||||
*
|
||||
* @return the input stream
|
||||
*
|
||||
* @throws IOException If an I/O occurs while obtaining the stream
|
||||
*/
|
||||
ServletInputStream getInputStream() throws IOException;
|
||||
|
||||
/**
|
||||
* Provides access to the {@link ServletOutputStream} for writing data to
|
||||
* the client.
|
||||
*
|
||||
* @return the output stream
|
||||
*
|
||||
* @throws IOException If an I/O occurs while obtaining the stream
|
||||
*/
|
||||
ServletOutputStream getOutputStream() throws IOException;
|
||||
}
|
||||
30
java/javax/servlet/http/package.html
Normal file
30
java/javax/servlet/http/package.html
Normal file
@@ -0,0 +1,30 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
</HEAD>
|
||||
<BODY BGCOLOR="white">
|
||||
|
||||
The javax.servlet.http package contains a number of classes and interfaces
|
||||
that describe and define the contracts between a servlet class
|
||||
running under the HTTP protocol and the runtime environment provided
|
||||
for an instance of such a class by a conforming servlet container.
|
||||
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
Reference in New Issue
Block a user