48677 (588596), страница 6
Текст из файла (страница 6)
Установка и настройка контейнера Apache-Tomcat не представляет затруднений. Предварительно устанавливается JDK в директорию /usr/local/jdk1.6.0. Установка производится обычным копированием файлов. Далее описываются переменные окружения в файле /etc/profile:
### Java+Tomcat ###
export JAVA_HOME="/usr/local/jdk1.6.0"
export CATALINA_HOME="/usr/local/apache-tomcat-5.5.20"
export PATH=$PATH:$JAVA_HOME/bin
После производится копирование файлов Apache-Tomcat в директорию /usr/local/apache-tomcat-5.5.20/. Задаются права владения директорией JDK и Apache-Tomcat для пользователя sk:
chown –R sk /usr/local/jdk1.6.0/
chmod 774 / usr/local/jdk1.6.0/
chown –R sk /usr/local/apache-tomcat-5.5.20/
chmod 774 /usr/local/apache-tomcat-5.5.20/
Создается скрипт запуска Apache-Tomcat в /etc/rc.d/tomcat, содержимое которого приведено в Приложении Е.
Для запуска Apache-Tomcat в командной строке набирается: /etc/rc.d/tomcat start.
После старта открывается браузер и набирается «http://localhost:8080», тем самым загружая web-интерфейс для управления Apache-Tomcat (рисунок 2.3.1.1).
Рисунок 2.3.1.1 - Web-интерфейс для управления Apache-Tomcat
Все приложения написанные для Apache-Tomcat будут располагаться в каталоге /usr/local/apache-tomcat-5.5.20/webapps/.
Для СДО создается отдельный каталог /usr/local/apache-tomcat-5.5.20/webapps/sdo/.
2.3.2 Сервер БД Oracle Database 10g
Инсталлятор Oracle располагается в директории /shared/Oracle10g/. Установка проводится в директорию /u01/app/. Перед запуском инсталлятора необходимо владельцем этой директории сделать пользователя sk:
chmod –R 777 /shared/Oracle10g/
chown –R sk /u01
chmod –R 775 /u01
Т.к. ОС SuSe Linux Server Edition 10 не поддерживается Oracle, а поддерживается только 9-ая версия, при запуске инсталлятора нужно указать, чтобы игнорировалась версия ОС.
./runInstaller –ignoreSysPrereqs
Сразу же появляется сообщение о том, что недостаточно прав для работы с директорией /opt/oracle/, поэтому меняется владелец данной директории, тем самым получив к ней полный доступ.
chown –R sk.wheel /opt/oracle
В процессе инсталляции необходимо добавить русский язык в список выбранных (рисунок 2.3.2.1).
Затем, указывается директория, в которую будет проинсталлирован Oracle (рисунок 2.3.2.2).
В качестве кодировки БД выбирается Юникод – UTF8. Глобальное имя БД остается по умолчанию – orcl.
Рисунок 2.3.2.1 - Выбор языков для БД
Рисунок 2.3.2.2 - Выбор директории для установки сервера
Далее указывается директория для хранения файлов БД (рисунок 2.3.2.3).
Рисунок 2.3.2.3 - Выбор директории для файлов БД
Затем вводится пароль для всех системных пользователей (рисунок 2.3.2.4).
Рисунок 2.3.2.4 - Задание паролей для системных пользователей
После этого начинается копирование файлов системы. Перед окончанием установки потребуется запустить два скрипта от пользователя root, которые задают параметры для Oracle.
После установки система готова к использованию, но если перегрузить компьютер, то Oracle надо будет запускать заново. Поэтому необходимо сконфигурировать ОС на запуск Oracle.
Открывается /etc/oratab и изменяется последняя строка с N на Y, чтобы инстанция (в данном случае - orcl) запускалась вместе с сервером [7].
Необходимо описать переменные среды в /etc/profile:
### Oracle 10g ###
export ORACLE_HOME="/u01/app/oracle"
export ORACLE_SID=orcl
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export PATH=$PATH:$ORACLE_HOME/bin
Файл /etc/rc.d/oracle стартует, перезагружает и останавливает сервер. Содержимое данного файла описано в Приложении Ж. Чтобы запустить Oracle в консоли вводится /etc/rc.d./oracle start.
Система должна запуститься. Обратившись по адресу http://localhost:1158/em в браузере загрузится Oracle Enterprise Manager. А если обратиться по адресу http://localhost:5560/isqlplus, то загрузится web-интерфейс для работы с PL/SQL.
2.4 Разработка приложения СДО
Разработка СДО ведется с использованием объектно-ориентированного подхода. Следовательно, приложение представляет собой набор объектов взаимодействующих между собой. Поэтому при разработке приложения необходимо как можно правильнее разделить выполняемые задачи между объектами.
СДО строится по схеме Модель-Вид-Контроллер (MVC, Model-View-Controller). Модель представляет систему, вид отвечает за отображение модели, а контроллер обрабатывает данные, поступающие от пользователя.
В качестве вида выступает страница JSP, отображающие данные для пользователя и позволяющие вводить новые данные. После введения новых данных управление передается контроллеру, который проверяет правильность введенных данных. Роль контроллера выполняет сервлет. После проверки введенных данных, инициализируется модель. В данной системе каждой таблице базы данных, соответствует два класса модели: все свойства первого класса, соответствуют полям таблицы, а второй класс – отвечает за непосредственное взаимодействие с таблицей. Таким образом, проверенные контроллером данные, присваиваются объекту, который соответствует таблице БД. Этот объект сохраняется в таблице объектом, который отвечает за взаимодействие с этой таблицей. После того как модель обновилась, необходимо пользователю отобразить изменения, для этого делается выборка из БД и вид отображает внесенные изменения [8].
Одной из проблем, с которой пришлось столкнуться при разработке приложения - была проблема кодировки представления данных кириллицей из БД. Попытка устранения данной проблемы производилась на сервере БД Oracle, путем многочисленных перестановок с различными кодировками и попытками задать в переменных среды кодировку. Но все это было безуспешно. Однажды, была осуществлена попытка ввода данных через SQL*Plus по средствам web-интерфейса, а не через консоль, как это делалось ранее. После выборки, было обнаружено, что введенные данные нормально выводятся, используя все буквы кириллицы. Т.е. ошибка возникает во время ввода данных и явно, что сервер БД здесь не причем.
В конечном счете, выяснилось, что когда данные забираются из формы, они преобразуются в неизвестную кодировку. Поэтому при получении скриптом данных из формы их следует явно преобразовывать к нужной кодировке. Т.к. в разрабатываемой системе используется кодировка UTF-8, то преобразование кодировки производится следующим методом [9]:
request.setCharacterEncoding(“UTF-8”)
2.4.1 Разработка форм
Вся информация, хранящаяся в БД, должна быть отображена на экране, т.е. для этого необходимо создавать специальные формы ввода, изменения и удаления данных. Т.к. общение со стороны клиента происходит через web-браузер, то наиболее удобным средством для создания и обработке на стороне клиента форм является JavaScript.
В качестве примера ниже приведен код формы ввода факультета:
В данном примере элементы формы выводятся в ячейки таблицы для ровного представления на странице. Рассмотрим, элементы формы:
- тэг, описывающий форму, параметр method определяет каким методом будут передаваться данные сервлету: post или get; параметр action определяет, какому сервлету передавать параметры из формы на обработку.
Рисунок 2.4.1.1 - Форма добавления/удаления факультета
Рисунок 2.4.1.2 - Форма изменения/удаления факультетов
Исходный код формы, приведен в Приложении И.
2.4.2 Разработка классов
В разд. 2.4 была описана схема взаимодействия классов в приложении. Ниже рассматривается, непосредственная разработка классов.
Для работы с таблицей факультетов (Faculty), создается специальный класс Faculty. Описание класса осуществляется следующей конструкцией:
public class Faculty
Данный класс содержит свойства, соответствующие всем полям таблицы Faculty, т.е. facultyID, facultyName, facultyShortName. Описание этих свойств, производится следующим образом:
private int facultyID;
private String facultyName;
private String facultyShortName;
По правилам объектно-ориентированного программирования, не следует разрешать прямой доступ к полям класса, т.е. описывать их ключевым словом public. Осуществлять этот доступ следует при помощи специальных методов, которые будут устанавливать, и извлекать значения свойств класса.
Для извлечения значения свойства facultyID, используется следующий метод:
public int getFacultyID() {
return facultyID;
}
Для изменения и задания свойства facultyID, используется метод setFacultyID:
public void setFacultyID(int facultyID) {
this.facultyID = facultyID;
}
Во время создания объекта выполняется особый метод, называемый конструктором. Конструкторы бывают пустыми, т.е. в их задачу входит выделение адресного пространства для создающегося объекта, а бывают конструкторы с параметрами, которые помимо выделения адресного пространства, задают значения свойств объекта. Конструктор с параметрами выглядит следующим образом:
public Faculty(int facultyID, String facultyName, String facultyShortName) {
this.facultyID=facultyID;
this.facultyName=facultyName;
this.facultyShortName=facultyShortName;
}
Создав класс, который будет содержать значения записи из таблицы, необходимо создать класс, который при помощи запросов будет извлекать данные из таблицы и записывать их в нее.
Исходный код класса Faculty приведен в Приложении И.
2.4.3 Разработка запросов
Для работы с таблицей БД в приложении разрабатывается отдельный класс. В этом классе описываются в качестве полей все запросы, выполняемые к данной таблице БД. Сервлет, вызвав методы этого класса, осуществляет ввод, изменение и редактирование данных в БД.
Существует две разновидности запросов: возвращающие набор данных и изменяющие набор данных. Запросы, которые возвращают набор данных, их еще называют запросы на выборку, осуществляются оператором SQL SELECT. Запросы, которые вносят изменения в базу данных, осуществляются операторами INSERT, UPDATE, DELETE [10].
У класса, работающего с таблицей БД, описаны свойства типа PreparedStatement. В конструкторе класса определяются значения этих свойств, которые непосредственно являются запросами к таблице Faculty.
Значения свойствам задаются следующим образом:
sqlGetAllFaculty=connection.prepareStatement("SELECT * FROM Faculty ORDER BY facultyName");
sqlInsert=connection.prepareStatement("INSERT INTO Faculty (facultyName, facultyShortName) VALUES (?, ?)");
sqlUpdate=connection.prepareStatement("UPDATE Faculty SET facultyName=?, facultyShortName=? WHERE facultyID=?");
sqlDelete=connection.prepareStatement("DELETE FROM Faculty WHERE facultyID=?");
sqlGetRecord=connection.prepareStatement("SELECT * FROM Faculty WHERE facultyID=?");
sqlFindByName=connection.prepareStatement("SELECT * FROM Faculty WHERE facultyName=?");
? – означает, что на место этого знака будет подставлен параметр. Подстановка параметров осуществляется методами setxxx(, ). Номер параметра начинается с 1 и увеличивается при чтении запроса слева направо.
Ниже приведен метод, добавляющий новый факультет в БД:
public void Insert(Faculty rec) throws SQLException{
sqlInsert.setString(1, rec.getFacultyName());
sqlInsert.setString(2, rec.getFacultyShortName());
sqlInsert.executeUpdate();
}
Следует заметить, что в случае, когда запрос вносит изменения в БД, а к таким относятся INSERT, UPDATE, DELETE, то необходимо использовать метод executeUpdate(). А в случае, когда осуществляется выборка из БД оператором SELECT, то используется метод executeQuery().
Метод, осуществляющий выборку по названию факультета, выглядит следующим образом:
public boolean isRecord(String recName) throws SQLException {
sqlFindByName.setString(1, recName);
ResultSet rs=sqlFindByName.executeQuery();
if(!rs.next()) return false;
return true;
}
Исходные коды программы для работы с таблицей факультетов приведены в Приложении И.
2.5 Руководство пользователя
2.5.1 Установка системы
Для работы с СДО необходимо ее проинсталлировать. Процесс инсталляции не вызывает затруднений. Вначале следует указать параметры соединения с базой данных (рисунок 2.5.1.1).
Рисунок 2.5.1.1 – Задание параметров соединения
После того, как были установлены параметры соединения, и база данных была успешно развернута, следует создать администратора системы (рисунок 2.5.1.2).
Рисунок 2.5.1.2 – Создание администратора системы
Создав администратора системы, инсталляцию можно считать законченной. Для безопасности следует удалить директорию installation, чтобы злоумышленники не могли переустановить систему, уничтожив данные, хранящиеся в БД.
2.5.2 Администрирование системы
Начинать работу с СДО следует с заполнения основных справочников. Для этого войдя на главную страницу, необходимо пройти идентификацию. Процесс идентификации показан на рисунке 2.5.2.1. Заполнение справочников осуществляют, как администраторы, так и секретари факультетов и кафедр. Поэтому администратору следует создать новые группы пользователей, которые будут заполнять систему. Создание группы пользователей показано на рисунке 2.5.2.2.
Рисунок 2.5.2.1 – Идентификация пользователя
Экранные формы, отображающие процесс администрирования СДО представлены в Приложении К.
Рисунок 2.5.2.2 – Создание новой группы
После создания групп администрирующих систему, необходимо приступить к ее администрированию. Рассмотрим процесс заполнения справочников на справочнике специальностей. Для этого выбирается в меню «Управление системой» «Справочник специальностей». В форму добавления вводятся «Код специальности», «Название специальности» и «Сокращенное название специальности». Поля, помеченные звездочкой, обязательны к заполнению. Если данные введены верно и еще не содержатся в таблице, то система подтвердит ввод сообщением (рисунок 2.5.2.3). В случае неправильного ввода, система выдает сообщение об ошибке.
Рисунок 2.5.2.3 – Добавление данных в справочник
Если при вводе совершена ошибка, то ее можно исправить. Для этого необходимо в справочнике найти запись с ошибкой и щелкнуть по кнопке, находящейся справа от этой записи. Откроется форма редактирования записи, показанная на рисунке 2.5.2.4. После внесения изменений, необходимо нажать кнопку «Применить». Если внесенные изменения не противоречат данным, имеющимся в таблице, то система подтвердит изменения (рисунок 2.5.2.5), иначе выдаст сообщение об ошибке.
Рисунок 2.5.2.4 – Редактирование записи справочника
Рисунок 2.5.2.5 – Подтверждение о внесенных изменениях
Если запись в справочнике становится не актуальной, то имеется возможность удалить. Для этого необходимо отметить галочкой удаляемые записи и нажать кнопку удалить. В случае, когда у удаляемой записи существуют подчиненные записи, удаление становится невозможным и система сообщает об ошибке, показанной на рисунке 2.5.2.6. Если подчиненных записей нет, то удаление проходит успешно (рисунок 2.5.2.7).
Рисунок 2.5.2.6 – Ошибка при удалении записи
Рисунок 2.5.2.7 – Сообщение, подтверждающее удаление
После заполнения первичных справочников, следует заполнять составные справочники, т.е. создаваемые на основе данных, хранящихся в первичных справочниках. Одним из составных справочников является справочник «Кафедры». Для кафедры вводятся название и сокращенное название, а факультет, которому подчинена эта кафедра, выбирается из разворачивающегося списка, сформированного на основании справочника «Факультеты». Форма добавления кафедр показана на рисунке 2.5.2.8.
Рисунок 2.5.2.8 – Добавление кафедры
2.5.3 Разработка учебных курсов
Прежде чем приступить к формированию самого учебника, необходимо добавить название учебного курса и назначить преподавателя. Для этого следует войти в раздел «Учебные курсы», показанный на рисунке 2.5.3.1.
Для администрирующих пользователей будет доступен полный список учебников, а для авторов учебных курсов, только курсы, где они являются авторами.
Рисунок 2.5.3.1 - Работа с учебными курсами
Для разработки учебного курса автору необходимо войти в конструктор учебного курса. Изначально появится пустая страница с возможностью добавления раздела и создания тестов учебника. Чтобы добавить новый раздел нужно заполнить поле «Название раздела» и нажать кнопку «Добавить».
Чтобы добавить текстовое и мультимедиа содержимое в раздел учебника, нужно перейти в раздел, который необходимо разработать. Перейдя по ссылке, появится редактор, показанный на рисунке 2.5.3.2, с помощью которого раздел наполняется содержимым. Заполнив содержимым окно редактора, следует нажать кнопку «Сохранить», раздел будет сформирован. При необходимости редактирования или удаления содержимого нажмите соответственно кнопки «Редактировать текст раздела» или «Удалить текст раздела».
Для каждого раздела учебного курса на сервере создается отдельная директория под файлы. При удалении раздела, директория с файлами удаляется автоматически. При удалении учебного курса автоматически удаляется директория всего учебного курса.
Рисунок 2.5.3.2 - Редактирование содержимого раздела
Чтобы создать новый тест в учебнике следует в конструкторе нажать кнопку «Тесты учебника». Если же тест необходимо добавить в какой-либо раздел, то следует перейти по ссылке в нужный раздел и нажать кнопку «Тесты раздела». На рисунке 2.5.3.3 показан список тестов учебника.
Рисунок 2.5.3.3 - Работа с тестами
Чтобы добавить новый тест необходимо заполнить поля формы. В названии теста указывается его название. Далее осуществляется переход к формированию вопросов и ответов, что показано на рисунках 2.5.3.4 и 2.5.3.5 соответственно.
Рисунок 2.5.3.4 - Работа с вопросами теста
Рисунок 2.5.3.5 – Добавление ответа на вопрос
2.5.4 Процесс обучения
Процесс обучения организовывается на основании подготовленного учебного плана, как и при традиционной форме обучения. Чтобы приступить к обучению, пользователю необходимо идентифицироваться в системе и войти в раздел «Обучение», который расположен в главном меню. Процесс функционирования СДО показан в Приложении Л.
Если студент обучается по нескольким специальностям одновременно, то ему предоставляется для выбора список всех его специальностей.
На рисунке 2.5.4.1 показан вид учебного плана, который доступен идентифицировавшемуся студенту.
Рисунок 2.5.4.1 – Учебный план
Студенту необходимо выбрать желаемый курс для изучения в данный момент и перейти по ссылке. Перед ним появляется содержание учебного курса, осуществляя переходы по которому, он попадает в разделы электронного учебника. Изучив нужные материалы, студенту предлагается прохождение тестирование. Процесс тестирования показан на рисунке 2.5.4.2.
Рисунок 2.5.4.2 - Тестирование
Результаты тестирования сохраняются в журналах. Преподаватель имеет возможность просматривать журналы и результаты прохождения тестирования, что показано на рисунке 2.5.4.3.
Заключение
В очень быстром ритме жизни, время становится все более и более ценным ресурсом. Человек должен много работать, чтобы быть успешным и занимать определенное положение в обществе. Но работать эффективно невозможно без получения новых знаний. Развитие Интернета и компьютеризация общества дают большие возможности человеку, делая его более мобильным. А системы дистанционного обучения, позволяют получать новые знания в любое удобное время.
Разработка СДО является непростой задачей, т.к. нужно не ошибиться в выборе программного комплекса. Технология Java позволила разработать защищенное, легко изменяемое и независимое от платформы web-приложение, которое предъявляет минимальные требования к клиентским компьютерам. В свою очередь, СУБД Oracle Database 10g обеспечивает надежность хранения данных.
Используемая трехзвенная архитектура построения приложения «клиент/сервер приложений/сервер БД», делает систему более гибкой и дает возможность заменять звенья.
Разработанная политика прав, позволяет легко разрешать или запрещать доступ к разделам системы. Введение же нового модуля не потребует изменения программного кода приложения, а всего лишь добавит права, которые будут включены администратором в нужных группах.
Конструктор учебных курсов позволяет использовать текстовые, графические и мультимедиа материалы для изложения учебного материала. Контроль знаний осуществляется при помощи тестирования. Разработанные пять видов тестов, позволят наиболее гибко осуществить проверку усвоения знаний. Используемая методика задания сложности вопросам, дает наиболее качественную оценку знаний.
С помощью журналов успеваемости преподаватели всегда могут получить достоверную информацию об обучении студента, выяснить для себя, где студенты допускают наибольшее количество ошибок, что в конечном итоге позволит усовершенствовать учебный курс.
В дальнейшем возможна разработка форума для СДО, который позволит проводить обсуждение непонятых тем учебных курсов, обмениваться опытом в изучении материала между студентами, проводить коллективные дискуссии, позволяющие заменить общение на занятиях в аудиториях.
Разработанная СДО на данном этапе является законченным приложением и может быть использована для организации дистанционного обучения кафедры ВТИТ, что позволит подготавливать большее количество высокопрофессиональных кадров.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1 Том Кайт. Oracle для профессионалов. Пер. с англ. - СПб.: ООО «ДиаСофтЮП», 2003. — 672 с.
2 Миллсап К., Хольт Д. Oracle. Оптимизация производительности. – Пер. с англ. – СПб.: Символ-Плюс, 2006. - 464с., ил.
3 Хабибуллин И.Ш. Самоучитель Java 2. – СПб.: БХВ-Петербург, 2005. – 720с.: ил.
4 Х.М.Дейтл, А.Д.Дейтл, С.И. Сантри. Технологии программирования на Java 2. Пер. с англ. –М.: ООО «Бином-Пресс», 2003 г. -560с.: ил. В трех книгах.
5 http://www.pcmag.ru/library/detail.php?ID=9281
6 Смирнов С.Н., Задворьев И.С. Работаем с Oracle. Учебное пособие/2-е издание, испр. и доп. –М.: Гелиос АРВ, 2002 – 496 с.
7 К. Клягин. Свидание с оракулом// Хакер Спец.–2005-№03(52)-С.32-35.
8 А. Синтес. Освой самостоятельно объектно-ориентированное программирование за 21 день. : Пер. с англ. –М.: Издательский дом «Вильямс», 2002. – 672 с. : ил.
9 www.citforum.ru/internet/javascript/java_rbint.shtml.htm
10 Глушаков С.В., Ломотько Д.В. Базы данных. –Харьков: Фолио; М.: ООО «Издательство АСТ», 2002. – 504 с. – (Учебный курс).
Приложения
Приложение А
Трехзвенная архитектура построения приложения
Приложение Б
Инфологическая модель