public interface Context
Context
interface is used to give a view of the
file system to the ResourceEngine
. This provides the
information to the ResourceEngine
that it needs in
order to serve content to the client browser. This provides the
path translations for the HTTP request URI.
This object essentially provides a mechanism that allows the file
engine to convert the HTTP request URI into OS system paths and
system objects such as the File
object. A context
is rooted a a certain directory in the system. This directory is
where the resources are gathered from. For example suppose that
a Context
implementation is rooted at the directory
"c:\web\html\" on a DOS system. Now if the target of the browser
was "http://some.host/web/pub/README". The context needs to be
consulted to convert "/web/pub/README" into the real path within
the system. So Context.getRealPath
is invoked with
the path "/web/pub/README", which responds with the system path
"c:\web\html\web\pub\README". Also if this was a UNIX system
with the same context rooted at "/home/user/html" then the same
URL would result in "/home/user/html/web/pub/README".
The meaning of HTTP URI in this instance is the request URI from a HTTP/x.x request, as RFC 2616 and RFC 2396 defines it
Request-Line = Method SP Request-URI SP HTTP-Version CRLF Request-URI = "*" | absoluteURI | abs_path | authority absoluteURI = "http:" "//" host [":" port] [abs_path ["?" query]] abs_path = "/" path_segments path_segments = segment *( "/" segment )So the
Context
object must be prepared to accept
the request URI that come in the form outlined above. These can
include formats like
http://some.host/pub;param=value/bin/index.html?name=value http://some.host:8080/index.en_US.html some.host:8080/index.html /usr/bin;param=value/README.txt /usr/bin/compress.tar.gzThe
Context
implementation should be able to
directly take a Request-URI as defined in RFC 2616 and translate
this into a path compatible with the OS specific file system.
This keeps the objects semantics simple and explicit, although
at the expense of performance.AddressParser
,
PathParser
Modifier and Type | Method and Description |
---|---|
java.lang.String |
getBasePath()
This is used to retrieve the base path of the context.
|
java.lang.String |
getContentType(java.lang.String target)
This method will extract the type attribute of this URI.
|
java.io.File |
getDirectory(java.lang.String target)
This is used to translate the HTTP request URI into the
File object that it represent the parent directory
of the URI. |
java.io.File |
getFile(java.lang.String target)
This is used to translate the HTTP request URI into the
File object that it represents. |
Index |
getIndex(java.lang.String target)
This is an all in one method that allows all the information
on the target URI to be gathered at once.
|
java.lang.String |
getName(java.lang.String target)
This will parse and return the file name that this request URI
references.
|
Path |
getPath(java.lang.String target)
This is used to translate the HTTP request URI into the
Path object that it represents. |
java.lang.String |
getRealPath(java.lang.String target)
This is used to translate the HTTP request URI into the OS
specific path that it represents.
|
java.lang.String |
getRequestPath(java.lang.String target)
This is used to translate the HTTP request URI into the URI
path normalized and without query or parameter parts.
|
java.lang.String getBasePath()
ResourceEngine
to map the URIs
onto the specific OS. The base path is the OS file system
specific path. So on UNIX it could be "/home/user/" and
on a DOS system it could be "c:\web\html" for example.java.lang.String getRealPath(java.lang.String target)
target
- this is the HTTP request URI path that is to
be translated into the OS specific pathjava.lang.String getRequestPath(java.lang.String target)
target
- this is the HTTP request URI that is to be
converted into a normalized relative URI pathPath getPath(java.lang.String target)
Path
object that it represents. This enables the
HTTP request URI to be examined thoroughly an allows various
other files to be examined relative to it. For example if the
URI referenced a path "/usr/bin/file" and some resource
in the same directory is required then the Path
can be used to acquire the relative path. This is useful if
links within a HTML page are to be dynamically generated. The
Path.getRelative
provides this functionality.target
- this is the HTTP request URI path that is used
to retrieve the Path
objectPath
for the given pathjava.io.File getFile(java.lang.String target)
File
object that it represents. This will convert
the URI to a format that the system can use and then create
the File
object for that path. So if for example
the context path was "c:\path" on a DOS system and the HTTP
URI given was "/index.html" this returns the File
"c:\path\index.html". This is basically for convenience as the
same could be achieved using the getRealPath
and
then creating the File
from that OS specific path.target
- this is the HTTP request URI path that is used
to retrieve the File
objectFile
for the given pathjava.io.File getDirectory(java.lang.String target)
File
object that it represent the parent directory
of the URI. This will convert the URI to a format that the host
system can use and then create the File
object for
that path. So if for example the context path was "c:\path" on
a DOS system and the HTTP URI given was "/index.html" this
returns the File
"c:\path\". This is basically
for convenience as the same could be achieved using the file
retrieved from getFile
and acquiring the parent.target
- this is the HTTP request URI path that is used
to retrieve the File
objectFile
for the directoryjava.lang.String getContentType(java.lang.String target)
Context
is the last path
segment is the token defined by RFC 2396 as path_segments. So
for example if the target was "some.host:8080/bin/index.html"
then the name for that resource would be "index.html". Once
the name has been extracted the MIME is defined by the file
extension which, for the example is text/html.
Implementations of the Context
may also choose to
implement a method that consults the underlying resource and
inspect its contents to determine its MIME type. Or for a MAC
it may contain its MIME type. If the MIME type cannot be found
by any of the above methods RFC 2616 suggests that the resource
be given the MIME type application/octetstream. This should also
make not predictions as to how the file will be served.
target
- the request URI to be parsed for its typejava.lang.String getName(java.lang.String target)
Context
is the last
path segment is the token defined by RFC 2396 as path_segments.
So for example if the target was "some.host:8080/home/user/"
then the name for that resource would be "user". If the path
references the root path "/" then null should be returned.target
- the request URI to be parsed for its nameIndex getIndex(java.lang.String target)
ResourceEngine
when the Context
implementation is synchronized.
This will enable the ResourceEngine
to gather the
information on the target by acquiring the lock for the object
instance only once.target
- this is the request URI that is to be parsed