我想创建一个Web应用程序,在OSGI框架内执行某些bundle活动的某种动画。我通过Servletbridge使用嵌入Tomcat的Equinox。我试图创建一个OSGI包,使用httpservice注册HTML页面(带有applet标签)。 OSGI包中包含一个包含applet类的包。
当我在tomcat / webapps / bridge / WEB-INF / eclipse / plugin目录中导出插件项目时,jar内容为:
META-INF
META-INF/MANIFEST.MF
name/of/packages/.class files
home.html
在此捆绑包的激活器类中,我获得了一个httpservice并将home.html文件注册为/ home。当我启动Tomcat并转到:
localhost:8080/bridge/home
页面加载,但我在applet上获得了ClassNotFoundException
,而从Jar存档打开了Applet加载的HTML页面。我怎样才能使它发挥作用?
编辑: home.html的
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<applet code="thesis.bot.wab.applet.DApplet.class" width="400" height="250"></applet>
</body>
</html>
的src / thesis.bot.wab.Activator
public class Activator implements BundleActivator {
private static boolean started=false;
HttpServiceTracker http;
public void start(BundleContext context) throws Exception {
System.out.println("started");
http = new HttpServiceTracker(context);
http.open();
started=true;
}
public void stop(BundleContext context) throws Exception {
System.out.println("stopped");
started=false;
http.close();
}
public static boolean isStarted(){
return started;
}
private class HttpServiceTracker extends ServiceTracker {
public HttpServiceTracker(BundleContext context) {
super(context, HttpService.class.getName(), null);
}
public Object addingService(ServiceReference reference) {
HttpService httpService = (HttpService) context.getService(reference);
try {
httpService.registerResources("/home", "/home.html", null);
httpService.registerServlet("/servlet", new DServlet(context), null, null);
}
catch (Exception e) {
e.printStackTrace();
}
return httpService;
}
public void removedService(ServiceReference reference, Object service) {
HttpService httpService = (HttpService) service;
httpService.unregister("/servlet"); //$NON-NLS-1$
httpService.unregister("/home");
super.removedService(reference, service);
}
}
}
编辑:我的目的是检索bundlecontext并获取有关包的信息,以便在applet中可视化它们。
答案 0 :(得分:0)
首先,您的浏览器会下载html文件。下载后,浏览器会检查html中的applet标记。它启动了一个尝试从url下载applet的JVM:
http://localhost:8080/bridge/thesis.bot.wab.applet.DApplet.class
然而,什么都没有,为什么会是什么?
您应该将类文件或完整的jar文件注册为资源。之后,您应该将applet标记插入指向jar或类文件的html文件中。如果您的applet有任何依赖项,那么也应该列出这些jar。
打开Java控制台(google for it)并按下“5”按钮以获得低级调试消息非常有用。在那里,您将看到applet无法启动的问题(下载网址,依赖性问题......)