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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

“ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”

Кафедра “Автоматизовані системи управління”













Курсовий проект

“ Розробка прикладної програми тестового контролю з використанням технологій JSP та сервлетів ”.















Керівник роботи:

асистент кафедри АСУ /xxxxxx/

Виконавець:

студент групи xxxxxxx









Харків – 2004


МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

“ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”



Кафедра “Автоматизовані системи управління”





Оцінка

_____________________

голова комісії

_____________________

«___»_________2004р.





Курсовий проект

Тема:“ Розробка прикладної програми тестового контролю з використанням технологій JSP та сервлетів”.







Керівник роботи:

асистент кафедри АСУ / xxxxxx./

“____”______________2004р.

Виконавець:

студент групи xxxxxxx

“____”______________2004р.



Харків – 2004


Національний технічний університет "Харківський політехнічний інститут"

Кафедра автоматизованих систем управління



Студент xxxxxxx. Група xxxxxx в Курс 2

З А В Д А Н Н Я

на науково-дослідну курсову роботу

з курсу "Технологія програмування"



Тема:

Розробка прикладної програми тестового контролю з використанням технологій JSP та сервлетів

Постановка задачі:

Під час виконання курсової роботи необхідно спроектувати та реалізувати програму, яка в залежності від прав користувача (адміністратор / викладач / студент) дозволяє: 

додавати, редагувати та видаляти дані про користувачів різних рівнів (адміністратор);

додавати, редагувати та видаляти тести, запитання та відповіді, переглядати статистику проходження тестування студентів (викладач);

проходити тести та переглядати особисту статистику їх проходження (студент).

Доступ до програми повинен здійснюватися за допомогою web-броузеру. Засоби роботи з файлами та обробки даних повинні бути розташовані на web-сервері. Для розміщення серверних компонентів застосувати контейнер сервлетів Tomcat, а для збереження даних про користувачів, тести та статистику – файли XML.

Короткий зміст роботи:

а) реферативна частина

Вивчення предметної області. Вивчення засобів мови Java для роботи з XML-файлами. Вивчення технологій JSP та сервлетів. Вивчення можливостей контейнеру сервлетів Tomcat.

б) теоретична частина

Проектування програмного забезпечення. Визначення вимог щодо програмного забезпечення. Розробка діаграм варіантів використання, класів, послідовності. Проектування інтерфейсу користувача.

в) програмна частина

Реалізація консольної програми для тестування роботи з XML-файлами. Реалізація та тестування програми з використанням технологій JSP та сервлетів. Документування програмного продукту.

Термін демонстрації програмного забезпечення 12.05.2004

Термін захисту курсової роботи 22.05.2004

Керівник курсової роботи _________________________(xxxxxxx.)


Отзыв

на курсовой проект

студента группы xxxxxxxxx



Данный курсовой проект посвящен разработке и реализации прикладной программы тестового контроля с использованием технологии JSP и сервлетов. При выполнении курсовой работы были изучены методы работы с XML-файлами, технологии сервлетов, JSP, JavaBeans. Во время выполнения работы были закреплены знания о методах проектирования, об унифицированном языке моделирования (UML). Программный продукт разрабатывался в рамках интегрированной среды разработки Borland JBuilder.

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

При выполнении данной работы, студент Уманский А.Г. продемонстрировал инициативность и самостоятельность, освоил методы разработки web-ориентированных приложений, выполнял отдельные этапы своей работы в рамках установленных сроков.

Курсовая работа полностью отвечает поставленным требованиям и заслуживает оценки «____________»

	Руководитель курсовой работы:	____________ асс. xxxxxxxx


АНОТАЦІЯ



Розробка прикладної програми тестового контролю з використанням технологій JSP та сервлетів.

Курсовий проект по курсу "Технологія програмування" за спеціальністю «Програмне забезпечення автоматизованих систем», Національний Технічний Університет "Харківський Політехнічний Інститут", Харків 2004.

Даний курсовий проект присвячений розробці програмного забезпечення створення тестів та їх проведення . Використовується технологія JSP та сервлети. Для збереження даних використовується XML. На цій основі розроблено програмне забезпечення мовою Java у середовищі Borland JBuilder 8.0.


АННОТАЦИЯ



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

Курсовой проект по курсу "Технология программирования" специальности «Программное обеспечение автоматизированных систем», Национальный Технический Университет "Харьковский Политехнический Институт", Харьков 2004.

Данный курсовой проект посвящен разработке программного обеспечения создания тестов и их проведения. Используется технология JSP и сервлетов. Для хранения данных используется XML. На этой основе разработано программное обеспечение на языке Java в среде Borland JBuilder 8.0.


ABSTRACT



Elaboration of the program of test control by means of JSP technologies and servlets. 

An academic year project in “Technology of programming” course; specialization “Software of Automatized Systems”, National Technical University “Kharkov Polytechnical Institute”, Kharkov 2004. 

This academic year project is devoted to elaboration of the software of test creation and their carrying out. Technology JSP and servlets are used. XML is used for the data storage. The software was developed by means of Java language in Borland JBuilder environment.


СОДЕРЖАНИЕ



Введение 

ОБЗОР СРЕДСТВ РАЗРАБОТКИ ПРОГРАММНОГО ПРОДУКТА

Расширяемый язык разметки XML

Описание типа документа DTD

Значение XML и платформы Java

Обзор стандартных анализаторов DOM и SAX

Технология Java Servlet

Технология Java Server Pages (JSP)

Технология JavaBeans

		Проект программного продукта. Документация

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

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

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

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

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

Проектирование интерфейса пользователя

 Разработка и тестирование проекта

Разработка классов для работы с данными

Разработка JSP-страниц и классов JavaBeans

Интерфейс программного продукта

Выводы

	СПИСОК использованных источников 


ВВЕДЕНИЕ



Задачей данного курсового проекта является разработка Web-ориентированного приложения тестового контроля знаний студентов. Основной особенностью Web-приложений является использование их большим количеством пользователей, которые могут использовать различные операционные системы. Таким образом должна обеспечивается независимость от платформы. Java, являясь многоплатформенным языком отлично справляется с данной задачей. 

Тестовый контроль является неотъемлемой частью современного учебного процесса. Программа создана для автоматизации данного процесса, получения расширенных возможностей сохранения результатов и ведения статистики тестирования. Процесс создания и администрирования тестами имеет иерархическую(или вложенную структуру), что сделало его наглядным и простым. Работа проектировалась с учетом разделения прав пользователей, что позволило оградить программу от несанкционированных доступов. 

Все вышеизложенное говорит о том, что созданная прикладная программа в среде JBuilder 8.0 значительно ускорит производительность труда преподавателей, сократит временные затраты студентов на прохождение контроля, создаст предпосылки для достоверности полученных оценок.


обзор средств разработки программного продукта



Расширяемый язык разметки данных XML



XML (Extensible Markup Language) - это язык разметки, описывающий целый класс объектов данных, называемых XML- документами. Этот язык используется в качестве средства для описания грамматики других языков и контроля за правильностью составления документов. Т.е. сам по себе XML не содержит никаких тэгов, предназначенных для разметки, он просто определяет порядок их создания. Набор тэгов может быть легко расширен. Cам процесс создания XML документа очень прост и требует от разработчика лишь базовых знаний HTML и понимания тех задач, которые необходимо выполнить, используя XML в качестве языка разметки. Таким образом, у разработчиков появляется уникальная возможность определять собственные команды, позволяющие им наиболее эффективно определять данные, содержащиеся в документе. Автор документа создает его структуру, строит необходимые связи между элементами, используя те команды, которые удовлетворяют его требованиям и добивается такого типа разметки, которое необходимо ему для выполнения операций просмотра, поиска, анализа документа. 

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

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

Тело документа XML состоит из элементов разметки (markup) и непосредственно содержимого документа - данных (content). XML - тэги предназначены для определения элементов документа, их атрибутов и других конструкций языка. 



Описание типа документа DTD



В XML-документах DTD определяет набор действительных элементов, идентифицирует элементы, которые могут находиться в других элементах, и определяет действительные атрибуты для каждого из них. Синтаксис DTD весьма своеобразен и от автора-разработчика требуются дополнительные усилия при создании таких документов (сложность DTD является одной из причин того, что использование SGML, требующего определение DTD для любого документа, не получило столь широкого распространения как, например, HTML). Как уже отмечалось, в XML использовать DTD не обязательно - документы, созданные без этих правил, будут правильно обрабатываться программой-анализатором, если они удовлетворяют основным требованиям синтаксиса XML. Однако контроль за типами элементов и корректностью отношений между ними в этом случае будет полностью возлагаться на автора документа. До тех пор, пока грамматика XML-документа не описана, с ним не могут работать универсальные программы-анализаторы. 

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

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

<?xml version="1.0" standalone="yes" ?>

<! DOCTYPE journal SYSTEM "journal.dtd">

...

Внутри же документа DTD- декларации включаются следующим образом: 

...

<! DOCTYPE journal [

<!ELEMENT journal (contacts, issues, authors)>

...

]>

...

В том случае, если используются одновременно внутренние и внешние описания, то программой-анализатором будут сначала рассматриваться внутренние, т.е. их приоритет выше. При проверке документа XML- процессор в первую очередь ищет DTD внутри документа. Если правила внутри документа не определены и не задан атрибут standalone ="yes" , то программа загрузит указанный внешний файл и правила, находящиеся в нем, будут считаны оттуда. Если же атрибут standalone имеет значение "yes", то использование внешних DTD описаний будет запрещено. 

Элемент в DTD определяется с помощью дескриптора !ELEMENT, в котором указывается название элемента и структура его содержимого. 

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

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

Списки атрибутов элемента определяются с помощью ключевого слова !ATTLIST. Внутри него задаются названия атрибутов, типы их значений и дополнительные параметры. 

Всего существует шесть возможных типов значений атрибута: 

CDATA - содержимым документа могут быть любые символьные данные;

ID - определяет уникальный идентификатор элемента в документе;

IDREF( IDREFS )- указывает, что значением атрибута должно выступать название(или несколько таких названий, разделенных пробелами во втором случае) уникального идентификатора определенного в этом документе элемента;

ENTITY (ENTITIES) - значение атрибута должно быть названием (или списком названий, если используется ENTITIES) компонента (макроопределения), определенного в документе;

NMTOKEN (NMTOKENS) - содержимым элемента может быть только одно отдельное слово (т.е. этот параметр является ограниченным вариантом CDATA);

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

Также в определении атрибута можно использовать следующие параметры: 

#REQUIRED - определяет обязательный атрибут, который должен быть задан во всех элементах данного типа;

#IMPLIED - атрибут не является обязательным;

#FIXED "значение" - указывает, что атрибут должен иметь только указанное значение, однако само определение атрибута не является обязательным, но в процессе разбора его значение в любом случае будет передано программе-анализатору; 

Значение - задает значение атрибута по умолчанию; 



Значение XML и платформы Java



Web-службы зависят от способности участников взаимодействовать друг с другом даже при использовании ими различных информационных систем. XML (Extensible Markup Language), язык разметки, делающий данные переносимыми, является ключевой технологией, предназначенной для обеспечения такой способности. Корпоративные пользователи увидели преимущества использования XML для интеграции данных как для совместного использования существующих данных между подразделениями, так и для использования их совместно с другими предприятиями. В результате XML все больше используется в корпоративных интегрированных приложениях, как в сильносвязанных, так и в слабосвязанных системах. Из-за такой способности к интеграции данных XML стал фундаментом Web-вычислений. Web-службы зависят также от способности предприятий использовать различные вычислительные платформы для взаимодействия друг с другом. Это требование делает платформу Java™, программы в которой являются переносимыми, естественным выбором для разработки Web-служб. Этот выбор стал еще более привлекательным после появления

новых Java API для XML, что сделало более легким использование XML в языке программирования Java. Кроме переносимости кода и данных Web-службы должны быть масштабируемыми, безопасными и эффективными. Java™ 2 Platform, Enterprise Edition (J2EE™), специально разработана для удовлетворения этих потребностей. Она облегчает в действительности трудную часть разработки Web-служб, а именно программирование инфраструктуры. Эта инфраструктура включает в себя такие функции как безопасность, управление распределенными транзакциями и управление пулом соединений, которые имеют важнейшее значение для производительности Web-служб. А поскольку компоненты являются повторно используемыми, время разработки существенно уменьшается. Поскольку XML и платформа Java хорошо работают вместе, они стали играть центральную роль в Web-службах. Фактически, преимущества, предлагаемые Java API для XML и платформой J2EE, делают их идеальной комбинацией для размещения Web-служб. Эти API дают возможность сообществу Java, разработчикам и поставщикам сервисных программ и контейнеров начать разработку приложений Web-служб и использование стандартных Java API, составляющих основу принципа технологии Java - Write Once, Run Anywhere™ (пишется один раз, используется везде). Java Web Services Developer Pack (Java WSDP) собирает все эти API в один пакет. Примеры в Java WSDP должны запускаться в контейнере Tomcat (входящим в пакет Java WSDP).


Обзор стандартных анализаторов DOM и SAX



Java API for XML Processing (JAXP) предназначен для обработки XML-данных в приложениях, написанных на языке программирования Java. JAXP использует стандарты анализаторов SAX (Simple API for XML Parsing) и DOM (Document Object Model), так что вы можете выбирать между анализом данных как потока событий или построением их объектного представления. JAXP поддерживает также стандарт XSLT (XML Stylesheet Language Transformations), предоставляющий вам контроль над представлением данных и позволяющий преобразование данных в другие XML-документы или в другие форматы, такие как HTML. JAXP обеспечивает также поддержку пространства имен, позволяя вам работать с DTD, которые могли бы в противном случае вызвать конфликт имен.

JAXP позволяет вам использовать любой XML-совместимый анализатор в вашем приложении. Это обеспечивается при помощи так называемого уровня подключений, который разрешает подключать реализации SAX или DOM API. Уровень подключений позволяет также подключить XSL-процессор, дающий вам контроль над способом отображения ваших XML-данных.

"Simple API" for XML (SAX) представляет собой основанный на событиях механизм последовательного доступа, осуществляющий обработку "элемент-за-элементом". API этого уровня читает и записывает XML в хранилище данных или Web. Для серверных и высокопроизводительных приложений вы должны полностью понимать этот уровень. Но для многих приложений достаточно минимальных знаний. 

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

Document Object Model (объектная модель документа) является искусственной древовидной структурой, в которой каждый узел содержит один из компонентов XML-структуры. Двумя наиболее общими типами узлов являются узлы элементов и текстовые узлы. Использование функций DOM позволяет вам создавать узлы, удалять узлы, изменять их содержимое и проходить по иерархии узлов.

С самого начала DOM разрабатывался нейтральным к языку. Поскольку он был предназначался для использования с языками, подобными С или Perl, DOM не использует преимуществ объектно-ориентированных особенностей Java.

С другой стороны, создание DOM требует чтения полной XML-структуры и хранения дерева объектов в памяти, то есть этот метод использует значительно больше ресурсов CPU и памяти. По этой причине SAX API более предпочтителен для серверных приложений и фильтров данных, которые не требуют наличия данных в памяти.

Однако SAX-протокол требует гораздо большего объема программирования, чем Document Object Model (DOM). Это управляемая событиями модель (вы обеспечиваете методы обратного вызова, а анализатор вызывает их по мере чтения XML-данных), которая затрудняет визуализацию данных. И, наконец, вы не можете вернуться к предыдущей части документа или реорганизовать его, точно также, как не можете вернуться к предыдущим данным в последовательном потоке данных, или реорганизовать символы, прочитанные из потока. По этим причинам разработчики, создающие ориентированное на пользователя приложение, которое отображает XML-документ и, возможно, модифицирует его, будут, вероятно, использовать DOM-механизм,

Когда необходимо изменить XML-структуру, особенно если это нужно сделать в интерактивном режиме, больший смысл имеет применение структуры, находящейся в памяти, такой как DOM. Однако, в то время как DOM предоставляет много мощных возможностей для больших документов (таких как книги и статьи), он также требует много сложного кодирования.

Так как данная курсовая работы представляет собой приложение для работы с небольшими объемами данных, но которые необходимо часто менять, то целесообразно использовать DOM-механизм работы с XML-файлами.



Технология Java Servlet



Сервлет является Java-классом, используемым для расширения функциональных возможностей серверов, на которых размещаются приложения, доступ к которым осуществляется посредством программной модели запрос-ответ. Несмотря на то, что сервлеты могут отвечать на любой тип запроса, они используются для расширения приложений, находящихся на Web-серверах. Для таких приложений технология Java Servlet определяет характерные для HTTP классы сервлетов.

Пакеты javax.servlet и javax.servlet.http обеспечивают интерфейсы и классы для написания сервлетов. Все сервлеты должны реализовывать интерфейс Servlet, который определяет методы жизненного цикла. При реализации службы generic, можно использовать или расширять класс GenericServlet, поставляемый с интерфейсом API для Java Servlet. Класс HttpServlet обеспечивает для обработки служб HTTP такие методы, как doGet и doPost. Служба, обеспеченная сервлетом, реализована в методе service сервлета GenericServlet, методе doMethod (где Method может принимать значения Get, Delete, Options, Post, Put, Trace) сервлета HttpServlet или любых других, определенных протоколом методов, которые определены классом, реализующим интерфейс Servlet. В конце данного раздела, термин метод службы будет использован для любого метода класса сервлета, обеспечивающего службу клиенту.

Общим принципом действия метода службы является извлечение информации из запроса, доступ к внешним ресурсам и последующее заполнение ответа, базирующегося на данной информации. Для сервлетов HTTP, корректной процедурой заполнения ответа будет следующая последовательность действий: заполнение заголовков ответа, получение входящего потока из ответа и запись содержимого тела в исходящий поток. Заголовки ответов всегда должны устанавливаться перед получением PrintWriter или ServletOutputStream. Это необходимо по причине того, что HTTP-протокол ожидает получения всех заголовков перед перед получением содержимого тела. 

Запрос содержит данные, передаваемые между клиентом и сервлетом. Все запросы реализуют интерфейс ServletRequest. Данный интерфейс определяет методы для доступа к следующей информации:

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

Объектно-значимым атрибутам, которые обычно используются для передачи.

информации между контейнером сервлета и сервлетом, или между взаимодействующими сервлетами.

Информации о протоколе, использованном для соединения, а также о клиенте и о сервере, которые вовлечены в запрос.

Информации, относящейся к локализации.

 Ответ содержит данные, передаваемые между сервером и клиентом. Все ответы реализуют интерфейс ServletResponse. Данный интерфейс определяет методы, которые позволяют вам выполнять следующие действия:

Получать исходящий поток, используемый в отправке данных клиенту. Для отправки данных в текстовом виде используйте PrintWriter, возвращенный методом ответа getWriter. Для отправки бинарных данных в теле MIME ответа, используйте ServletOutputStream, возвращенный getOutputStream. Для совмещения бинарных и текстовых данных, к примеру, при создании ответа, сотоящего из нескольких частей, используйте ServletOutputStream, управляя секциями символов вручную.

Обозначать тип содержимого (к примеру, text/html), возвращаемого в данном ответе.

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

Устанавливать информацию о регионе.

Объекты HTTP-ответа HttpServletResponse имеют поля, отображающие такие заголовки HTTP как

Коды статуса (Status codes), используются для обозначения причины, по которой не был удовлетворен запрос.

Файлы сookie (Cookies), используются для сохранения у клиента информации, связанной с приложением. Иногда файлы cookie используются для сохранения идентификатора сессии пользователя.



Технология Java Server Pages



Технология JSP-страниц (JavaServer Pages - JSP) позволяет без труда создавать web-содержимое, у которого есть как статическая, так и динамическая компоненты. JSP-технология воплощает все динамические возможности Java Servlet-технологии, однако обеспечивает при этом более естественный подход к созданию постоянного содержимого. Основными характеристиками JSP-технологии являются:

	Язык разработки JSP-страниц, являющихся текстовыми документами, которые описывают процесс обработки запроса и конструирование ответа.

	Конструкции для получения доступа к объектам на стороне сервера.

	Механизмы, определяющие расширения для JSP-языка.

JSP-страницей является документ с текстовой основой, содержащий два типа текста: статические шаблонные данные, выражаемые при помощи любого формата на текстовой основе, такого как HTML, SVG, WML, и XML, а также JSP-элементы, которые создают динамическое содержимое. 

Статическое содержимое создается в JSP-странице так же, как если бы это была обычная страница, содержащая только текстовый формат данных. Статическое содержимое может быть выражено в любом формате, предназначенном для форматирования текстов, к примеру, HTML, WML и XML. Форматом, определенным по-умолчанию, является HTML. При желании можно использовать и другой формат текста. Для этого включите в начало вашей JSP-страницы директиву page с атрибутом contentType, которому в качестве значения следует установить тип формата.

Динамическое содержимое создается путем обращения к объектам языка программирования Java из элементов сценариев.

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

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

Переменные экземпляра и класса, относящиеся к классу сервлета JSP-страницы, создаются в объявлениях и доступны в скриптлетах и выражениях.

Локальные переменные класса сервлета JSP-страницы создаются и используются в скриптлетах и выражениях.

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

JavaBean-компоненты могут создаваться и быть доступными при помощи модернизированных JSP-элементов.

Вы также можете создавать JavaBean-компонент в объявлении или скриптлете и вызывать методы JavaBean-компонента в скриптлете или выражении. 

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

<%

scripting language statements

%>

Когда языком сценариев является java, скриптлет трансформируется во фрагмент выражения языка Java и вставляется в метод service сервлета JSP-страницы. Переменная языка программирования, созданная в скриптлете, доступна из любой точки JSP-страницы. 

JSP-выражение используется для вставки в поток данных, возвращаемый клиенту, значения выражения языка сценариев, конвертированного в строку. Когда языком написания сценариев является Java, выражение преобразовывается в оператор, конвертирующий значение выражения в объект String и вставляющий его в неявный объект out. Синтаксис такого выражения выглядит следующим образом:

<%= scripting language expression %>

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



Технология JavaBeans



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 позволяет студенту выбрать тест для прохождения и просматривать информацию о пройденных им тестах.



Проектирование интерфейса пользователя

Интерфейс проектируется исходя из диаграммы навигаций. На странице login.jsp необходимо реализовать форму с полями для ввода логина и пароля (рис 2.7). Т.к. с главной страницы возможен переход на все остальные, а со всех страниц возможен возврат на главную страницу, то целесообразно реализовать меню навигации по сайту на каждой странице (см. рис 2.8). На страница admin.jsp, teacher.jsp и testpassing.jsp необходимо реализовать таблицы просмотра информации и формы для добавления, редактирования и удаления различных данных .





рис 2.8. Страница admin.jsp (меню – слево, таблица и форма - справа)


разработка и тестирование проекта



Разработка классов для работы с данными



В начале были разработаны классы, которые служат для хранения, удобного доступа и редактирования данных. Среда разработки Borland JBuilder 8.0, на которой разрабатывался данный программный продукт, позволяет автоматически генерировать классы для хранения и доступа к информации. Таким образом были сгенерированы классы описанные в п.2 данной записки, каждый из которых отвечает за хранение соответствующего элемента файлов Users.xml, Tests.xml и Stats.xml. Для удобного добавления, удаления и редактирования данных были разработаны классы XMLLogin, XMLTests и XMLStats реализующие данные функции, описание данных класса приводиться в разделе 2.1.3. 

Работа данных классов была протестирована при помощи стандартной консоли. 



Разработка JSP-страниц и классов JavaBeans



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

Интерфейс программного продукта



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

На странице администратора расположена информация о всех пользователях приложения. Для изменения информации о конкретном пользователи необходимо нажать на ссылку с его идентификационным номером в таблице. Для удаления пользователя следует нажать на кнопку «-» в соответствующей пользователю строке таблицы. Для добавления реализована форма расположенная справа от таблицы.

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

Прохождение тестов для студента реализовано в виде последовательной смены вопросов (рис 3.1). По окончанию тестирования пользователь получает информацию в виде таблицы о правильности ответов на каждый из поставленных вопросом и получает оценку.





рис 3.1. Страница прохождения тестирования


ВЫВОДЫ



В рамках данной курсовой работы было спроектировано и реализовано Web-ориентированное приложение, предназначенное для проведения тестового контроля знаний студентов. При разработке использовались технологии сервлетов и JSP. Для хранения данных был избран язык разметки XML.

Основной особенностью Web-службы является способность участников взаимодействовать друг с другом даже при использовании ими различных информационных систем. XML обеспечивает легкую переносимость данных, что является ключевой технологией, предназначенной для обеспечения такой способности. Также Web-службы зависят от способности предприятий использовать различные вычислительные платформы для взаимодействия друг с другом. Это требование делает платформу Java™, программы в которой являются переносимыми, естественным выбором для разработки Web-служб. 

При разработке была разработана двухуровневая структура программного обеспечения. На верхнем уровне находиться программное обеспечение реализованное в виде сервлета или JSP-страницы. Нижний уровень представляет собой ПК клиента на котором установлен Web-браузер. Что качается серверной части приложения, то ее структуру также можно разбить на несколько слоев. Уровень данных представлен XML-файлами. С уровнем данных работают непосредственно только классы XMLLogin, XMLTests и XMLStats. Классы, которые отвечают за конечное представление информации на JSP страницах не работают с данными непосредственно, а только через методы классов XMLLogin, XMLTests и XMLStats. Таким образом изменение на уровне данных не повлияет на уровень представления информации, что делает программный продукт более гибким и легко изменяемым.


СПИСОК использованных источников

	

Эккель Б. Философия Java. Библиотека программиста. – СПб.: Питер, 2001. – 880 с.: ил.

Буч Г. Объектно-ориентированный анализ и проектирование. 2-е изд. Пер. с англ. – М.: «Издательство Бином», 1998 – 560с.: ил.

Хабибуллин И. Ш. Создание распределённых приложений на Java 2. – СПб.: БХВ-Петербург, 2001 г. – 688с.: ил.

Хантер. Д. Введение в XML. – СПб.: Лори, 2001. – 656с.:ил.

5. Х.М. Дейтел, П.Дж. Дейтел, Т.Р. Нието, Т.М. Лин, П. Садху. Как программировать на XML. Пер. с англ. — М.: ЗАО «Издательство БИНОМ», 2001 г. - 944 с.: ил.