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:
Where the modifier may be public, protected, or 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.
If the 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.