public abstract class Resource extends ViewResource
An instance
of Resource
is a Java object representation of the artifact that is served up in
response to a resource request from the client. Instances of Resource
are
normally created and initialized via calls to ResourceHandler.createResource(java.lang.String)
. See the
documentation for ResourceHandler
for more information.
Modifier and Type | Field and Description |
---|---|
static String |
COMPONENT_RESOURCE_KEY
This constant is used as the key in the component attribute map of a composite component to
associate the component with its |
Constructor and Description |
---|
Resource() |
Modifier and Type | Method and Description |
---|---|
String |
getContentType()
Return the MIME content-type for this resource. |
abstract InputStream |
getInputStream()
If the current request is a resource request, (that
is, |
String |
getLibraryName()
Return the libraryName for this resource. |
abstract 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. |
String |
getResourceName()
Return the resourceName for this resource. |
abstract Map<String,String> |
getResponseHeaders()
Returns a mutable |
abstract URL |
getURL()
Return an actual |
void |
setContentType(String contentType)
Set the MIME content-type for this resource. |
void |
setLibraryName(String libraryName)
Set the libraryName for this resource. |
void |
setResourceName(String resourceName)
Set the resourceName for this resource. |
String |
toString()
Call through to |
abstract boolean |
userAgentNeedsUpdate(FacesContext context)
Return |
public static final String COMPONENT_RESOURCE_KEY
This constant is used as the key in the component attribute map of a composite component to
associate the component with its Resource
instance. The value for this key is
the actual Resource
instance.
public String getContentType()
Return the MIME content-type for this resource.
public void setContentType(String contentType)
Set the MIME content-type for this resource. The default implementation performs no validation on the argument.
contentType
- the MIME content-type for this resource. The default implementation must
accept null
as a parameter.public String getLibraryName()
Return the libraryName for this resource. May be null
. The libraryName for a
resource is an optional String that indicates membership in a "resource library". All
resources with the same libraryName belong to the same "resource library". The "resource
library" concept allows disambiguating resources that have the same resourceName. See
ResourceHandler
for more information.
null
.public void setLibraryName(String libraryName)
Set the libraryName for this resource.
libraryName
- the libraryName for this resource. The default implementation must accept
null
for the libraryName.public String getResourceName()
Return the resourceName for this resource. Will never be null. All Resource
instances must have a resourceName.
public void setResourceName(String resourceName)
Set the resourceName for this resource.
resourceName
- a non-null String.NullPointerException
- if argument resourceName
is null.public abstract InputStream getInputStream() throws IOException
If the current request is a resource request, (that
is, ResourceHandler.isResourceRequest(javax.faces.context.FacesContext)
returns true
), return an
InputStream
containing the bytes of the resource. Otherwise, throw an
IOException
.
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.
IOException
- if the current request is not a resource request.public abstract Map<String,String> getResponseHeaders()
Returns a mutable Map<String, String>
whose entries will be sent as
response headers during ResourceHandler.handleResourceRequest(javax.faces.context.FacesContext)
. The entries in this
map must not persist beyond the scope of a single request. Any modifications made to the map
after the resource has been served will be ignored by the run-time.
Map<String, String>
of headers that will be included
with the response.public abstract 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.
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
+
getResourceName()
result = contextRoot +
ResourceHandler.RESOURCE_IDENTIFIER
+getResourceName()
If exact mapped, and the FacesServlet is not mapped to the exact URL pattern
ResourceHandler.RESOURCE_IDENTIFIER
+ 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 an IllegalStateException
. 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 mapped
If prefix mapped, result must be
result = contextRoot + '/' + facesServletMapping +
ResourceHandler.RESOURCE_IDENTIFIER
+ '/' +getResourceName()
If extension mapped, result must be
result = contextRoot +
ResourceHandler.RESOURCE_IDENTIFIER
+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
getLibraryName()
returns non-null
,resourceMetaData
must include "ln=" + the return fromgetLibraryName()
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(javax.faces.context.FacesContext, java.lang.String)
.
public abstract URL getURL()
Return an actual URL
instance that refers to this resource instance.
getURL
in class ViewResource
URL
instance that refers to this resource instance.public String toString()
Call through to getRequestPath()
and return the result.
toString
in class Object
getRequestPath()
and return the result.public abstract boolean userAgentNeedsUpdate(FacesContext context)
Return true
if the user-agent
requesting this resource needs an update. If the
If-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.
Returns false
if the user-agent does not need an update for this resource.
context
- the Faces context.true
or false
depending on whether or not the user-agent
needs an update of this resource.Copyright © 2019 Eclipse Foundation.
Use is subject to license terms.