Method from org.apache.catalina.connector.Request Detail: |
public void addCookie(Cookie cookie) {
if (!cookiesParsed)
parseCookies();
int size = 0;
if (cookies != null) {
size = cookies.length;
}
Cookie[] newCookies = new Cookie[size + 1];
for (int i = 0; i < size; i++) {
newCookies[i] = cookies[i];
}
newCookies[size] = cookie;
cookies = newCookies;
}
Add a Cookie to the set of Cookies associated with this Request. |
public void addHeader(String name,
String value) {
// Not used
}
Add a Header to the set of Headers associated with this Request. |
public void addLocale(Locale locale) {
locales.add(locale);
}
Add a Locale to the set of preferred Locales for this Request. The
first added Locale will be the first one returned by getLocales(). |
public void addParameter(String name,
String[] values) {
coyoteRequest.getParameters().addParameterValues(name, values);
}
Add a parameter name and corresponding set of values to this Request.
(This is used when restoring the original request on a form based
login). |
public void changeSessionId(String newSessionId) {
// This should only ever be called if there was an old session ID but
// double check to be sure
if (requestedSessionId != null && requestedSessionId.length() > 0) {
requestedSessionId = newSessionId;
}
if (context != null && !context.getCookies())
return;
if (response != null) {
Cookie newCookie = new Cookie(Globals.SESSION_COOKIE_NAME,
newSessionId);
newCookie.setMaxAge(-1);
String contextPath = null;
if (!response.getConnector().getEmptySessionPath()
&& (context != null)) {
contextPath = context.getEncodedPath();
}
if ((contextPath != null) && (contextPath.length() > 0)) {
newCookie.setPath(contextPath);
} else {
newCookie.setPath("/");
}
if (isSecure()) {
newCookie.setSecure(true);
}
if (context == null) {
response.addCookieInternal(newCookie, false);
} else {
response.addCookieInternal(newCookie, context.getUseHttpOnly());
}
}
}
Change the ID of the session that this request is associated with. There
are several things that may trigger an ID change. These include moving
between nodes in a cluster and session fixation prevention during the
authentication process. |
public void clearCookies() {
cookiesParsed = true;
cookies = null;
}
Clear the collection of Cookies associated with this Request. |
public void clearEncoders() {
inputBuffer.clearEncoders();
}
Clear cached encoders (to save memory for Comet requests). |
public void clearHeaders() {
// Not used
}
Clear the collection of Headers associated with this Request. |
public void clearLocales() {
locales.clear();
}
Clear the collection of Locales associated with this Request. |
public void clearParameters() {
// Not used
}
Clear the collection of parameters associated with this Request. |
public void cometClose() {
coyoteRequest.action(ActionCode.ACTION_COMET_CLOSE,getEvent());
}
|
protected void configureSessionCookie(Cookie cookie) {
cookie.setMaxAge(-1);
String contextPath = null;
if (!connector.getEmptySessionPath() && (getContext() != null)) {
contextPath = getContext().getEncodedPath();
}
if ((contextPath != null) && (contextPath.length() > 0)) {
cookie.setPath(contextPath);
} else {
cookie.setPath("/");
}
if (isSecure()) {
cookie.setSecure(true);
}
}
Configures the given JSESSIONID cookie. |
public ServletInputStream createInputStream() throws IOException {
if (inputStream == null) {
inputStream = new CoyoteInputStream(inputBuffer);
}
return inputStream;
}
Create and return a ServletInputStream to read the content
associated with this Request. |
protected Session doGetSession(boolean create) {
// There cannot be a session if no context has been assigned yet
if (context == null)
return (null);
// Return the current session if it exists and is valid
if ((session != null) && !session.isValid())
session = null;
if (session != null)
return (session);
// Return the requested session if it exists and is valid
Manager manager = null;
if (context != null)
manager = context.getManager();
if (manager == null)
return (null); // Sessions are not supported
if (requestedSessionId != null) {
try {
session = manager.findSession(requestedSessionId);
} catch (IOException e) {
session = null;
}
if ((session != null) && !session.isValid())
session = null;
if (session != null) {
session.access();
return (session);
}
}
// Create a new session if requested and the response is not committed
if (!create)
return (null);
if ((context != null) && (response != null) &&
context.getCookies() &&
response.getResponse().isCommitted()) {
throw new IllegalStateException
(sm.getString("coyoteRequest.sessionCreateCommitted"));
}
// Attempt to reuse session id if one was submitted in a cookie
// Do not reuse the session id if it is from a URL, to prevent possible
// phishing attacks
if (connector.getEmptySessionPath()
&& isRequestedSessionIdFromCookie()) {
session = manager.createSession(getRequestedSessionId());
} else {
session = manager.createSession(null);
}
// Creating a new session cookie based on that session
if ((session != null) && (getContext() != null)
&& getContext().getCookies()) {
Cookie cookie = new Cookie(Globals.SESSION_COOKIE_NAME,
session.getIdInternal());
configureSessionCookie(cookie);
response.addCookieInternal(cookie, context.getUseHttpOnly());
}
if (session != null) {
session.access();
return (session);
} else {
return (null);
}
}
|
public void finishRequest() throws IOException {
// The reader and input stream don't need to be closed
}
Perform whatever actions are required to flush and close the input
stream or reader, in a single operation. |
public Object getAttribute(String name) {
if (name.equals(Globals.DISPATCHER_TYPE_ATTR)) {
return (dispatcherType == null)
? ApplicationFilterFactory.REQUEST_INTEGER
: dispatcherType;
} else if (name.equals(Globals.DISPATCHER_REQUEST_PATH_ATTR)) {
return (requestDispatcherPath == null)
? getRequestPathMB().toString()
: requestDispatcherPath.toString();
}
Object attr=attributes.get(name);
if(attr!=null)
return(attr);
attr = coyoteRequest.getAttribute(name);
if(attr != null)
return attr;
if( isSSLAttribute(name) ) {
coyoteRequest.action(ActionCode.ACTION_REQ_SSL_ATTRIBUTE,
coyoteRequest);
attr = coyoteRequest.getAttribute(Globals.CERTIFICATES_ATTR);
if( attr != null) {
attributes.put(Globals.CERTIFICATES_ATTR, attr);
}
attr = coyoteRequest.getAttribute(Globals.CIPHER_SUITE_ATTR);
if(attr != null) {
attributes.put(Globals.CIPHER_SUITE_ATTR, attr);
}
attr = coyoteRequest.getAttribute(Globals.KEY_SIZE_ATTR);
if(attr != null) {
attributes.put(Globals.KEY_SIZE_ATTR, attr);
}
attr = coyoteRequest.getAttribute(Globals.SSL_SESSION_ID_ATTR);
if(attr != null) {
attributes.put(Globals.SSL_SESSION_ID_ATTR, attr);
}
attr = attributes.get(name);
}
return attr;
}
Return the specified request attribute if it exists; otherwise, return
null . |
public Enumeration getAttributeNames() {
if (isSecure()) {
getAttribute(Globals.CERTIFICATES_ATTR);
}
return new Enumerator(attributes.keySet(), true);
}
Return the names of all request attributes for this Request, or an
empty Enumeration if there are none. Note that the attribute
names return will only be those for the attributes set via
#setAttribute(String, Object) . Tomcat internal attributes will
not be included although they are accessible via
#getAttribute(String) . The Tomcat internal attributes include:
The underlying connector may also expose request attributes. These all
have names starting with "org.apache.tomcat" and include:
- org.apache.tomcat.sendfile.support
- org.apache.tomcat.comet.support
- org.apache.tomcat.comet.timeout.support
Connector implementations may return some, all or none of these
attributes and may also support additional attributes. |
public String getAuthType() {
return (authType);
}
Return the authentication type used for this Request. |
public boolean getAvailable() {
return (inputBuffer.available() > 0);
}
Return true if bytes are available. |
public String getCharacterEncoding() {
return (coyoteRequest.getCharacterEncoding());
}
Return the character encoding for this Request. |
public Connector getConnector() {
return (this.connector);
}
Return the Connector through which this Request was received. |
public int getContentLength() {
return (coyoteRequest.getContentLength());
}
Return the content length for this Request. |
public String getContentType() {
return (coyoteRequest.getContentType());
}
Return the content type for this Request. |
public Context getContext() {
return (this.context);
}
Return the Context within which this Request is being processed. |
public String getContextPath() {
return (mappingData.contextPath.toString());
}
Return the portion of the request URI used to select the Context
of the Request. |
public MessageBytes getContextPathMB() {
return (mappingData.contextPath);
}
|
public Cookie[] getCookies() {
if (!cookiesParsed)
parseCookies();
return cookies;
}
Return the set of Cookies received with this Request. |
public Request getCoyoteRequest() {
return (this.coyoteRequest);
}
|
public long getDateHeader(String name) {
String value = getHeader(name);
if (value == null)
return (-1L);
// Attempt to convert the date header in a variety of formats
long result = FastHttpDateFormat.parseDate(value, formats);
if (result != (-1L)) {
return result;
}
throw new IllegalArgumentException(value);
}
Return the value of the specified date header, if any; otherwise
return -1. |
public String getDecodedRequestURI() {
return (coyoteRequest.decodedURI().toString());
}
Get the decoded request URI. |
public MessageBytes getDecodedRequestURIMB() {
return (coyoteRequest.decodedURI());
}
Get the decoded request URI. |
public CometEventImpl getEvent() {
if (event == null) {
event = new CometEventImpl(this, response);
}
return event;
}
Get the event associated with the request. |
public FilterChain getFilterChain() {
return (this.filterChain);
}
Get filter chain associated with the request. |
public String getHeader(String name) {
return coyoteRequest.getHeader(name);
}
Return the first value of the specified header, if any; otherwise,
return null |
public Enumeration getHeaderNames() {
return coyoteRequest.getMimeHeaders().names();
}
Return the names of all headers received with this request. |
public Enumeration getHeaders(String name) {
return coyoteRequest.getMimeHeaders().values(name);
}
Return all of the values of the specified header, if any; otherwise,
return an empty enumeration. |
public Host getHost() {
if (getContext() == null)
return null;
return (Host) getContext().getParent();
//return ((Host) mappingData.host);
}
Return the Host within which this Request is being processed. |
public String getInfo() {
return (info);
}
Return descriptive information about this Request implementation and
the corresponding version number, in the format
<description>/<version> . |
public ServletInputStream getInputStream() throws IOException {
if (usingReader)
throw new IllegalStateException
(sm.getString("coyoteRequest.getInputStream.ise"));
usingInputStream = true;
if (inputStream == null) {
inputStream = new CoyoteInputStream(inputBuffer);
}
return inputStream;
}
Return the servlet input stream for this Request. The default
implementation returns a servlet input stream created by
createInputStream() . |
public int getIntHeader(String name) {
String value = getHeader(name);
if (value == null) {
return (-1);
} else {
return (Integer.parseInt(value));
}
}
Return the value of the specified header as an integer, or -1 if there
is no such header for this request. |
public String getLocalAddr() {
if (localAddr == null) {
coyoteRequest.action
(ActionCode.ACTION_REQ_LOCAL_ADDR_ATTRIBUTE, coyoteRequest);
localAddr = coyoteRequest.localAddr().toString();
}
return localAddr;
}
Returns the Internet Protocol (IP) address of the interface on
which the request was received. |
public String getLocalName() {
if (localName == null) {
coyoteRequest.action
(ActionCode.ACTION_REQ_LOCAL_NAME_ATTRIBUTE, coyoteRequest);
localName = coyoteRequest.localName().toString();
}
return localName;
}
Returns the host name of the Internet Protocol (IP) interface on
which the request was received. |
public int getLocalPort() {
if (localPort == -1){
coyoteRequest.action
(ActionCode.ACTION_REQ_LOCALPORT_ATTRIBUTE, coyoteRequest);
localPort = coyoteRequest.getLocalPort();
}
return localPort;
}
Returns the Internet Protocol (IP) port number of the interface
on which the request was received. |
public Locale getLocale() {
if (!localesParsed)
parseLocales();
if (locales.size() > 0) {
return ((Locale) locales.get(0));
} else {
return (defaultLocale);
}
}
Return the preferred Locale that the client will accept content in,
based on the value for the first Accept-Language header
that was encountered. If the request did not specify a preferred
language, the server's default Locale is returned. |
public Enumeration getLocales() {
if (!localesParsed)
parseLocales();
if (locales.size() > 0)
return (new Enumerator(locales));
ArrayList results = new ArrayList();
results.add(defaultLocale);
return (new Enumerator(results));
}
Return the set of preferred Locales that the client will accept
content in, based on the values for any Accept-Language
headers that were encountered. If the request did not specify a
preferred language, the server's default Locale is returned. |
public MappingData getMappingData() {
return (mappingData);
}
|
public String getMethod() {
return coyoteRequest.method().toString();
}
Return the HTTP request method used in this Request. |
public Object getNote(String name) {
return (notes.get(name));
}
Return the object bound with the specified name to the internal notes
for this request, or null if no such binding exists. |
public Iterator getNoteNames() {
return (notes.keySet().iterator());
}
Return an Iterator containing the String names of all notes bindings
that exist for this request. |
public String getParameter(String name) {
if (!parametersParsed)
parseParameters();
return coyoteRequest.getParameters().getParameter(name);
}
Return the value of the specified request parameter, if any; otherwise,
return null . If there is more than one value defined,
return only the first one. |
public Map getParameterMap() {
if (parameterMap.isLocked())
return parameterMap;
Enumeration enumeration = getParameterNames();
while (enumeration.hasMoreElements()) {
String name = enumeration.nextElement().toString();
String[] values = getParameterValues(name);
parameterMap.put(name, values);
}
parameterMap.setLocked(true);
return parameterMap;
}
Returns a Map of the parameters of this request.
Request parameters are extra information sent with the request.
For HTTP servlets, parameters are contained in the query string
or posted form data. |
public Enumeration getParameterNames() {
if (!parametersParsed)
parseParameters();
return coyoteRequest.getParameters().getParameterNames();
}
Return the names of all defined request parameters for this request. |
public String[] getParameterValues(String name) {
if (!parametersParsed)
parseParameters();
return coyoteRequest.getParameters().getParameterValues(name);
}
Return the defined values for the specified request parameter, if any;
otherwise, return null . |
public String getPathInfo() {
return (mappingData.pathInfo.toString());
}
Return the path information associated with this Request. |
public MessageBytes getPathInfoMB() {
return (mappingData.pathInfo);
}
|
public String getPathTranslated() {
if (context == null)
return (null);
if (getPathInfo() == null) {
return (null);
} else {
return (context.getServletContext().getRealPath(getPathInfo()));
}
}
Return the extra path information for this request, translated
to a real path. |
public Principal getPrincipal() {
return (userPrincipal);
}
Return the principal that has been authenticated for this Request. |
public String getProtocol() {
return coyoteRequest.protocol().toString();
}
Return the protocol and version used to make this Request. |
public String getQueryString() {
String queryString = coyoteRequest.queryString().toString();
if (queryString == null || queryString.equals("")) {
return (null);
} else {
return queryString;
}
}
Return the query string associated with this request. |
public BufferedReader getReader() throws IOException {
if (usingInputStream)
throw new IllegalStateException
(sm.getString("coyoteRequest.getReader.ise"));
usingReader = true;
inputBuffer.checkConverter();
if (reader == null) {
reader = new CoyoteReader(inputBuffer);
}
return reader;
}
Read the Reader wrapping the input stream for this Request. The
default implementation wraps a BufferedReader around the
servlet input stream returned by createInputStream() . |
public String getRealPath(String path) {
if (context == null)
return (null);
ServletContext servletContext = context.getServletContext();
if (servletContext == null)
return (null);
else {
try {
return (servletContext.getRealPath(path));
} catch (IllegalArgumentException e) {
return (null);
}
}
} Deprecated! As - of version 2.1 of the Java Servlet API, use
ServletContext.getRealPath() .
Return the real path of the specified virtual path. |
public String getRemoteAddr() {
if (remoteAddr == null) {
coyoteRequest.action
(ActionCode.ACTION_REQ_HOST_ADDR_ATTRIBUTE, coyoteRequest);
remoteAddr = coyoteRequest.remoteAddr().toString();
}
return remoteAddr;
}
Return the remote IP address making this Request. |
public String getRemoteHost() {
if (remoteHost == null) {
if (!connector.getEnableLookups()) {
remoteHost = getRemoteAddr();
} else {
coyoteRequest.action
(ActionCode.ACTION_REQ_HOST_ATTRIBUTE, coyoteRequest);
remoteHost = coyoteRequest.remoteHost().toString();
}
}
return remoteHost;
}
Return the remote host name making this Request. |
public int getRemotePort() {
if (remotePort == -1) {
coyoteRequest.action
(ActionCode.ACTION_REQ_REMOTEPORT_ATTRIBUTE, coyoteRequest);
remotePort = coyoteRequest.getRemotePort();
}
return remotePort;
}
Returns the Internet Protocol (IP) source port of the client
or last proxy that sent the request. |
public String getRemoteUser() {
if (userPrincipal != null) {
return (userPrincipal.getName());
} else {
return (null);
}
}
Return the name of the remote user that has been authenticated
for this Request. |
public HttpServletRequest getRequest() {
if (facade == null) {
facade = new RequestFacade(this);
}
return (facade);
}
Return the ServletRequest for which this object
is the facade. This method must be implemented by a subclass. |
public RequestDispatcher getRequestDispatcher(String path) {
if (context == null)
return (null);
// If the path is already context-relative, just pass it through
if (path == null)
return (null);
else if (path.startsWith("/"))
return (context.getServletContext().getRequestDispatcher(path));
// Convert a request-relative path to a context-relative one
String servletPath = (String) getAttribute(Globals.INCLUDE_SERVLET_PATH_ATTR);
if (servletPath == null)
servletPath = getServletPath();
// Add the path info, if there is any
String pathInfo = getPathInfo();
String requestPath = null;
if (pathInfo == null) {
requestPath = servletPath;
} else {
requestPath = servletPath + pathInfo;
}
int pos = requestPath.lastIndexOf('/');
String relative = null;
if (pos >= 0) {
relative = requestPath.substring(0, pos + 1) + path;
} else {
relative = requestPath + path;
}
return (context.getServletContext().getRequestDispatcher(relative));
}
Return a RequestDispatcher that wraps the resource at the specified
path, which may be interpreted as relative to the current request path. |
public MessageBytes getRequestPathMB() {
return (mappingData.requestPath);
}
|
public String getRequestURI() {
return coyoteRequest.requestURI().toString();
}
Return the request URI for this request. |
public StringBuffer getRequestURL() {
StringBuffer url = new StringBuffer();
String scheme = getScheme();
int port = getServerPort();
if (port < 0)
port = 80; // Work around java.net.URL bug
url.append(scheme);
url.append("://");
url.append(getServerName());
if ((scheme.equals("http") && (port != 80))
|| (scheme.equals("https") && (port != 443))) {
url.append(':');
url.append(port);
}
url.append(getRequestURI());
return (url);
}
Reconstructs the URL the client used to make the request.
The returned URL contains a protocol, server name, port
number, and server path, but it does not include query
string parameters.
Because this method returns a StringBuffer ,
not a String , you can modify the URL easily,
for example, to append query parameters.
This method is useful for creating redirect messages and
for reporting errors. |
public String getRequestedSessionId() {
return (requestedSessionId);
}
Return the session identifier included in this request, if any. |
public Response getResponse() {
return (this.response);
}
Return the Response with which this Request is associated. |
public String getScheme() {
return (coyoteRequest.scheme().toString());
}
Return the scheme used to make this Request. |
public String getServerName() {
return (coyoteRequest.serverName().toString());
}
Return the server name responding to this Request. |
public int getServerPort() {
return (coyoteRequest.getServerPort());
}
Return the server port responding to this Request. |
public String getServletPath() {
return (mappingData.wrapperPath.toString());
}
Return the portion of the request URI used to select the servlet
that will process this request. |
public MessageBytes getServletPathMB() {
return (mappingData.wrapperPath);
}
|
public HttpSession getSession() {
Session session = doGetSession(true);
if (session != null) {
return session.getSession();
} else {
return null;
}
}
Return the session associated with this Request, creating one
if necessary. |
public HttpSession getSession(boolean create) {
Session session = doGetSession(create);
if (session != null) {
return session.getSession();
} else {
return null;
}
}
Return the session associated with this Request, creating one
if necessary and requested. |
public Session getSessionInternal() {
return doGetSession(true);
}
Return the session associated with this Request, creating one
if necessary. |
public Session getSessionInternal(boolean create) {
return doGetSession(create);
}
Return the session associated with this Request, creating one
if necessary and requested. |
public InputStream getStream() {
if (inputStream == null) {
inputStream = new CoyoteInputStream(inputBuffer);
}
return inputStream;
}
Return the input stream associated with this Request. |
protected B2CConverter getURIConverter() {
return URIConverter;
}
Return the URI converter. |
public Principal getUserPrincipal() {
if (userPrincipal instanceof GenericPrincipal) {
return ((GenericPrincipal) userPrincipal).getUserPrincipal();
} else {
return (userPrincipal);
}
}
Return the principal that has been authenticated for this Request. |
public Wrapper getWrapper() {
return (this.wrapper);
}
Return the Wrapper within which this Request is being processed. |
protected static final boolean isAlpha(String value) {
for (int i = 0; i < value.length(); i++) {
char c = value.charAt(i);
if (!((c >= 'a' && c < = 'z') || (c >= 'A' && c < = 'Z'))) {
return false;
}
}
return true;
}
|
public boolean isComet() {
return comet;
}
Return true if the current request is handling Comet traffic. |
public boolean isParametersParsed() {
return parametersParsed;
}
return true if we have parsed parameters |
public boolean isRequestedSessionIdFromCookie() {
if (requestedSessionId != null)
return (requestedSessionCookie);
else
return (false);
}
Return true if the session identifier included in this
request came from a cookie. |
public boolean isRequestedSessionIdFromURL() {
if (requestedSessionId != null)
return (requestedSessionURL);
else
return (false);
}
Return true if the session identifier included in this
request came from the request URI. |
public boolean isRequestedSessionIdFromUrl() {
return (isRequestedSessionIdFromURL());
} Deprecated! As - of Version 2.1 of the Java Servlet API, use
isRequestedSessionIdFromURL() instead.
Return true if the session identifier included in this
request came from the request URI. |
public boolean isRequestedSessionIdValid() {
if (requestedSessionId == null)
return (false);
if (context == null)
return (false);
Manager manager = context.getManager();
if (manager == null)
return (false);
Session session = null;
try {
session = manager.findSession(requestedSessionId);
} catch (IOException e) {
session = null;
}
if ((session != null) && session.isValid())
return (true);
else
return (false);
}
Return true if the session identifier included in this
request identifies a valid session. |
static boolean isSSLAttribute(String name) {
return Globals.CERTIFICATES_ATTR.equals(name) ||
Globals.CIPHER_SUITE_ATTR.equals(name) ||
Globals.KEY_SIZE_ATTR.equals(name) ||
Globals.SSL_SESSION_ID_ATTR.equals(name);
}
Test if a given name is one of the special Servlet-spec SSL attributes. |
public boolean isSecure() {
return (secure);
}
Was this request received on a secure connection? |
public boolean isUserInRole(String role) {
// Have we got an authenticated principal at all?
if (userPrincipal == null)
return (false);
// Identify the Realm we will use for checking role assignmenets
if (context == null)
return (false);
Realm realm = context.getRealm();
if (realm == null)
return (false);
// Check for a role alias defined in a < security-role-ref > element
if (wrapper != null) {
String realRole = wrapper.findSecurityReference(role);
if ((realRole != null) &&
realm.hasRole(userPrincipal, realRole))
return (true);
}
// Check for a role defined directly as a < security-role >
return (realm.hasRole(userPrincipal, role));
}
Return true if the authenticated user principal
possesses the specified role name. |
protected void parseCookies() {
cookiesParsed = true;
Cookies serverCookies = coyoteRequest.getCookies();
int count = serverCookies.getCookieCount();
if (count < = 0)
return;
cookies = new Cookie[count];
int idx=0;
for (int i = 0; i < count; i++) {
ServerCookie scookie = serverCookies.getCookie(i);
try {
/*
we must unescape the '\\' escape character
*/
Cookie cookie = new Cookie(scookie.getName().toString(),null);
int version = scookie.getVersion();
cookie.setVersion(version);
cookie.setValue(unescape(scookie.getValue().toString()));
cookie.setPath(unescape(scookie.getPath().toString()));
String domain = scookie.getDomain().toString();
if (domain!=null) cookie.setDomain(unescape(domain));//avoid NPE
String comment = scookie.getComment().toString();
cookie.setComment(version==1?unescape(comment):null);
cookies[idx++] = cookie;
} catch(IllegalArgumentException e) {
// Ignore bad cookie
}
}
if( idx < count ) {
Cookie [] ncookies = new Cookie[idx];
System.arraycopy(cookies, 0, ncookies, 0, idx);
cookies = ncookies;
}
}
|
protected void parseLocales() {
localesParsed = true;
Enumeration values = getHeaders("accept-language");
while (values.hasMoreElements()) {
String value = values.nextElement().toString();
parseLocalesHeader(value);
}
}
|
protected void parseLocalesHeader(String value) {
// Store the accumulated languages that have been requested in
// a local collection, sorted by the quality value (so we can
// add Locales in descending order). The values will be ArrayLists
// containing the corresponding Locales to be added
TreeMap locales = new TreeMap();
// Preprocess the value to remove all whitespace
int white = value.indexOf(' ');
if (white < 0)
white = value.indexOf('\t');
if (white >= 0) {
StringBuffer sb = new StringBuffer();
int len = value.length();
for (int i = 0; i < len; i++) {
char ch = value.charAt(i);
if ((ch != ' ') && (ch != '\t'))
sb.append(ch);
}
value = sb.toString();
}
// Process each comma-delimited language specification
parser.setString(value); // ASSERT: parser is available to us
int length = parser.getLength();
while (true) {
// Extract the next comma-delimited entry
int start = parser.getIndex();
if (start >= length)
break;
int end = parser.findChar(',');
String entry = parser.extract(start, end).trim();
parser.advance(); // For the following entry
// Extract the quality factor for this entry
double quality = 1.0;
int semi = entry.indexOf(";q=");
if (semi >= 0) {
try {
quality = Double.parseDouble(entry.substring(semi + 3));
} catch (NumberFormatException e) {
quality = 0.0;
}
entry = entry.substring(0, semi);
}
// Skip entries we are not going to keep track of
if (quality < 0.00005)
continue; // Zero (or effectively zero) quality factors
if ("*".equals(entry))
continue; // FIXME - "*" entries are not handled
// Extract the language and country for this entry
String language = null;
String country = null;
String variant = null;
int dash = entry.indexOf('-');
if (dash < 0) {
language = entry;
country = "";
variant = "";
} else {
language = entry.substring(0, dash);
country = entry.substring(dash + 1);
int vDash = country.indexOf('-');
if (vDash > 0) {
String cTemp = country.substring(0, vDash);
variant = country.substring(vDash + 1);
country = cTemp;
} else {
variant = "";
}
}
if (!isAlpha(language) || !isAlpha(country) || !isAlpha(variant)) {
continue;
}
// Add a new Locale to the list of Locales for this quality level
Locale locale = new Locale(language, country, variant);
Double key = new Double(-quality); // Reverse the order
ArrayList values = (ArrayList) locales.get(key);
if (values == null) {
values = new ArrayList();
locales.put(key, values);
}
values.add(locale);
}
// Process the quality values in highest- >lowest order (due to
// negating the Double value when creating the key)
Iterator keys = locales.keySet().iterator();
while (keys.hasNext()) {
Double key = (Double) keys.next();
ArrayList list = (ArrayList) locales.get(key);
Iterator values = list.iterator();
while (values.hasNext()) {
Locale locale = (Locale) values.next();
addLocale(locale);
}
}
}
Parse accept-language header value. |
protected void parseParameters() {
parametersParsed = true;
Parameters parameters = coyoteRequest.getParameters();
// getCharacterEncoding() may have been overridden to search for
// hidden form field containing request encoding
String enc = getCharacterEncoding();
boolean useBodyEncodingForURI = connector.getUseBodyEncodingForURI();
if (enc != null) {
parameters.setEncoding(enc);
if (useBodyEncodingForURI) {
parameters.setQueryStringEncoding(enc);
}
} else {
parameters.setEncoding
(org.apache.coyote.Constants.DEFAULT_CHARACTER_ENCODING);
if (useBodyEncodingForURI) {
parameters.setQueryStringEncoding
(org.apache.coyote.Constants.DEFAULT_CHARACTER_ENCODING);
}
}
parameters.handleQueryParameters();
if (usingInputStream || usingReader)
return;
if (!getMethod().equalsIgnoreCase("POST"))
return;
String contentType = getContentType();
if (contentType == null)
contentType = "";
int semicolon = contentType.indexOf(';');
if (semicolon >= 0) {
contentType = contentType.substring(0, semicolon).trim();
} else {
contentType = contentType.trim();
}
if (!("application/x-www-form-urlencoded".equals(contentType)))
return;
int len = getContentLength();
if (len > 0) {
int maxPostSize = connector.getMaxPostSize();
if ((maxPostSize > 0) && (len > maxPostSize)) {
if (context.getLogger().isDebugEnabled()) {
context.getLogger().debug(
sm.getString("coyoteRequest.postTooLarge"));
}
return;
}
byte[] formData = null;
if (len < CACHED_POST_LEN) {
if (postData == null)
postData = new byte[CACHED_POST_LEN];
formData = postData;
} else {
formData = new byte[len];
}
try {
if (readPostBody(formData, len) != len) {
return;
}
} catch (IOException e) {
// Client disconnect
if (context.getLogger().isDebugEnabled()) {
context.getLogger().debug(
sm.getString("coyoteRequest.parseParameters"), e);
}
return;
}
parameters.processParameters(formData, 0, len);
} else if ("chunked".equalsIgnoreCase(
coyoteRequest.getHeader("transfer-encoding"))) {
byte[] formData = null;
try {
formData = readChunkedPostBody();
} catch (IOException e) {
// Client disconnect
if (context.getLogger().isDebugEnabled()) {
context.getLogger().debug(
sm.getString("coyoteRequest.parseParameters"), e);
}
return;
}
parameters.processParameters(formData, 0, formData.length);
}
}
Parse request parameters. |
public boolean read() throws IOException {
return (inputBuffer.realReadBytes(null, 0, 0) > 0);
}
Clear cached encoders (to save memory for Comet requests). |
protected byte[] readChunkedPostBody() throws IOException {
ByteChunk body = new ByteChunk();
byte[] buffer = new byte[CACHED_POST_LEN];
int len = 0;
while (len > -1) {
len = getStream().read(buffer, 0, CACHED_POST_LEN);
if (connector.getMaxPostSize() > 0 &&
(body.getLength() + len) > connector.getMaxPostSize()) {
// Too much data
throw new IllegalArgumentException(
sm.getString("coyoteRequest.chunkedPostTooLarge"));
}
if (len > 0) {
body.append(buffer, 0, len);
}
}
if (body.getLength() < body.getBuffer().length) {
int length = body.getLength();
byte[] result = new byte[length];
System.arraycopy(body.getBuffer(), 0, result, 0, length);
return result;
} else {
return body.getBuffer();
}
}
|
protected int readPostBody(byte[] body,
int len) throws IOException {
int offset = 0;
do {
int inputLen = getStream().read(body, offset, len - offset);
if (inputLen < = 0) {
return offset;
}
offset += inputLen;
} while ((len - offset) > 0);
return len;
}
Read post body in an array. |
public void recycle() {
context = null;
wrapper = null;
dispatcherType = null;
requestDispatcherPath = null;
comet = false;
if (event != null) {
event.clear();
event = null;
}
authType = null;
inputBuffer.recycle();
usingInputStream = false;
usingReader = false;
userPrincipal = null;
subject = null;
sessionParsed = false;
parametersParsed = false;
cookiesParsed = false;
locales.clear();
localesParsed = false;
secure = false;
remoteAddr = null;
remoteHost = null;
remotePort = -1;
localPort = -1;
localAddr = null;
localName = null;
attributes.clear();
notes.clear();
cookies = null;
if (session != null) {
session.endAccess();
}
session = null;
requestedSessionCookie = false;
requestedSessionId = null;
requestedSessionURL = false;
if (Globals.IS_SECURITY_ENABLED || Connector.RECYCLE_FACADES) {
parameterMap = new ParameterMap();
} else {
parameterMap.setLocked(false);
parameterMap.clear();
}
mappingData.recycle();
if (Globals.IS_SECURITY_ENABLED || Connector.RECYCLE_FACADES) {
if (facade != null) {
facade.clear();
facade = null;
}
if (inputStream != null) {
inputStream.clear();
inputStream = null;
}
if (reader != null) {
reader.clear();
reader = null;
}
}
}
Release all object references, and initialize instance variables, in
preparation for reuse of this object. |
public void removeAttribute(String name) {
Object value = null;
boolean found = false;
// Remove the specified attribute
// Check for read only attribute
// requests are per thread so synchronization unnecessary
if (readOnlyAttributes.containsKey(name)) {
return;
}
// Pass special attributes to the native layer
if (name.startsWith("org.apache.tomcat.")) {
coyoteRequest.getAttributes().remove(name);
}
found = attributes.containsKey(name);
if (found) {
value = attributes.get(name);
attributes.remove(name);
} else {
return;
}
// Notify interested application event listeners
Object listeners[] = context.getApplicationEventListeners();
if ((listeners == null) || (listeners.length == 0))
return;
ServletRequestAttributeEvent event =
new ServletRequestAttributeEvent(context.getServletContext(),
getRequest(), name, value);
for (int i = 0; i < listeners.length; i++) {
if (!(listeners[i] instanceof ServletRequestAttributeListener))
continue;
ServletRequestAttributeListener listener =
(ServletRequestAttributeListener) listeners[i];
try {
listener.attributeRemoved(event);
} catch (Throwable t) {
context.getLogger().error(sm.getString("coyoteRequest.attributeEvent"), t);
// Error valve will pick this execption up and display it to user
attributes.put( Globals.EXCEPTION_ATTR, t );
}
}
}
Remove the specified request attribute if it exists. |
public void removeNote(String name) {
notes.remove(name);
}
Remove any object bound to the specified name in the internal notes
for this request. |
public void setAttribute(String name,
Object value) {
// Name cannot be null
if (name == null)
throw new IllegalArgumentException
(sm.getString("coyoteRequest.setAttribute.namenull"));
// Null value is the same as removeAttribute()
if (value == null) {
removeAttribute(name);
return;
}
if (name.equals(Globals.DISPATCHER_TYPE_ATTR)) {
dispatcherType = value;
return;
} else if (name.equals(Globals.DISPATCHER_REQUEST_PATH_ATTR)) {
requestDispatcherPath = value;
return;
}
Object oldValue = null;
boolean replaced = false;
// Add or replace the specified attribute
// Check for read only attribute
// requests are per thread so synchronization unnecessary
if (readOnlyAttributes.containsKey(name)) {
return;
}
oldValue = attributes.put(name, value);
if (oldValue != null) {
replaced = true;
}
// Pass special attributes to the native layer
if (name.startsWith("org.apache.tomcat.")) {
coyoteRequest.setAttribute(name, value);
}
// Notify interested application event listeners
Object listeners[] = context.getApplicationEventListeners();
if ((listeners == null) || (listeners.length == 0))
return;
ServletRequestAttributeEvent event = null;
if (replaced)
event =
new ServletRequestAttributeEvent(context.getServletContext(),
getRequest(), name, oldValue);
else
event =
new ServletRequestAttributeEvent(context.getServletContext(),
getRequest(), name, value);
for (int i = 0; i < listeners.length; i++) {
if (!(listeners[i] instanceof ServletRequestAttributeListener))
continue;
ServletRequestAttributeListener listener =
(ServletRequestAttributeListener) listeners[i];
try {
if (replaced) {
listener.attributeReplaced(event);
} else {
listener.attributeAdded(event);
}
} catch (Throwable t) {
context.getLogger().error(sm.getString("coyoteRequest.attributeEvent"), t);
// Error valve will pick this execption up and display it to user
attributes.put( Globals.EXCEPTION_ATTR, t );
}
}
}
Set the specified request attribute to the specified value. |
public void setAuthType(String type) {
this.authType = type;
}
Set the authentication type used for this request, if any; otherwise
set the type to null . Typical values are "BASIC",
"DIGEST", or "SSL". |
public void setCharacterEncoding(String enc) throws UnsupportedEncodingException {
if (usingReader)
return;
// Ensure that the specified encoding is valid
byte buffer[] = new byte[1];
buffer[0] = (byte) 'a';
String dummy = new String(buffer, enc);
// Save the validated encoding
coyoteRequest.setCharacterEncoding(enc);
}
Overrides the name of the character encoding used in the body of
this request. This method must be called prior to reading request
parameters or reading input using getReader() . |
public void setComet(boolean comet) {
this.comet = comet;
}
|
public void setCometTimeout(long timeout) {
coyoteRequest.action(ActionCode.ACTION_COMET_SETTIMEOUT,new Long(timeout));
}
|
public void setConnector(Connector connector) {
this.connector = connector;
}
Set the Connector through which this Request was received. |
public void setContentLength(int length) {
// Not used
}
Set the content length associated with this Request. |
public void setContentType(String type) {
// Not used
}
Set the content type (and optionally the character encoding)
associated with this Request. For example,
text/html; charset=ISO-8859-4 . |
public void setContext(Context context) {
this.context = context;
}
Set the Context within which this Request is being processed. This
must be called as soon as the appropriate Context is identified, because
it identifies the value to be returned by getContextPath() ,
and thus enables parsing of the request URI. |
public void setContextPath(String path) {
if (path == null) {
mappingData.contextPath.setString("");
} else {
mappingData.contextPath.setString(path);
}
}
Set the context path for this Request. This will normally be called
when the associated Context is mapping the Request to a particular
Wrapper. |
public void setCookies(Cookie[] cookies) {
this.cookies = cookies;
}
Set the set of cookies recieved with this Request. |
public void setCoyoteRequest(Request coyoteRequest) {
this.coyoteRequest = coyoteRequest;
inputBuffer.setRequest(coyoteRequest);
}
|
public void setDecodedRequestURI(String uri) {
// Not used
}
Set the decoded request URI. |
public void setFilterChain(FilterChain filterChain) {
this.filterChain = filterChain;
}
Set filter chain associated with the request. |
public void setHost(Host host) {
mappingData.host = host;
}
Set the Host within which this Request is being processed. This
must be called as soon as the appropriate Host is identified, and
before the Request is passed to a context. |
public void setMethod(String method) {
// Not used
}
Set the HTTP request method used for this Request. |
public void setNote(String name,
Object value) {
notes.put(name, value);
}
Bind an object to a specified name in the internal notes associated
with this request, replacing any existing binding for this name. |
public void setPathInfo(String path) {
mappingData.pathInfo.setString(path);
}
Set the path information for this Request. This will normally be called
when the associated Context is mapping the Request to a particular
Wrapper. |
public void setProtocol(String protocol) {
// Not used
}
Set the protocol name and version associated with this Request. |
public void setQueryString(String query) {
// Not used
}
Set the query string for this Request. This will normally be called
by the HTTP Connector, when it parses the request headers. |
public void setRemoteAddr(String remoteAddr) {
this.remoteAddr = remoteAddr;
}
Set the IP address of the remote client associated with this Request. |
public void setRemoteHost(String remoteHost) {
this.remoteHost = remoteHost;
}
Set the fully qualified name of the remote client associated with this
Request. |
public void setRequestURI(String uri) {
// Not used
}
Set the unparsed request URI for this Request. This will normally be
called by the HTTP Connector, when it parses the request headers. |
public void setRequestedSessionCookie(boolean flag) {
this.requestedSessionCookie = flag;
}
Set a flag indicating whether or not the requested session ID for this
request came in through a cookie. This is normally called by the
HTTP Connector, when it parses the request headers. |
public void setRequestedSessionId(String id) {
this.requestedSessionId = id;
}
Set the requested session ID for this request. This is normally called
by the HTTP Connector, when it parses the request headers. |
public void setRequestedSessionURL(boolean flag) {
this.requestedSessionURL = flag;
}
Set a flag indicating whether or not the requested session ID for this
request came in through a URL. This is normally called by the
HTTP Connector, when it parses the request headers. |
public void setResponse(Response response) {
this.response = response;
}
Set the Response with which this Request is associated. |
public void setScheme(String scheme) {
// Not used
}
Set the name of the scheme associated with this request. Typical values
are http , https , and ftp . |
public void setSecure(boolean secure) {
this.secure = secure;
}
Set the value to be returned by isSecure()
for this Request. |
public void setServerName(String name) {
coyoteRequest.serverName().setString(name);
}
Set the name of the server (virtual host) to process this request. |
public void setServerPort(int port) {
coyoteRequest.setServerPort(port);
}
Set the port number of the server to process this request. |
public void setServletPath(String path) {
if (path != null)
mappingData.wrapperPath.setString(path);
}
Set the servlet path for this Request. This will normally be called
when the associated Context is mapping the Request to a particular
Wrapper. |
public void setStream(InputStream stream) {
// Ignore
}
Set the input stream associated with this Request. |
protected void setURIConverter(B2CConverter URIConverter) {
this.URIConverter = URIConverter;
}
|
public void setUserPrincipal(Principal principal) {
if (Globals.IS_SECURITY_ENABLED){
HttpSession session = getSession(false);
if ( (subject != null) &&
(!subject.getPrincipals().contains(principal)) ){
subject.getPrincipals().add(principal);
} else if (session != null &&
session.getAttribute(Globals.SUBJECT_ATTR) == null) {
subject = new Subject();
subject.getPrincipals().add(principal);
}
if (session != null){
session.setAttribute(Globals.SUBJECT_ATTR, subject);
}
}
this.userPrincipal = principal;
}
Set the Principal who has been authenticated for this Request. This
value is also used to calculate the value to be returned by the
getRemoteUser() method. |
public void setWrapper(Wrapper wrapper) {
this.wrapper = wrapper;
}
Set the Wrapper within which this Request is being processed. This
must be called as soon as the appropriate Wrapper is identified, and
before the Request is ultimately passed to an application servlet. |
protected String unescape(String s) {
if (s==null) return null;
if (s.indexOf('\\') == -1) return s;
StringBuffer buf = new StringBuffer();
for (int i=0; i< s.length(); i++) {
char c = s.charAt(i);
if (c!='\\') buf.append(c);
else {
if (++i >= s.length()) throw new IllegalArgumentException();//invalid escape, hence invalid cookie
c = s.charAt(i);
buf.append(c);
}
}
return buf.toString();
}
|