gpt4 book ai didi

java - Applet jar是浏览器下载的还是JVM下载的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:56:58 25 4
gpt4 key购买 nike

假设我有以下简单的小程序。我想知道获取jar的http请求是浏览器发出的还是jvm发出的。如果是 jvm 做的,浏览器的 cookies 和 session 是否发送到服务器?

<APPLET 
CODE="FieldTestF.class"
WIDTH="100%" HEIGHT="90"
ARCHIVE = "FieldTestF.jar"
>
This example uses an applet.
</APPLET>

最佳答案

小程序 JAR 由 JVM 下载。所有小程序都与 URLClassloader(或子类 - Sun JVM 中的 sun.applet.AppletClassLoader)的实例相关联,该实例负责加载小程序所需的所有类和资源。

显然,加载类文件和资源所需的大部分基础结构在 Java 运行时中可用,并且重复使用它们将使 Java 插件在大多数情况下不必担心访问浏览器内部结构。

我将在此处重现执行此 Activity 的 OpenJDK 代码库的重要部分。您会在 sun.applet.AppletPanelrunLoader() 方法中找到有趣的东西:

/**
* Load the applet into memory.
* Runs in a seperate (and interruptible) thread from the rest of the
* applet event processing so that it can be gracefully interrupted from
* things like HotJava.
*/
private void runLoader() {
if (status != APPLET_DISPOSE) {
showAppletStatus("notdisposed");
return;
}

dispatchAppletEvent(APPLET_LOADING, null);

// REMIND -- might be cool to visually indicate loading here --
// maybe do animation?
status = APPLET_LOAD;

// Create a class loader
loader = getClassLoader(getCodeBase(), getClassLoaderCacheKey());

// Load the archives if present.
// REMIND - this probably should be done in a separate thread,
// or at least the additional archives (epll).

String code = getCode();

// setup applet AppContext
// this must be called before loadJarFiles
setupAppletAppContext();

try {
loadJarFiles(loader); // <-- this is what loads the JAR files
applet = createApplet(loader);
...

此外,让浏览器获取资源会使 Java 安全模型的问题复杂化。这在一定程度上是由于小应用程序使用它们自己的 AccessControlContext,这是为它们设置的。这个上下文有一组默认的权限,这些权限是在小程序初始化时添加的;该集合包括 SocketPermission 以连接到托管代码库的服务器,或 FilePermission 允许对包含代码库的文件系统进行读取访问。如果资源加载是由浏览器完成的,那么根据插件的实现方式,可能根本不会执行检查,从而导致安全模型可能崩溃。

您可以通过查看网络流量来确认 JVM 的资源加载行为,如其他答案中所示。我将发布 Fiddler 的屏幕截图作为确认。进程列指示哪个操作系统进程负责发送请求(在本例中它恰好是 Java 应用程序启动器 java.exe)。很抱歉图像质量明显不佳 - 您需要调整图像大小或在新窗口中打开它。

Fiddler capture of Applet download

关于java - Applet jar是浏览器下载的还是JVM下载的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6475838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com