Class ResourceImpl
- All Implemented Interfaces:
Externalizable
,Serializable
public class ResourceImpl extends Resource implements Externalizable
Resource
. The ResourceImpl instance itself has the same
lifespan as the request, however, the ResourceInfo instances that back this object are cached by the ResourceManager
to reduce the time spent scanning for resources.- See Also:
- Serialized Form
-
Field Summary
-
Constructor Summary
Constructors Constructor Description ResourceImpl()
Necessary for serialization.ResourceImpl(ResourceInfo resourceInfo, String contentType, long initialTime, long maxAge)
Creates a new instance of ResourceBase -
Method Summary
Modifier and Type Method Description boolean
equals(Object o)
InputStream
getInputStream()
If the current request is a resource request, (that is,ResourceHandler.isResourceRequest(jakarta.faces.context.FacesContext)
returnstrue
), return anInputStream
containing the bytes of the resource.String
getRequestPath()
Return a path to this resource such that, when the browser resolves it against the base URI for the view that includes the resource, and issues a GET request to the resultant fully qualified URL, the bytes of the resource are returned in response.Map<String,String>
getResponseHeaders()
Implementation note.URL
getURL()
Return an actualURL
instance that refers to this resource instance.int
hashCode()
void
readExternal(ObjectInput in)
boolean
userAgentNeedsUpdate(FacesContext context)
Returntrue
if the user-agent requesting this resource needs an update.void
writeExternal(ObjectOutput out)
Methods inherited from class jakarta.faces.application.Resource
getContentType, getLibraryName, getResourceName, setContentType, setLibraryName, setResourceName, toString
-
Constructor Details
-
ResourceImpl
public ResourceImpl()Necessary for serialization. -
ResourceImpl
Creates a new instance of ResourceBase
-
-
Method Details
-
equals
-
hashCode
public int hashCode() -
getInputStream
Description copied from class:Resource
If the current request is a resource request, (that is,
ResourceHandler.isResourceRequest(jakarta.faces.context.FacesContext)
returnstrue
), return anInputStream
containing the bytes of the resource. Otherwise, throw anIOException
.- Specified by:
getInputStream
in classResource
- Returns:
- an
InputStream
containing the bytes of the resource.Any Jakarta Expression Language expressions present in the resource must be evaluated before serving the bytes of the resource. Note that due to browser and server caching, Jakarta Expression Language expressions in a resource file will generally only be evaluated once, when the resource is first served up. Therefore, using Jakarta Expression Language expressions that refer to per-request data is not advisable since this data can become stale.
- Throws:
IOException
- if the current request is not a resource request.- See Also:
Resource.getInputStream()
-
getURL
Description copied from class:Resource
Return an actual
URL
instance that refers to this resource instance.- Specified by:
getURL
in classResource
- Returns:
- Return an actual
URL
instance that refers to this resource instance. - See Also:
Resource.getURL()
-
getResponseHeaders
Implementation note. Any values added to getResponseHeaders() will only be visible across multiple calls to this method when servicing a resource request (i.e.
ResourceHandler.isResourceRequest(jakarta.faces.context.FacesContext)
returnstrue
). If we're not servicing a resource request, an empty Map will be returned and the values added are effectively thrown away.- Specified by:
getResponseHeaders
in classResource
- Returns:
- a mutable
Map<String, String>
of headers that will be included with the response. - See Also:
Resource.getResponseHeaders()
-
getRequestPath
Description copied from class:Resource
Return a path to this resource such that, when the browser resolves it against the base URI for the view that includes the resource, and issues a GET request to the resultant fully qualified URL, the bytes of the resource are returned in response.
The default implementation must implement the following algorithm. For discussion, the return result from this method will be called result.
-
Get the context-root for this web application, not ending in slash. For discussion this will be called contextRoot.
-
Discover if the
FacesServlet
is prefix (path) mapped, extension mapped, or exact mapped (as defined by Servlet.12.2.) and the value of the mapping (including the leading '.' in the case of extension mapping). For discussion, this will be facesServletMapping.If exact mapped, result must be the following if and only if the FacesServlet is mapped to the exact URL pattern
ResourceHandler.RESOURCE_IDENTIFIER
+Resource.getResourceName()
result = contextRoot +
ResourceHandler.RESOURCE_IDENTIFIER
+Resource.getResourceName()
If exact mapped, and the FacesServlet is not mapped to the exact URL pattern
ResourceHandler.RESOURCE_IDENTIFIER
+Resource.getResourceName()
do the following:Retrieve the existing mappings of the FacesServlet, e.g. using
ServletRegistration.getMappings()
, and from those pick any prefix mapping or extension mapping. If no such mapping is found, throw anIllegalStateException
. If such mapping is found remove the*
character from that mapping, take that as the new facesServletMapping and continue with evaluating this mapping as specified below for if prefix mapped and for if extension mappedIf prefix mapped, result must be
result = contextRoot + '/' + facesServletMapping +
ResourceHandler.RESOURCE_IDENTIFIER
+ '/' +Resource.getResourceName()
If extension mapped, result must be
result = contextRoot +
ResourceHandler.RESOURCE_IDENTIFIER
+Resource.getResourceName()
+ facesServletMapping -
Build up a string, called resourceMetaData which is an & separated string of name=value pairs suitable for inclusion in a URL query string.
If
Resource.getLibraryName()
returns non-null
,resourceMetaData
must include "ln=" + the return fromResource.getLibraryName()
If there is a
localePrefix
for this application, as defined inResourceHandler.LOCALE_PREFIX
,resourceMetaData
must include "loc=" + thelocalePrefix
.If this resource is contained in a resource library contract,
resourceMetaData
must include "con=" + the name of the resource library contract.Append "?" + resourceMetaData to result.
-
Make it portlet safe by passing the result through
ViewHandler.getResourceURL(jakarta.faces.context.FacesContext, java.lang.String)
.
- Specified by:
getRequestPath
in classResource
- Returns:
- the path to this resource, intended to be included in the encoded view that is sent to the browser when sending a faces response.
- See Also:
Resource.getRequestPath()
-
-
userAgentNeedsUpdate
Description copied from class:Resource
Return
true
if the user-agent requesting this resource needs an update. If theIf-Modified-Since
HTTP header is available for this request, its value must be consulted, as specified in Section 14.25 of IETF RFC 2616, to determine the result. Returnsfalse
if the user-agent does not need an update for this resource.- Specified by:
userAgentNeedsUpdate
in classResource
- Parameters:
context
- the Faces context.- Returns:
true
orfalse
depending on whether or not the user-agent needs an update of this resource.- See Also:
Resource.userAgentNeedsUpdate(jakarta.faces.context.FacesContext)
-
writeExternal
- Specified by:
writeExternal
in interfaceExternalizable
- Throws:
IOException
-
readExternal
- Specified by:
readExternal
in interfaceExternalizable
- Throws:
IOException
ClassNotFoundException
-