Файл: INTRANET и архитектура «клиент-сервер».pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.06.2023

Просмотров: 187

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Введение

Глава 1. Обзор и анализ проблемы, методов и средств ее решения

1.1. Обзор архитектуры «клиент-сервер»

1.1.2 Клиенты и серверы локальных сетей

1.1.3 Системная архитектура «клиент-сервер»

1.1.4 Серверы баз данных

1.1.5 Принципы взаимодействия между клиентскими и серверными частями

1.1.6.Преимущества протоколов удаленного вызова процедур

1.1.7 Типовое разделение функций между клиентами и серверами

1.1.8 Архитектуры процессора базы данных

1.2. Архитектура с несколькими процессами

1.2.1 Персональные СУБД

Глава 2 Intranet и архитектура «клиент-сервер»

2.1. Двухуровневая архитектура «клиент-сервер»

2.2 Трехуровневая архитектура «клиент-сервер»

2.3. Программы расширения серверной части

Глава 3. Технология JAVA

3.1 Технологический цикл обработки JAVA-программ

3.2 JAVA-машина

3.3 Типы данных, которые поддерживает JAVA-машина

3.4 Регистры

3.5 Указатели

3.6 «Сбор мусора»

3.7 Система команд JAVA-машины

3.2.1. Взаимодействие с серверами баз данных - JDBC

3.2.2 Использование JDBC

3.2.3 Принципы использования JDBC

3.2.4.Нетривиальные возможности JDBC

3.2.5 Использование JDBC 363

3.2.6 Работа с запросами в MS Access

Заключение

Список использованной литературы

3.6 «Сбор мусора»

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

Создавая объекты в Java, можно руководствоваться принципом «создай и забудь», т.к. система сбора мусора заботится об удалении объектов. Объект удален из памяти, как только на него не останется ни одной ссылки от других объектов.

Приоритет процесса сборки мусора низкий, поэтому «сбор» среды выполнения приложений Java не отнимает ресурсы в приложениях. Для создания объектов во время выполнения выделяется область динамической памяти. Язык Java рассчитан на то, что эту область обслуживает сборщик мусора, т.к. в языке нет средств для освобождения памяти.

3.7 Система команд JAVA-машины

Команда Java-машины состоит из однобайтового кода операции, за которым следуют операнды (если таковые имеются). Выделим группы команд:

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

• команды запоминания данных из стека в локальные переменные.

• команды управления массивами. Так, команда newarray с операндом, что задает тип элементов, извлекает из стека необходимый размер массива, создает его и помещает в стек ссылку на массив. Для создания массивов с элементами-объектами есть другая команда, anewarray. За счет подобной специализации достигается эффективность интерпретации Java-программ.

• команды работы со стеком. К этой группе относятся команды, которые удаляют, дублируют, меняют местами верхние элементы стека операндов, также выполняют другие, более сложные манипуляции со стеком.

• арифметические команды. Операнды извлекаются из стека; туда же помещают результат.

• логические команды (смещение, и/ или, исключающее или).

• команды преобразования к другому типу.

• команды передачи управления.

Так, в команде jsr (переход на подпрограмму) операндом служит относительный адрес перехода; адрес команды, следующей за jsr, содержится на вершину стека операндов. Команды для реализации переключателей:


• команды возврата из функции. Для возврата результатов разных типов используются команды с разными кодами операции. Команда breakpoint, она останавливает нормальный ход выполнения и передает управление обработчику этого события.

• команды манипулирования с полями объектов (установить / прочитать обычное / статическое поле).

• команды вызова методов. Их 4: Команда invokevirtual вызывает (виртуальный) метод на основе анализа информации времени выполнения. Команда invokenonvirtual осуществляет вызов на основании информации времени компиляции - пример, вызов метода родительского класса. Команда invokestatic вызывает статический метод класса. Команда invokeinterface вызывает метод, представленный интерфейсом. Выполнение всех команд связано не только с передачей управления, и с анализом разного рода таблиц.

• команда нарушения исключительной ситуации - athrow.

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

• команды синхронизации (войти в критический интервал, выйти из него).

Не существует семантического разрыва между языком Java и Java-машиной. Это важно для компактности скомпилированных Java-программ и для обеспечения высокой скорости трансляции.

3.2.1. Взаимодействие с серверами баз данных - JDBC

JDBC (Java DataBase Connectivity) - набор классов и методов, они используются в языке программирования Java для работы с базами данных. JDBC обеспечивает простые, универсальные и хорошо адатуеми средства взаимодействия с различными СУБД.

Интерфейсы JDBC, разработанные корпорацией Sun, обеспечивающих выполнение стандартных операций с базами данных SQL, а разработчики PostgreSQL предоставляют конкретную реализацию этих интерфейсов. Реализация делает взаимодействие с базой данных: подключение, регистрацию, вызов хранимых процедур и т.д. Интерфейсы спроектированы так, что программа, использующая JDBC, может подключиться к любой JDBC-совместимой базы данных без модификации кода. Надо учитывать обстоятельства:

1. JDBC не выполняет лексического анализа или проверки синтаксиса SQL на стороне клиента. Команды передаются базе данных независимо от их правильности. Если код SQL работает в одной СУБД, но не подходит для другой, реализация не будет знать об этом до фактического установления соединения и пересылки кода SQL. Sim пытается решить эту проблему. Возможно, соответствующие изменения будут внесены в следующие версии JDBC или с переходом на другой стандарт.


2. В реализацию включаются дополнительные классы, специфичные для конкретного продукта. Пример, в PostgreSQL является расширение для геометрических типов данных. Они существуют в PostgreSQL и не поддерживаются другими фирмами. Если использовать эти специализированные классы, программа не будет работать в других JDBC-совместимых базах данных.

Преимущество драйвера JDBC для PostgreSQL заключается в том, что он является драйвером «четвертого типа». Он написан на «чистом» языке Java, позволяет перенести его куда угодно, использовать на любой платформе с поддержкой TCP / IP, т.к. драйвер подключается через TCP / IP.

3.2.2 Использование JDBC

Классы JDBC представляют основные компоненты взаимодействия программы с SQL. Во всех основных классах JDBC - Connection, Statement, ResultSet, Blob и Clob - прямые аналоги в SQL. Кроме того, в JDBC включены вспомогательные классы - например, классы ResultsSetMetaData и DatabaseMetaData предназначены для работы с метаданными. В частности, они используются для получения информации о возможностях базы данных, для проверки типа результата запросов, в процессе отладки и просто в ситуациях, когда у вас нет информации о данных, с которыми работаете.

Интерфейс JDBC в PostgreSQL также содержит классы для работы с нестандартными расширениями PostgreSQL. К их числу относятся Fastpath, геометрические типы, большие объекты и классы, упрощающие сериализацию объектов Java в базе данных.

3.2.3 Принципы использования JDBC

Для создания физического подключения к базе данных используется объект Connection, представляющий физическое подключение к базе данных. Объект Connection требуется для создания объектов Statement, с помощью которых в JDBC базе данных передаются команды SQL.

Существует 3 разновидности объектов Statement: базовый класс Statement, классы PreparedStatement и CallableStatement.

Statement s = c.createStatement ():

Здесь создается объект класса Statement с именем s для объекта Connection с именем с. Далее созданный объект Statement может использоваться для выполнения запросов к базе данных.

В классе Statement важны 2 метода. 1- executeQuery, получает один аргумент (код выполняемой команды SQL) и возвращает объект класса ResultSet. Метод executeQuery предназначен для выполнения команд, возвращают наборы данных, например запросов SELECT. 2 Объект возвращает, ResultSet представляет данные, полученные в ходе запроса.

Пример выборки данных из БД:


Statement s = nul 1: try {

s = c.createStatement;

} catch (SQLException se) {

System.out.printlnC'We got an exception while creating a statement:» +

«that probably means we're no longer connected.»):

se.printStackTrace();

System, exit(l);

}

ResultSet rs = null:

Try {

rs = s.executeQuery(«SELECT * FROM books»);

} catch (SQLException se) {

System.out.printlnC'We got an exception while executing our query:» +

«that probably means our SQL is invalid»):

se.pnntStackTrace():

System.exit(l):

}

int index = 0:

try {

while (rs.next) {

System.out.printlnC'Here's the result of row « + index++ + «:»):

System.out.pri ntln(rs.getStri ng(1)):

}

} catch (SQLException se) {

System.out.pnntlnC'We got an exception while getting a result:this « +

«shouldn't happen: we've done something really bad.»);

se.pnntStackTrace();

System.exit(l):

}

Сначала создаем объект Statement, затем используем метод executeQuery этого объекта для выполнения запроса SELECT * FROM books. Возвращенный к запросу объект ResultSet используется для вывода полученной информации. Объект ResultSet предоставляет основной интерфейс выборки из базы данных. Он обладает 2-мя основными возможностями: возможностью последовательного перебора полученных записей и возможностью возвращения значения заданного поля текущей записи. Принцип перебора такой же, как и в стандартных перечислениях Java: начинаем перебор в позиции перед первым элементом и последовательно переходим к следующему элементу методом next.

Метод next возвращает true, если объект ResultSet успешно перешел к следующей записи (т.е. в итоговом наборе остались необработанные записи). Цикл while выводит значение первого поля каждой из записей, возвращают. Если итоговый набор не содержит записи, первые вызовы next вернет fal se и программа ничего не выведет.

Класс ResultSet может возвращать значение различных типов. В примере, первое поле интерпретируется как строка (Stri ng). К счастью, все стандартные типы данных SQL могут быть представлены в срочном виде, поэтому независимо от типа данных всегда можно получить значение первого поля и вывести его. Класс ResultSet содержит множество других методов, включая методы выборки для всех типов данных SQL и преобразования их к типам Java.

Метод executeUpdate вызывается с аргументом - выполняемой командой SQL. executeQuery и executeUpdate отличаются тем, что метод executeUpdate предназначен для выполнения команд, изменяющих состояние данных в базе. Так, при вызове executeUpdate для команды CREATE, INSERT или UPDATE возвращается число типа int, определяющее количество модифицированных записей.

Statement s - null: try {

s = c.createStatement():

} catch (SQLException se) {

System.out.printlnC'We got an exception while creating a statement:» +

«that probably means we're no longer connected.»):

se.printStackTrace();

System.exlt(1):

}

int m = 0;

try {

m = s.executeUpdate1 INSERT INTO books VALUES « +

«(41472. 'Practical PostgreSGl'. 1212. 4)»): >


} catch (SQLException se) {

System.out.println(«We got an exception while executing our query:» +

«that probably means our SQL is invalid»): >

se.printStackTrace():

System.exit(l):

}

System.out.println(«Successfully modified « + m + « rows.\n»):

3.2.4.Нетривиальные возможности JDBC

Кроме базового объекта Statement в JDBC существует 2 других типа объектов для представления команд: PreparedStatement и Cal lableStatement.

В данном разделе -анализ объектов ResultsSetMetaData и DatabaseMetaData. С их помощью можно пригласить в JDBC описание результатов запроса или базы данных. Возможность получения такой информации на стадии выполнения программы позволяет динамически выполнять команды SQL - такие, параметры которые были неизвестны на момент написания программы.

Объект CallableStatement позволяет выполнять хранимые процедуры в JDBC-co-вместительных базах данных. Лучшим источником информации по этому вопросу является сайт Sun Javasoft (http://java.sun.com/products/jdbc/), т.к. стандарт вызываемых команд (callable statements) изменяется и развивается, его практические применения зависят от версии Java и JDBC.

Объект PreparedStatement представляет подготовленные (prepared) команды SQL, многократно выполняемые с разными исходными данными - так, если нужно вставить в таблицу несколько записей, одну за другой. Главное преимущество PreparedStatement в том, что команда проходит предварительную компиляцию, что избавляет от затрат на повторную обработку команд SQL при каждом выполнении.

PreparedStatement ps = null;

try {

ps = c.prepareStatementC'INSERT INTO authors VALUES (?. ?. ?)»);

ps.setlntd. 495);

ps.setString(2. «Light-Williams»);

ps.setString. «Corwin»);

} catch (SQLException se) {

System.out.println»We got an exception while preparing a statement:» +

«Probably bad SQL.»);

se.printStackTrace();

System.exit(l);

}

try {

ps.executeUpdate();

} catch (SQLException se) {

System.out.printlnC'We got an exception while executing an update:» +

«possibly bad SQL. or check the connection.»);

se.pnntStackTrace();

System.exit(l);

}

Как видно из листинга, подготовленная команда выглядит обычно, разве что все переменные величины заменяются в ней знаками (?). Присваивания выполняется методами класса PreparedStatement (setlnt, setString и т.д.). Выбор метода для каждого поля зависит от типа данных поля.

Объекты PreparedStatement удобны тем, что они обеспечивают автоматическое преобразование типов данных Java в типы SQL. Так, при переходе к типу text не надо беспокоиться об экранировании символов или кавычек.

Первый аргумент метода set идентифицирует номер позиции переменной (знака), который присваивается значение. Единица означает первый знак, двойка - второй и т.д. Другая сильная сторона PreparedStatement связана с тем, что объект можно снова использовать с новыми данными, не создавая нового объекта Statement для каждого набора параметров. Такой подход более эффективен, т.к. он ограничивается созданием одного объекта, а новые значения переменных задаются методами set.