使工作成为osgi包中的applet

时间:2013-10-14 17:13:34

标签: applet osgi

我想创建一个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中可视化它们。

1 个答案:

答案 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无法启动的问题(下载网址,依赖性问题......)