Thanks to both Felix and Bertrand, servlets and filters are both now
working.
Now, I'm moving on to deploying sitemesh as a filter. An initial
challenge is that SiteMesh attempts to load configuration files using
the ServletContext, which doesn't seem to search the bundle that
loaded the filter. Is there a way to register search paths for the
shared ServletContext? Otherwise I'll look into hacking SiteMesh to
use alternative configuration methods.
Thanks,
Andreas
On May 7, 2009, at 3:02 AM, Felix Meschberger wrote:
Hi,
Andreas Kollegger schrieb:
With the current "Servlet Resolution" wiki page out-of-sync, does
anyone
have a bare-bones example of registering a servlet and/or filter with
the Sling framework? It looks like a bundle just has to register a
javax.servlet.Servlet service with the proper sling properties for
it to
get picked up. I've tried a simple OSGi Activator, but can't seem
to get
it to work.
Example BundleActivator.start...
public void start( BundleContext bc )
throws Exception
{
Dictionary props = new Properties();
props.put("sling.servlet.paths", "/myservlet/html, /myservlet/
txt");
bc.registerService( javax.servlet.Servlet.class.getName(), new
MyServlet(), props );
}
This is almost correct. The property value is either a single string
or
an array of strings. So your example should really be:
props.put("sling.servlet.paths",
new String[]{ "/myservlet/html", "/myservlet/txt" });
But since you registered with absolute paths, the resource types must
also be absolute. Thus your example (with the fix for the property
value) should work for .html and .txt requests to resources whose
resource type "/myservlet".
If your resource types are relative -- e.g. "myservlet" -- you should
register with relative paths as in :
props.put("sling.servlet.paths",
new String[]{ "myservlet/html", "myservlet/txt" });
or better yet to register with two properties, one for the resource
type
and for the extensions supported:
props.put("sling.servlet.resourceTypes", "myservlet");
props.put("sling.servlet.extensions", new String[]{"html","txt"});
HTH
Regards
Felix
Thanks for any guidance,
Andreas