70982

Создание платформы для веб-разработки средствами языка Java

Курсовая

Информатика, кибернетика и программирование

Цель исследования – Создание действующего WEB сервера регистрация пользователей на сервере, добавление комментариев, добавление новостей, статистка пользователей, возможность использования сервера без наличия статического айпи адреса за счёт встроенного днс...

Русский

2014-10-31

945 KB

5 чел.

Министерство образования и науки, молодежи и спорта Украины

Донецкий национальный университет

Кафедра компьютерных технологий

 

Курсовая работа

Тема: «_______________________________________________»

Отчет

Исполнитель:

студент 5 курса кафедры КТ

Гукай А.Е.

Руководитель:

Чижденко Р.Н.

Донецк, 2013


Министерство образования и науки, молодежи и спорта Украины

Донецкий национальный университет

Кафедра компьютерных технологий

Утверждаю Зав Кафедрой

___________ (подпись)

_______________(дата)

Задание

На курсовую работу студента ___ курса

_____________________________________________(фамилия, имя, отчество)

Специализация_____________________________________________________

Тема курсовой работы_______________________________________________

__________________________________________________________________

Вид работы (исследовательская, прикладная)____________________________

Краткая постановка задачи ___________________________________________

___________________________________________________________________

___________________________________________________________________

Исходные данные____________________________________________________

___________________________________________________________________

Ожидаемые результаты_______________________________________________

___________________________________________________________________

Календарный план работы

Дата проведения консультации

Этап выполнения работы

Отметка о выполнении

Оценка курсовой работы (выставляется руководителем до защиты) __________

Дата выдачи задания___________________

Руководитель (ФИО, подпись)__________________________________________

Студент (подпись)____________________________________________________

РЕФЕРАТ

Отчет о курсовой работе: 60ст., 9 рисунка, 1 приложение, 10 источников.

Объект исследования – Разработка веб-платформы .

Предмет исследования – Создание платформы для веб-разработки средствами языка Java.

Методы исследований: методы программирования на Java.

Цель исследования – Создание действующего WEB сервера регистрация пользователей на сервере, добавление комментариев, добавление новостей, статистка пользователей, возможность использования сервера без наличия статического айпи адреса за счёт встроенного днс, просмотр индивидуальных данных пользователей, рассылка сообщений.

Основные задачи исследования: исследовать работу баз данных через web приложения; разработать WEB платформу, которая позволяет разрабатывать и поддерживать в интернете сайт, причем данный сервер является и обработчиком для скриптов сайта, вывешивать новости проекта, комментировать новости и события на сервере.

С помощью использования Java, был создан WEB сервер, рассчитанный для как широкого круга пользователей. WEB сервер позволяет получить доступ к сайту, подключаться к  БД, регистрировать пользователей, а также запрашивать выборку статистики..

Для начала работы необходимо запустить файл mySQL и собственно файл  сервера. Для входа в приложение, в зависимости от места расположения сервера(локальный компьютер,  либо источник в сети интернет), необходимо открыть любой браузер(желательно Google Chrome) и ввести в адресную строку

http://localhost:8080/ , либо http://айпи_Адрес_сервера:8080


СОДЕРЖАНИЕ

ПЕРЕЧЕНЬ УСЛОВНЫХ СОКРАЩЕНИЙ.............................................................5

ВВЕДЕНИЕ..................................................................................................................6

1. ПОСТАНОВКА ЗАДАЧИ................................................................................7

2. ОБЗОР СОЗДАНИЯ СЕТИ ИНТЕРНЕТ И ВОЗНИКНОВЕНИЯ WEB-СТАНДАРТОВ............................................................................................................8

3. АНАЛИЗ ЯЗЫКОВ WEB-ПРОГРАММИРОВАНИЯ И ВЫБОР СРЕДЫ  РЕАЛИЗАЦИИ ПРОЕКТА.......................................................................................11

4.  ИСПОЛЬЗУЕМЫЕ ПРОТОКОЛЫ................................................................14

5  Проектирование базы данных … … … … … .... … … … … … … … … …...22

6  Логическая модель базы данных … … … … … … … … … … … … … … ...23

7  Структура разработанного web-приложения ... … … … … … … … … … …24

8  Руководство пользователя … … … … … … … … … … … … … … … … ...28

9  Внешний вид программы из браузера… … … … … … … … … … … … … 34

10  Описание реализации  … … … … … … … … … … … … … … … … … ...39

11  Описание требований к программному и аппаратному обеспечению … … 40

Вывод … … … … … … … … … … … … … … … … … … … … … … … ... ..41

Список используемой литературы  … … … … … … … … … … … … … ... ... 43

Листинг  программы … … … … … … … … … … … … … … … … … … … ..44


ПЕРЕЧЕНЬ УСЛОВНЫХ СОКРАЩЕНИЙ

HTTP - HyperText Transfer Prоtocоl

FTP - File Transfer Protocol

HTTPs - HyperText Transfer Protocol Secure - расширение протокола HTTP, поддерживающее шифрование. Данные, передаваемые по протоколу HTTPS, «упаковываются» в криптографический протокол SSL или TLS, тем самым обеспечивается защита этих данных. В отличие от HTTP, для HTTPS по умолчанию используется TCP-порт 443.

SMTP - Simple Mail Transfer Protocol - это широко используемый сетевой протокол, предназначенный для передачи электронной почты в сетях TCP/IP.

TCP/IP - Transmission Control Protocol/Internet Protocol (набор сетевых протоколов разных уровней модели сетевого взаимодействия DOD, используемых в сетях).

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

Captcha - Completely Automated Public Turing test to tell Computers and Humans Apart (полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей).

MySQL - свободная система управления базами данных

БД - База данных.

СУБД - Система управления базой данных.

WEB (англ. - паутина) - сокращение от WWW (World Wide Web) - всемирная паутина, интернет. 


ВВЕДЕНИЕ

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

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


ПОСТАНОВКА ЗАДАЧИ

Разработать веб-платформу  для разработки и поддержки веб-сайтов, которое будет удовлетворять основным требования, предъявляемым к интернет приложениям.

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

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

В целях защиты от web-ботов реализовать CAPTHA.

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

Для того чтоб пользователи могли обмениваться файлами в нашем веб-приложении реализовать протокол frp.


2. КРАТКИЙ ОБЗОР СЕТИ ИНТЕРНЕТ И ВОЗНИКНОВЕНИЯ WEB-СТАНДАРТОВ

Четвертого октября 1957 произошло событие, которому предстояло изменить мир. Советский Союз запустил первый исскуственный спутник на орбиту земли. Спутник шокировал мир, особенно США.

Это событие непосредственно привело к созданию агенства исследовательских проектов министерства обороны США – DARPA (Department of Defence ARPA – Advanced Research Projects Agency). На организацию положили задание исследований и разработак передовых идей и разработок технологий, который выходят за рамки текущих потребностей. Создание интернета стало наиболее известным проектом этого агенства.

В 1960 году психолог и ученый в области компьютерных технологий Джозеф Ликлайдер опубликовал работу «Симбиоз компьютера и человека", в которой четко выражена идея компьютеров, объединенных в сеть и используются для хранения и извлечения информации. В 1962 году Ликлайдер, возглавляя отдел обработки информации в ARPA, сформировал группу для дальнейших компьютерных исследований, которую покинул прежде, чем была сделана работа по реализации идей.

План создания компьютерной сети был представлен в октябре 1967-го. А уже в декабре 1969 была создана и заработала первая компьютерная сеть, состоящая из 4 машин. Основной проблемой в создании сети было объединение физически разделенных сетей без связи сетевых ресурсов постоянными соединениями. Техника, которая решила проблему, получила название «коммутация пакетов». Это решение предполагает разбиение запросов данных на маленькие части, которые могут быстро обрабатываться без блокирования с другими узлами сети. Данный принцип до сих пор используется в работе интернета.

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

Gopher был создан в Университете Миннесоты. В феврале 1993 года Университет объявил, что начнет взимать лицензионные отчисления за право использования их реализации сервера Gopher. Как следствие, многие организации занялись поиском альтернативы.

В расположенной в Швейцарии Европейской организации ядерных исследований такая альтернатива была. Тим Бернерс-Ли работал над системой управления информацией, в которой текст может содержать ссылки и отсылки к другим работ, позволяя читателю быстро перескакивать с документа на документ. Он создал сервер для публикации такого типа документов, а также программу для их чтения, которую назвал "WorldWideWeb". Первая версия программы была выпущена в 1991 году, однако нужны были два события, которые привели к взрыву популярности и окончательной замене Gopher. Тринадцатого апреля  1993 года ЦЕРН выпустил исходный код WorldWideWeb в общественное достояние, что означало, что каждый может использовать и создавать на его основе программное обеспечение без лицензионных отчислений. Потом, позже в этом же году, Национальный центр прикладных систем для суперкомпьютеров выпустил программу Mosaic, которая объединяла веб-браузер и Gopher-клиент. Сначала приложение было доступно только для машин под управлением ОС Unix и в виде исходного кода, но уже в декабре 1993 Mosaic поставлялся с учредителями для ОС Apple Macintosh и Microsoft Windows. Mosaic очень быстро становился популярным, а вместе с ним и Интернет.

В 1994 году Тим Бернерс-Ли, заручившись поддержкой ЦЕРН, DARPA и Европейской комиссии, основал в Массачусетском технологическом институте Консорциум Всемирной паутины. Видение W3C состояла в том, чтобы стандартизировать протоколы и технологии, используемые для создания Интернета, что, в свою очередь, позволило бы сделать контент (содержание) максимально доступным для жителей всего мира. В течение следующих нескольких лет W3C опубликовал ряд спецификаций, включая HTML 4.0, формат картинок PNG, и версии каскадных стилевых таблиц CSS1 и CSS2.

В результате, профессиональные разработчики и дизайнеры решили объединиться. Эта группа назвала себя «Проект Веб-стандарты» . Идея заключалась в том, что если называть документы W3C стандартами, а не рекомендациями, возможно удастся убедить Microsoft и Netscape их поддерживать.

В 2003-м году Дэйв Ши запустил сайт, который называется CSS Zen Garden. Это событие оказало ни с чем не сравнимый влияние на веб-профессионалов. Сайт наглядно демонстрирует, как можно полностью переработать дизайн, изменив только стиль страницы.

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


3. АНАЛИЗ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ И ВЫБОР СРЕДЫ  РЕАЛИЗАЦИИ ПРОЕКТА

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

Язык программирования содержит базисный синтаксис, зачастую обладает стандартной библиотекой. Фреймворк представляет разработчику различные библиотеки.

Языки веб-программирования и Фреймворки классифицируются на:

Клиентские – используют для написания программ на стороне клиента.

Серверные – применяются для написания программ на сервере.

3.1 Язык PHP.

PHP расшифровывается как Hypertext PreProcessor.

Все команды и скрипты, написанные на языке PHP, выполняются именно на сервере. После того, как PHP-скрипт выполнится на сервере, сервер "отдает" результат своей работы, который мы и видим в браузере, но по исходному коду веб-страницы, который можно посмотреть в любом браузере через опцию  "Исходный код страницы"нельзя определить, использовался ли язык PHP для создания данной страницы, или нет. Невозможно это сделать как раз потому, что PHP-скрипты обрабатываются на сервере, а в браузер передается уже готовый, обработанный вариант. По сути, только HTML-код.

Разница по сравнению с обычными статичными HTML-страницами заключается в одном дополнительном этапе обработки кода.

В случае с HTML-страницей есть только один этап: браузер обрабатывает HTML-код, т.е. разметку страницы в соответствии с определенными правилами, в результате чего мы и видим веб-страницу в нормальном виде.

В случае с PHP-страницей есть два этапа: сначала так называемый PHP-интерпретатор (обработчик) производит выполнение PHP-кода (в результате этого получается простой HTML-код), а после этого уже браузер обрабатывает результат этой обработки, т.е., по сути, выполняется тот самый этап, который является единственным в случае с HTML-страницей.

Вообще PHP прекрасно работает в паре с HTML. Более того, в HTML-код можно делать вставки PHP-кода, а с помощью PHP выводить HTML-разметку.

HTML на 100% статичен. Встраивая же в наши страницы PHP-код, мы можем добиться того, чтобы содержимое одной и той же страницы было различно в зависимости от определенных условий.

Для полноценной работы с PHP на Вашем компьютере нужны следующие вещи:

  1.  Веб-сервер;
  2.  Система Управления Базами Данных;
  3.  Установленный интерпретатор PHP;
  4.  Текстовый редактор, в котором Вы будете писать код;
  5.  Браузер.

 3.2 Язык Java.

Язык Java - это объектно-ориентированный язык программирования, созданный фирмой Sun для разработки программ. Система программирования Java позволяет использовать World Wide Web  для распространения небольших интерактивных прикладных программ, которые размещаются на серверах Internet, транспортируются клиенту по сети , автоматически устанавливаются и запускаются на месте, как часть документа WWW. При этом апплет имеет весьма ограниченный доступ к ресурсам компьютера клиента, так что он может предоставить произвольный мультимедийный интерфейс и выполнять сложные вычисления, не привнося при этом риска заражения вирусом или порчи данных.

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

Для полноценной работы с JAVA на Вашем компьютере нужна  система программирования языка Java, в ее состав входят следующие компоненты:

  1.  компилятор с языка Java на внутренний язык Java Byteсode (JavaBC): Java-программы и апплеты распространяются по WWW и интерпретируются на JavaBC;
  2.  загрузчик-верификатор программ на JavaBC;
  3.  интерпретатор JavaBC, называемый виртуальной машиной языка Java (JavaVM - Java Virtual Machine);
  4.  многочисленные библиотеки классов и утилиты, существенно упрощающие программирование на Java.

Delphi — это объектно-ориентированная среда для визуального проектирования Windows приложений с развитыми механизмами повторного использования программного кода. Основным конкурентом Delphi является среда разработк Microsoft Visual C++, имеющая свои преимущества и недостатки, однако являющаяся более популярной, в основном, в силу того, что разработана именно фирмой Microsoft Существенной чертой Delphi является компонентная модель разработки программных продуктов. Суть модели заключается в поддержке системой постоянно расширяемого набора объектных компонентов, из которых и строится программа. Компоненты в Delphi просты для использования и развития, как результат сокрытия значительной части той структуры программы, которая близка к взаимодействию с операционной системой.

Наиболее существенный отрыв Delphi от ближайших аналогов состоит в действительно быстрой разработке приложений, обладающих сложным пользовательским интерфейсом, особенно имеющим сильные взаимосвязи между элементами управления, расположенными в окнах программы. Также Delphi предлагает довольно мощный набор компонентов для работы с базами данных. Причем иерархия компонентов для работы с БД организована таким образом, что практически неважно, какой именно базой данных пользуется приложение — это может быть и локальная БД и промышленный сервер, типа Oracle или MS SQL Server. Существенным преимуществом Delphi в этой области является возможность управления базами данных на логическом уровне, соответствующем понятиям самих баз данных, без использования низкоуровневых запросов к драйверам. Такие возможности Delphi обусловили ее широкую применяемость при разработке АСУП — автоматизированных систем управления предприятиями.

Независимо от выбора языка для веб-программирования, в основе любого сайта лежит язык гипертекстовой разметки HTML, без знания которого сайт создать не удастся. Также выбор языка для создания сайта неразрывно должен быть связан с CMS сайта.


4. ИСПОЛЬЗУЕМЫЕ ПРОТОКОЛЫ

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

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

HTTP,TCP/IP, URL, HTTPs, FTP, SMTP.

 4.1 Протокол HTTP.

HTTP – протокол прикладного уровня передачи данных. Основой HTTP является технология «клиент-сервер», то есть предполагается существование клиентов, которые инициируют соединение и посылают запрос, и  серверов, которые ожидают соединения для получения запроса, производят необходимые действия и возвращают обратно сообщение с результатом.

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

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

Обмен сообщениями идёт по обыкновенной схеме «запрос-ответ». Для идентификации ресурсов HTTP использует глобальные URI. В отличие от многих других протоколов, HTTP не сохраняет своего состояния. Это означает отсутствие сохранения промежуточного состояния между парами «запрос-ответ». Компоненты, использующие HTTP, могут самостоятельно осуществлять сохранение информации о состоянии, связанной с последними запросами и ответами (например, «куки» на стороне клиента, «сессии» на стороне сервера). Браузер, посылающий запросы, может отслеживать задержки ответов. Сервер может хранить IP-адреса и заголовки запросов последних клиентов. Однако сам протокол не осведомлён о предыдущих запросах и ответах, в нём не предусмотрена внутренняя поддержка состояния, к нему не предъявляются такие требования.

HTML - язык разметки гипертекста - предназначен для создания Web-страниц.
Под гипертекстом в этом случае понимается текст, связанный с другими текстами указателями-ссылками.

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

HTML не задает конкретные и точные атрибуты форматирования документа. Конкретный вид документа окончательно определяет толькопрограмма-браузер на компьютере пользователя Интернета. HTML также не является языком программирования, но web-страницы могут включать в себя встроенные программы-скрипты на языкахJavascript и Visual Basic Script и программы-апплеты на языке Java.

Основными компонентами HTML являются:

  • Тег. Тег HTML это компонент, который командует Web- браузеру выполнить определенную задачу типа создания абзаца или вставки изображения.
  • Атрибут. Атрибут HTML изменяет тег. Например, можно выровнять абзац или изображение внутри тега.
  • Значение. Значения присваиваются атрибутам и определяют вносимые изменения. Например, если для тега используется атрибут выравнивания, то можно указать значение этого атрибута. Значения могут быть текстовыми, типа left или right, а также числовыми, как например ширина и высота изображения, где значения определяют размер изображения в пикселях.

 4.2 Протокол URL.

Указатель URL (Uniform Resource Locator) — это адрес сетевого ресурса. Он похож на имя файла, но дополнительно содержит имя сервера и информацию о сетевом протоколе, используемом данным ресурсом. В некоторых случаях URL включает сведения об имени пользователя, а также специальные аргументы и параметры протокола.

На Web-страницах URL используются для ссылок на другие страницы. В виде URL можно описать многие распространенные сетевые команды, указатели на файлы  и на сообщения из групп новостей Usenet .

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

Указатель URL состоит из следующих частей:

<схема>:<специальное_имя>

где <схема> — это название схемы (используемый протокол, например http, ftp и т. д.), а <специальное_имя> — имя в формате, зависящем от используемой схемы.

Многие URL имеют следующий формат:

<протокол>://<пользователь>:<пароль>@<хост>:<порт>/<путь>

 

  1.   Протокол TCP/IP.

Transmission Control Protocol/Internet Protocol - это промышленный стандарт стека протоколов, разработанный для глобальных сетей. Стандарты TCP/IP опубликованы в серии документов, названных Request for Comment. Документы RFC описывают внутреннюю работу сети Internet. Некоторые RFC описывают сетевые сервисы или протоколы и их реализацию, в то время как другие обобщают условия применения. Стандарты TCP/IP всегда публикуются в виде документов RFC.

Стека TCP/IP обладает следующими  свойствами:

  •  Это наиболее завершенный стандартный и в то же время популярный стек сетевых протоколов, имеющий многолетнюю историю.
  •  Почти все большие сети передают основную часть своего трафика с помощью протокола TCP/IP.
  •  Этот стек служит основой для создания intranet-корпоративной сети, использующей транспортные услуги Internet и гипертекстовую технологию WWW, разработанную в Internet.
  •  Все современные операционные системы поддерживают стек TCP/IP.
  •  Это гибкая технология для соединения разнородных систем как на уровне транспортных подсистем, так и на уровне прикладных сервисов.
  •  Это устойчивая масштабируемая межплатформенная среда для приложений клиент-сервер.

Протокол  TCP/IP работает на нескольких уровнях OSI.

 Уровень 4 - соответствует физическому и канальному уровням модели OSI. Этот уровень в протоколах TCP/IP не регламентируется, но поддерживает все популярные стандарты физического и канального уровня: для локальных сетей это Ethernet, Token Ring, FDDI, Fast Ethernet, 100VG-AnyLAN, для глобальных сетей - протоколы соединений "точка-точка" SLIP и PPP, протоколы территориальных сетей с коммутацией пакетов X.25, frame relay.  Разработана также специальная спецификация, определяющая использование технологии ATM в качестве транспорта канального уровня. Обычно при появлении новой технологии локальных или глобальных сетей она быстро включается в стек TCP/IP за счет разработки соответствующего RFC, определяющего метод инкапсуляции пакетов IP в ее кадры.

 Уровень 3 - это уровень межсетевого взаимодействия, который занимается передачей пакетов с использованием различных транспортных технологий локальных сетей, территориальных сетей, линий специальной связи.

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

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

 Уровень 2 - называется основным. На этом уровне функционируют протокол управления передачей TCP и протокол дейтаграмм пользователя UDP. Протокол TCP обеспечивает надежную передачу сообщений между удаленными прикладными процессами за счет образования виртуальных соединений. Протокол UDP обеспечивает передачу прикладных пакетов дейтаграммным способом, как и IP, и выполняет только функции связующего звена между сетевым протоколом и многочисленными прикладными процессами.

 Уровень 1 -  называется прикладным. За долгие годы использования в сетях различных стран и организаций стек TCP/IP накопил большое количество протоколов и сервисов прикладного уровня. К ним относятся такие широко используемые протоколы, как протокол копирования файлов FTP, протокол эмуляции терминала telnet, почтовый протокол SMTP, используемый в электронной почте сети Internet, гипертекстовые сервисы доступа к удаленной информации, такие как WWW и многие другие.

  1.   Протокол SMTP

SMTP — требующий соединения текстовый протокол, по которому отправитель сообщения связывается с получателем посредством выдачи командных строк и получения необходимых данных через надёжный канал, в роли которого обычно выступает TCP-соединение (Transmission Control Protocol — протокол управления передачей). SMTP-сессия состоит из команд, посылаемых SMTP-клиентом, и соответствующих ответов SMTP-сервера. Когда сессия открыта, сервер и клиент обмениваются её параметрами. Сессия может включать ноль и более SMTP-операций (транзакций).

SMTP-операция состоит из трёх последовательностей команда/ответ (см. пример ниже). Описание последовательностей:

  •  MAIL FROM — устанавливает обратный адрес (т. е. Return-Path, 5321.From, mfrom). Это адрес для возвращённых писем.
  •  RCPT TO — устанавливает получателя данного сообщения. Эта команда может быть дана несколько раз, по одному на каждого получателя. Эти адреса также являются частью оболочки.
  •  DATA — для отправки текста сообщения. Это само содержимое письма, в противоположность его оболочке. Он состоит из заголовка сообщения и тела сообщения, разделенных пустой строкой. DATA, по сути, является группой команд, а сервер отвечает дважды: первый раз на саму команду DATA, для уведомления о готовности принять текст; и второй раз после конца последовательности данных, чтобы принять или отклонить всё письмо.

Помимо промежуточных ответов для DATA-команды, каждый ответ сервера может быть положительным (код ответа 2хх) или отрицательным. Последний, в свою очередь, может быть постоянным (код 5хх) либо временным (код 4хх). Отказ SMTP-сервера в передаче сообщения — постоянная ошибка; в этом случае клиент должен отправить возвращённое письмо. После сброса — положительного ответа, сообщение скорее всего будет отвержено. Также сервер может сообщить о том, что ожидаются дополнительные данные от клиента (код 3xx).

Изначальным хостом (SMTP-клиентом) может быть как почтовый клиент конечного пользователя (функционально определяемый как почтовый агент — MUA), так и агент пересылки сообщений (MTA) на сервере, т.е. сервер действует как клиент в соответствующей сессии для ретрансляции сообщения. Полностью функциональные сервера поддерживают очереди сообщений для повторной передачи сообщения в случае ошибок.

MUA знает SMTP-сервер для исходящей почты из своих настроек. SMTP-сервер, действующий как клиент, т. е. пересылающий сообщения, определяет, к какому серверу подключиться, просмотром ресурса записей MX (Mail eXchange) DNS для домена каждого получателя. В случае, если запись MX не найдена, совместимые MTA (не все) возвращаются к простой А-записи. Пересылающие сервера также могут быть настроены на использование Smart host.

SMTP-сервер, действующий как клиент, устанавливает TCP-соединение с сервером по разработанному для SMTP порту 25. MUA должен использовать порт 587 для подключения к агенту предоставления сообщений (MSA). Основное различие между MTA и MSA заключается в том, что SMTP-аутентификация обязательна только для последнего.

  1.   HTTPs

HTTPS не является отдельным протоколом. Это обычный HTTP, работающий через шифрованные транспортные механизмы SSL и TLS. Он обеспечивает защиту от атак, основанных на прослушивании сетевого соединения — от снифферских атак и атак типа man-in-the-middle при условии, что будут использоваться шифрующие средства и сертификат сервера проверен и ему доверяют.

По умолчанию HTTPS URL использует 443 TCP-порт (для незащищённого HTTP — 80). Чтобы подготовить веб-сервер для обработки https-соединений, администратор должен получить и установить в систему сертификат для этого веб-сервера. Сертификат состоит из 2 частей (2 ключей) — public и private. Public-часть сертификата используется для зашифровывания трафика от клиента к серверу в защищённом соединении, private-часть — для расшифровывания полученного от клиента зашифрованного трафика на сервере. После того как пара ключей приватный/публичный сгенерированы, на основе публичного ключа формируется запрос на сертификат в Центр сертификации, в ответ на который ЦС высылает подписанный сертификат. ЦС, при подписывании проверяет клиента, что позволяет ему гарантировать что держатель сертификата является тем, за кого себя выдаёт (обычно это платная услуга).

Существует возможность создать такой сертификат, не обращаясь в ЦС. Такие сертификаты могут быть созданы для серверов, работающих под Unix, с помощью таких утилит, как ssl-ca от OpenSSL [1] или gensslcert от SuSE. Подписываются такие сертификаты этим же сертификатом и называются самоподписанными (self-signed). Без проверки сертификата каким-то другим способом (например, звонок владельцу и проверка контрольной суммы сертификата) такое использование HTTPS подвержено атаке man-in-the-middle.

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

В HTTPS для шифрования используется длина ключа 40, 56, 128 или 256 бит. Некоторые старые версии браузеров используют длину ключа 40 бит (пример тому — IE, версий до 4.0), что связано с экспортными ограничениями в США. Длина ключа 40 бит не является сколько-нибудь надёжной. Многие современные сайты требуют использования новых версий браузеров, поддерживающих шифрование с длиной ключа 128 бит, с целью обеспечить достаточный уровень безопасности. Такое шифрование значительно затрудняет злоумышленнику поиск паролей и другой личной информации.

  1.   Протокол FTP

Cтандартный протокол, предназначенный для передачи файлов по TCP-сетям (например, Интернет). FTP часто используется для загрузки сетевых страниц и других документов с частного устройства разработки на открытые сервера хостинга

Достаточно яркая особенность протокола FTP в том, что он использует множественное (как минимум - двойное) подключение. При этом один канал является управляющим, через который поступают команды серверу и возвращаются его ответы (обычно через TCP-порт 21), а через остальные происходит собственно передача данных, по одному каналу на каждую передачу. Поэтому в рамках одной сессии по протоколу FTP можно передавать одновременно несколько файлов, причём в обоих направлениях. Для каждого канала данных открывается свой TCP порт, номер которого выбирается либо сервером, либо клиентом, в зависимости от режима передачи.

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

Начиная работу через протокол FTP, клиент входит в сессию, и все операции проводятся в рамках этой сессии (проще говоря, сервер помнит текущее состояние). Протокол HTTP ничего не "помнит" - его задача - отдать данные и забыть, поэтому запоминание состояния при использовании HTTP осуществляется внешними по отношению к протоколу методами.

FTP работает на прикладном уровне модели OSI и используется для передачи файлов с помощью TCP/IP. Для этого должен быть запущен FTP-сервер, ожидающий входящих запросов.Компьютер-клиент может связаться с сервером по порту 21. Это соединение (поток управления) остаётся открытым на время сессии. Второе соединение (поток данных), может быть открыт как сервером из порта 20 к порту соответствующего клиента (активный режим), или же клиентом из любого порта к порту соответствующего сервера (пассивный режим), что необходимо для передачи файла данных. Поток управления используется для работы с сессией - например, обмен между клиентом и сервером командами и паролями с помощью telnet-подобного протокола. Например, "RETR имя файла" передаст указанный файл от сервера клиенту. Вследствие этой двухпортовой структуры, FTP считается внешнеполосным протоколом, в отличие от внутриполосного HTTP.

5. ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ

Исходя из основных требований к web-платформе, мной была составлена база данных, состоящая из десяти таблиц: список пользователей, персональная информация о пользователях, новости, комментарии, CAPTHA, текущий онлайн на сайте, список блокируемых пользователей, список денс-хостов, список страниц веб-паука и тестовая страница кардио-статистики(тематика шаблона по умолчанию).

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


6. ЛОГИЧЕСКАЯ МОДЕЛЬ БАЗЫ ДАННЫХ

Рис.2. Логическая модель  базы данных


7. СТРУКТУРА РАЗРОБОТАННОГО WEB-ПРИЛОЖЕНИЯ

При решении задачи было получено множество web-страничек, которые использует данное приложение. Полный список папок и файлов, используемых приложением, представлен на рисунке 3.

Рис. 7.1 – Файлы и папки, составляющие web-сервер

Файлы и папки(описание), входящие в проект:

captcha.jpg – файл-шаблон, являющийся материалом подложи. Необходим при генерации защитного изображения. Может быть заменен другим файлом, либо модифицирован.

Config.ini – файл, содержащий параметры работы web-сервера. Структура файла – xml.

Mail_config.ini – файл, содержащий параметры для работы mail-агента. Структура файла – xml.

Bd_starter -  папка, содержащая в себе портативную базу данных  MySQL. Приложение, для работы с БД было получено из более мощной среды разработки – DENWER. Запускается автоматически при старте.

Certificate – папка, содержащая необходимые ключи для работы HTTPs протокола. Сюда могут быть помещены любые пользовательские ключи.

Include – набор шаблонов для различных блоков полей ввода и постоянных частей сайта.

Library – набор библиотек, используемых при работе приложения.

Pages – «корень» сайта, папка, в которой необходимо размещать страницы сайта, которые в дальнейшем будут выводится по запросу через строку браузера.

RssHTML и rssXML – хранилище rss новостей сторонних сайтов.

Sql_structs – набор файлов-структур, которые описывают таблицу в базе данных. Структуры автоматически подхватываются приложением при его старте и, в случае отсутствия таковых в базе, будут добавлены в базу.

Рис. 7.2 Внутренняя структура приложения

Рассмотрим детально внутреннюю структуру приложения:

Web_cardio – основной пакет в приложении. В него входят:

Crawler – класс веб-паука, который позволяет организовать поиск по сети итернет.

Db – основной класс, в котором описаны все обработчики.

DrawCaptcha – класс генерации и поддержки защитного рисунка

ErrorLog – система логирования ошибок, доступная из веб

FileLoader – система загрузки файлов на сервер

FtpDNS – система создания псевдо днс адресов для нашего веб-сервера. Работает в автоматическом режиме при старте приложения.

HTTP – основной класс, прослока, необходимая для подключения обработчиков из класса db

HttpBuffer – класс, необходимый для удобного разбора параметров из post и get запросов.

MailTo – система рассылки сообщений

Main – основной класс, является собирающим для всех остальных

MySQL – работа с базой данных

Rss – независимый сборщик-парсер rss лент.

Пакет ssl необходим для работы HTTPs протокола. Все обработчики команд расположены в классе HTTPs.

webService – Пакет необходим для организации веб-сервиса на базе нашего приложения. Поддерживается удаленное управление по внутреннему протоколу.

Общая структурная и навигационная схема разработанного web-интерфейса базового шаблона представлена на рисунке 7.3

Рис. 7.3 – Общая навигационная и структурная схема


8. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

Данный программный продукт разработан таким образом чтоб пользователь затратил минимальное время на его установку и настройку. Весь необходимый комплекс программных средств поставляется вместе с приложением. Однако имеется возможность использовать стороннюю базу MySQL, поставляемую, например, вместе с программой Denver. Для использования приложения необходима предустановленная Java-машина.

Запуск приложения осуществляется по средствам нажатия на jar файл в папке dist. Перед запуском приложения необходимо сконфигурировать файл настроек config.ini, содержащий данные для доступа к базе, а также порт, на котором будет работать наше приложение.  По умолчанию в файле приведены следующие параметры:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

<properties>

<comment>My params</comment>

<entry key="password">mangos</entry>

<entry key="database">mytestbd123123</entry>

<entry key="username">mangos</entry>

<entry key="serverName">localhost:3306</entry>

</properties>

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

Старт приложения начинается с инициализации базы: в случае если на нашем MySQL-сервере нет необходимой базы данных, она будет создана автоматически, используя файлы структур, расположенных в каталоге sql_structs, если же база данных уже существует, то этап создания базы будет проигнорирован. Базовым содержимым данного каталога являются файлы, формирующие структуру базы данных нашего веб-сервера. Удаление этих файлов, изменение структуры, содержимого, либо кодировки данных документов может привести к дальнейшей неправильной работе приложения. Весь ход работы приложения записывается в логии, по этому пользователь сможет с легкостью найти ошибку, в случае её возникновения и устранить её. Логи хранятся в папке Log. Удаление самое папки нежелательно, но приемлемо для работы приложения и не вызовет никаких сбоев в ходе работы.

Страницы сайта, javascripts, файлы css и прочие объекты, формирующие веб-интерфейс пользователя, расположены в папке pages. Удаление этой папки крайне нежелательно и в 100% случаях приведет к сбоям в работе приложения. Модификация файлов в данной папке допускается. По умолчанию используется шаблон интерфейса в виде «сердца». Также на сервере реализован небольшой набор команд, который доступен во время просмотра html-страниц сайта. Список данных команд представлен ниже:

Название

Комментарий

%%user_name%%

Выводит имя текущего пользователя, который в данный момент в системе под данным ip-адресом

%%server_time%%

Выводит серверное время

%%server_data%%

Выводит серверную дату

%%user_status%%

Выводит статус текущего пользователя

%%user_ip%%

Ip-адрес текущего пользователя

%%logon_module%%

Модуль входа в систему

%%online%%

Список посетителей, которые находятся на сайте под своими именами

%%site_logo%%

Логотип сайта

%%site_author%%

Разработчик сайта

%%site_emblem%%

Эмблема сайта

%%last_news%%',

Последние новости сайта

%%test_list%%

Список тестов

%%admin_user_list%%

В разработке

%%captcha%%

Completely Automated Public Turing test to tell Computers and Humans Apart — полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей

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

Детальнее рассмотрим html-страницы приложения. Данное приложение имеет 11 статических страниц, подгружаемых из папки pages и 12 динамических, автоматически генерируемых во время работы приложения. К статическим страницам относятся:

Имя страницы

Страница на сервере

Комментарий

main

main.html

Главная страница

service

service.html

Страница описания сервисов приложения

registration

registration.html

Страница регистрации

about

about.html

Информационная страница

new_user

-

Обработчик регистрации

onlinepage

online.html

Страница вывода онлайна пользователей

enter_system

-

Обработчик входа в систему

chat

chat.html

Страница чата, в разработке

logout

-

Обработчик выхода с сайта

t_list

test.html

Страница вывода списка тестов

-

presentation.html

Презентация , в разработке

К динамическим страницам относятся:

Имя страницы

Комментарий

 id

Число, обозначающее номер пользователя, в случае отсутствия числа выдаст список всех пользователей

 user

Не реализовано

 news

Число, обозначающее номер новости, в случае отсутствия числа выдаст список всех новостей

 addcomment

Число, соответствующее номеру новости, добавляет комментарий к выбранной новости

 allcomments

Число, соответствующее номеру новости, выводит список комментариев к выбранной новсоти

 cancel

Удаление новости

 addnews

Добавление новости

 modify

Число, соответствующее номеру новости, позволяет изменить выбранную новость

 admin

Набор функция, используемых для администрирования и отладки проекта

 captcha

Генерация подтверждение кода безопасности

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

Так как данный проект подразумевает разработку и доработку самого приложения пользователями, то в комплект входят все необходимые исходные коды и библиотеки. Проект был разработка в среде разработки – NetBeans.

Для настройки mail-агента необходимо ввести соответствующие параметры в файл mail_config.ini.

Структура данного файла:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

<properties>

<comment>Email Config</comment>

<entry key="YorEMAIL">аккаунт</entry>

<entry key="EmailPass">пароль</entry>

<entry key="smtp">smtp - сервер</entry>

</properties>

Генерация сертификатов для HTTPs соединения

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

SSL сертификат выполняет две основные цели: распространение открытых ключей и проверку подлинности сервера, так что пользователи знают, что они не отдают информацию ненужному серверу. Сертификат может правильно проверить подлинность сервера, только когда он подписан доверенной третьей стороны. Самоподписанным является сертификат, который подписали вы сами, а не доверенный центр сертификации. Так как любой злоумышленник может создать самоподписанный сертификат и запустить атаку «человек в середине», пользователь не  знает, отправляет он свою конфиденциальную информацию на нужный сервер или сервер нападающего. Из-за этого, вам практически никогда не следует использовать самоподписанный сертификат  на общедоступном сервере Java, который служит для связи посетителей с вашим сайтом. Однако, самоподписанные сертификаты имеют свое место:

  •  Самоподписанные сертификаты могут быть использованы на сервере разработки IIS. Нету необходимости тратить дополнительные деньги на покупку доверенного сертификата, когда вы только разрабатываете и тестируете приложения.
  •  Самоподписанные сертификаты могут быть использованы в интрасети. Когда клиенты должны только пройти через локальную интрасеть, чтобы добраться до сервера, практически нету шансов на атаку «человек в середине».
  •  Самоподписанные сертификаты могут быть использованы на личных сайтах с малым количеством посетителей. Если у вас есть небольшой персональный сайт, через который проходит нечувствительная информация, существует очень мало стимулов для кого-то атаковать соединение.

Этапы создания сертификата:

1. Откройте командную консоль на любой операционной системе, которую вы используете, и перейдите в каталог, где находится keytool.exe (обычно там, где находится JRE, например C: \ Program Files \ Java \ jre6 \ Bin на машинах Windows).

2. Выполните следующую команду (где пригодностью является количество дней до истечения сертификата):
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048

3. Заполните запрос информацией об организации. Когда он спрашивает ваше имя и фамилию, введите доменное имя сервера, на который пользователи будут входить, чтобы связаться с вашим приложением (например, www.google.com)

Рис 8.1 Генерация сертификата безопасности


9. ВНЕШНИЙ ВИД ПРОГРАММЫ ИЗ БРАУЗЕРА

Начальная страница(презентационный слайдер, работающий в автоматическом режиме)

Страница регистрации пользователей

Интерфейс  входа в систему

Кабинет администратора(в процессе разработки)

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

Страница новостей:


10. ОПИСАНИЕ РЕАЛИЗАЦИИ

Для реализации данной курсовой работы был выбран язык  БД SQL и программирования Java с использованием языка разметки HTML потому, не потому что данные языки являются оптимальными для решения поставленной задачи, а в связи с тем что поиск нестандартных решений движет прогрессом, по сравнению с шаблонным повторением аналогичных проектов.

Для реализации БД  нашего приложения необходимо сначала создать саму БД, что я и сделал используя запрос SQL для создания БД этот запрос передается средствами Java. Затем я реализовал возможность добавления записей в таблицы, используя метод POST и GET, и запрос SELECT языка SQL для вставки данных введенных пользователем в формы на странице в таблицы БД. Администрирование реализовано в виде просмотра и редактирования БД. Для этого необходимо уже существующие данные из таблиц вывести а также реализовать возможность их редактирования. Все это также было реализовано с помощью функций Java и SQL.

Сервер работает под java-машиной что делает его кросс-платформенным и упрощает разработку и тестирование под него.

11. ОПИСАНИЕ ТРЕБОВАНИЙ К ПРОГРАММНОМУ И АППАРАТНОМУ ОБЕСПЕЧЕНИЮ

Для оптимальной работы программы достаточно 64мб оперативной памяти, процессор с тактовой частотой 1ГГц, и аналоговой видеокартой.

Программное обеспечение необходимое для работы - это любой доступный на компьютере браузер, после чего запустить браузер и указать в адресной строке main. Для пользователя так-же необходима установка java-машины.

Для разработки необходимо приложения: Navicat for MySQL -  для удобной работы с базой данных, NetBeans версии 6.8 и выше – для редактирования кода, а также Java Developer Kit -  набор программных средств, необходимых разработки.

Все исходные материалы проекта расположены в папке src и library.


ВЫВОД

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

Сайт-шаблон имеет яркий, но тем не менее дружелюбный пользовательский интерфейс, позволяющий пользователю без труда найти интересующий его раздел. Благодаря встроенным html командам пользователь может получать интересующую его информацию в более удобном для себя виде. В дальнейшем пользователь получит возможность добавления\удаления блоков на странице сайта по своему усмотрению(по аналогии с конструктором системы ucoz).

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

Также данная web-платформа предоставляет возможность активного взаимодействия пользователей друг с другом по средствам новостей, комментариев, текстовых сообщений.

Предусмотрено управление базой данных через web-приложение, что значительно упрощает работу администраторов сайта.

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

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

В результате моей работы была создана web-платформа, позволяющая быстро и качественно разрабатывать новые веб-ресруы на основе языка java. Помимо этого на сайте разработана система оповещений о новостях. В арсенале у разработчика будут такие средства как: стандартный dns, стандартный ftp, стандартный почтовый клиент, стандартный rss-парсер, небольшой веб-сервис и другое.


СПИСОК ЛИТЕРАТУРЫ:

  1.  Игонтов Дмитрий. Создание INTERNET-магазинов. Эффективные технологии [Электронный ресурс]/ Дмитрий Игонтов. – Режим доступа: http://money-internet.info/.
  2.  Диго С.М. Базы данных: проектирование и использование [Текст]: учебник/ С.М. Диго. – М.: Финансы и статистика, 2005. – 592 с.: ил.
  3.  Шехтман В.Е. Базы данных, SQL и всё такое… [Текст]: учебно-методическое пособие. – Новокузнецк: НФИ КемГУ, 2004. – 186 с.
  4.  Костарев А.Ф. PHP в Web-дизайне [Текст] / А.Ф. Костарев. – СПб.: БХВ-

Петербург, 2002. – 592 с.

  1.  Ульман Л. Основы программирования на PHP [Текст]: самоучитель/ Л. Ульман; Пер. с англ. – М.: ДМК Пресс, 2001. – 288 с.
  2.  Мазуркевич Александр. PHP [Текст]: настольная книга программиста/ Алексанр Мазуркевич, Дмитрий Еловой. – М.: Новое издание, 2003. – 480 с.

7. В.Гофман, А.Хаменко «Работа с БД в PHP».

8. Прохоренок Н.А. «HTML, javascript, PHP и MySQL. Джентльменский         набор Web-мастера» 2011г.

9. Ржеуцкая С.Ю. «Базы данных. Язык SQL» 2010г.

10. Мишель Е. Дэвис и Джон А. Филипс «Изучаем PHP и MySQL» 2008г.


ЛИСТИНГ ПРОГРАММЫ

Организация работы web-сервера:

Класс Main:

package web_cardio;

import WebService.service;

import java.net.ServerSocket;

import java.net.Socket;

import ssl.HTTPs;

public class Main {

   static DB sql;

   static FileLoader fs = new FileLoader();

    public static void main(String[] args) throws Throwable {

       ServerSocket ss = new ServerSocket(8080);

        try {

            ProcessBuilder pb = new ProcessBuilder("bd_starter\\bin\\mysqld-max.exe");//запускаем sql

            pb.start();            

            FtpDNS Ftp;

            sql = new DB("config.ini");

            sql.ClearFolder("pages\\tmp", ".jpg");

            sql.CreateDBFromFile(sql.mydatabase);

            sql.CurrentOnline_Clear();

            Ftp = new FtpDNS(sql);

            Ftp.start();

            new HTTPs(sql).start();//ssl             

            System.out.println(sql.mydatabase);

        } catch (Exception e) {

        }

        service wService = new service(sql);

        wService.Start();

       while (true) {

           Socket s = ss.accept();

           System.err.println("Client accepted "+s.getInetAddress().getHostAddress());

           new Thread(new HTTP(s,sql)).start();

       }

   }

}

Класс HTTP:

package web_cardio;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.net.Socket;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.InputStreamReader;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileReader;

import java.io.PrintWriter;

import java.sql.SQLException;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.mail.MessagingException;

public class HTTP implements Runnable {

       private String pages[] = {"main","contact","registration","about","new_user","onlinepage","enter_system","chat","logout","","login","licens"};

       private String pathes[] = {"main.html","sender.html","reg.html","about.html"," ","online.html","","chat.html","","presentation.html","login.html","licensia.html"};

       private String DynamicPages[] = {"id","news","comment","delete","upload","addnews","modify","addcomment","allcomments","captcha","lastnews","mailto","moduser","errors","cardiostat","admin","rssnews"};

       private Socket s;

       private InputStream is;

       private OutputStream os;

       DB sql;

       String path = "";

       String post_param = "";

       String Header[] = new String[20];

   public boolean SendFile(String path)

   {

       BufferedInputStream bis = null;

       BufferedOutputStream bos = null;

       int in = 0;

       byte byteArray[] = new byte[8192];

       try {

            File f = new File(path);

            if (f.exists()&&f.length()>0)

              {

               

               bis = new BufferedInputStream(new FileInputStream(path));

               bos = new BufferedOutputStream(s.getOutputStream());

                   while ((in = bis.read(byteArray)) != -1){

                       bos.write(byteArray,0,in);

                    }

                   bis.close();

                   bos.close();

                   return true;

            }         

           return false;

       } catch (Exception e) {

           return false;

       }

}

      private String LoadPage(String path) throws FileNotFoundException, IOException

      {

          BufferedReader myfile = new BufferedReader(new FileReader(path));

          String b = "";

          String buf = "";

          while(true){

               b = myfile.readLine();

               buf+=b+"\n";

               if (myfile.ready()==false)

                   break;

           }

           myfile.close();

           return buf;

      }

      public String StaticHanlder(int index,String ip,String path,String param) throws SQLException

      {

           System.out.println("динамические страницы активированы,индекс = "+index);

                                switch(index){

                                    case 0:

                                    case 1:

                                    case 2:

                                    case 3:return sql.PageInProcess(ip, path);

                                    case 4:return sql.ParsReg_new_user(ip, param);

                                    case 6:return sql.ParsReg_enter_user(ip, param);

                                    case 8:return sql.ParsReg_logout_user(ip);

                                    default:

                                        return "Error";

                                }

      }

      public  String DynamicHanlder(int index,String ip,String path,String param) throws SQLException, MessagingException

      {

           System.out.println("\""+path+"\" динамические страницы активированы,индекс = "+index);

                           switch(index){

                               case 0:return sql.GetUserbyId(ip,path);  //оценивание композиции

                               case 1:return sql.NewsHandler(ip, path); //список композиций

                               case 4:return sql.UploadHandler();

                               case 5:return sql.AddNews(ip, param);

                               case 6:return sql.ModifyNews(ip, param, path);

                               case 7:return sql.AddComment(ip, param, path);

                               case 8:return sql.GetComments(ip, path);

                               case 9:return sql.CaptchaHadnler(ip,param ,path);

                               case 10:return sql.GetLastNews(ip);

                               case 11:return sql.MailTo(ip,param ,path);

                               case 12:return sql.ModUserById(ip,param ,path);//moduser

                               case 13:return sql.ErrorLog();//errors

                               case 14:return sql.CardioStat(ip,path);//cardsiostat

                               case 15:return sql.Admin(ip,param ,path);//cardsiostat

                               case 16:return sql.RssHandler(ip,param,path);//cardsiostat

                               default:

                                   return sql.PageInProcess(ip, path);

                           }

      }

      public HTTP(Socket s,DB s2) throws Throwable {

           this.s = s;

           this.is = s.getInputStream();

           this.os = s.getOutputStream();

           this.sql = s2;

       }

       private void parseHeader()

       {

           for (int i=0;i<Header.length;i++)

           {

            if (Header[i].indexOf("GET")!=-1)

               {

                   path = Header[i].substring(5, Header[i].indexOf(" HTTP/1"));

                   break;

               }

            if (Header[i].indexOf("POST")!=-1)

               {

                   path = Header[i].substring(6, Header[i].indexOf(" HTTP/1"));

                   break;

               }

           }

       }

       private void PageProcessor() throws SQLException

       {

           String buf = "";

           String dist_ip = s.getInetAddress().getHostAddress();

           String BadPages[] = {".html",".php"};

           boolean FoundPage = false;

           path = path.toLowerCase();

           if (sql.isConnect==false){

               sql.LoadParams("config.ini");

               sql.Connect();

           }

           sql.CurrentOnline_Update(dist_ip);//поддержание юзера в онлайне

           try {

                    for (int i=0;i<pages.length;i++)

                    {

                        if (path.equals(pages[i].trim()))

                        {

                            FoundPage=true;

                            File f = new File("pages\\"+pathes[i].trim());

                            if (f.exists()==true&&pathes[i].trim().equals("")==false)

                            {

                               buf = LoadPage("pages\\"+pathes[i]);

                            }else

                            if (f.exists()==false||pathes[i].trim().equals(""))

                            {

                                buf=StaticHanlder(i, dist_ip, path, post_param);

                            }

                        }

                    }

                    for (int i=0;i<DynamicPages.length;i++)

                    {

                         if (path.indexOf(DynamicPages[i].trim())!=-1&&path.indexOf(DynamicPages[i].trim())==0)

                         {

                           FoundPage=true;

                           buf = DynamicHanlder(i, dist_ip, path, post_param);

                         }

                    }

                    //если каптча то следующая загружаймая страница - страница ввода каптчи

                    if (sql.IsCaptcha(dist_ip)&&path.indexOf(".")==-1)

                    {

                       buf = LoadPage("pages\\captcha.html");

                       FoundPage = true;

                    }

                    if (FoundPage==false&&path.indexOf(".")==-1)

                    {

                        buf = LoadPage("pages\\404.html");

                    }

                    else

                        if (FoundPage==false&&path.indexOf(".")!=-1)

                        {

                           System.out.println(path);

                           boolean find=false;

                           for (int i=0;i<BadPages.length;i++)

                           {

                               if(path.indexOf(BadPages[i])!=-1){

                                    find = true;

                                    break;

                               }

                           }

                           if (find==false){

                               if (!SendFile("pages\\"+path))

                                buf =  LoadPage("pages\\404.html");

                           }

                           else

                               buf = LoadPage("pages\\404.html");

                        }

               } catch (Exception e) {

               }

               try {

                    buf = sql.CommandHandler(buf,dist_ip);

                    writeResponse(buf);

                    buf=" ";

               } catch (Throwable ex) {

               }

       }

       public void run() {

           try {

               readInputHeaders();

               parseHeader();

               PageProcessor();

           } catch (Throwable t) {

               /*do nothing*/

           } finally {

               try {

                   s.close();

               } catch (Throwable t) {

                   /*do nothing*/

                  System.err.println("Throwable [2]= "+t);

               }

           }

           System.err.println("Client processing finished");

           try {

               this.finalize();

           } catch (Throwable ex) {

               Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);

           }

       }

       private void writeResponse(String s) throws Throwable {

           StringBuffer buf = new StringBuffer();

           String response = "HTTP/1.0 200 OK\r\n"+

                   "Server: YarServer/2009-09-09\r\n" +

                   "Content-Type: text/html\r\n" +

                  // "Content-Length: " + s.length()+ "\r\n" +

                   "Connection: keep-alive\r\n\r\n";

           buf.append(response);

           buf.append(s);

           os.write(buf.toString().getBytes());

           os.flush();

       }

       private int readInputHeaders() throws Throwable {

           BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));

           int i=0;

           String Len = "0";

           String boundary = "";

           boolean flag_file = false;

           while(true) {

               String _s = br.readLine();

               Header[i] = _s;

               if (Header[i].indexOf("Content-Length:")!=-1)

               {

                 Len = Header[i].substring(16, Header[i].length());

               }

               if (Header[i].indexOf("POST")!=-1&&Header[i].substring(6, Header[i].indexOf(" HTTP/1")).trim().equals("upload"))

               {

                   flag_file = true;

               }

               if (Header[i].indexOf("boundary=")!=-1)

               {

                   boundary = Header[i].substring(44, Header[i].length());

               }

               System.out.println(Header[i]);

               i++;               

               if(_s == null || _s.trim().length() == 0 || Header[0].indexOf("HTTP/1")==-1) {

                   break;

               }

            }

            if (Header[0].indexOf("HTTP/1")==-1)

            {

                PrintWriter out = new PrintWriter(s.getOutputStream());

                out.println("Bad request. Disconected!");

                out.flush();

                out.close();

            }

           

            if (flag_file==false)

            {

                StringBuffer buf = new StringBuffer();

                i = Integer.parseInt(Len);

                if (i!=0)

                {

                    while (i!=0)

                    {

                          buf.append((char)(br.read()));

                          i--;

                    }

                   post_param = buf.toString();

                }

            }

            else

            {

               //Загатовка для загрузки файлов на сервер, нуждается в сильной доработке

              // getBinaryFile();

                int[] data = new int[Integer.parseInt(Len)];

            int bytes;

   int counter = 0;

   while((bytes=s.getInputStream().read())!=-1)

     {

     data[counter]=bytes;

     System.err.print((char)bytes);

     counter++;

     }

   s.getInputStream().close();

            }

            return 0;

       }

}

Класс HttpBuffer:

package web_cardio;

import java.util.ArrayList;

public class HttpBuffer {

 private class StructHTTP{

    public String param;

    public String value;

  }

 

  private ArrayList<String> params = new ArrayList<String>();

  private ArrayList<String> values = new ArrayList<String>();

   public HttpBuffer() {

       Init();

   }

   public void Init()

   {

       params.clear();

       values.clear();

   }

   public boolean isSet(String elem)//as an isset in php

   {

      if (params.size()==0)

           return false;

      boolean found = false;

      for (int i=0;i<params.size();i++)

      {

          if (params.get(i).toLowerCase().trim().equals(elem.toLowerCase()))           {

              found = true;

              break;

          }

      }

      return found;

   }

   public String getElement(String elem)

   {

      boolean found = false;

      int index = 0;

      if (params.size()==0)

           return "<nothing>";

      for (int i=0;i<params.size();i++)

      {          

          if (params.get(i).toLowerCase().trim().equals(elem.toLowerCase()))

          {

              index = i;

              found = true;

              break;

          }

      }

     if (found==true)

      return values.get(index);

     else

         return "<nothing>";

   }

 public String getElement(int elem)

   {

      return values.get(elem);

   }

   public int Parse(String post)

   {

       if (post.indexOf("?")==-1&&post.indexOf("=")==-1)

           return -1;

       StructHTTP h = new StructHTTP();

       boolean end = false;

       int Down = 0, Up=0,Old_up=0;

       int index = 0;

       if (post.indexOf("?")!=-1)//for GET

       {

           if (post.indexOf("=")==-1)

               return -1;

           post = post.substring(post.indexOf("?")+1);

       }

       while (end==false){

      

       Down = post.indexOf("=", Old_up);

       if (post.indexOf("&", Down)!=-1)

            Up = post.indexOf("&", Down);

       else

       {

           Up = post.length();

           end = true;

       }

       if (Old_up<=0)

           h.param = post.substring(Old_up,Down);

       else

            h.param = post.substring(Old_up+1,Down);

       h.value = post.substring(Down+1,Up);

       Old_up = Up;

       params.add(index, h.param);

       values.add(index, h.value);        

       index++;

       

       }

       return 0;        

   }

}

Класс HTTPs

package ssl;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.BufferedReader;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

import java.security.KeyStore;

import java.sql.SQLException;

import java.util.Enumeration;

import java.util.Properties;

import javax.net.ServerSocketFactory;

import javax.net.ssl.KeyManagerFactory;

import javax.net.ssl.SSLContext;

import javax.net.ssl.SSLServerSocket;

import web_cardio.DB;

import web_cardio.DB;

import web_cardio.DB;

public class HTTPs implements Runnable {

private boolean running;

public String CONTENT_LENGTH = "Content-length";

public String CONTENT_TYPE = "Content-type";

private String EOL = "\r\n";

private BufferedInputStream is;

private DataOutputStream os;

private String keystore = "certificate\\key1_test.jks";

private char keystorepass[] = "123456".toCharArray();

private char keypassword[] = "123456".toCharArray();

private DB sql;

public static final int HTTPS_PORT = 443;

 

private String path = "";

private String post_param = "";

   public HTTPs(DB sql) {

       this.sql = sql;

   }

public void setKeystorePath(String path)

{

    this.keystore = path;

}

public void setKeyStorePass(String pass)

{

    this.keypassword = pass.toCharArray();

    this.keystorepass = pass.toCharArray();

}

  public void start() throws ClassNotFoundException, IOException {

           running = true;

    new Thread(this).start();

}

   public void stop()

   {

       running = false;

   }

 public void run() {

 ServerSocket listen;

 try {

  listen = getServerSocket();

  while (true) {

   Socket socket = listen.accept();   

   is = new BufferedInputStream(socket.getInputStream());

   os = new DataOutputStream(socket.getOutputStream());

       try {

           readHTTPMessage();

           PageProcessor(socket);

       } catch (Throwable ex) {

           System.out.println("Exception: " + ex.getMessage());

       }

  }

 } catch (Exception e) {

  System.out.println("Exception: " + e.getMessage());

 }

}

 public ServerSocket getServerSocket() throws Exception {

 KeyStore ks = getKeyStore();

 KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());

 kmf.init(ks, keypassword);

 SSLContext sslcontext = SSLContext.getInstance("SSLv3");

 sslcontext.init(kmf.getKeyManagers(), null, null);

 ServerSocketFactory ssf = sslcontext.getServerSocketFactory();

 SSLServerSocket serversocket = (SSLServerSocket)ssf.createServerSocket(HTTPS_PORT);

 return serversocket;

}

private KeyStore getKeyStore() {

 try {

  KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());

  ks.load(new FileInputStream(keystore), keystorepass);

  return ks;

 } catch (Exception e) {

  System.out.println("Exception2: " + e.getLocalizedMessage());

  stop();

 }

 return null;

}

 private void writebytes(Socket socket, String data) {

 try {

  StringBuffer buf = new StringBuffer();

  String response = "HTTP/1.0 200 OK\r\n"+

                   "Server: YarServer/2009-09-09\r\n" +

                   "Content-Type: text/html\r\n" +

                  // "Content-Length: " + s.length()+ "\r\n" +

                   "Connection: keep-alive\r\n\r\n";

 buf.append(response);

 buf.append(data);

 os.write(buf.toString().getBytes());

 os.flush();

  if (!socket.isClosed())

   is.close();

  if (!socket.isClosed())

   os.close();

 } catch (Throwable e) {

  System.out.println("Exception3: " + e);

 }

 try {

  if (!socket.isClosed())

   socket.close();

 } catch (Throwable e) {

  System.out.println("Problem in data writing in channel");

  System.out.println(e);

 }

}

public String readHTTPMessage() throws IOException {

 String result = null;

 StringBuffer strb = new StringBuffer();

 int bufferSize = 1024; // is.available()==0 ? 1024:is.available();

 int contentLength = 0;

 int headerLength = 0;

 int bodyLength = 0;

 

  byte[] buf = new byte[bufferSize];

  int nread = 0;

  while ((nread = is.read(buf)) != -1) {

   if (nread == 0)

    continue;

   strb.append(new String(buf, 0, nread));

   // System.out.println(strb);

   result = strb.toString();

   if (contentLength == 0) {

    // atleast 50 bytes required to identify content length

    if (result.length() < 50)

     continue;

    HTTPRequest request = new HTTPRequest(result.getBytes());

    String contentStr = getPropertyIgnoreCase(request

      .getHeaders(), CONTENT_LENGTH);

      

    path = request.path;

    // if length specified

    if (null == contentStr || "".equals(contentStr))

     break;

    

    contentLength = Integer.parseInt("" + contentStr.trim());

    bodyLength = request.getBodyContent().length;

    headerLength = result.length() - bodyLength;

   } else {

    bodyLength = result.length() - headerLength;

   }

   if (bodyLength < contentLength) {

    bufferSize = contentLength - bodyLength;

    buf = new byte[bufferSize];

   } else {

    if (bodyLength >= contentLength || result.endsWith(EOL)) {       

     break;

    }

   }

  }

 

 return result;

}

public static String getPropertyIgnoreCase(Properties props, String key) {

 String value = null;

 Enumeration enum0 = props.propertyNames();

 while (enum0.hasMoreElements()) {

  String name = (String) enum0.nextElement();

  if (key.equalsIgnoreCase(name)) {

   value = props.getProperty(name);

   break;

  }

 }

 return value;

}

     

public void SendFile(Socket s,String path)

   {

       BufferedInputStream bis = null;

       BufferedOutputStream bos = null;

       int in = 0;

       byte byteArray[] = new byte[8192];

       try {

            File f = new File(path);

            if (f.exists())

              {

               bis = new BufferedInputStream(new FileInputStream(path));

               bos = new BufferedOutputStream(s.getOutputStream());

                   while ((in = bis.read(byteArray)) != -1){

                       bos.write(byteArray,0,in);

                    }

                   bis.close();

                   bos.close();

            }

       } catch (Exception e) {

       }

}

private String LoadPage(String path) throws FileNotFoundException, IOException

      {

          BufferedReader myfile = new BufferedReader(new FileReader(path));

          String b = "";

          String buf = "";

          while(true){

               b = myfile.readLine();

               buf+=b+"\n";

               if (myfile.ready()==false)

                   break;

           }

           myfile.close();

           return buf;

      }

   private void PageProcessor(Socket sock) throws SQLException, Throwable

       {

           String buf = LoadPage("pages\\ssl_test.html");

           writeResponse(buf);

       }

   private void writeResponse(String s) throws Throwable {

           StringBuffer buf = new StringBuffer();

           String response = "HTTP/1.0 200 OK\r\n"+

                   "Server: YarServer/2009-09-09\r\n" +

                   "Content-Type: text/html\r\n" +

                  // "Content-Length: " + s.length()+ "\r\n" +

                   "Connection: keep-alive\r\n\r\n";

           buf.append(response);

           buf.append(s);            

           os.write(buf.toString().getBytes());

           os.flush();

           os.close();

       }

}


 

А также другие работы, которые могут Вас заинтересовать

6599. Характеристика наукоемкого производства. Характеристика наукоемкого производства авиационных двигателей 118.06 KB
  Характеристика наукоемкого производства Характеристика наукоемкого производства авиационных двигателей Изготовление наукоемкого объекта, имеющего высокие эксплуатационные параметры, очевидно, может быть осуществлено только в условиях наукоемкого про...
6600. Наукоемкие технологии производства. Характеристика наукоемких технологий 209.06 KB
  Наукоемкие технологии производства Характеристика наукоемких технологий Наукоемкое производство опирается на наукоемкие технологические процессы на всех стадиях производства. Процесс создания наукоемких технологий (НТ) является комплексным, охватыва...
6601. Система обеспечения качества авиационных двигателей 87.69 KB
  Система обеспечения качества авиационных двигателей Авиационный двигатель (АД) является сложной наукоемкой техническойсистемой непрерывно развивающейся по этапам жизненного цикла. В этой связи обеспечение качества авиационных двигателей предст...
6602. Обеспечение качества авиационных двигателей пo этапам жизненного цикла 111.65 KB
  Обеспечение качества авиационных двигателей пo этапам жизненного цикла Практика авиационного двигателестроения свидетельствует, что толькопри комплексном подходе к проблеме качества на всех взаимосвязанных этапах жизненного цикла могут быть об...
6603. Комплексная система обеспечения надежности двигателей 136.67 KB
  Комплексная система обеспечения надежности двигателей Система обеспечения надежности двигателей Одними из основных показателей, характеризующих качество двигателей, являются показатели надежности. В данном разделе подробно рассмотрена система обеспе...
6604. Законодательные аспекты управления качеством при проектировании авиационных двигателей 45.02 KB
  Законодательные аспекты управления качеством при проектировании авиационных двигателей Качество - это степень соответствия продукции требованиям потребителя. Существует несколько аспектов понятия управления качеством (УК). Управленческий аспект...
6605. Информационные системы и информационные технологии в управлении качеством 47.31 KB
  Информационные системы и информационные технологии в управлении качеством Информационные системы в управлении качеством НОП. Известно, что материальной базой для создания процессно-ориентированных информационных систем на наукоемких предприят...
6606. Применение CALS - технологий в управлении качеством 34.3 KB
  Применение CALS - технологий в управлении качеством Многолетний зарубежный опыт создания и использования современных систем управления качеством продукции (УКП) показал, что главным условием эффективности их функционирования является наличие ин...
6607. Сертификация в технике. Введение в сертификацию 54.9 KB
  Сертификация в технике Введение в сертификацию Установление требований к качеству промышленной продукции, технологических процессов - важнейшее условие их разработки, производства, эксплуатации и утилизации. Эти требования как правило, отражаются в ...