public class ServletRequestAttributes extends AbstractRequestAttributes
RequestAttributes
interface.
Accesses objects from servlet request and HTTP session scope, with no distinction between "session" and "global session".
ServletRequest.getAttribute(java.lang.String)
,
HttpSession.getAttribute(java.lang.String)
Modifier and Type | Field and Description |
---|---|
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 . |
protected static Set<Class<?>> |
immutableValueTypes |
requestDestructionCallbacks
REFERENCE_REQUEST, REFERENCE_SESSION, SCOPE_GLOBAL_SESSION, SCOPE_REQUEST, SCOPE_SESSION
Constructor and Description |
---|
ServletRequestAttributes(HttpServletRequest request)
Create a new ServletRequestAttributes instance for the given request.
|
ServletRequestAttributes(HttpServletRequest request,
HttpServletResponse response)
Create a new ServletRequestAttributes instance for the given request.
|
Modifier and Type | Method and Description |
---|---|
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. |
HttpServletResponse |
getResponse()
Exposes the native
HttpServletResponse that we're wrapping (if any). |
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.
|
protected boolean |
isImmutableSessionAttribute(String name,
Object value)
Determine whether the given value is to be considered as an immutable session
attribute, that is, doesn't have to be re-set via
session.setAttribute
since its value cannot meaningfully change internally. |
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. |
isRequestActive, registerRequestDestructionCallback, removeRequestDestructionCallback, requestCompleted
public static final String DESTRUCTION_CALLBACK_NAME_PREFIX
String
prefixed to the name of a
destruction callback when it is stored in a HttpSession
.public ServletRequestAttributes(HttpServletRequest request)
request
- current HTTP requestpublic ServletRequestAttributes(HttpServletRequest request, HttpServletResponse response)
request
- current HTTP requestresponse
- current HTTP response (for optional exposure)public final HttpServletRequest getRequest()
HttpServletRequest
that we're wrapping.public final HttpServletResponse getResponse()
HttpServletResponse
that we're wrapping (if any).protected final HttpSession getSession(boolean allowCreate)
HttpSession
that we're wrapping.allowCreate
- whether to allow creation of a new session if none exists yetpublic Object getAttribute(String name, int scope)
RequestAttributes
name
- the name of the attributescope
- the scope identifiernull
if not foundpublic void setAttribute(String name, Object value, int scope)
RequestAttributes
name
- the name of the attributevalue
- the value for the attributescope
- the scope identifierpublic void removeAttribute(String name, int scope)
RequestAttributes
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).
name
- the name of the attributescope
- the scope identifierpublic String[] getAttributeNames(int scope)
RequestAttributes
scope
- the scope identifierpublic void registerDestructionCallback(String name, Runnable callback, int scope)
RequestAttributes
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.
name
- the name of the attribute to register the callback forcallback
- the destruction callback to be executedscope
- the scope identifierpublic Object resolveReference(String key)
RequestAttributes
At a minimum: the HttpServletRequest/PortletRequest reference for key "request", and the HttpSession/PortletSession reference for key "session".
key
- the contextual keynull
if none foundpublic String getSessionId()
RequestAttributes
null
)public Object getSessionMutex()
RequestAttributes
null
)protected void updateAccessedSessionAttributes()
session.setAttribute
calls, explicitly indicating to the container that they might have been modified.updateAccessedSessionAttributes
in class AbstractRequestAttributes
protected boolean isImmutableSessionAttribute(String name, Object value)
session.setAttribute
since its value cannot meaningfully change internally.
The default implementation returns true
for String
,
Character
, Boolean
and standard Number
values.
name
- the name of the attributevalue
- the corresponding value to checktrue
if the value is to be considered as immutable for the
purposes of session attribute management; false
otherwiseupdateAccessedSessionAttributes()
protected void registerSessionDestructionCallback(String name, Runnable callback)
Note: The callback object should be serializable in order to survive web app restarts.
name
- the name of the attribute to register the callback forcallback
- the callback to be executed for destruction