This is a low-level, efficient representation of a server request. Most
fields are GC-free, expensive operations are delayed until the user code
needs the information.
Processing is delegated to modules, using a hook mechanism.
This class is not intended for user code - it is used internally by tomcat
for processing the request in the most efficient way. Users ( servlets ) can
access the information using a facade, which provides the high-level view
of the request.
For lazy evaluation, the request uses the getInfo() hook. The following ids
- req.encoding - returns the request encoding
- req.attribute - returns a module-specific attribute ( like SSL keys, etc ).
Tomcat defines a number of attributes:
- "org.apache.tomcat.request" - allows access to the low-level
request object in trusted applications
- James Duncan Davidson [email@example.com]
- James Todd [firstname.lastname@example.org]
- Jason Hunter [email@example.com]
- Harish Prabandham
- Alex Cruikshank [firstname.lastname@example.org]
- Hans Bergsten [email@example.com]
- Costin Manolache
- Remy Maucherat
HTTP specific fields. (remove them ?)
Get the instance id (or JVM route). Curently Ajp is sending it with each
request. In future this should be fixed, and sent only once ( or
'negociated' at config time so both tomcat and apache share the same name.
Return the buffer holding the server name, if
any. Use isNull() to check if there is no value
This is the "virtual host", derived from the
Get the character encoding used for this request.
Read data from the input buffer and put it into a byte chunk.
The buffer is owned by the protocol implementation - it will be reused on the next read.
The Adapter must either process the data in place or copy it to a separate buffer if it needs
to hold it. In most cases this is done during byte->char conversions or via InputStream. Unlike
InputStream, this interface allows the app to process data in place, without copy.
Used to store private data. Thread data could be used instead - but
if you have the req, getting/setting a note is just a array access, may
be faster than ThreadLocal for very frequent operations.
HandlerRequest.HOSTBUFFER = 10 CharChunk, buffer for Host decoding
WorkerEnv: SSL_CERT_NOTE=16 - MessageBytes containing the cert
ADAPTER_NOTES = 1 - stores the HttpServletRequest object ( req/res)
To avoid conflicts, note in the range 0 - 8 are reserved for the
servlet container ( catalina connector, etc ), and values in 9 - 16
for connector use.
17-31 range is not allocated or used.