注册web应用请参考如下实例程序:
package testweb.internal;
import javax.servlet.Servlet;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceEvent;
import org.osgi.framework.ServiceListener;
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.HttpService;
/**
* Extension of the default OSGi bundle activator
*/
public final class ExampleActivator implements BundleActivator, ServiceListener {
private BundleContext bundleContext;
private ServiceReference ref;
private Servlet servlet;
public void start(BundleContext context) throws Exception {
bundleContext = context;
servlet = new QueryWebServlet(bundleContext);
// 在HttpService中注册Servlet
registerServlet();
}
public void stop(BundleContext context) throws Exception {
try {
unregisterServlet();
} catch (Throwable t) {
t.printStackTrace();
}
servlet = null;
bundleContext = null;
ref = null;
}
public void serviceChanged(ServiceEvent event) {
switch (event.getType()) {
case ServiceEvent.REGISTERED:
registerServlet();
break;
case ServiceEvent.UNREGISTERING:
unregisterServlet();
break;
}
}
/*
* 注册Web应用
*/
private void registerServlet() {
if (ref == null) {
ref = bundleContext
.getServiceReference(HttpService.class.getName());
}
if (ref != null) {
try {
HttpService http = (HttpService) bundleContext.getService(ref);
if (null != http) {
// 注册动态资源Servlet
http.registerServlet("/osgi/servlet", servlet, null, null);
// 注册静态资源HTML
http.registerResources("/osgi/file", "webapp", null);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/*
* 卸载Web应用
*/
private void unregisterServlet() {
if (ref != null) {
try {
HttpService http = (HttpService) bundleContext.getService(ref);
if (null != http) {
http.unregister("/osgi/servlet");
http.unregister("/osgi/file");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
更详尽的内容请参考其他相关OSGI资料。