stringtranslate.com

Java-апплет

Апплет Java, созданный как дополнительный демонстрационный материал для научной публикации.
Апплет Java, который использует аппаратное 3D-ускорение для визуализации 3D-файлов в формате .pdb, загруженных с сервера [1]
Использование апплета для нетривиальной анимации, иллюстрирующей биофизическую тему (беспорядочно движущиеся ионы проходят через затворы напряжения) [2]
Использование Java-апплета для вычислений – интенсивная визуализация множества Мандельброта [3]
Скорость работы апплетов достаточна для создания, например, нетривиальных компьютерных игр, в которых играют в шахматы . [4]
NASA World Wind (с открытым исходным кодом) — это апплет второго поколения [5] , который активно использует OpenGL и загрузку данных по запросу для предоставления подробной трехмерной карты мира.
Веб- доступ к консоли сервера на аппаратном уровне с помощью Java-апплета
Демонстрация обработки изображений с использованием двумерного преобразования Фурье

Апплеты Java — это небольшие приложения, написанные на языке программирования Java или другом языке программирования , которые компилируются в байт-код Java и предоставляются пользователям в виде байт-кода Java .

На момент их появления, предполагаемое использование состояло в том, чтобы пользователь запускал апплет с веб-страницы , а затем апплет выполнялся в виртуальной машине Java (JVM) в процессе , отдельном от самого веб-браузера . Апплет Java мог появляться в фрейме веб-страницы, новом окне приложения, программе от Sun под названием appletviewer [6] или в качестве автономного инструмента для тестирования апплетов. [ требуется пояснение ]

Java-апплеты были введены в первой версии языка Java, которая была выпущена в 1995 году. Начиная с 2013 года основные веб-браузеры начали постепенно отказываться от поддержки NPAPI , базовой технологии, используемой для запуска апплетов. апплеты стали полностью неработоспособными к 2015–2017 годам. Java-апплеты были объявлены устаревшими в Java 9 в 2017 году. [7] [8] [9] [10] [11]

Апплеты Java обычно писались на Java, но также могли использоваться и другие языки, такие как Jython , JRuby , Pascal , [12] Scala , NetRexx или Eiffel (через SmartEiffel ).

Java-апплеты работают на очень высоких скоростях [ требуется цитата ] и до 2011 года они были во много раз быстрее JavaScript . [13] В отличие от JavaScript, Java-апплеты имели доступ к 3D- аппаратному ускорению , что делало их хорошо подходящими для нетривиальных, ресурсоемких визуализаций. Поскольку браузеры получили поддержку аппаратно-ускоренной графики благодаря технологии Canvas (или, в частности, WebGL в случае 3D-графики), [14] [15] а также JavaScript, скомпилированному «на лету» , [16] разница в скорости стала менее заметной. [ требуется цитата ]

Поскольку байт-код Java является кроссплатформенным (или платформенно-независимым), апплеты Java могут выполняться клиентами для многих платформ, включая Microsoft Windows , FreeBSD , Unix , macOS и Linux . Их нельзя запустить на мобильных устройствах, которые не поддерживают запуск стандартного байт-кода Oracle JVM. Устройства Android могут запускать код, написанный на Java, скомпилированный для Android Runtime .

Обзор

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

Апплет также может быть только текстовой областью; предоставляя, например, кроссплатформенный интерфейс командной строки для некоторой удаленной системы. При необходимости апплет может покинуть выделенную область и запуститься как отдельное окно. Однако апплеты имеют очень небольшой контроль над содержимым веб-страницы за пределами выделенной области апплета, поэтому они менее полезны для улучшения внешнего вида сайта в целом, в отличие от других типов расширений браузера (хотя известны также апплеты, такие как новостные ленты или редакторы WYSIWYG ). Апплеты также могут воспроизводить медиа в форматах, которые изначально не поддерживаются браузером.

Страницы, закодированные в HTML, могут встраивать в себя параметры, которые передаются апплету. Из-за этого один и тот же апплет может иметь разный вид в зависимости от переданных параметров.

Поскольку апплеты были доступны до HTML5 , современные CSS и JavaScript интерфейс DOM были стандартными, они также широко использовались для тривиальных эффектов, таких как наведение мыши и кнопки навигации. Этот подход, который создавал серьезные проблемы для доступности и неправильного использования системных ресурсов, больше не используется и настоятельно не рекомендовался даже в то время.

Техническая информация

Большинство браузеров запускали Java-апплеты в изолированной среде , не позволяя апплетам получать доступ к локальным данным, таким как файловая система . [17] Код апплета загружался с веб-сервера , после чего браузер либо встраивал апплет в веб-страницу, либо открывал новое окно, отображающее пользовательский интерфейс апплета .

Первые реализации включали загрузку класса апплета за классом. Хотя классы представляют собой небольшие файлы, их часто бывает много, поэтому апплеты получили репутацию медленно загружаемых компонентов. Однако с тех пор, как .jarпоявились файлы, апплет обычно поставляется как один файл, имеющий размер, аналогичный файлу изображения (сотни килобайт до нескольких мегабайт).

Системные библиотеки и среды выполнения Java имеют обратную совместимость, что позволяет писать код, который будет работать как в текущих, так и в будущих версиях виртуальной машины Java.

Похожие технологии

Многие разработчики Java, блоги и журналы рекомендовали использовать технологию Java Web Start вместо апплетов. [18] Java Web Start позволял запускать немодифицированный код апплета, который затем запускался в отдельном окне (не внутри вызывающего браузера).

Иногда сервлет Java неформально сравнивают с серверным апплетом, но он отличается языком, функциями и каждой из описанных здесь характеристик апплетов.

Встраивание в веб-страницу

Апплет будет отображаться на веб-странице с использованием устаревшего appletэлемента HTML [19] или рекомендуемого objectэлемента. [20] Элемент embedможет использоваться [21] с браузерами семейства Mozilla ( embedбыл устаревшим в HTML 4, но включен в HTML 5). Он указывает источник и местоположение апплета. Оба тега objectи embedмогут также загружать и устанавливать виртуальную машину Java (если требуется) или, по крайней мере, вести на страницу плагина. Теги appletи objectтакже поддерживают загрузку сериализованных апплетов, которые запускаются в некотором определенном (а не начальном) состоянии. Теги также указывают сообщение, которое отображается вместо апплета, если браузер не может запустить его по какой-либо причине.

Однако, несмотря на то, objectчто в 2010 году он был официально рекомендован, поддержка тега objectеще не была согласованной среди браузеров, и Sun продолжала рекомендовать старый appletтег для развертывания в многобраузерных средах, [22] поскольку он оставался единственным тегом, постоянно поддерживаемым наиболее популярными браузерами. Для поддержки нескольких браузеров использование objectтега для встраивания апплета потребовало бы JavaScript (который распознает браузер и настраивает тег), использование дополнительных тегов, специфичных для браузера, или доставку адаптированного вывода со стороны сервера.

Плагин браузера Java полагался на NPAPI , который почти все поставщики веб-браузеров прекратили поддерживать или не реализуют из-за его возраста и проблем безопасности. В январе 2016 года Oracle объявила, что среды выполнения Java на основе JDK 9 прекратят поддержку плагина браузера. [23]

Преимущества

Апплет Java может иметь любое или все из следующих преимуществ: [24]

Недостатки

Java-апплеты имели следующие недостатки по сравнению с другими клиентскими веб-технологиями:

Судебные иски, связанные с совместимостью

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

1997: Sun против Microsoft

Иск 1997 года [26] был подан после того, как Microsoft создала собственную модифицированную виртуальную машину Java , которая поставлялась с Internet Explorer. Microsoft добавила около 50 методов и 50 полей [26] в классы в пакетах java.awt, java.lang и java.io. Другие изменения включали удаление возможности RMI и замену Java Native Interface с JNI на RNI , другой стандарт. RMI был удален, потому что он легко поддерживает только коммуникации Java-Java и конкурирует с технологией Microsoft DCOM . Апплеты, которые полагались на эти изменения или просто непреднамеренно использовали их, работали только в системе Java от Microsoft. Sun подала в суд за нарушение товарного знака , поскольку смысл Java заключался в том, что не должно быть никаких фирменных расширений, а код должен работать везде. Microsoft согласилась выплатить Sun 20 миллионов долларов, а Sun согласилась предоставить Microsoft ограниченную лицензию на использование Java без модификаций только в течение ограниченного времени. [27]

2002: Sun против Microsoft

Microsoft продолжала поставлять свою собственную немодифицированную виртуальную машину Java. С течением лет она сильно устарела, но все еще использовалась по умолчанию для Internet Explorer. Более позднее исследование показало, что апплеты того времени часто содержат собственные классы, которые в ограниченной степени отражают Swing и другие новые функции. [28] В 2002 году Sun подала антимонопольный иск, утверждая, что попытки Microsoft незаконной монополизации нанесли ущерб платформе Java. Sun потребовала от Microsoft распространить текущую двоичную реализацию технологии Java от Sun как часть Windows, распространить ее как рекомендуемое обновление для старых настольных операционных систем Microsoft и прекратить распространение виртуальной машины Microsoft (поскольку срок ее лицензирования, согласованный в предыдущем иске, истек). [27] Microsoft заплатила 700 миллионов долларов за нерешенные антимонопольные вопросы, еще 900 миллионов долларов за патентные вопросы и 350 миллионов долларов роялти за использование программного обеспечения Sun в будущем. [29] [ необходим неосновной источник ]

Безопасность

Существовало два типа апплетов с очень разными моделями безопасности: подписанные апплеты и неподписанные апплеты. [30] Начиная с Java SE 7 Update 21 (апрель 2013 г.) апплеты и приложения Web-Start рекомендуется подписывать с помощью доверенного сертификата, а при запуске неподписанных апплетов появляются предупреждающие сообщения. [31] Кроме того, начиная с Java 7 Update 51 неподписанные апплеты блокировались по умолчанию; их можно было запустить, создав исключение в панели управления Java. [32]

Неподписанный

Ограничения на неподписанные апплеты были поняты как «драконовские»: у них нет доступа к локальной файловой системе, а веб-доступ ограничен сайтом загрузки апплета; также есть много других важных ограничений. Например, они не могут получить доступ ко всем системным свойствам, использовать собственный загрузчик классов , вызывать собственный код , выполнять внешние команды в локальной системе или переопределять классы, принадлежащие основным пакетам, включенным как часть выпуска Java. Хотя они могут работать в автономном фрейме, такой фрейм содержит заголовок, указывающий на то, что это ненадежный апплет. Успешный начальный вызов запрещенного метода автоматически не создает дыру в безопасности, поскольку контроллер доступа проверяет весь стек вызывающего кода, чтобы убедиться, что вызов не исходит из ненадлежащего места.

Как и в случае с любой сложной системой, с момента первого выпуска Java было обнаружено и исправлено множество проблем безопасности. Некоторые из них (например, ошибка безопасности сериализации календаря) существовали много лет, и никто не знал об этом. Другие были обнаружены в использовании вредоносным ПО в дикой природе. [ необходима цитата ]

В некоторых исследованиях упоминаются апплеты, вызывающие сбой браузера или чрезмерное использование ресурсов ЦП , но они классифицируются как неприятности, а не как настоящие недостатки безопасности. Однако неподписанные апплеты могут быть вовлечены в комбинированные атаки, которые используют комбинацию нескольких серьезных ошибок конфигурации в других частях системы. Неподписанный апплет также может быть более опасным для запуска непосредственно на сервере, где он размещен, поскольку, хотя кодовая база позволяет ему общаться с сервером, запуск внутри него может обойти брандмауэр. Апплет также может попытаться провести DoS-атаки на сервер, где он размещен, но обычно люди, управляющие веб-сайтом, также управляют апплетом, что делает это неразумным. Сообщества могут решить эту проблему путем проверки исходного кода или запуска апплетов на выделенном домене.

Неподписанный апплет также может попытаться загрузить вредоносное ПО, размещенное на исходном сервере. Однако он может только сохранить такой файл во временной папке (так как это временные данные) и не имеет средств для завершения атаки путем его выполнения. Были попытки использовать апплеты для распространения эксплойтов Phoenix и Siberia таким образом, [ необходима цитата ], но эти эксплойты не используют Java внутри и также распространялись несколькими другими способами.

Подписано

Подписанный апплет [33] содержит подпись, которую браузер должен проверить через удаленно работающий независимый сервер центра сертификации . Создание этой подписи требует специализированных инструментов и взаимодействия с обслуживающим сервером центра сертификации. После проверки подписи и одобрения пользователем текущей машины подписанный апплет может получить больше прав, становясь эквивалентным обычной автономной программе. Обоснование заключается в том, что автор апплета теперь известен и будет нести ответственность за любой преднамеренный ущерб. [ неопределенно ] Такой подход позволяет использовать апплеты для многих задач, которые в противном случае были бы невозможны с помощью клиентских скриптов. Однако этот подход требует от пользователя большей ответственности, решая, кому он или она доверяет. Связанные с этим проблемы включают неотзывчивый сервер центра сертификации, неправильную оценку личности подписчика при выдаче сертификатов и известных издателей апплетов, которые все еще делают что-то, что пользователь не одобрил бы. Следовательно, подписанные апплеты, которые появились из Java 1.1, на самом деле могут иметь больше проблем с безопасностью.

Самоподписанный

Самоподписанные апплеты, которые являются апплетами, подписанными самим разработчиком, могут потенциально представлять угрозу безопасности; плагины Java выдают предупреждение при запросе авторизации для самоподписанного апплета, поскольку функциональность и безопасность апплета гарантируется только самим разработчиком и не была независимо подтверждена. Такие самоподписанные сертификаты обычно используются только во время разработки перед выпуском, когда стороннее подтверждение безопасности неважно, но большинство разработчиков апплетов будут искать стороннюю подпись, чтобы убедиться, что пользователи доверяют безопасности апплета.

Проблемы безопасности Java принципиально не отличаются от аналогичных проблем любой клиентской платформы сценариев [34] [ требуется ссылка ] . В частности, все проблемы, связанные с подписанными апплетами, также применимы к компонентам Microsoft ActiveX .

Начиная с 2014 года самоподписанные и неподписанные апплеты больше не принимаются общедоступными плагинами Java или Java Web Start. Следовательно, у разработчиков, желающих развернуть апплеты Java, нет иного выбора, кроме как приобретать доверенные сертификаты из коммерческих источников.

Альтернативы

Существуют альтернативные технологии (например, WebAssembly [35] и JavaScript ), которые удовлетворяют всем или большей части возможностей апплета. JavaScript может сосуществовать с апплетами на одной странице, помогать в запуске апплетов (например, в отдельном фрейме или предоставлять обходные пути платформы) и позже вызываться из кода апплета. По мере того, как JavaScript набирал возможности и производительность, поддержка и использование апплетов снижались, вплоть до их окончательного удаления.

Смотрите также

Ссылки

  1. ^ "Домашний сайт 3D-просмотрщика белков (Openastexviewer) под лицензией LGPL". Архивировано из оригинала 1 августа 2009 г. Получено 21 сентября 2009 г.
  2. ^ "Генерация потенциала действия в сердечных клетках с использованием интерактивного java-апплета. Возбудимые среды. фильмы возбудимые среды Фицхуг нагумо билер рейтер луо руди модель математическое моделирование клеток". Thevirtualheart.org . Получено 22 марта 2022 г.
  3. ^ "Домашний сайт апплета множества Мандельброта под лицензией GPL". Архивировано из оригинала 8 мая 2013 г. Получено 29 июля 2013 г.
  4. ^ "Домашний сайт шахматного апплета под BSD". Архивировано из оригинала 7 сентября 2009 года.
  5. ^ "Следующее поколение в технологии подключаемых модулей Java Applet". Архивировано из оригинала 4 апреля 2009 г. Получено 25 сентября 2009 г.
  6. ^ "appletviewer — Java SE 8". Oracle . Получено 5 декабря 2023 г. .
  7. ^ "Заметки о выпуске Java 9". Oracle.com .
  8. ^ "JEP 289: Устаревание API апплета". Openjdk.java.net . Получено 22 марта 2022 г. .
  9. ^ "JPG-блог: Переход к Интернету без плагинов". Blogs.oracle.com .
  10. ^ "JPG-блог: Дальнейшие обновления по теме «Переход к вебу без плагинов». Blogs.oracle.com .
  11. ^ "Java Client Roadmap Update" (PDF) . Oracle.com . Получено 22 марта 2022 г. .
  12. ^ "FPC JVM – Free Pascal wiki". Wiki.freepascal.org . Получено 22 марта 2022 г. .
  13. ^ Катта, Смита. «Апплеты против JavaScript». St. Cloud State University . Получено 28 апреля 2024 г.
  14. ^ "canvas – HTML". Mozilla Developer Network . Получено 15 августа 2015 г.
  15. ^ "WebGL – Web API Interfaces". Mozilla Developer Network . Получено 15 августа 2015 г.
  16. ^ "Design Elements – Chrome V8" . Получено 15 августа 2015 г. .
  17. ^ Макгроу, Гэри; Фелтен, Эдвард (1999). «Чего не может сделать ненадежный код Java». Securingjava.com . Получено 26 декабря 2021 г. .
  18. ^ Шринивас, Рагхаван Н. (6 июля 2001 г.). «Java Web Start спешит на помощь». JavaWorld . Получено 13 июля 2020 г. .
  19. ^ «Объекты, изображения и апплеты в HTML-документах». W3.org . Получено 22 марта 2022 г. .
  20. ^ «Объекты, изображения и апплеты в HTML-документах». W3.org . Получено 22 марта 2022 г. .
  21. ^ "Загрузки Java для всех операционных систем". Java.com. 14 августа 2012 г. Получено 14 июня 2013 г.
  22. ^ "Позиция Sun по тегам апплетов и объектов". Архивировано из оригинала 9 июня 2010 г. Получено 14 января 2010 г.
  23. ^ "Oracle прекращает поддержку браузерного плагина Java и готовится к его прекращению". Ars Technica . 28 января 2016 г. Получено 15 апреля 2016 г.
  24. ^ Официальный обзор Oracle по технологии Java-апплетов
  25. ^ «Как получить Java для мобильного устройства?». Java.com . 30 июля 2014 г.
  26. ^ ab Zukowski, John (1 октября 1997 г.). «Что означает иск Sun против Microsoft для разработчиков Java?». JavaWorld . Получено 13 июля 2020 г.
  27. ^ ab "Страница Sun, посвященная судебным искам против Microsoft". Архивировано из оригинала 19 августа 2009 г.
  28. ^ Kenai.com (2011) Архивировано 23 августа 2011 г. на Wayback Machine Наиболее распространенные проблемы, обнаруженные в коде рассмотренных апплетов.
  29. ^ "Microsoft и Sun Microsystems заключают широкое соглашение о сотрудничестве; урегулируют нерешенные судебные споры: десятилетнее соглашение устанавливает новые рамки для отраслевого сотрудничества; снижает затраты и сложность для клиентов". Microsoft . 25 февраля 2010 г. Архивировано из оригинала 25 февраля 2010 г. Получено 22 марта 2022 г.
  30. ^ «Что могут и что не могут делать апплеты (Учебники Java™ > Развертывание > Java-апплеты)». Docs.oracle.com . Получено 22 марта 2022 г. .
  31. ^ "Java Applet & Web Start – Code Signing". Oracle . Получено 28 февраля 2014 г.
  32. ^ «Что делать, если я вижу предупреждение безопасности от Java?». Oracle . Получено 28 февраля 2014 г.
  33. ^ "Безопасность Java Applet | Безопасность платформы Java 2 | InformIT". Informit.com . Получено 22 марта 2022 г. .
  34. ^ "Справедливости ради следует отметить, что сегодня значительно больше пользователей Всемирной паутины используют продукт Netscape, чем продукт Microsoft, хотя разрыв, похоже, сокращается". Wiley.com . Получено 17 марта 2017 г. .
  35. ^ "Mozilla пытается сделать Java такой, какой она должна быть – со спецификацией WASI для всех устройств, компьютеров, операционных систем". Theregister.com . Получено 6 октября 2020 г. .

Внешние ссылки