public class ServletWebRequest extends ServletRequestAttributes implements NativeWebRequest
WebRequest
adapter for an javax.servlet.http.HttpServletRequest
.Modifier and Type | Field and Description |
---|---|
private static java.lang.String[] |
DATE_FORMATS
Date formats as specified in the HTTP RFC
|
private static java.lang.String |
ETAG |
private static java.util.regex.Pattern |
ETAG_HEADER_VALUE_PATTERN
Pattern matching ETag multiple field values in headers such as "If-Match", "If-None-Match"
|
private static java.util.TimeZone |
GMT |
private static java.lang.String |
IF_MODIFIED_SINCE |
private static java.lang.String |
IF_NONE_MATCH |
private static java.lang.String |
IF_UNMODIFIED_SINCE |
private static java.lang.String |
LAST_MODIFIED |
private boolean |
notModified |
private static java.util.List<java.lang.String> |
SAFE_METHODS |
DESTRUCTION_CALLBACK_NAME_PREFIX, immutableValueTypes
requestDestructionCallbacks
REFERENCE_REQUEST, REFERENCE_SESSION, SCOPE_REQUEST, SCOPE_SESSION
Constructor and Description |
---|
ServletWebRequest(HttpServletRequest request)
Create a new ServletWebRequest instance for the given request.
|
ServletWebRequest(HttpServletRequest request,
HttpServletResponse response)
Create a new ServletWebRequest instance for the given request/response pair.
|
Modifier and Type | Method and Description |
---|---|
boolean |
checkNotModified(long lastModifiedTimestamp)
Check whether the requested resource has been modified given the
supplied last-modified timestamp (as determined by the application).
|
boolean |
checkNotModified(java.lang.String etag)
Check whether the requested resource has been modified given the
supplied
ETag (entity tag), as determined by the application. |
boolean |
checkNotModified(java.lang.String etag,
long lastModifiedTimestamp)
Check whether the requested resource has been modified given the
supplied
ETag (entity tag) and last-modified timestamp,
as determined by the application. |
java.lang.String |
getContextPath()
Return the context path for this request
(usually the base path that the current web application is mapped to).
|
java.lang.String |
getDescription(boolean includeClientInfo)
Get a short description of this request,
typically containing request URI and session id.
|
java.lang.String |
getHeader(java.lang.String headerName)
Return the request header of the given name, or
null if none. |
java.util.Iterator<java.lang.String> |
getHeaderNames()
Return a Iterator over request header names.
|
java.lang.String[] |
getHeaderValues(java.lang.String headerName)
Return the request header values for the given header name,
or
null if none. |
HttpMethod |
getHttpMethod()
Return the HTTP method of the request.
|
java.util.Locale |
getLocale()
Return the primary Locale for this request.
|
java.lang.Object |
getNativeRequest()
Return the underlying native request object.
|
<T> T |
getNativeRequest(java.lang.Class<T> requiredType)
Return the underlying native request object, if available.
|
java.lang.Object |
getNativeResponse()
Return the underlying native response object, if any.
|
<T> T |
getNativeResponse(java.lang.Class<T> requiredType)
Return the underlying native response object, if available.
|
java.lang.String |
getParameter(java.lang.String paramName)
Return the request parameter of the given name, or
null if none. |
java.util.Map<java.lang.String,java.lang.String[]> |
getParameterMap()
Return a immutable Map of the request parameters, with parameter names as map keys
and parameter values as map values.
|
java.util.Iterator<java.lang.String> |
getParameterNames()
Return a Iterator over request parameter names.
|
java.lang.String[] |
getParameterValues(java.lang.String paramName)
Return the request parameter values for the given parameter name,
or
null if none. |
java.lang.String |
getRemoteUser()
Return the remote user for this request, if any.
|
java.security.Principal |
getUserPrincipal()
Return the user principal for this request, if any.
|
boolean |
isNotModified() |
boolean |
isSecure()
Return whether this request has been sent over a secure transport
mechanism (such as SSL).
|
boolean |
isUserInRole(java.lang.String role)
Determine whether the user is in the given role for this request.
|
private java.lang.String |
padEtagIfNecessary(java.lang.String etag) |
private long |
parseDateHeader(java.lang.String headerName) |
private long |
parseDateValue(java.lang.String headerValue) |
java.lang.String |
toString() |
private boolean |
validateIfModifiedSince(long lastModifiedTimestamp) |
private boolean |
validateIfNoneMatch(java.lang.String etag) |
private boolean |
validateIfUnmodifiedSince(long lastModifiedTimestamp) |
getAttribute, getAttributeNames, getRequest, getResponse, getSession, getSessionId, getSessionMutex, isImmutableSessionAttribute, registerDestructionCallback, registerSessionDestructionCallback, removeAttribute, resolveReference, setAttribute, updateAccessedSessionAttributes
isRequestActive, registerRequestDestructionCallback, removeRequestDestructionCallback, requestCompleted
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getAttribute, getAttributeNames, getSessionId, getSessionMutex, registerDestructionCallback, removeAttribute, resolveReference, setAttribute
private static final java.lang.String ETAG
private static final java.lang.String IF_MODIFIED_SINCE
private static final java.lang.String IF_UNMODIFIED_SINCE
private static final java.lang.String IF_NONE_MATCH
private static final java.lang.String LAST_MODIFIED
private static final java.util.List<java.lang.String> SAFE_METHODS
private static final java.util.regex.Pattern ETAG_HEADER_VALUE_PATTERN
private static final java.lang.String[] DATE_FORMATS
private static java.util.TimeZone GMT
private boolean notModified
public ServletWebRequest(HttpServletRequest request)
request
- current HTTP requestpublic ServletWebRequest(HttpServletRequest request, @Nullable HttpServletResponse response)
request
- current HTTP requestresponse
- current HTTP response (for automatic last-modified handling)public java.lang.Object getNativeRequest()
NativeWebRequest
getNativeRequest
in interface NativeWebRequest
javax.servlet.http.HttpServletRequest
public java.lang.Object getNativeResponse()
NativeWebRequest
getNativeResponse
in interface NativeWebRequest
javax.servlet.http.HttpServletResponse
public <T> T getNativeRequest(@Nullable java.lang.Class<T> requiredType)
NativeWebRequest
getNativeRequest
in interface NativeWebRequest
requiredType
- the desired type of request objectnull
if none
of that type is availablejavax.servlet.http.HttpServletRequest
public <T> T getNativeResponse(@Nullable java.lang.Class<T> requiredType)
NativeWebRequest
getNativeResponse
in interface NativeWebRequest
requiredType
- the desired type of response objectnull
if none
of that type is availablejavax.servlet.http.HttpServletResponse
@Nullable public HttpMethod getHttpMethod()
@Nullable public java.lang.String getHeader(java.lang.String headerName)
WebRequest
null
if none.
Retrieves the first header value in case of a multi-value header.
getHeader
in interface WebRequest
javax.servlet.http.HttpServletRequest#getHeader(String)
@Nullable public java.lang.String[] getHeaderValues(java.lang.String headerName)
WebRequest
null
if none.
A single-value header will be exposed as an array with a single element.
getHeaderValues
in interface WebRequest
javax.servlet.http.HttpServletRequest#getHeaders(String)
public java.util.Iterator<java.lang.String> getHeaderNames()
WebRequest
getHeaderNames
in interface WebRequest
javax.servlet.http.HttpServletRequest#getHeaderNames()
@Nullable public java.lang.String getParameter(java.lang.String paramName)
WebRequest
null
if none.
Retrieves the first parameter value in case of a multi-value parameter.
getParameter
in interface WebRequest
javax.servlet.http.HttpServletRequest#getParameter(String)
@Nullable public java.lang.String[] getParameterValues(java.lang.String paramName)
WebRequest
null
if none.
A single-value parameter will be exposed as an array with a single element.
getParameterValues
in interface WebRequest
javax.servlet.http.HttpServletRequest#getParameterValues(String)
public java.util.Iterator<java.lang.String> getParameterNames()
WebRequest
getParameterNames
in interface WebRequest
javax.servlet.http.HttpServletRequest#getParameterNames()
public java.util.Map<java.lang.String,java.lang.String[]> getParameterMap()
WebRequest
A single-value parameter will be exposed as an array with a single element.
getParameterMap
in interface WebRequest
javax.servlet.http.HttpServletRequest#getParameterMap()
public java.util.Locale getLocale()
WebRequest
getLocale
in interface WebRequest
javax.servlet.http.HttpServletRequest#getLocale()
public java.lang.String getContextPath()
WebRequest
getContextPath
in interface WebRequest
javax.servlet.http.HttpServletRequest#getContextPath()
@Nullable public java.lang.String getRemoteUser()
WebRequest
getRemoteUser
in interface WebRequest
javax.servlet.http.HttpServletRequest#getRemoteUser()
@Nullable public java.security.Principal getUserPrincipal()
WebRequest
getUserPrincipal
in interface WebRequest
javax.servlet.http.HttpServletRequest#getUserPrincipal()
public boolean isUserInRole(java.lang.String role)
WebRequest
isUserInRole
in interface WebRequest
javax.servlet.http.HttpServletRequest#isUserInRole(String)
public boolean isSecure()
WebRequest
isSecure
in interface WebRequest
javax.servlet.http.HttpServletRequest#isSecure()
public boolean checkNotModified(long lastModifiedTimestamp)
WebRequest
This will also transparently set the "Last-Modified" response header and HTTP status when applicable.
Typical usage:
public String myHandleMethod(WebRequest webRequest, Model model) { long lastModified = // application-specific calculation if (request.checkNotModified(lastModified)) { // shortcut exit - no further processing necessary return null; } // further request processing, actually building content model.addAttribute(...); return "myViewName"; }
This method works with conditional GET/HEAD requests, but also with conditional POST/PUT/DELETE requests.
Note: you can use either
this #checkNotModified(long)
method; or
WebRequest.checkNotModified(String)
. If you want enforce both
a strong entity tag and a Last-Modified value,
as recommended by the HTTP specification,
then you should use WebRequest.checkNotModified(String, long)
.
If the "If-Modified-Since" header is set but cannot be parsed to a date value, this method will ignore the header and proceed with setting the last-modified timestamp on the response.
checkNotModified
in interface WebRequest
lastModifiedTimestamp
- the last-modified timestamp in
milliseconds that the application determined for the underlying
resourcepublic boolean checkNotModified(java.lang.String etag)
WebRequest
ETag
(entity tag), as determined by the application.
This will also transparently set the "ETag" response header and HTTP status when applicable.
Typical usage:
public String myHandleMethod(WebRequest webRequest, Model model) { String eTag = // application-specific calculation if (request.checkNotModified(eTag)) { // shortcut exit - no further processing necessary return null; } // further request processing, actually building content model.addAttribute(...); return "myViewName"; }
Note: you can use either
this #checkNotModified(String)
method; or
WebRequest.checkNotModified(long)
. If you want enforce both
a strong entity tag and a Last-Modified value,
as recommended by the HTTP specification,
then you should use WebRequest.checkNotModified(String, long)
.
checkNotModified
in interface WebRequest
etag
- the entity tag that the application determined
for the underlying resource. This parameter will be padded
with quotes (") if necessary.public boolean checkNotModified(@Nullable java.lang.String etag, long lastModifiedTimestamp)
WebRequest
ETag
(entity tag) and last-modified timestamp,
as determined by the application.
This will also transparently set the "ETag" and "Last-Modified" response headers, and HTTP status when applicable.
Typical usage:
public String myHandleMethod(WebRequest webRequest, Model model) { String eTag = // application-specific calculation long lastModified = // application-specific calculation if (request.checkNotModified(eTag, lastModified)) { // shortcut exit - no further processing necessary return null; } // further request processing, actually building content model.addAttribute(...); return "myViewName"; }
This method works with conditional GET/HEAD requests, but also with conditional POST/PUT/DELETE requests.
Note: The HTTP specification recommends
setting both ETag and Last-Modified values, but you can also
use #checkNotModified(String)
or
WebRequest.checkNotModified(long)
.
checkNotModified
in interface WebRequest
etag
- the entity tag that the application determined
for the underlying resource. This parameter will be padded
with quotes (") if necessary.lastModifiedTimestamp
- the last-modified timestamp in
milliseconds that the application determined for the underlying
resourceprivate boolean validateIfUnmodifiedSince(long lastModifiedTimestamp)
private boolean validateIfNoneMatch(@Nullable java.lang.String etag)
private java.lang.String padEtagIfNecessary(java.lang.String etag)
private boolean validateIfModifiedSince(long lastModifiedTimestamp)
public boolean isNotModified()
private long parseDateHeader(java.lang.String headerName)
private long parseDateValue(@Nullable java.lang.String headerValue)
public java.lang.String getDescription(boolean includeClientInfo)
WebRequest
getDescription
in interface WebRequest
includeClientInfo
- whether to include client-specific
information such as session id and user namepublic java.lang.String toString()
toString
in class ServletRequestAttributes