archive 属性必须指定 jar 文件路径,因为 code 仅声明主类名,无法自动加载依赖的多个类、图片等资源;浏览器只按 archive 指定的 jar 包加载,否则抛 classnotfoundexception 或资源失败。

archive 属性在 applet 标签中用于声明 JAR 文件路径,告诉浏览器从哪里加载小程序所需的类文件和资源。
为什么必须用 archive 而不是只靠 code
仅靠 code 只能指定主类名(如 MyApplet.class),但 Java 小程序往往依赖多个类、图片、配置文件等。浏览器不会自动扫描目录去凑齐这些依赖——它只按 archive 指定的 JAR 包去加载。没写 archive,或路径错,就会报 ClassNotFoundException 或资源加载失败。
-
archive值是相对于 HTML 文件的路径,不是相对于 class 文件位置 - 可写多个 JAR,用英文逗号分隔:
archive="lib/utils.jar,applet.jar" - 如果 JAR 里有
META-INF/MANIFEST.MF,且含Class-Path条目,浏览器一般**不遵守**——别指望它自动拉取二级依赖
archive 和 codebase 的关系容易搞混
codebase 是基础 URL 前缀,archive 是它之下的相对路径(除非写成绝对 URL)。比如 codebase="http://example.com/app/" + archive="myapp.jar",实际请求的是 http://example.com/app/myapp.jar。
- 如果
archive写了完整 URL(如archive="https://cdn.example.com/myapp.jar"),codebase就被忽略 - 若两者都省略,
archive默认按当前 HTML 所在目录查找,极易 404 - HTTPS 页面加载 HTTP 的
archive会因混合内容被现代浏览器直接拦截
常见错误:JAR 包结构不对导致类找不到
即使 archive 路径正确、HTTP 返回 200,仍可能报 NoClassDefFoundError——本质是 JAR 包内部路径与 code 中的包名不匹配。
-
code值必须带完整包名,如com.example.MyApplet,对应 JAR 内路径com/example/MyApplet.class - JAR 根目录不能有多余嵌套文件夹(比如把整个
src目录打进去) - 用
jar -tf myapp.jar检查顶层结构,确认类文件路径是否符合预期 - 资源文件(如
images/icon.png)也要放在 JAR 内对应路径,用getClass().getResource("/images/icon.png")读取
Java 小程序已废弃多年,archive 在现代浏览器中完全失效;但维护遗留系统时,它的路径解析逻辑、JAR 结构约束和安全限制(如跨域、HTTPS 混合内容)仍是真实卡点。最常被忽略的是:你以为路径对了,其实是 JAR 内部结构错了,或者 codebase 暗中改写了 archive 解析结果。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











