Смекни!
smekni.com

Разработка прикладной программы тестового контроля с использованием технологий JSP и сервлетов (стр. 4 из 5)

<%= scripting language expression %>

Использование точки с запятой в JSP-выражениях запрещено, даже в тех случаях, когда у такого же выражения, используемого в скриптлете, она присутствует.

1.7 Технология JavaBeans

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

Технология страниц JavaServer поддерживает использование JavaBean-компонентов с элементами языка JSP. Вы можете легко создавать и инициализировать компоненты, а также получать и устанавливать значения их свойств. Правила создания JavaBean-компонентов управляют свойствами класса и методами public, которые дают доступ к свойствам.

В качестве свойств JavaBean-компонентов могут быть:

· Чтение/запись, только чтение или только запись

· Простой (JavaBean-компонент), в этом случае он содержит одно значение или индексированный, то есть представляющий массив значений

Реализация свойства при помощи переменной экземпляра не является необходимым. К свойству просто должен осуществляться доступ с помощью методов public, удовлетворяющих определенным условиям:

· Для каждого читаемого свойства у компонента должен быть метод, вида: PropertyClass getProperty() { ... }

· Для каждого записываемого свойства у компонента должен быть метод, вида: setProperty(PropertyClass pc) { ... }

Кроме методов свойств, JavaBean-компонент должен определять конструктор, у которого нет параметров.

Элемент jsp:useBean объявляет, что в странице будет использован компонент, который хранится, и к которому есть доступ из определенной области действия. Такой областью действия может быть приложение, сессия, запрос или страница. Если такого компонента не существует, выражение само создает компонент и хранит его как атрибут объекта области действия. Значение атрибута id определяет имя компонента в области действия и идентификатор, используемый для того, чтобы ссылаться на компонент из других JSP-элементов и скриптлетов.


2 Проект программного продукта

2.1 Документация проекта

2.1.1 Общая функциональность программного продукта

При разработке данного программного продукта была избрана концепция визуального моделирование проекта, реализованная при помощи языка моделирования UML. В качестве среды проектирования была выбрана Ration Rose. Сначала была создана диаграмма вариантов использования, описывающая общую функциональность данного программного продукта.

Рис 2.1 Диаграмма вариантов использования

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

2.1.2 Модель данных

Далее были разработаны модели данных о пользователях, тестах и статистики которые были описаны в DTD файлах Users.dtd, Tests.dtd и Stats.dtd.

Users.dtd

<!ELEMENT User (User_ID, FirstName, SecondName, Group, Position, Rank, Login, Password, Type, Date)>

<!ELEMENT User_ID (#PCDATA)>

<!ELEMENT FirstName (#PCDATA)>

<!ELEMENT SecondName (#PCDATA)>

<!ELEMENT Group (#PCDATA)>

<!ELEMENT Position (#PCDATA)>

<!ELEMENT Rank (#PCDATA)>

<!ELEMENT Login (#PCDATA)>

<!ELEMENT Password (#PCDATA)>

<!ELEMENT Type (#PCDATA)>

<!ELEMENT Date (#PCDATA)>

<!ELEMENT Users (User+)>

Корневым элементом данной структуры является Users, который представляет информацию о всех пользователях. Информация о конкретном пользователе находиться в элементе User, который в свою очередь содержит поля User_ID, FirstName, SecondName, Group, Position, Rank, Login, Password, Type, Date. Все элементы отображают различные характеристики пользователя, и являются обычными текстовыми полями.

Tests.dtd

<!ELEMENT Test (Test_ID, Subject, Teacher, Questions, Time_Limit)>

<!ELEMENT Test_ID (#PCDATA)>

<!ELEMENT Subject (#PCDATA)>

<!ELEMENT Teacher (#PCDATA)>

<!ELEMENT Question (Quest_ID, Text,Quont_ Ans,Answers, Right_Ans_ID)>

<!ELEMENT Time_Limit (#PCDATA)>

<!ELEMENT Quest_ID (#PCDATA)>

<!ELEMENT Text (#PCDATA)>

<!ELEMENT Quont_Ans (#PCDATA)>

<!ELEMENT Answer (Ans_ID, Ans_Text, Correctness)>

<!ELEMENT Right_Ans_ID (#PCDATA)>

<!ELEMENT Ans_ID (#PCDATA)>

<!ELEMENT Ans_Text (#PCDATA)>

<!ELEMENT Correctness (#PCDATA)>

<!ELEMENT Answers (Answer+)>

<!ELEMENT Questions (Question+)>

<!ELEMENT Tests (Test+)>

Поле Tests является корневым и содержит информацию о всех тестах. Информация о конкретном тесте содержится в элементе Test, он включает в себя атрибуты Test_ID, Subject, Teacher, Time_Limit, а также вложенный элемент Questions, который содержит информацию о вопросах. Информация о конкретном вопросе содержится в элементе Question, он включает в себя атрибуты Quest_ID, Text,Quont_ Ans, Right_Ans_ID, а также вложенный элемент Answers, содержащий информацию о ответах на данный вопрос. Информация о конкретном ответа содержится в элементе Answer, который характеризуется полями Ans_ID, Ans_Text, Correctness.

Stats.dtd

<!ELEMENT Stat (S_Stat_ID,S_User_ID,S_Test_ID,S_Questions)>

<!ELEMENT S_Stat_ID (#PCDATA)>

<!ELEMENT S_User_ID (#PCDATA)>

<!ELEMENT S_Test_ID (#PCDATA)>

<!ELEMENT S_Question (S_Quest_ID,S_Correctness)>

<!ELEMENT S_Quest_ID (#PCDATA)>

<!ELEMENT S_Correctness (#PCDATA)>

<!ELEMENT S_Questions (S_Question+)>

<!ELEMENT Stats (Stat+)>

Поле Stats является корневым и содержит информацию о всех пройденных тестах. Статистика прохождения конкретного теста содержится в элементе Stat, он включает в себя атрибуты S_Stat_ID,S_User_ID,S_Test_ID, а также вложенный элемент S_Questions, который содержит информацию о корректности ответов, которые давал студент при ответах на вопросы.

2.1.3 Объектная модель приложения

Диаграммы классов изображенные на рисунках 2.2, 2.3, 2.4 отображают объектную модель части приложения для работы с пользователями, тестами и статистикой соответственно.

Класс XMLLogin отвечает за работу с XML файлом, в котором хранятся данные о пользователях. Данный класс реализует основную функциональность администратора . Функция addUser() добавляет нового пользователя, в качестве параметров получает данные, отображающие все его характеристики (User_ID, FirstName, SecondName, Group, Position, Rank, Login, Password, Type, Date). Функция removeUser() удаляет пользователя, номер которого передается в качестве параметра. Функция modifyUser() изменяет данные о конкретном пользователе, в качестве параметров получает номер пользователя и значение характеристик.

Функция readData() читает данные из файла, имя которого храниться в поле fileName и записывает их в поле Users, которое является контейнером для хранения данных. Классы User_ID, FirstName, SecondName, Group, Position, Rank, Login, Password, Type, Date были сгенерированы автоматически при помощи среды разработки Jbuilder 8.0 на основе модели данных и используются для хранения и удобной работы с данными. Каждый класс хранит информацию о соответствующем элементе. Функция newUser() является private-функцией и используется для создания объекта типа User.

рис 2.1 Диаграмма классов XMLLogin и TypeBean

Класс XMLTests отвечает за работу с данными о тестах. Данный класс реализует основную функциональность преподавателя. Функция addTest() добавляет новый тест, в качестве параметров получает данные, отображающие все его характеристики (Test_ID, Subject, Teacher, Questions, Time_Limit). Функция removeTest() удаляет тест, номер которого передается в качестве параметра. Функция readData() читает данные из файла, имя которого храниться в поле fileName и записывает их в поле Tests, которое является контейнером для хранения данных. Классы Test_ID, Subject, Teacher, Questions, Time_Limit были сгенерированы автоматически при помощи среды разработки Jbuilder 8.0 на основе модели данных и используются для хранения и удобной работы с данными. Каждый класс хранит информацию о соответствующем элементе. Функция newTest() является private-функцией и используется для создания объекта типа Test.

рис 2.2 Диаграмма классов XMLTests и TestsBean

рис 2.3 Диаграмма классов XMLStats и StatsBean

2.1.4 Архитектура программного обеспечения

рис 2.5 Архитектура программного обеспечения

Программное обеспечение имеет двухуровневую структуру. На верхнем уровне находиться программное обеспечение реализованное в виде сервлета или JSP-страницы. Нижний уровень представляет собой ПК клиента на котором установлен Web-браузер. Данные на сервере хранятся в XML-файлах. При обращении к серверу работа с данными на JSP-страницах осуществляется через классы JavaBeans (TypeBean, TestsBean, StatsBean), которые в свою очередь обращаются к классам XMLLogin, XMLTests и XMLStats. Таким образом достигается большая независимость уровня данных от уровня приложений. Т.к. классы JavaBeans, находящиеся на внешнем уровне не взаимодействуют непосредственно с файлами данных, то при изменении способа хранения данных будут затронуты только классы XMLLogin, XMLTests и XMLStats, которые отвечают за хранение и изменение данных. Таким образом программное обеспечение становиться более «гибким» и легко изменяемым. Пользователь взаимодействует только со внешним уровнем ПО, представленного JSP-страницами.

2.1.5 Структура прикладной программы

Перед непосредственным созданием JSP страниц необходимо уяснить общую структуру программы и взаимодействие между страницами.

рис 2.6. Диаграмма навигаций

Работа с программой начинается со страницы login.jsp.

рис 2.7. Начальная страница программы login.jsp

При правильном вводе логина и пароля пользователь попадает на страницу main.jsp, которая направляет в зависимости от его прав на страницы admin.jsp, teacher.jsp и testspassing.jsp. Страница администратора admin.jsp позволяет создавать, редактировать и удалять пользователей. Страница преподавателя teacher.jsp позволяет создавать, редактировать и удалять тесты, вопросы и ответы к ним, просматривать статистику проведения тестового контроля. Страница студента testspassign.jsp позволяет студенту выбрать тест для прохождения и просматривать информацию о пройденных им тестах.