This commit is contained in:
2024-11-30 19:03:49 +08:00
commit 1e6763c160
3806 changed files with 737676 additions and 0 deletions

View 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));
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View 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);
}
}

File diff suppressed because it is too large Load Diff

View 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();
}
}

View 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();
}

View 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);
}

View 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);
}

View 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;
}
}

View 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);
}

View 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();
}

View 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();
}
}

View 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);
}

View 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);
}

View 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();
}

View 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 &amp; 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;
}
}

View 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

View 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

View 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

View 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

View 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 レスポンスではありません。

View 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 응답이 아닙니다.

View 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请求或响应

View 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();
}

View 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;
}

View 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>