org.springframework.web.context.request
Class ServletRequestAttributes

java.lang.Object
  extended by org.springframework.web.context.request.AbstractRequestAttributes
      extended by org.springframework.web.context.request.ServletRequestAttributes
All Implemented Interfaces:
RequestAttributes
Direct Known Subclasses:
ServletWebRequest

public class ServletRequestAttributes
extends AbstractRequestAttributes

Servlet-based implementation of the RequestAttributes interface.

Accesses objects from servlet request and HTTP session scope, with no distinction between "session" and "global session".

Since:
2.0
Author:
Juergen Hoeller
See Also:
ServletRequest.getAttribute(java.lang.String), HttpSession.getAttribute(java.lang.String)

Field Summary
static String DESTRUCTION_CALLBACK_NAME_PREFIX
          Constant identifying the String prefixed to the name of a destruction callback when it is stored in a HttpSession.
 
Fields inherited from class org.springframework.web.context.request.AbstractRequestAttributes
requestDestructionCallbacks
 
Fields inherited from interface org.springframework.web.context.request.RequestAttributes
REFERENCE_REQUEST, REFERENCE_SESSION, SCOPE_GLOBAL_SESSION, SCOPE_REQUEST, SCOPE_SESSION
 
Constructor Summary
ServletRequestAttributes(HttpServletRequest request)
          Create a new ServletRequestAttributes instance for the given request.
 
Method Summary
 Object getAttribute(String name, int scope)
          Return the value for the scoped attribute of the given name, if any.
 String[] getAttributeNames(int scope)
          Retrieve the names of all attributes in the scope.
 HttpServletRequest getRequest()
          Exposes the native HttpServletRequest that we're wrapping.
protected  HttpSession getSession(boolean allowCreate)
          Exposes the HttpSession that we're wrapping.
 String getSessionId()
          Return an id for the current underlying session.
 Object getSessionMutex()
          Expose the best available mutex for the underlying session: that is, an object to synchronize on for the underlying session.
 void registerDestructionCallback(String name, Runnable callback, int scope)
          Register a callback to be executed on destruction of the specified attribute in the given scope.
protected  void registerSessionDestructionCallback(String name, Runnable callback)
          Register the given callback as to be executed after session termination.
 void removeAttribute(String name, int scope)
          Remove the scoped attribute of the given name, if it exists.
 Object resolveReference(String key)
          Resolve the contextual reference for the given key, if any.
 void setAttribute(String name, Object value, int scope)
          Set the value for the scoped attribute of the given name, replacing an existing value (if any).
 String toString()
           
protected  void updateAccessedSessionAttributes()
          Update all accessed session attributes through session.setAttribute calls, explicitly indicating to the container that they might have been modified.
 
Methods inherited from class org.springframework.web.context.request.AbstractRequestAttributes
isRequestActive, registerRequestDestructionCallback, removeRequestDestructionCallback, requestCompleted
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

DESTRUCTION_CALLBACK_NAME_PREFIX

public static final String DESTRUCTION_CALLBACK_NAME_PREFIX
Constant identifying the String prefixed to the name of a destruction callback when it is stored in a HttpSession.

Constructor Detail

ServletRequestAttributes

public ServletRequestAttributes(HttpServletRequest request)
Create a new ServletRequestAttributes instance for the given request.

Parameters:
request - current HTTP request
Method Detail

getRequest

public final HttpServletRequest getRequest()
Exposes the native HttpServletRequest that we're wrapping.


getSession

protected final HttpSession getSession(boolean allowCreate)
Exposes the HttpSession that we're wrapping.

Parameters:
allowCreate - whether to allow creation of a new session if none exists yet

getAttribute

public Object getAttribute(String name,
                           int scope)
Description copied from interface: RequestAttributes
Return the value for the scoped attribute of the given name, if any.

Parameters:
name - the name of the attribute
scope - the scope identifier
Returns:
the current attribute value, or null if not found

setAttribute

public void setAttribute(String name,
                         Object value,
                         int scope)
Description copied from interface: RequestAttributes
Set the value for the scoped attribute of the given name, replacing an existing value (if any).

Parameters:
name - the name of the attribute
value - the value for the attribute
scope - the scope identifier

removeAttribute

public void removeAttribute(String name,
                            int scope)
Description copied from interface: RequestAttributes
Remove the scoped attribute of the given name, if it exists.

Note that an implementation should also remove a registered destruction callback for the specified attribute, if any. It does, however, not need to execute a registered destruction callback in this case, since the object will be destroyed by the caller (if appropriate).

Parameters:
name - the name of the attribute
scope - the scope identifier

getAttributeNames

public String[] getAttributeNames(int scope)
Description copied from interface: RequestAttributes
Retrieve the names of all attributes in the scope.

Parameters:
scope - the scope identifier
Returns:
the attribute names as String array

registerDestructionCallback

public void registerDestructionCallback(String name,
                                        Runnable callback,
                                        int scope)
Description copied from interface: RequestAttributes
Register a callback to be executed on destruction of the specified attribute in the given scope.

Implementations should do their best to execute the callback at the appropriate time: that is, at request completion or session termination, respectively. If such a callback is not supported by the underlying runtime environment, the callback must be ignored and a corresponding warning should be logged.

Note that 'destruction' usually corresponds to destruction of the entire scope, not to the individual attribute having been explicitly removed by the application. If an attribute gets removed via this facade's RequestAttributes.removeAttribute(String, int) method, any registered destruction callback should be disabled as well, assuming that the removed object will be reused or manually destroyed.

NOTE: Callback objects should generally be serializable if they are being registered for a session scope. Otherwise the callback (or even the entire session) might not survive web app restarts.

Parameters:
name - the name of the attribute to register the callback for
callback - the destruction callback to be executed
scope - the scope identifier

resolveReference

public Object resolveReference(String key)
Description copied from interface: RequestAttributes
Resolve the contextual reference for the given key, if any.

At a minimum: the HttpServletRequest/PortletRequest reference for key "request", and the HttpSession/PortletSession reference for key "session".

Parameters:
key - the contextual key
Returns:
the corresponding object, or null if none found

getSessionId

public String getSessionId()
Description copied from interface: RequestAttributes
Return an id for the current underlying session.

Returns:
the session id as String (never null

getSessionMutex

public Object getSessionMutex()
Description copied from interface: RequestAttributes
Expose the best available mutex for the underlying session: that is, an object to synchronize on for the underlying session.

Returns:
the session mutex to use (never null

updateAccessedSessionAttributes

protected void updateAccessedSessionAttributes()
Update all accessed session attributes through session.setAttribute calls, explicitly indicating to the container that they might have been modified.

Specified by:
updateAccessedSessionAttributes in class AbstractRequestAttributes

registerSessionDestructionCallback

protected void registerSessionDestructionCallback(String name,
                                                  Runnable callback)
Register the given callback as to be executed after session termination.

Note: The callback object should be serializable in order to survive web app restarts.

Parameters:
name - the name of the attribute to register the callback for
callback - the callback to be executed for destruction

toString

public String toString()
Overrides:
toString in class Object