For the fundamental servlet attribute scopes (request, session, and context): write servlet
code to add, retrieve, and remove attributes; given a usage scenario, identify the proper
scope for an attribute; and identify multi-threading issues associated with each scope.
Request Attributes.
Attributes are objects associated with a request. Attributes may be set by the
container to express information that otherwise could not be expressed via the API,
or may be set by a servlet to communicate information to another servlet (via the
RequestDispatcher). Attributes are accessed with the
following methods of the ServletRequest interface:
getAttribute
Returns the value of the named attribute as an Object,
or null if no attribute of the given name exists.
Attributes can be set two ways. The servlet container may set attributes to
make available custom information about a request. Attributes can also be
set programatically using setAttribute(String, Object).
This allows information to be embedded into a request before a
RequestDispatcher call. Attribute names should follow
the same conventions as package names. This specification reserves names
matching java.*, javax.*, and
sun.*.
getAttributeNames
Returns an Enumeration containing the names of
the attributes available to this request. This method returns an EMPTY
Enumeration if the request has no attributes available
to it.
setAttribute
Stores an attribute in this request. Attributes are reset between
requests. This method is most often used in conjunction with
RequestDispatcher. Attribute names should follow
the same conventions as package names. Names beginning with
java.*, javax.*, and
com.sun.*, are reserved for use by Sun Microsystems.
If the object passed in is null, the effect is the
same as calling removeAttribute(String).
removeAttribute
Removes an attribute from this request. This method is not
generally needed
as attributes only persist as long as the request is being handled.
Only ONE attribute value may be associated with an attribute name.
package javax.servlet;
public interface ServletRequest {
public java.lang.Object getAttribute(java.lang.String name);
public java.util.Enumeration getAttributeNames();
public void setAttribute(java.lang.String name, java.lang.Object o);
public void removeAttribute(java.lang.String name);
}
Attribute names beginning with the prefixes of "java." and "javax." are
RESERVED for definition by this specification. Similarly, attribute names beginning
with the prefixes of "sun.", and "com.sun." are reserved for definition by Sun
Microsystems. It is suggested that all attributes placed in the attribute set be
named in accordance with the reverse domain name convention suggested by the
Java Programming Language Specification for package naming.
Session Attributes.
A servlet can bind an object attribute into an HttpSession implementation
by name. Any object bound into a session is available to any other servlet that belongs to the
same ServletContext and handles a request identified as being a part
of the same session.
getAttribute
Returns the object bound with the specified name in this session, or
null if no object is bound under the name.
getAttributeNames
Returns an Enumeration of String objects
containing the names of all the objects bound to this session.
setAttribute
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.
After this method executes, and if the new object implements
HttpSessionBindingListener, the container calls
HttpSessionBindingListener.valueBound. The container
then notifies any HttpSessionAttributeListeners in the
web application. If an object was already bound to this session of this name
that implements HttpSessionBindingListener, its
HttpSessionBindingListener.valueUnbound method is called.
If the value passed in is null, this has the same effect
as calling removeAttribute().
removeAttribute
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. After this method executes, and if the object implements
HttpSessionBindingListener, the container calls
HttpSessionBindingListener.valueUnbound. The container
then notifies any HttpSessionAttributeListeners in the
web application.
package javax.servlet.http;
public interface HttpSession {
public java.lang.Object getAttribute(java.lang.String name);
public java.util.Enumeration getAttributeNames();
public void setAttribute(java.lang.String name, java.lang.Object value);
public void removeAttribute(java.lang.String name);
}
Some objects may require notification when they are placed into, or removed
from, a session. This information can be obtained by having the object implement
the HttpSessionBindingListener interface. This interface defines
the following methods that will signal an object being bound into, or being unbound from, a
session
The valueBound method must be called BEFORE the object is made
available via the getAttribute method of the
HttpSession interface. The valueUnbound
method must be called AFTER the object is no longer available via the
getAttribute method of the HttpSession interface.
Multiple servlets executing request threads may have active access to a single
session object at the same time. The Developer has the responsibility for
synchronizing access to session resources as appropriate.
Within an application marked as distributable, all requests that are part of a session
must be handled by one Java Virtual Machine (JVM) at a time. The container
must be able to handle all objects placed into instances of the
HttpSession class using the setAttribute or
putValue methods appropriately. The following restrictions are
imposed to meet these conditions:
The container must accept objects that implement the
Serializable interface.
The container may choose to support storage of other designated objects in
the HttpSession, such as references to
Enterprise
JavaBeans components and transactions.
Migration of sessions will be handled by container-specific facilities.
The distributed servlet container must throw an IllegalArgumentException
for objects where the container cannot support the mechanism necessary for
migration of the session storing them.
Containers must notify any session attributes implementing the
HttpSessionActivationListener during migration of a session.
They must notify listeners of passivation prior to serialization of a session, and of
activation after deserialization of a session.
Application Developers writing distributed applications should be aware that
since the container may run in more than one Java virtual machine, the developer
cannot depend on static variables for storing an application state. They should
store such states using an enterprise bean or a database.
Context Attributes.
A servlet can bind an object attribute into the context by name. Any attribute bound
into a context is available to any other servlet that is part of the same Web
application. The following methods of ServletContext
interface allow
access to this functionality:
setAttribute
Binds an object to a given attribute name in this servlet context. If the name
specified is already used for an attribute, this method will REPLACE the attribute
with the new to the new attribute.
If listeners are configured on the ServletContext the
container notifies them accordingly. If a null value is
passed, the effect is the same as calling removeAttribute().
Attribute names should follow the same convention as package names. The
Java Servlet API specification reserves names matching java.*,
javax.*, and sun.*.
getAttribute
Returns the servlet container attribute with the given name, or
null if there is no attribute by that name. An attribute
allows a servlet container to give the servlet additional information not already
provided by this interface. See your server documentation for information about its
attributes. A list of supported attributes can be retrieved using
getAttributeNames. The attribute is returned as a
java.lang.Object or some subclass. Attribute
names should follow the same convention as package names. The Java Servlet
API specification reserves names matching java.*,
javax.*, and sun.*.
getAttributeNames
Returns an Enumeration containing the attribute names
available within this servlet context. Use the
getAttribute(String) method with an attribute
name to get the value of an attribute.
removeAttribute
Removes the attribute with the given name from the servlet context. After
removal, subsequent calls to getAttribute(String) to
retrieve the attribute’s value will return null.
If listeners are configured on the ServletContext the
container notifies them accordingly.
package javax.servlet;
public interface ServletContext {
public void setAttribute(java.lang.String name, java.lang.Object object);
public java.lang.Object getAttribute(java.lang.String name);
public java.util.Enumeration getAttributeNames();
public void removeAttribute(java.lang.String name);
}
Context attributes are LOCAL to the JVM in which they were created. This prevents
ServletContext attributes from being a shared memory store in a
distributed container. When information needs to be shared between servlets running in a
distributed environment, the information should be placed into a session, stored in a
database, or set in an Enterprise JavaBeans component.
Visit
http://java.boot.by
for the updates.