Extending the Apache Felix Web Console with new functionality is as easy as registering a
javax.servlet.Servlet with at least the
felix.webconsole.label service registration property set (see above). Providing resources is a bit more complex and requires more work on behalf of the plugin.
Out of the box the Apache Felix Web Console plugin servces resources through the OSGi
HttpContext used to register the web console with OSGi
HttpService. This is done by registering resources with the
HttpService below the
/res alias. This mechanism though does not lend itself for easy extensibility. Therefore another mechanism has been chosen, which relies on similar mechanisms.
A web console plugin may implement a
getResource method which is looked up using reflection. This method is called by the
AbstractWebConsole.doGet to check whether the request is actually for a resource.
The method has the following signature:
modifier URL getResource(String path);
Where the modifier may be
private (if the method is declared in the class of the resource provider). It is suggested to use the
private modifier if the method is declared in the resource provider class or the
protected modifier if the method is declared in a base class of the resource provider.
This method is called with the path info of the request (
HttpServletRequest.getPathInfo()) and expects and URL to the resource to be sent to the client. If the path cannot be resolved to a resource the
getResource method is expected to return
null thus causing regular processing of rendering the page.
getResource method returns an accessible non-
null URL, the request is serviced by sending back the contents of the given URL. Simple caching support is included which handles the
If-Modified-Since header and sets the
Last-Modified header from the resource URL.