Загрузка классов Java из подписанного апплета

Если я использую подписанный Java-апплет, могу ли я загрузить дополнительные классы из удаленных источников (в том же домене, может быть, даже на том же хосте) и запустить их?

Я хотел бы сделать это, не меняя страницы и даже не останавливая текущий апплет. Конечно, общий размер всех классов слишком велик, чтобы загружать их все сразу.

Есть ли способ сделать это? И есть ли способ сделать это с подписанными апплетами и сохранить их статус "доверия"?

3 ответа

Решение

Я думаю, что классы лениво загружены в апплеты. загружается по требованию.

В любом случае, если классы находятся за пределами jar, вы можете просто использовать загрузчик классов апплета и загружать их по имени. Пример:

ClassLoader loader = this.getClass().getClassLoader();
Class clazz = loader.loadClass("acme.AppletAddon");

Если вы хотите загрузить классы из фляги, я думаю, вам нужно будет создать новый экземпляр URLClassLoader с URL-адресом фляг (ов).

URL[] urls = new URL[]{new URL("http://localhost:8080/addon.jar")};
URLClassLoader loader = URLClassLoader.newInstance(urls,this.getClass().getClassLoader());
Class clazz = loader.loadClass("acme.AppletAddon");

По умолчанию апплетам запрещено создавать новые загрузчики классов. Но если вы подпишете свой апплет и включите разрешение на создание новых загрузчиков классов, вы можете это сделать.

Да, вы можете открыть URL-соединения с хостом, с которого вы запустили апплет. Вы можете создать загрузчик классов с HTTP-URL или загрузить классы (в виде jar-файлов) на компьютер пользователя и создать загрузчик классов с этими jar-файлами в пути к классам. Апплет не остановится, и вам не нужно загружать другую страницу.

Что касается второй части вашего вопроса о конфиденциальности, когда пользователь предоставит доступ к вашему апплету, он может загрузить все, что угодно, на свою локальную машину. Вы, вероятно, можете сообщить пользователю, что он делает, если ваш дизайн пользовательского интерфейса позволяет это.

Надеюсь это поможет.

Похоже, это должно быть возможно (но я никогда не делал это). Вы уже взглянули на удаленный вызов метода ( RMI)?

Другие вопросы по тегам