blob: 59076440bef250f64d547c88a938f8bb5780a121 [file] [log] [blame]
/*
* 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 org.apache.cocoon.environment;
import java.security.Principal;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Map;
/**
* Defines an interface to provide client request information .
*
* @author <a href="mailto:dims@yahoo.com">Davanum Srinivas</a>
* @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
* @version $Id$
*/
public interface Request {
/**
*
* Returns the value of the named attribute as an <code>Object</code>,
* or <code>null</code> if no attribute of the given name exists.
*
* @param name a <code>String</code> specifying the name of
* the attribute
*
* @return an <code>Object</code> containing the value
* of the attribute, or <code>null</code> if
* the attribute does not exist
*
*/
Object get(String name);
/**
*
* Returns the value of the named attribute as an <code>Object</code>,
* or <code>null</code> if no attribute of the given name exists.
*
* @param name a <code>String</code> specifying the name of
* the attribute
*
* @return an <code>Object</code> containing the value
* of the attribute, or <code>null</code> if
* the attribute does not exist
*
*/
Object getAttribute(String name);
/**
* Returns an <code>Enumeration</code> containing the
* names of the attributes available to this request.
* This method returns an empty <code>Enumeration</code>
* if the request has no attributes available to it.
*
*
* @return an <code>Enumeration</code> of strings
* containing the names
* of the request's attributes
*
*/
Enumeration getAttributeNames();
/**
*
* Stores an attribute in this request.
* Attributes are reset between requests.
*
* <p>Attribute names should follow the same conventions as
* package names. Names beginning with <code>java.*</code>,
* <code>javax.*</code>, and <code>com.sun.*</code>, are
* reserved for use by Sun Microsystems.
*
*
* @param name a <code>String</code> specifying
* the name of the attribute
*
* @param o the <code>Object</code> to be stored
*
*/
void setAttribute(String name, Object o);
/**
*
* Removes an attribute from this request. This method is not
* generally needed as attributes only persist as long as the request
* is being handled.
*
* <p>Attribute names should follow the same conventions as
* package names. Names beginning with <code>java.*</code>,
* <code>javax.*</code>, and <code>com.sun.*</code>, are
* reserved for use by Sun Microsystems.
*
*
* @param name a <code>String</code> specifying
* the name of the attribute to remove
*
*/
void removeAttribute(String name);
/**
*
* Returns the name of the authentication scheme used to protect
* the servlet, for example, "BASIC" or "SSL," or null if the servlet was
* not protected
*
* @return The name of the authentication scheme used to
* protect the servlet, or null if the servlet was
* not protected
*/
String getAuthType();
/**
* Returns the name of the character encoding used in the body of this
* request. This method returns <code>null</code> if the request
* does not specify a character encoding
*
*
* @return a <code>String</code> containing the name of
* the chararacter encoding, or <code>null</code>
* if the request does not specify a character encoding
*
*/
String getCharacterEncoding();
/**
* Overrides the charactor encoding of parameters.
*
* @throws java.io.UnsupportedEncodingException if this is not a valid encoding.
*
*/
void setCharacterEncoding(String enc) throws java.io.UnsupportedEncodingException;
/**
* Returns the length, in bytes, of the request body
*
* @return an integer containing the length of the
* request body or -1 if the length is not known
*
*/
int getContentLength();
/**
* Returns the MIME type of the body of the request
*
* @return a <code>String</code> containing the name
* of the MIME type of
* the request, or -1 if the type is not known
*
*/
String getContentType();
/**
* Returns the value of a request parameter as a <code>String</code>,
*
* @param name a <code>String</code> specifying the
* name of the parameter
*
* @return a <code>String</code> representing the
* single value of the parameter
*
* @see #getParameterValues(String)
*
*/
String getParameter(String name);
/**
*
* Returns an <code>Enumeration</code> of <code>String</code>
* objects containing the names of the parameters contained
* in this request. If the request has
* no parameters, the method returns an
* empty <code>Enumeration</code>.
*
* @return an <code>Enumeration</code> of <code>String</code>
* objects, each <code>String</code> containing
* the name of a request parameter; or an
* empty <code>Enumeration</code> if the
* request has no parameters
*
*/
Enumeration getParameterNames();
/**
* Returns an array of <code>String</code> objects containing
* all of the values the given request parameter has, or
* <code>null</code> if the parameter does not exist.
*
* <p>If the parameter has a single value, the array has a length
* of 1.
*
* @param name a <code>String</code> containing the name of
* the parameter whose value is requested
*
* @return an array of <code>String</code> objects
* containing the parameter's values
*
* @see #getParameter(String)
*
*/
String[] getParameterValues(String name);
/**
* Returns the name and version of the protocol the request uses
* in the form <i>protocol/majorVersion.minorVersion</i>, for
* example, HTTP/1.1. For HTTP servlets, the value
* returned is the same as the value of the CGI variable
* <code>SERVER_PROTOCOL</code>.
*
* @return a <code>String</code> containing the protocol
* name and version number
*
*/
String getProtocol();
/**
* Returns the name of the scheme used to make this request,
* for example,
* <code>http</code>, <code>https</code>, or <code>ftp</code>.
* Different schemes have different rules for constructing URLs,
* as noted in RFC 1738.
*
* @return a <code>String</code> containing the name
* of the scheme used to make this request
*
*/
String getScheme();
/**
* Returns the host name of the server that received the request.
* For HTTP servlets, same as the value of the CGI variable
* <code>SERVER_NAME</code>.
*
* @return a <code>String</code> containing the name
* of the server to which the request was sent
*/
String getServerName();
/**
* Returns the port number on which this request was received.
* For HTTP servlets, same as the value of the CGI variable
* <code>SERVER_PORT</code>.
*
* @return an integer specifying the port number
*
*/
int getServerPort();
/**
* Returns the Internet Protocol (IP) address of the client
* that sent the request. For HTTP servlets, same as the value of the
* CGI variable <code>REMOTE_ADDR</code>.
*
* @return a <code>String</code> containing the
* IP address of the client that sent the request
*
*/
String getRemoteAddr();
/**
* Returns the fully qualified name of the client that sent the
* request, or the IP address of the client if the name cannot be
* determined. For HTTP servlets, same as the value of the CGI variable
* <code>REMOTE_HOST</code>.
*
* @return a <code>String</code> containing the fully qualified name
* of the client
*
*/
String getRemoteHost();
/**
*
* Returns the preferred <code>Locale</code> that the client will
* accept content in, based on the Accept-Language header.
* If the client request doesn't provide an Accept-Language header,
* this method returns the default locale for the server.
*
*
* @return the preferred <code>Locale</code> for the client
*
*/
Locale getLocale();
/**
*
* Returns an <code>Enumeration</code> of <code>Locale</code> objects
* indicating, in decreasing order starting with the preferred locale, the
* locales that are acceptable to the client based on the Accept-Language
* header.
* If the client request doesn't provide an Accept-Language header,
* this method returns an <code>Enumeration</code> containing one
* <code>Locale</code>, the default locale for the server.
*
*
* @return an <code>Enumeration</code> of preferred
* <code>Locale</code> objects for the client
*
*/
Enumeration getLocales();
/**
*
* Returns a boolean indicating whether this request was made using a
* secure channel, such as HTTPS.
*
*
* @return a boolean indicating if the request was made using a
* secure channel
*
*/
boolean isSecure();
/**
*
* Returns an array containing all of the <code>Cookie</code>
* objects the client sent with this request.
* This method returns <code>null</code> if no cookies were sent.
*
* @return an array of all the <code>Cookies</code>
* included with this request, or <code>null</code>
* if the request has no cookies
*
*
*/
Cookie[] getCookies();
/**
* Returns a map of the <code>Cookie</code> objects the client sent
* with this request, indexed by name. This method returns an empty
* map if no cookies were sent.
*
* @return a Map of <code>Cookie</code> objects
*/
Map getCookieMap();
/**
*
* 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
* reqest
*
* @exception IllegalArgumentException If the header value
* can't be converted
* to a date
*
*/
long getDateHeader(String name);
/**
*
* Returns the value of the specified request header
* as a <code>String</code>. If the request did not include a header
* of the specified name, this method returns <code>null</code>.
* The header name is case insensitive. You can use
* this method with any request header.
*
* @param name a <code>String</code> specifying the
* header name
*
* @return a <code>String</code> containing the
* value of the requested
* header, or <code>null</code>
* if the request does not
* have a header of that name
*
*/
String getHeader(String name);
/**
*
* Returns 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 a <code>Enumeration</code> containing the
* values of the requested
* header, or <code>null</code>
* if the request does not
* have any headers of that name
*
*/
Enumeration 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 do not allow
* servlets to access headers using this method, in
* which case this method returns <code>null</code>
*
* @return an enumeration of all the
* header names sent with this
* request; if the request has
* no headers, an empty enumeration;
* if the servlet container does not
* allow servlets to use this method,
* <code>null</code>
*
*/
Enumeration getHeaderNames();
/**
*
* Returns the name of the HTTP method with which this
* request was made, for example, GET, POST, or PUT.
* Same as the value of the CGI variable REQUEST_METHOD.
*
* @return a <code>String</code>
* specifying the name
* of the method with which
* this request was made
*
*/
String getMethod();
/**
*
* 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.
* 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> specifying
* extra path information that comes
* after the servlet path but before
* the query string in the request URL;
* or <code>null</code> if the URL does not have
* any extra path information
*
*/
String getPathInfo();
/**
*
* Returns any extra path information after the servlet name
* but before the query string, and translates it to a real
* path. Same as the value of the CGI variable PATH_TRANSLATED.
*
* <p>If the URL does not have any extra path information,
* this method returns <code>null</code>.
*
*
* @return a <code>String</code> specifying the
* real path, or <code>null</code> if
* the URL does not have any extra path
* information
*
*
*/
String getPathTranslated();
/**
*
* Returns the 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 "".
*
*
* @return a <code>String</code> specifying the
* portion of the request URI that indicates the context
* of the request
*
*
*/
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
*
*/
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
*
*/
String getRemoteUser();
/**
*
* 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
*
*/
Principal getUserPrincipal();
/**
*
* Checks whether the currently logged in user is in a specified role.
*
* @return <code>true</code> if the user is
* authenticated and in the role;
* otherwise, <code>false</code>
*
*
* @see #getRemoteUser()
*
*/
boolean isUserInRole(String role);
/**
*
* Returns the session ID specified by the client. This may
* not be the same as the ID of the actual session in use.
* For example, if the request specified an old (expired)
* session ID and the server has started a new session, this
* method gets a new session with a new ID. If the request
* did not specify a session ID, this method returns
* <code>null</code>.
*
*
* @return a <code>String</code> specifying the session
* ID, or <code>null</code> if the request did
* not specify a session ID
*
* @see #isRequestedSessionIdValid()
*
*/
String getRequestedSessionId();
/**
*
* Returns the part of this request's URL from the protocol
* name up to the query string in the first line of the HTTP request.
* For example:
*
* <blockquote>
* <table>
* <tr align=left><th>First line of HTTP request<th>
* <th>Returned Value
* <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>http://foo.bar/a.html
* <tr><td>HEAD /xyz?a=b HTTP/1.1<td><td>/xyz
* </table>
* </blockquote>
*
* @return a <code>String</code> containing
* the part of the URL from the
* protocol name up to the query string
*
*
*/
String getRequestURI();
/**
* <p>
* Returns the URI of the requested resource as interpreted by the sitemap.
* For example, if your webapp is mounted at "/webapp" and the HTTP request
* is for "/webapp/foo", this method returns "foo". Consequently, if the
* request is for "/webapp", this method returns an empty string.
* </p>
* <p>
* Note that if the request is mapped to a pipeline that contains
* aggregated content, and if this method is called in the context of
* one of the aggregated parts (e.g. a server page), this method will
* return the URI of the aggregated part, not the original requested URI.
* </p>
*
* @return a <code>String</code> containing the URL as mangled by the
* sitemap
*/
String getSitemapURI();
/**
* <p>
* Returns the URI Prefix of the requested resource where the sitemap is mounted.
* For example, if your webapp is mounted at "/webapp" and the HTTP request
* is for "/webapp/foo", this method returns "webapp/".
* </p>
*
* @return a <code>String</code> containing the URI prefix as mangled by the
* sitemap
*/
String getSitemapURIPrefix();
/**
*
* Returns the part of this request's URL that calls
* the servlet. This 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.
*
*
* @return a <code>String</code> containing
* the name or path of the servlet being
* called, as specified in the request URL
*
*
*/
String getServletPath();
/**
*
* Returns the current <code>Session</code>
* associated with this request or, if 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>Session</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.
*
*
*
*
* @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>Session</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()
*
*
*/
Session 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>Session</code> associated
* with this request
*
* @see #getSession(boolean)
*
*/
Session getSession();
/**
* In Cocoon 2.2 the org.apache.cocoon.environment.Session interface
* is deprecated, and the return type of getSession() changes to
* vanilla javax.servlet.HttpRequest.
* <p>
* For migrating from Cocoon 2.1 to 2.2, replace in your custom code
* all calls to getSession() by getCocoonSession(). That allows for
* a common codebase usable on both version.
*
* @see #getSession()
*/
Session getCocoonSession(boolean create);
/**
* @see #getSession(boolean)
*/
Session getCocoonSession();
/**
*
* 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()
*
*/
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()
*
*/
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()
*
*/
boolean isRequestedSessionIdFromURL();
}