<%= scripting language expression %>
Использование точки с запятой в JSP-выражениях запрещено, даже в тех случаях, когда у такого же выражения, используемого в скриптлете, она присутствует.
JavaBean-компоненты - это Java-классы многократного использования, которые можно объединять в приложения. Любой Java-класс, который удовлетворяет определенным правилам создания, можно считать JavaBean-компонентом.
Технология страниц JavaServer поддерживает использование JavaBean-компонентов с элементами языка JSP. Вы можете легко создавать и инициализировать компоненты, а также получать и устанавливать значения их свойств. Правила создания JavaBean-компонентов управляют свойствами класса и методами public, которые дают доступ к свойствам.
В качестве свойств JavaBean-компонентов могут быть:
· Чтение/запись, только чтение или только запись
· Простой (JavaBean-компонент), в этом случае он содержит одно значение или индексированный, то есть представляющий массив значений
Реализация свойства при помощи переменной экземпляра не является необходимым. К свойству просто должен осуществляться доступ с помощью методов public, удовлетворяющих определенным условиям:
· Для каждого читаемого свойства у компонента должен быть метод, вида: PropertyClass getProperty() { ... }
· Для каждого записываемого свойства у компонента должен быть метод, вида: setProperty(PropertyClass pc) { ... }
Кроме методов свойств, JavaBean-компонент должен определять конструктор, у которого нет параметров.
Элемент jsp:useBean объявляет, что в странице будет использован компонент, который хранится, и к которому есть доступ из определенной области действия. Такой областью действия может быть приложение, сессия, запрос или страница. Если такого компонента не существует, выражение само создает компонент и хранит его как атрибут объекта области действия. Значение атрибута id определяет имя компонента в области действия и идентификатор, используемый для того, чтобы ссылаться на компонент из других JSP-элементов и скриптлетов.
При разработке данного программного продукта была избрана концепция визуального моделирование проекта, реализованная при помощи языка моделирования UML. В качестве среды проектирования была выбрана Ration Rose. Сначала была создана диаграмма вариантов использования, описывающая общую функциональность данного программного продукта.
Рис 2.1 Диаграмма вариантов использования
На данной диаграмме отображено взаимодействие программы с различными актерами. Существует три типа пользователей: администратор, преподаватель, студент. Администратору доступны такие функции, как создание, изменение и удаление пользователей разных уровней. Преподавателю не доступны функции администратора, но доступны функции администрирования тестов и просмотра статистики их прохождения студентами. Студенту доступны лишь функции прохождения тестов и получения личной статистики.
Далее были разработаны модели данных о пользователях, тестах и статистики которые были описаны в 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.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.5 Архитектура программного обеспечения
Программное обеспечение имеет двухуровневую структуру. На верхнем уровне находиться программное обеспечение реализованное в виде сервлета или JSP-страницы. Нижний уровень представляет собой ПК клиента на котором установлен Web-браузер. Данные на сервере хранятся в XML-файлах. При обращении к серверу работа с данными на JSP-страницах осуществляется через классы JavaBeans (TypeBean, TestsBean, StatsBean), которые в свою очередь обращаются к классам XMLLogin, XMLTests и XMLStats. Таким образом достигается большая независимость уровня данных от уровня приложений. Т.к. классы JavaBeans, находящиеся на внешнем уровне не взаимодействуют непосредственно с файлами данных, то при изменении способа хранения данных будут затронуты только классы XMLLogin, XMLTests и XMLStats, которые отвечают за хранение и изменение данных. Таким образом программное обеспечение становиться более «гибким» и легко изменяемым. Пользователь взаимодействует только со внешним уровнем ПО, представленного JSP-страницами.
Перед непосредственным созданием JSP страниц необходимо уяснить общую структуру программы и взаимодействие между страницами.
рис 2.6. Диаграмма навигаций
Работа с программой начинается со страницы login.jsp.
рис 2.7. Начальная страница программы login.jsp
При правильном вводе логина и пароля пользователь попадает на страницу main.jsp, которая направляет в зависимости от его прав на страницы admin.jsp, teacher.jsp и testspassing.jsp. Страница администратора admin.jsp позволяет создавать, редактировать и удалять пользователей. Страница преподавателя teacher.jsp позволяет создавать, редактировать и удалять тесты, вопросы и ответы к ним, просматривать статистику проведения тестового контроля. Страница студента testspassign.jsp позволяет студенту выбрать тест для прохождения и просматривать информацию о пройденных им тестах.