Интернет способствовал выдвижению Java на передний край программирования, а язык Java, в свою очередь, оказал очень сильное влияние на Интернет. Язык Java не только упростил создание программ для Интернета в целом, но и обусловил появление нового типа прикладных программ, предназначенных для работы в сети и получивших название аплетов, которые изменили понятие содержимого сетевой среды. Кроме того, язык Java позволил решить две наиболее острые проблемы программирования, связанные с Интернетом: переносимость и безопасность. Рассмотрим каждую из этих проблем в отдельности.
Аплеты на Java
Аплет — это особый вид прикладной программы на Java, предназначенный для передачи через Интернет и автоматического выполнения в совместимом ejava веб-браузере. Более того, аплет загружается по требованию, не требуя дальнейшего взаимодействия с пользователем. Если пользователь щелкает кнопкой мыши на ссылке, которая содержит аплет, он автоматически загружается и запускается в браузере. Аплеты создаются в виде небольших программ. Как правило, они служат для отображения данных, предоставляемых сервером, обработки действий пользователя или выполнения локально, а не на сервере, таких простых функций, как вычисление процентов по кредитам. По существу, аплет позволяет перенести ряд функций со стороны сервера на сторону клиента.
Появление аплетов изменило характер программирования приложений для Интернета, поскольку они расширили совокупность объектов, которые можно свободно перемещать в киберпространстве. В общем, между сервером и клиентом передаются две крупные категории объектов: пассивные данные и динамически активизируемые программы. Например, чтение сообщений электронной почты подразумевает просмотр пассивных данных. Даже при загрузке программы ее код по-прежнему остается пассивными данными до тех пор, пока он не начнет выполняться. И напротив, аплет представляет собой динамическую, автоматически выполняющуюся прикладную программу. Такая программа является активным агентом на клиентской машине, хотя она инициируется сервером.
Но за привлекательностью динамических сетевых программ скрываются серьезные трудности обеспечения безопасности и переносимости. Очевидно, что клиентскую машину нужно обезопасить от нанесения ей ущерба программой, которая сначала загружается в нее, а затем автоматически запускается на выполнение.
Кроме того, такая программа должна быть в состоянии выполняться в различных вычислительных средах и под управлением разных операционных систем. Как станет ясно в дальнейшем, эти трудности эффективно и изящно решаются в Java. Рассмотрим их подробнее.
Безопасность Java
Вам, вероятно, известно, что каждая загрузка обычной программы сопряжена с риском, поскольку загружаемый код может содержать вирус, “троянский конь” или вредоносный код. Дело в том, что вредоносный код может сделать свое черное дело, если получит несанкционированный доступ к системным ресурсам. Например, просматривая содержимое локальной файловой системы компьютера, вирусная программа может собирать конфиденциальную информацию вроде номеров кредитных карточек, сведений о состоянии банковских счетов и паролей. Для безопасной загрузки и выполнения аплетов Java на клиентской машине нужно было предотвратить подобные атаки со стороны аплетов.
Java обеспечивает такую защиту, ограничивая действие аплета исполняющей средой Java и не предоставляя ему доступ к другим частям операционной системы компьютера. (Способы достичь этого рассматриваются далее.) Возможность загружать аплеты в полной уверенности, что это не нанесет системе никакого вреда и не нарушит ее безопасность, многие специалисты и пользователи считают наиболее новаторским аспектом Java.
Переносимость Java
Переносимость — основная особенность Интернета, поскольку эта глобальная сеть соединяет вместе множество разнотипных компьютеров и операционных систем. Чтобы программа на Java могла выполняться практически на любом компьютере, подключенном к Интернету, требуется каким-то образом обеспечить ее выполнение в разных системах. В частности, один и тот же аплет должен иметь возможность загружаться и выполняться на широком спектре процессоров, операционных систем и браузеров, подключенных к Интернету. А создавать разные версии аплетов для разнотипных компьютеров совершенно нерационально. Один и тот же код должен работать на всех компьютерах. Поэтому требовался какой-то механизм для создания переносимого исполняемого кода. Как станет ясно в дальнейшем, тот же самый механизм, который обеспечивает безопасность, способствует и созданию переносимых программ.