Web App文件夹下的Java Applet,ClassNotFoundException

时间:2011-12-21 15:39:29

标签: java php deployment applet

首先,我将Applet嵌入到带有APPLET标记的页面中,如下所示:

<APPLET code="MyApplet.class" codebase="/" align="baseline"
    width="200" height="200">
    Your browser does not support Java Applets.
</APPLET>

applet类文件位于与PHP页面相同的文件夹中的Web根目录中。

现在我将类文件从网上移到了上面的文件夹,我试着像这样更改代码:

code = "../MyApplet.class"

但这似乎导致applet认为该类被称为“... MyApplet.class”

然后我改回来并改变了代码库,而不是这样:

code = "MyApplet.class"codebase = "../"

但是这仍然给了我ClassNotFoundException。

我认为applet是客户端的,所以现在我认为不可能将applet类文件保留在公共域之外,因为它们需要下载到客户端?

任何人都可以为我确认这个,或者如果我错了,请告诉我如何正确地设置相对路径?

感谢。

2 个答案:

答案 0 :(得分:1)

是的,applet类通过applet插件下载到您的Web浏览器,使用它构建的URL作为页面URL和代码库的串联。由于URL不支持..(它是文件路径表示法)等表示法,因此在配置applet时无法使用它。

答案 1 :(得分:1)

从另一个答案..

  

网址不支持..

等表示法

当然可以!

import java.io.File;
import java.net.URL;

class WhereIsMyGrandParent {
    public static void main(String[] args) throws Exception {
        File f = new File("WhereIsMyGrandParent.java");

        URL url = f.toURI().toURL();

        URL parent = new URL(url, "..");
        System.out.println("grand parent: " + parent);
    }
}

真正的问题在于误解了这些参数的用途以及如何使用这些参数/它们的意思。

code="MyApplet.class" codebase="/"

1)代码属性应该是类的完全限定名称。所以正确的例子可能是

code="MyApplet"

..或

code="com.our.MyApplet"

2) codebase /转换为“域的根”。例如。 http://our.com/applets/stockapplet/applet.html上的小程序可能会形成/的网址,并指向http://our.com/。请特别注意,从域的根目录中不存在..(父)。


我不完全了解服务器的结构

的位置
  1. applet HTML
  2. 小程序代码
  3. 请考虑为每个或更好的嵌套列表的位置提供显式(或相对)URL。 E.G。

    • /
      • code
        • MyApplet.class
      • applet
        • applet.html