Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по ПСП.docx
Скачиваний:
15
Добавлен:
25.09.2019
Размер:
116.02 Кб
Скачать

30. Управление приоритетами и группы потоков

Метод setPriority, определенный в классе Thread, изменяет приоритет потока:

public final void setPriority(int newPriority);

В качестве параметра этому методу передается одно из трех значений:

NORM_PRIORITY - нормальный;

MAX_PRIORITY - максимальный;

MIN_PRIORITY - минимальный.

По умолчанию запущенный поток имеет нормальный приоритет и на равных правах конкурирует с потоком, в рамках которого выполняется запустившее эту задачу приложение. Однако при необходимости вы можете увеличить или уменьшить внедрение приоритета, указав методу setPriority значения MAX_PRIORITY и MIN_PRIORITY соответственно. Конечно, эта примитивная система управления приоритетами в Java намного проще, чем, к примеру, аналогичная в Microsoft Windows NT. Однако не забывайте, что приложения Java рассчитаны на работу в среде разных операционных систем, где более мощные средства управления приоритетами могут быть и не предусмотрены. Для потоков, выполняющих фоновую работу, можно установить минимальный приоритет. Что же касается потоков, взаимодействующих с пользователем, то для них лучше оставить нормальный или установить максимальный приоритет. В этом случае приложение будет быстрее реагировать на действия пользователя. С помощью метода getPriority вы можете определить текущий приоритет:

public final int getPriority();

Этот метод возвращает одно из трех значений приоритета, перечисленных выше.

Группы приоритетов

Потоки объединяются в группы потоков. После создания потока нельзя изменить его принадлежность к группе.

ThreadGroup tg = new ThreadGroup(“Группа потоков ”);

Thread to = new Thread (tg,”поток 0”);

Все потоки, объединенные группой, имеют одинаковый приоритет. Чтобы определить, к какой группе относится поток, следует вызвать метод getThteadGroup.

В31. Коммуникация между потоками

Метод wait( ) вызванный внутри синхронизированного блока или метода, останавливает выполнение текущего потока и освобождает от блокировки захваченный объект, в частности объект lock.

Возвратить блокировку объекта потоку можно вызовом метода notify( ) для конкретного потока или notifyAll( ) для всех потоков.

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

В32. Понятие интерфейсов. Виды интерфейсов

Интерфейс — это подобие абстрактного класса, особый вид класса без реализации.

Интерфейсы подобны полностью абстрактным классам, но не являются классами. Ни один из объявленных методов не может быть реализован внутри интерфейса.

Виды интерфейсов: 1)Интерфейсы, определяющие контракт для классов посредством методов, 2)Интерфейсы, реализация которых автоматически (без реализации методов) придает классу определенные свойства.

К последним относятся, например, интерфейсы Cloneable и Serializable, отвечающие за клонирование и сохранение объекта в информационном потоке соответственно.

Чтобы реализовать интерфейс, класс должен создать полный набор методов, определенных интерфейсом. Однако каждый класс может определять нюансы своей реализации данного интерфейса. Ключевое слово interface позволяет в полной мере использовать концепцию полиморфизма под названием "один интерфейс, несколько методов".

На множестве интерфейсов также определена иерархия наследования, но она не имеет отношения к иерархии классов.

Определение интерфейса имеет вид:

[public] interface Имя [extends Имя1, Имя2,…, ИмяN] {

/*реализация интерфейса*/}

В33. Особенности применения интерфейсов

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

доступ class имя_класса [extends суперкласс] [implements интерфейс [, интерфейс.... ] ] {

// тело_класса }

Если класс реализует более одного интерфейса, имена интерфейсов разделяются запятыми. Если класс реализует два интерфейса, которые объявляют один и тот же метод, то один и тот же метод будет использоваться клиентами любого интерфейса. Методы, которые реализуют интерфейс, должны быть объявлены как public. Кроме того, сигнатура типа реализующего метода должна в точности совпадать с сигнатурой типа, указанной в определении interface.

Рассморим небольшой пример класса, который реализует приведенный ранее интерфейс Callback.

class Client implements Callback {

// Реализует интерфейс Callback

public void callback(int p) {

System.out.println("Метод callback, вызванный со значением " + p) ; } }

В34. Интерфейсы и классы

Главное отличие класса от интерфейса — в том, что класс состоит из интерфейса и реализации.

Абстрактные классы используются только тогда, когда есть "is a" тип отношений; интерфейсы могут быть реализованы классами которые не связаны друг с другом.

Абстрактный класс может реализовывать методы; интерфейс не может реализовывать методы.

Интерфейс может только описывать константы и методы, но не реализовывать их. Все методы интерфейса по-умолчанию являются публичными (public) и абстрактными (abstract), а поля - public static final.

В Java класс может наследоваться (реализовывать) от многих интерфейсов, но только от одного абстрактного класса.

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

В35. Множественное наследование интерфейсов

Interface это не просто более чистая форма абстрактного класса. Он имее более "высокое" применение. Поскольку interface не имеет реализации всего, что есть в нтем, то нет и массива-хранилища связанного с ним, нет ничего мешающего для комбинации нескольких интерфейсов. И это ценно, поскольку иногда вам требуется нечто: "x есть a и b и c." В C++, этот акт множественных интерфейсов называется множественное наследование, и при этом этот тип тянет за собой "прилипший" багаж, поскольку каждый тип имеет свою реализацию. В Java Вы можете осуществить то же самое, но только один из этих классов может иметь реализацию, так что проблемы, возникающие в C++, не возникают в Java, при комбинировании множества интерфейсов:

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

В36. Понятие о сетевой архитектуре. Виды сетевых архитектур

Архитектуры локальных сетей можно разделить, по крайней мере, на два поколения.

К первому из них относятся архитектуры, обеспечивающие низкую и среднюю скорость передачи информации:

Local Talk (230 Кбит/с), Ethernet (10 Мбит/с), Token Ring (16 Мбит/с) и ARC net (2,5 Мбит/с).

Все они (по крайней мере, первоначальные их версии) основаны на использовании в качестве среды передачи данных кабеля с медной жилой.

Ко второму поколению относятся современные высокоскоростные архитектуры: FDDI (100 Мбит/с), АТМ (155 Мбит/с) и усовершенствованные версии архитектур первого поколения, включая 100 и 1000 – мегабитную архитектуры Ethernet, 20-ти мегабитная архитектура ARC net Plus.

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

Новые архитектуры (FDDI и ATM) ориентированы на применение волоконно-оптических линий передачи данных и могут использоваться для одновременной передачи информации различных типов, например, речи, данных и видеоизображения.

В37. Одноранговая архитектура

Если компьютеры объединялись линиями связи в сеть, то такая сеть имела одноранговую архитектуру, при которой отсутствовали компьютеры, полностью предоставляющие свои ресурсы в общее пользование для других компьютеров сети.

Таким образом, централизованная архитектура относится к автономной вычислительной системе, основанной на использовании одного многопользовательского компьютера, а одноранговая архитектура — к компьютерной сети, состоящей из ЭВМ одного ранга, когда отсутствуют компьютеры, полностью предоставляющие свои ресурсы в общее пользование.

Все ресурсы вычислительной системы при централизованной архитектуре, включая информацию, были сконцентрированы в центральной ЭВМ, называемой еще мэйнфреймом (main frame — центральный блок ЭВМ). В качестве основных средств доступа к информационно-компьютерным ресурсам использовались алфавитно-цифровые терминалы, которые соединялись с центральной ЭВМ кабелем. Поскольку терминал — устройство простое, не требовалось никаких специальных действий со стороны конечного пользователя по настройке и конфигурированию программного обеспечения в виду его отсутствия на терминале. Управление терминалами осуществлялось централизованно с компьютера. Все терминалы были однотипными.

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

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

В38. Клиент-серверная архитектура и их разновидности

Клиент-сервер (англ. Client-server) — вычислительная или сетевая архитектура, в которой задания или сетевая нагрузка распределены между поставщиками услуг (сервисов), называемыми серверами, и заказчиками услуг, называемыми клиентами. Нередко клиенты и серверы взаимодействуют через компьютерную сеть и могут быть как различными физическими устройствами, так и программным обеспечением.

Многоуровневая архитектура клиент-сервер — разновидность архитектуры клиент-сервер, в которой функция обработки данных вынесена на один или несколько отдельных серверов. Это позволяет разделить функции хранения, обработки и представления данных для более эффективного использования возможностей серверов и клиентов.

Сеть с выделенным сервером (англ. Client/Server network) — это локальная вычислительная сеть (LAN), в которой сетевые устройства централизованы и управляются одним или несколькими серверами. Индивидуальные рабочие станции или клиенты (такие, как ПК) должны обращаться к ресурсам сети через сервер(ы).

В39. Сетевая модель OSI. Уровни модели OSI

Сетевая модель OSI (англ. open systems interconnection basic reference model — базовая эталонная модель взаимодействия открытых систем, сокр. ЭМВОС; 1978 г.) — абстрактная сетевая модель для коммуникаций и разработки сетевых протоколов. Предлагает взгляд на компьютерную сеть с точки зрения измерений. Каждое измерение обслуживает свою часть процесса взаимодействия. Благодаря такой структуре совместная работа сетевого оборудования и программного обеспечения становится гораздо проще и прозрачнее.

В настоящее время основным используемым стеком протоколов является TCP/IP, разработанный ещё до принятия модели OSI и вне связи с ней.

Уровни модели OSI:

  • Прикладной уровень (верхний уровень модели, обеспечивающий взаимодействие пользовательских приложений с сетью)

  • Представительский уровень (обеспечивает преобразование протоколов и кодирование/декодирование данных)

  • Сеансовый уровень (обеспечивает поддержание сеанса связи, позволяя приложениям взаимодействовать между собой длительное время)

  • Транспортный уровень (предназначен для обеспечения надёжной передачи данных от отправителя к получателю, при этом уровень надёжности может варьироваться в широких пределах)

  • Сетевой уровень (предназначен для определения пути передачи данных)

  • Канальный уровень (предназначен для обеспечения взаимодействия сетей на физическом уровне и контроля за ошибками, которые могут возникнуть)

  • Физический уровень (нижний уровень модели, предназначенный непосредственно для передачи потока данных)

В. 40 Понятие протокола, ip-адреса, URL, DNS

Пр-л IP находится на межсетевом уровне TCP/IP. Пр-л IP обесп-ет передачу блоков данных, называемых дейтаграммами, от отправителя к получателям, где отправители и получатели являются компьютерами, идентифицируемыми адресами фиксированной длины (IP-адресами). П-л IP не подтверждает доставку данных, не контролирует целостность полученных данных и не производит обмен служебными сообщениями, подтверждающими установку соединения с узлом назначения и его готовность к приему данных.

URL — это стандартизированный способ записи адреса ресурса в сети Интернет.

В общем виде формат URL выглядит так: method://host.domain[:port]/path/filename

где method (file, http и др.) Параметр host.domain - адрес ресурса в сети Internet.

Параметр port - число, которое необходимо указывать, если метод требует номер порта (отдельные сервера могут иметь свой отличительный номер порта).

Стандартными портами являются:

21 – FTP 23 – Telnet 70 – Gopher 80 - HTTP

DNS (система доменных имён) — компьютерная распределённая система для получения информации о доменах. Чаще всего используется для получения IP-адреса по имени хоста (компьютера или устройства), получения информации о маршрутизации почты, обслуживающих узлах для протоколов в домене

В.41 Стек протоколов TCP/IP

Стек протоколов TCP/IP (протокол управления передачей) — набор сетевых протоколов разных уровней модели сетевого взаимодействия, используемых в сетях. Протоколы работают друг с другом в стеке  — это означает, что протокол, располагающийся на уровне выше, работает «поверх» нижнего, используя механизмы инкапсуляции. Например, протокол TCP работает поверх протокола IP.

Стек протоколов TCP/IP основан на модели сетевого взаимодействия и включает в себя протоколы четырёх уровней: прикладного (application),транспортного (transport),сетевого (network),канального (data link).

Основные запросы: открытие канала передачи, запрос на возможность передачи пакета, передача, запрос о получении пакета, закрытие соединения.

В.42 Основные сетевые классы и интерфейсы

Все сетевые средства описаны в пакете java.net

Класс InetAdress

Для создания объектов этого класса нужно воспользоваться одним из его фабричных методов. Фабричные методы — это обычные статические методы, которые возвращают ссылку на объект класса, которому они принадлежат. В данном случае, у класса InetAddress есть три метода, которые можно использовать для создания представителей. Это методы getLocalHost, getByName и getAllByName.

У класса InetAddress также есть несколько нестатических методов, которые можно использовать с объектами, возвращаемыми только что названными фабричными методами: getHostName() возвращает строку, содержащую символическое имя узла, соответствующее хранящемуся в данном объекте адресу Internet. getAddress() возвращает байтовый массив из четырех элементов, в котором в порядке, используемом в сети, записан адрес Internet, хранящийся в данном объекте. toString() возвращает строку, в которой записано имя узла и его адрес.

Java реализует дейтаграммы на базе протокола UDP, используя для этого два класса. Объекты класса DatagramPacket представляют собой контейнеры с данными, a DatagramSocket — это механизм, используемый при передаче и получении объектов DatagramPacket.

В пакете java.net классы Socket и ServerSocket сильно отличаются друг от друга. Первое отличие в том, что ServerSocket ждет, пока клиент не установит с ним соединение, в то время, как обычный Socket трактует недоступность чего-либо, с чем он хочет соединиться, как ошибку. Одновременно с созданием объекта Socket устанавливается соединение между узлами Internet.

В.43 Прокси-серверы

Прокси-сервер (от англ. proxy — «представитель, уполномоченный») — служба (комплекс программ) в компьютерных сетях, позволяющая клиентам выполнять косвенные запросы к другим сетевым службам.

Сначала клиент подключается к прокси-серверу и запрашивает какой-либо ресурс (например, e-mail), расположенный на другом сервере. Затем прокси-сервер либо подключается к указанному серверу и получает ресурс у него, либо возвращает ресурс из собственного кэша (в случаях, если прокси имеет свой кэш). В некоторых случаях запрос клиента или ответ сервера может быть изменён прокси-сервером в определённых целях. Также прокси-сервер позволяет защищать клиентский компьютер от некоторых сетевых атак и помогает сохранять анонимность клиента.

В.44 Понятие сокетов. Основные классы

TCP/IP-сокеты используются для реализации надежных двунаправленных, ориентированных на работу с потоками соединений точка-точка между узлами Internet.

Сокеты можно использовать для соединения системы ввода-вывода Java с программами, которые могут выполняться либо на локальной машине, либо на любом другом узле Internet. В отличие от класса DatagramSocket, объекты класса Socket реализуют высоконадежные устойчивые соединения между клиентом и сервером.

В пакете java.net классы Socket и ServerSocket сильно отличаются друг от друга. Первое отличие в том, что ServerSocket ждет, пока клиент не установит с ним соединение, в то время, как обычный Socket трактует недоступность чего-либо, с чем он хочет соединиться, как ошибку. Одновременно с созданием объекта Socket устанавливается соединение между узлами Internet.

Конструкторы для сокетов:

  • Socket(String host, int port) устанавливает соединение между локальной машиной и указанным портом узла Internet, имя которого было передано конструктору. Этот конструктор может возбуждать исключения UnknownHostException и IOException.

  • Socket(InetAddress address, int port) выполняет ту же работу, что и первый конструктор, но узел, с которым требуется установить соединение, задается не строкой, а объектом InetAddress. Этот конструктор может возбуждать только IOException.

Из объекта Socket в любое время можно извлечь информацию об адресе Internet и номере порта, с которым он соединен. Для этого служат следующие методы:

  • getInetAddressQ возвращает объект InetAddress, связанный с данным объектом Socket.

  • getPort() возвращает номер порта на удаленном узле, с которым установлено соединение.

  • getLocalPort() возвращает номер локального порта, к которому присоединен данный объект.

После того, как объект Socket создан, им можно воспользоваться для того, чтобы получить доступ к связанным с ним входному и выходному потокам. Эти потоки используются для приема и передачи данных точно так же, как и обычные потоки ввода-вывода, которые мы видели в предыдущей главе:

  • getInputStream() возвращает InputStream, связанный с данным объектом.

  • getOutputStream() возвращает OutputStream, связанный с данным объектом.

  • close() закрывает входной и выходной потоки объекта Socket.

В.45 Понятие дейтаграмм. Основные классы

Дейтаграммы, или пакеты протокола UDP (User Datagram Protocol) — это пакеты информации, пересылаемые в сети по принципу “fire-and-forget” (выстрелил и забыл). Если вам надо добиться оптимальной производительности, и вы в состоянии минимизировать затраты на проверку целостности информации, пакеты UDP могут оказаться весьма полезными.

UDP не предусматривает проверок и подтверждений при передаче информации. При передаче пакета UDP по какому-либо адресу нет никакой гарантии того, что он будет принят, и даже того, что по этому адресу вообще есть кому принимать такие пакеты. Аналогично, когда вы получаете дейтаграмму, у вас нет никаких гарантий, что она не была повреждена в пути или что ее отправитель все еще ждет от вас подтверждения ее получения.

Java реализует дейтаграммы на базе протокола UDP, используя для этого два класса. Объекты класса DatagramPacket представляют собой контейнеры с данными, a DatagramSocket — это механизм, используемый при передаче и получении объектов DatagramPacket.

В. 46

В.47

В.48

В.49

В.50. Понятие ODBCJDBC. Связь ODBC и JDBC.

JDBC (соединение с базами данных на Java) — платформенно-независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД, реализованный в виде пакета java.sql, входящего в состав Java SE.

JDBC основан на концепции так называемых драйверов, позволяющих получать соединение с базой данных по специально описанному URL. Драйверы могут загружаться динамически (во время работы программы). Загрузившись, драйвер сам регистрирует себя и вызывается автоматически, когда программа требует URL, содержащий протокол, за который драйвер отвечает.

Преимуществами JDBC считают:

  • Лёгкость разработки: разработчик может не знать специфики базы данных, с которой работает;

  • Код не меняется, если компания переходит на другую базу данных;

  • Не нужно устанавливать громоздкую клиентскую программу;

  • К любой базе можно подсоединиться через легко описываемый URL.

ODBC — это программный интерфейс (API) доступа к базам данных, разработанный фирмой Microsoft.

Этот интерфейс был назван Open Database Connectivity, или открытый механизм взаимодействия с базами данных.

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

В.51. Настройка базы данных. Создание соединения с источником данных.

EER-модель (Enhanced Entity-Relationship model) – расширенная модель данных, позволяющая описывать концептуальные схемы предметной области. EER-модель используется при высокоуровневом (концептуальном) проектировании баз данных. С её помощью можно выделить ключевые сущности и обозначить связи, которые могут устанавливаться между этими сущностями. Во время проектирования баз данных происходит преобразование EER-модели в конкретную схему базы данных на основе выбранной модели данных.

ORACLE MySQL Workbench — инструмент для визуального проектирования баз данных, интегрирующий проектирование, моделирование, создание и эксплуатацию БД в единое бесшовное окружение для системы баз данных MySQL.

В MySQL выбираем создать новую EER модель, затем задаем имя и выбираем кодировку. Нажимаем создать EER – диаграмму, создаем сущность в таблице и создаем поля для выбранной сущности. Затем преобразуем созданную EER – модель в конкретную схему БД.

После всего производим уже настройку в NetBeans IDE.

В.52. Драйверы для подключения к БД. Класс DriverManager. Мост JDBC-ODBC.

Подключение Java-программы к реляционной СУБД с помощью JDBC выполняется в три этапа:

Установка связи между Java-программой и диспетчером базы данных.

Передача SQL-команды в базу данных с помощью объекта Statement.

Чтение полученных результатов из базы данных и использование их в программе.

П акет JDBC предназначен для работы с разнообразными диспетчерами СУБД от различных разработчиков. Для подключения к базе данных среда выполнения Java должна загрузить соответствующий драйвер указанной базы данных. Загрузка и выгрузка таких драйверов осуществляется с помощью класса DriverManager.

На рисунке показана схема подключения Java-программы к базе данных. Класс DriverManager имеет структуру данных, которая содержит как сами драйверы в виде объектов Driver, так и информацию о них.

Драйверы:

1)Драйвер, использующий другой прикладной интерфейс взаимодействия с СУБД, в частности ODBC.

2)Драйвер, работающий через внешние библиотеки.

3)Драйвер, работающий по сетевому и независимому от СУБД протоколу с промежуточным Java-сервером, который подключается к нужной СУБД.

4)Сетевой драйвер, работающий напрямую с нужной СУБД.

В.53. Работа с метаданными.

Метаданные, в общем случае

  • Метаданные — это субканальная информация об используемых данных.

  • Информация о содержащейся на веб-странице информации (создателе и т. п.). Пример: Имя автора правки в тексте, именах таблиц, колонок в таблице в реляционных базах данных, номер версии в файле программы

  • Структурированные данные, представляющие собой характеристики описываемых сущностей для целей их идентификации, поиска, оценки, управления ими.

  • набор допустимых структурированных описаний, которые доступны в явном виде и предназначение которых может помочь найти объект. Термин используется в контексте поиска объектов, сущностей, ресурсов.

  • Данные из более общей формальной системы, описывающей заданную систему данных.

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

Метаданные становятся важны в World Wide Web по причине необходимости обеспечения поиска полезной информации среди огромного количества доступной. Метаданные, созданные вручную, имеют большую ценность, поскольку это гарантирует осмысленность.

В.54. Основы применения расширенных языков гипертекстовой разметки документов.

HTML - HyperText Markup Language - стандартный язык разметки документов во всемирной паутине.

XHTML - Extensible Hypertext Markup Language - семейство языков разметки веб-страниц на основе XML, повторяющих и расширяющих возможности HTML 4.

Главное отличие XHTML от HTML заключается в обработке документа. Документы XHTML обрабатываются своим модулем (парсером) аналогично документам XML.

XML - eXtensible Markup Language — расширяемый язык разметки.

XML — текстовый формат, предназначенный для хранения структурированных данных (взамен существующих файлов баз данных), для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки (например,  XHTML).

XML является упрощённым подмножеством языка SGML.

В.55. Понятие и виды web-серверов. Настройка.

Wеб-сервер — это сервер, принимающий HTTP-запросы от клиентов, обычно веб-браузеров, и выдающий им HTTP-ответы, обычно вместе с HTML-страницей, изображением, файлом, медиа-потоком или другими данными. Веб-серверы — основа Всемирной паутины.

Клиент, которым обычно является веб-браузер, передаёт веб-серверу запросы на получение ресурсов, обозначенных URL-адресами. Ресурсы — это HTML-страницы, изображения, файлы, медиа-потоки или другие данные, которые необходимы клиенту. В ответ веб-сервер передаёт клиенту запрошенные данные. Этот обмен происходит по протоколу HTTP.

В качестве клиентов для обращения к веб-серверам могут использоваться различные программы и устройства:

  • веб-браузер, работающий на настольном компьютере или переносном устройстве (например, карманном ПК);

  • разнообразные программы, самостоятельно обращающиеся к веб-серверам для получения обновлений или другой информации (например, антивирус может периодически запрашивать у определённого веб-сервера обновления своих баз данных);

  • мобильный телефон, получающий доступ к ресурсам веб-сервера при помощи протокола WAP;

  • другие цифровые устройства или бытовая техника.

В.56. Понятие клиентских и серверных скриптов. Запуск и выполнение.

JavaScript (JS) – объектно-ориентированный скриптовый язык для программирования на стороне клиента (создания клиентских скриптов).

JS является диалектом языка ECMAScript.

JS встраивается в веб-страницы и используется как язык сценариев для придания интерактивности веб-страницы.

JS представляет прототипное программирование, функции как объекты первого класса, автоматическое приведение типов, автоматическую сборку мусора, анонимные функции, динамическую типизацию (переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной).

Прототипное программирование — стиль объектно-ориентированного программир, при котором отсутствует понятие класса, а повторное использование производится путем клонирования существующего экземпляра объекта —прототипа.

Такие скрипты выполняются на стороне сервера.

В.57. Обработка форм. Запросы GET и POST.

Метод GET - все, что вы вводите в адресной строке браузера "переводится" в GET запросы.

В GET строка запроса выглядит так: ?param=value&param2=345&param3=1

Итак, все что мы видим в адресной строке и любые ссылки, на которые можно нажать или скопировать - все они используют GET. Этот вид запроса позволяет вам посылать информацию на сервер, делать с ней что-то на сервере, и возвращать результат.

GET отправляет всю информацию в заголовке запроса, длина которого ограничена. Если вам нужно отправить какое-то слово на сервер - не проблема, оно будет всего несколько букв, но с большим объемом информации этот запрос не сработает.

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

В HTML формах вы можете указать, как отправлять информацию на сервер при помощи атрибута method:

<form method="get">или <form method="post">

По умолчанию используется GET, и не только в формах.

В.58. Основные элементы и структура языка XML. Схемы DTD и XSD.

XML - eXtensible Markup Language — расширяемый язык разметки.

XML — текстовый формат, предназначенный для хранения структурированных данных (взамен существующих файлов баз данных), для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки (например,  XHTML).

Основная идея XML – это текстовое представление с помощью тегов, структурированных в виде дерева данных.

Древовидная структура хорошо описывает бизнес-объекты, конфигурацию, структуры данных и т.п.

Почти все современные технологии стандартно поддерживают работу с XML.

Наименования тегов являются чувствительными к регистру (case-sensitive), т.е. например теги, <author>, <Author>, <AuThoR> будут совершенно разными при работе с XML. Язык HTML нетребователен к регистру.

Все атрибуты тегов должны быть заключены либо в одинарные, либо в двойные кавычки.

В НТМL разрешено записывать значение атрибута без кавычек.

Для описания структуры XML-документа используется язык описания DTD (Document Type Definition).

В настоящее время DTD практически не используется и повсеместно замещается XSD. DTD может встречаться в достаточно старых приложениях, использующих XML.

Схема XSD представляет собой более строгое, чем DTD, описание XML-документа.

XSD-схема, в отличие от DTD, сама является XML-документом и поэтому более гибкая для использования в приложениях, задания правил документа, дальнейшего расширения новой функциональностью.

Схема XSD первой строкой должна содержать декларацию XML

<?xml version="1.0" encoding="UTF-8"?>

Любая схема своим корневым элементом должна содержать элемент schema.

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

ref – ссылается на определение элемента, находящегося в другом месте;

name – определяет имя элемента;

type – указывает тип элемента;

Элементы, которые не имеют атрибутов и дочерних элементов, называются простыми и должны иметь простой тип данных.

Существуют стандартные простые типы, например string (представляет строковое значение), boolean (логическое значение), integer (целое значение), float (значение с плавающей точкой), ID (идентификатор) и др.

Элементы, содержащие в себе атрибуты и/или дочерние элементы, называются сложными.

Сложные элементы создаются с помощью элемента complexType. Так же как и в простом типе, атрибут name задает имя типа.

В. 59. Сервлеты. Основные интерфейсы. Применение сервлетов.

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

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

Все сервлеты реализуют общий интерфейс Servlet из пакета javax.servlet.

Преимуществом сервлетов перед CGI или ASP является быстродействие, переносимость на различные платформы, использование объектно-ориентированного языка высокого уровня Java, который расширяется большим числом классов и программных интерфейсов. Сервлеты поддерживаются большинством Web-серверов (Apache Tomcat, GlassFish Server) и являются частью платформы J2EE.

Java Server Pages (JSP) обеспечивает разделение динамической и статической частей страницы, результатом чего является возможность изменения дизайна страницы, не затрагивая динамическое содержание. Это свойство используется при разработке и поддержке страниц, так как дизайнерам нет необходимости знать, как работать с динамическими данными.

Сервлет выполняет роль контроллера запросов и ответов, то есть принимает запросы от всех связанных с ним JSP-страниц, вызывает соответствующую бизнес-логику для их (запросов) обработки и в зависимости от результата выполнения решает, какую JSP поставить этому результату в соответствие.

В.60 Жизненный цикл сервлетов

Сервлеты являются компонентами, работающими на стороне сервера и предоставляющими мощный механизм для разработки серверных программ. Сервлеты обеспечивают разработчика платформонезависимыми методами создания веб-приложений, которым не свойственны граничения CGI скриптов.

Жизненный цикл сервлетов

  1. Загрузка: контейнер сервлетов загружает сервлет по прямому запросу или при своем запуске.

  2. Инициализация: после загрузки контейнер вызывает метод init() и передает ему параметры инициализации. Метод init() должен быть выполнен перед тем, как котейнер начнет обрабатывать запросы. Вызывается он только один раз за весь жизненный цикл сервлета.

  3. Обращение: после успешной инициализации сервлет готов к обработке данных. Для каждого обращения к нему создается отдельный поток, управляемый самим контейнером, в котором вызывается метод service(). Метод service() обрабатывает все виды запросов (для обработки конкретно GET или POST можно вместо service() использовать doGet() и doPost() соответственно).

  4. Уничтожение: если сервлет больше не нужен, контейнер вызывает метод destroy(). Как и init(), он так же может быть вызван лишь единожды.

В.61 Обработка клиентского запроса. Генерация ответов сервера. Основные интерфейсы.

Для обработки запроса каждого клиента серверные процессы порождают отдельный рабочий поток (worker thread). Параметр orclmaxcc определяет максимальное количество соединений с базой данных, которые может установить каждый серверный процесс. По умолчанию этот параметр равен 10.

После того, как клиент решил ввести поисковый запрос, происх следующее:

1. Клиент вводит поисковый запрос, который может содержать одну

или несколько из следующих опций:

SSL: протокол Secure Socket Layer обеспечивает шифрование и аутентификацию или только шифрование. Без SSL запрос посылается открытым текстом и может быть легко прочитан анализатором протоколов.

Тип пользователя: авторизованный или анонимный.

Фильтры: используются для сужения области поиска

2. Для ввода команды клиент может использовать либо менеджер OID, либо инструмент командной строки.

3. Запрос посылается экземпляру сервера каталога с использованием протокола посредством процесса, называемого связыванием (binding), сервер каталога выполняет аутентификацию пользователя и проверяет списки управления доступом.

4. Сервер каталога преобразует поисковый запрос из формата LDAP в формат интерфейса вызовов Oracle (OCI) и передает его через Net8 базе данных Oracle8i.

5. База данных OracleSi анализирует запрос сервера каталога точно так же, как и любой другой запрос, и выбирает информацию, которая будет отослана клиенту через сервер каталога и API С.

В.62 Технология JSP

JSP (JavaServer Pages) — технология, позволяющая веб-разработчикам легко создавать содержимое, которое имеет как статические, так и динамические компоненты. По сути, страница JSP является текстовым документом, который содержит текст двух типов: статические исходные данные, которые могут быть оформлены в одном из текстовых форматов HTML, SVG, WML, или XML, и JSP элементы, которые конструируют динамическое содержимое. Кроме этого могут использоваться библиотеки JSP тегов, а также EL (Expression Language), для внедрения Java-кода в статичное содержимое JSP-страниц.

Выгода, которую дает технология JSP в сравнении с другими веб-технологиями заключается в том, что JSP является платформонезависимой, переносимой и легко расширяемой технологией для разработки веб-приложений.

JSP страницы имеют расширение .jsp и размещаются там же, где и обычные Web страницы. Структура таких страниц может состоять из пяти конструкций: HTML, комментарии, скриптовые элементы, директивы и действия. JSP страница при компиляции преобразуется в обычный сервлет со статическим содержимым, которое направляется в поток вывода, связанный с методом service. Поэтому при первом запросе этот процесс может вызвать некую задержку, но в большинстве своём незаметную первому пользователю. Комментарии в документе или программе служат к объяснению содержимого. Они не являются причиной замедления программы, так как транслятор и исполнитель их игнорируют. Скриптовые элементы позволяют вам указать код на языке Java, который впоследствии станет частью конечного сервлета, директивы дадут вам возможность управлять всей структурой сервлета, а действия служат для задания существующих используемых компонентов, а также для контроля над поведением движка JSP. Для упрощения работы со скриптами имеются заранее определённые переменные, такие как request, response, pageContext, session, out, application, config, page, exception

В.63 Сервлеты и JSP

Сервлет - это программа, которая выполняется на Web-сервере (В большинстве случаев), подобно тому как выполняется скрипт на PHP. Результат выполнения программы, как правило, передается клиентскому обозревателю в виде HTML документа. Для того, чтобы сделать возможным выполнение приложения Java на сервере по запросу клиента, необходимо нечто, именуемое контейнером сервлета. Контейнер сервлета (насколько я понял) - является одной из составляющих Web-сервера, а Web-сервер, способный служить контейнером для Java программ - именуется сервером приложений. На сегодняшний день, имеется несколько серверов приложений. Пакет Netbeans для разработки приложений Java EE включает в себя Tomcat и GlassFish. Я пока остановил свой выбор на Tomcat.

JSP (Java Server Pages) - это расширение сервлетов - еще больше напоминающее PHP по синтаксису. JSP целесообразнее использовать когда большая часть документа состоит из "статичной" HTML-разметки. Если же большая часть документа динамически меняется - целесообразнее использовать сервлет. По большому счету, JSP преобразуется в сервлет во время работы и все то, что актуально для сервлета - будет актуально и для JSP. Разница в отличающемся синтаксисе. Поскольку эта статья про сервлет - тут будет описано именно создание сервлета. В последствии, я планирую переписать полученный код и сделать больше уклон в сторону JSP и EJB (Enterprise Java Bean).

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

Требования к распределенным системам

1. Масштабируемость. Способность системы адаптироваться к будущему росту нагрузки.

2. Открытость. Систему можно легко расширять и модифицировать. Для этого компоненты системы должны иметь четко определенные и хорошо документированные интерфейсы.

3. Неоднородность. Обуславливается использованием различных технологий для реализации услуг, управления данными.