Проектирование и разработка информационно-поисковой системы

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 30.09.2016
Размер файла 2,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Содержание

  • 1. Введение
  • Постановка задачи
  • Обзор возможных решений
  • Используемые инструменты и технологии
  • Проектирование базы данных
  • Проектирование бизнес-логики
  • Разработка системы
  • Разработка с использованием Spring MVC
  • The DispatcherServlet
  • Конфигурация приложения
  • Определение контроллера
  • Представления
  • Создание формы
  • Создание структуры проекта
  • Подключение сервера приложений Glassfish
  • Контроллер и представление
  • Вывод
  • 2. Разработка системы с использованием технологий Spring web flow, jsf
  • Проектирование пакетов
  • Разработка на Spring Web Flow
  • Получение информации
  • Вывод данных в представление
  • Пользовательский интерфейс
  • Вывод
  • Заключение
  • Список использованной литературы
  • Приложения

1. Введение

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

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

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

Для реализации такой системы был выбран язык программирования java, основные преимущества которого: высокая скорость разработки и распространенность.

Постановка задачи

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

Исходные данные: журналы в формате doc, выпуски в формате docx, видео в формате avi, звуковые файлы в формате wav.

Так как у исходных данных нет строгой структуры, и эти форматы не соответствуют строгой структуре таблиц и отношений в моделях реляционных баз данных, нельзя использовать алгоритмы поиска структурированных данных. В данной задаче вся информация будет располагаться на сетевом хранилище NAS (Network Attached Storage), а вся метаинформация о каждом файле будет находиться в базе данных. Благодаря такому подходу становится возможным оперирование данными, хранящимися в различных форматах без четкой структуры.

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

· Функциональные

o Возможность добавлять новую информацию в архив

o Возможность редактирования существующей информации

§ Переименование

§ Изменение метаданных

o Осуществление поиска по метаданным

o Отображение данных

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

· Инструментальные

o Реализации на платформе java с использованием фреймворков Spring web flow, prime-faces, spring web mvc.

o Использование Spring security для аутентификации и обеспечения безопасности данных.

o Использование сервера приложений Glassfish

o Использование в качестве СУБД - Mysql

Обзор возможных решений

Решить поставленную задачу можно следующими способами:

1. Использование стандартного подхода Java2EE к созданию web-приложений с помощью EJB (Enterprise Java Beans).

Плюсы: наличие открытой спецификации, полная интеграция с другими технологиями Java, быстрый цикл разработки.

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

2. Использование популярного фреймворка Spring

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

Многослойная архитектура Spring позволяет использовать любую свою часть отдельно от другой, несмотря на это его внутренняя архитектура согласована.

2.1 Использование стандартного Spring mvc

Плюсы: скорость обучения, скорость разработки

Минусы: сложность написания сложного приложения без подключения дополнительных фреймворков

2.2 Использование технологии Spring web flow, prime-faces, spring web mvc

Плюсы: Возможность решить любые задачи бизнес логики, возможность использования JSF (JavaServer Faces).

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

Минусы: сложность обучения.

В данной работе я рассмотрю 2 варианта разработки такой системы.

1. С использованием стандартного Spring mvc

2. С использованием технологий Spring web flow, spring web mvc, jsf.

И наиболее оптимальный вариант будет использоваться в реализации поисковой системы.

Используемые инструменты и технологии

Для проектирования и разработки информационно-поисковой системы используются следующие инструменты:

1. Intellij idea - IDE для разработки приложений на Java.

2. Apache Glassfish - сервер приложений.

3. Mysql - СУБД для хранения данных системы.

4. Mysql workbench - утилита для проектирования базы данных.

5. Visual Use case - утилита для проектирования системы.

Используемые языки:

1. Java - объектно-ориентированный язык программирования.

2. HTML (HyperText Markup Language) - язык гипертекстовой разметки документов, используемый во Всемирной паутине (WWW). ?

3. CSS (Cascade Style Sheet) - язык для описания ?внешнего стиля документа.

4. JavaScript - прототипно-ориентированныи? сценарный язык программирования, используемый на стороне клиента веб-приложения.

Проектирование базы данных

Для визуального проектирования базы данных была взята утилита Mysql Workbench.

MySQL Workbench упрощает разработку и обслуживание баз данных, позволяет автоматизировать отнимающих много времени и подверженных ошибкам задач, а также улучшает коммуникацию между DBA (Администратор базы данных) и разработчиков команд. Это позволяет архитекторам данных визуализировать требования, общаться с заинтересованными сторонами, и решать вопросы проектирования. Она позволяет на основе моделей проектировать базы данных, которые являются наиболее эффективной методикой для создания достоверных и быстрых баз данных, обеспечивая при этом гибкость для удовлетворения меняющихся потребностей бизнеса. Модель и схема валидации данных обеспечивает соблюдение всех стандартов для моделирования данных, а также обеспечивает соблюдение всех MySQL стандартов физического проектирования, что исключает возникновение ошибок при создании новых диаграмм ER или формирования физических баз данных MySQL.

Для визуализации проектирования базы данных используем ER - диаграмму (Рис. 1):

информационная поисковая система программирование

Рис. 1. ER-диаграмма

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

При построении ER диаграммы была учтена 3 нормальная форма отношений в реляционной базе данных.

Проектирование бизнес-логики

Для проектирования системы была использована программа Visual Use Cases, которая позволяет строить user stories, use cases и диаграммы, так же есть возможность работать в команде (Рис. 2).

Рис. 2. Интерфейс программы Visual Use Case

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

Первым этапом проектирования бизнес-логики является написание пользовательских историй, которые в последствии будут перенесены в Use case, а затем по ним будет составлена диаграмма вариантов использования (use case). Для реализации "скелета" необходимо реализовать следующие сценарии использования (use case):

1. Регистрация

2. Загрузка информации в базу

3. Доступ к ресурсам

4. Поиск материала по базе

5. Чат

6. Форма для подачи заявки на мониторинг

7. Оплата за предоставленные услуги (мониторинг)

8. Расширение аккаунта до PRO версии

По данным сценариям необходимо создать диаграмму вариантов использования (Рис. 3).

Рис. 3. Диаграмма вариантов использования (use case)

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

Разработка системы

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

Разработка с использованием Spring MVC

MVC Framework Spring Web обеспечивает архитектуру представление-модель - контроллер и готовые компоненты, которые могут быть использованы для разработки гибких и слабо связанных веб-приложений. Шаблон MVC приводит к разделению различных аспектов применения (входная логика, бизнес-логика), обеспечивая при этом слабую связь между этими элементами.

Model инкапсулирует данные приложения, которые будут состоять из POJO (Plain Old Java Object).

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

Controller отвечает за обработку запросов пользователей и построения соответствующей модели и передает его в представление для рендеринга.

The DispatcherServlet

Spring Web model-view-controller работает с помощью DispatcherServlet, который обрабатывает все HTTP-запросы и HTTP-ответы. Обработка запроса рабочего процесса в Spring Web MVC DispatcherServlet показана на следующей диаграмме (Рис. 4):

Рис. 4. DispatcherServlet

Ниже приводится последовательность событий для входящего запроса HTTP к DispatcherServlet:

· После получения HTTP запроса DispatcherServlet вызывает соответствующий контроллер с помощью HandlerMapping.

· Контроллер принимает запрос и вызывает соответствующие методы сервисов на основе используемого метода GET или POST. Метод сервиса устанавливает данные модели, основанные на определенной бизнес-логике и возвращает имя представления в DispatcherServlet.

· DispatcherServlet с помощью ViewResolver обрабатывает определенное представление в зависимости от метода запроса.

· После того как просмотр завершен, DispatcherServlet передает данные модели представления, которая, наконец, отображает его в браузере.

Все указанные выше компоненты, т.е. HandlerMapping, Controller и ViewResolver являются частями WebApplicationContext, которая является продолжением обычной ApplicationContext с некоторыми дополнительными функциями, необходимыми для веб-приложений.

Конфигурация приложения

Сперва нам необходимо отобразить запросы, которые должен обрабатывать DispatcherServlet, используя отображение URL в файле web. xml (Рис.5).

Рис. 5. Настройка web. Xml

При инициализации appServlet DispatcherServlet фреймворк будет пытаться загрузить контекст приложения из файла с именем [имя сервлета] - servlet. xml, который находится в каталоге webapp / WEB-INF приложения. В этом случае наш файл будет servlet-context. xml (Рис.6).

Рис. 6. Servlet-context. xml

Далее тег <servlet-mapping> указывает на URL-адреса, которые будут обрабатываться посредством DispatcherServlet. Здесь все запросы HTTP, будут обрабатываться appServlet DispatcherServlet.

Конфигурация servlet-context. xml будет использоваться для создания beans, перекрывая любые другие beans, определенных глобально с тем же именем.

Тег <context: component-scan> будет использоваться для активации Spring MVC аннотаций, которая позволяет использовать сканирование с помощью аннотаций @Controller и @RequestMapping и т.д.

InternalResourceViewResolver это определенные правила для разрешения имен представлений. В соответствии с определенным выше правилом логическое представление с именем "hello" свяжется с реализацией, расположенной по адресу /WEB-INF/views/hello. jsp.

Определение контроллера

Рис. 7. Определение контроллера

DispatcherServlet отдает запрос на контроллеры для выполнения функциональной логики (Рис.7). Аннотация @Controller указывает на то, что конкретный класс играет роль контроллера. Аннотация @RequestMapping используется для отображения URL, либо целого класса или конкретного метода обработчика.

Здесь первое использование @RequestMapping указывает на то, что все запросы будут поступать в этот контроллер для обработки. Следующая аннотация @RequestMapping (method = RequestMethod. GET) используется для объявления метода запроса. По умолчанию контроллер обрабатывает HTTP GET запрос.

Внутри этого метода мы определяем бизнес логику приложения. Метод может возвращать строку, которая содержит имя представления, которое будет использоваться для визуализации модели. Этот пример возвращает "login" в качестве имени логического представления, и внутрь представления передается объект kantarXmlForm, который будет отображен представлением.

Представления

Spring MVC поддерживает множество типов представлений для различных технологий. К ним относятся - JSP-страницы, HTML, PDF, электронные таблицы Excel, XML, шаблоны Velocity, XSLT, JSON, RSS-каналы, JasperReports и т.д. Но чаще всего используются шаблоны JSP, написанных с JSTL.

Создание формы

Для создания конфигурации приложения в Spring можно использовать несколько способов, но основной и самый популярный - вынесение конфигурации в xml-файлы.

Такой способ используется в фреймворке Spring с первого релиза. Позже, в Java 5 были введены аннотации, которые так же позволяют настраивать фреймворк (с версии 2.5).

В данной работе мы будем использовать наиболее удобный XML-стиль.

Используемые инструменты

· Intellij Idea 15.0.5,Java SDK 1.5,Apache Glassfish 4.1.0,Maven.

Создание структуры проекта

Подключение Maven

Для начала нам надо подключить maven, создать файл pom. xml и прописать в нем все необходимые зависимости для того, чтобы подключить используемые библиотеки. Все библиотеки располагаются в центральном репозитории maven, что избавляет нас от нужны каждый раз вручную подключать все библиотеки к проекту (Рис.8). В pom файле мы так же прописываем используемую версию java и название проекта, которое будет деплоиться на сервер приложений Glassfish. На данном этапе нам необходимы только 2 зависимости, а именно spring-context и spring-webmvc.

Рис. 8. Подключение библиотек в файле pom. xml

Конфигурация приложения

Далее нам необходимо настроить наше приложение, а именно прописать настройки DispatcherServlet в файлах конфигурации web. xml и указать в servlet-context. xml, где будут находится наши ресурсы, а также задать бину InternalResourceViewResolver расположение и тип нашего представления.

Подключение сервера приложений Glassfish

В inteliij idea Glassfish подключается довольно просто: необходимо указать локальный адрес (порт по умолчанию 8080), используемый domain, а также заранее подготовленный maven'ом war артефакт, который и будет деплоиться на сервер (Рис. 9).

Рис. 9. Настройка Glassfish

Контроллер и представление

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

1. Любой http запрос попадает в 1 контроллер, благодаря аннотации @RequestMapping (value = "/", method = RequestMethod. GET), которая ловит все запросы начальной страницы. Далее выводится представление login, где отображается сама форма. На вход она принимает List<KantarXml>, где KantarXml - класс содержащий все поля, необходимого xml файла.

2. Благодаря Jsp namespace "form" мы можем однозначно отобразить наш массив объектов с помощью размножения полей формы, а для заполнения таких форм нам не обойтись без цикла. Естественно, стандартный путь, где страница собирается вручную с помощью html тегов нам не подходит, так как у нас динамическое количество объектов в массиве. В namesapce "http://java. sun.com/jsp/jstl/core" существует специальный тег, который позволяет вывести циклом все данные.

<c: forEach items="${kantarXmlForm. xmls}" var="kantarXml" varStatus="status">

3. Форма передается на вход методу xmlgen (), который создает и генерирует xml файл из данных, введенных пользователем.

@RequestMapping (value = "/xmlgen", method = RequestMethod. POST) public ModelAndView xmlgen (@ModelAttribute ("kantarXmlForm") KantarXmlForm kantarXmlForm) throws TransformerException, IOException { for (int i = 0; i < kantarXmlForm. getXmls (). size (); i++) { new ConstructorsForXML (kantarXmlForm);

} return new ModelAndView ("show_xml", "kantarXmlForm", kantarXmlForm);

}

4. После отправления формы, запрос с веденными данными перехватывает контроллер FileDownloadController, который позволяет скачать полученный xml файл.

Если пользователю необходимо дать возможность самостоятельно размножать поля формы, для этого необходимо в представлении прописать JavaScript, который по нажатию кнопки "Добавить поле" будет добавлять определенные поля внутри тега <form/> (Рис.10, Рис.11).

Рис. 10. До размножения полей

Рис. 11. После размножения полей

Вывод

В этом варианте я рассмотрел принципы Java spring mvc, изучил основные принципы работы с jsp под управлением spring контроллеров. Так же была написана динамическая форма для генерации xml файлов на основе введенных пользователем данных. Конечно, возникает множество трудностей при использовании jsp, связанных с передачей информации в представление, а так же сложность разбиения большой системы на потоки.

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

2. Разработка системы с использованием технологий Spring web flow, jsf

Проектирование пакетов

Для построения такой системы сначала необходимо разбить ее на небольшие подсистемы, которые будут отвечать за некоторую задачу. Так, пакет DAO отвечает за выборку необходимых данных из базы данных определенного типа. В нем описаны методы поиска по этим данным, которые соеденены только с объектами из базы данных.

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

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

Рис. 12. Диаграмма пакетов

Разработка на Spring Web Flow

В Spring Web Flow поток состоит из ряда шагов, называемых "Состояние". Вход в это состояние, как правило, приводит к представлению и отображается пользователю.

В этом представлении происходят пользовательские события, которые обрабатываются этим состоянием. Эти события могут вызвать переходы в другие состояния (Рис. 13).

Рис. 13. Состояния Web Flow

Каждый поток начинается со следующего корневого элемента (Рис.14):

Рис. 14. Определение потока (flow)

Все состояния потока определяются в пределах этого элемента. Элемент view-state определяет стадию потока (Рис.15).

Рис. 15. Определение view-state в потоке

Этот поток отобразит представление main. xhtml из того каталога, где он расположен. С помощью элемента evaluate вызываются методы Spring или другие переменные потока.

Получение информации

Для доступа к базе данных используется hibernate, который позволяет подключаться к базе данных и манипулировать данными с помощью специальных методов без контакта с самой базой. При подключении к базе данных создается специальный объект sessionFactory, который по JDBC соединению связывает entity классы Java с соответствующими таблицами в СУБД. Благодаря такому подходу можно добиться целостности и согласованности данных, ведь spring берет на себя всю работу связанную с транзакциями и сессиями.

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

@Transactional @Override public List<Journals> getJournal (String name) { List<Journals> journals = createJournalList (createJournalCriteria (). add (Restrictions. ilike ("b. name",name, MatchMode. ANYWHERE)));

return journals;

}

Для доступа к данным используется аннотация @Transactional для создания транзакции.

Вывод данных в представление

Для вывода сформировавшейся коллекции используется компонент jsf <p: data grid> фреймворка prime-faces для встраивания данных на страницу xhtml, который принимает список из модели и выводит его таблицей.

<p: dataGrid rowIndexVar="rowIndex" columns="3" lazy="true" var="b" value="${newsrussiaFacade. journals}" id="journalsList" styleClass="list-results list-results-underlined" paginator="true" rows="4" paginatorPosition="bottom" rowsPerPageTemplate="12,24,80" paginatorTemplate="{RowsPerPageDropdown} {PageLinks}" paginatorAlwaysVisible="true" emptyMessage="">

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

<h: outputLink styleClass="content_link" target="_blank"> <p: graphicImage value="/ShowImage? index=#{rowIndex}" width="100%"/> </h: outputLink>

который вызывает сервлет showImage и передает индекс необходимого элемента.

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

Рис. 16. Главная страница

Интерфейс разделен на 4 логические части (Рис.16).

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

2. С левой стороны расположено раскрывающееся по нажатию или наведению главное меню системы.

3. Строка поиска с выбором типа поиска.

4. Главная страница поиска.

Рис. 17. Чат

Главная страница поиска выглядит следующим образом (Рис.18):

Рис. 18. Главная страница поиска

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

Вывод

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

Заключение

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

В ходе выполнения работы были выбраны инструменты и технологии, выделены требования, была спроектирована база данных и бизнес-логика.

Мною были изучены такие технологии как: Java, SQL, Intellij idea, Apache Glassfish, Mysql, Mysql Workbench, Visual Use case, HTML, CSS, Javascript, Apache Maven, Spring framework, Spring web flow, Spring MVC, Prime-faces framework.

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

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

Список использованной литературы

1. Официальная документация Spring. URL: https: // spring. io/docs (Дата обращения: 24.02.2016)

2. Spring IO Platform Reference Guide. URL: http://docs. spring. io/spring/docs/4.3.0. RC2/spring-framework-reference/htmlsingle/ (Дата обращения 25.02.2016)

3. Accessing Relational Data using JDBC with Spring. URL: https: // spring. io/guides/gs/relational-data-access/ (Дата обращения: 25.02.2016)

4. Seth Ladd, Darren Davison, Expert Spring MVC and Web Flows [2006]

5. Кларенс Хо, Роб Харроп Spring 3 для профессионалов [2013]

6. Быстрый старт spring. URL: http://spring-projects.ru/projects/spring-framework/ (Дата обращения: 22.02.2016)

Приложения

Приложение 1: Разработка с использованием Spring Mvc

Приложение А. Используемые классы

1. KantarXml. java

import java. io. Serializable;

// класс для описания полей Xml файла public class KantarXml implements Serializable { private String id;

private String source;

private String issue;

private String date_issue;

private String page;

private String info;

private String title;

private String body;

private String summary;

private String pdf_url;

private String order_id;

private String country;

private String date;

public KantarXml () { } public KantarXml (String id, String source, String issue, String date_issue, String page, String info, String title, String body, String summary, String pdf_url, String order_id, String country, String date) { this. id = id;

this. source = source;

this. issue = issue;

this. date_issue = date_issue;

this. page = page;

this. info = info;

this. title = title;

this. body = body;

this. summary = summary;

this. pdf_url = pdf_url;

this. order_id = order_id;

this. country = country;

this. date = date;

}

/* Getters and setters

*/ }

KantarXmlForm. java

// класс для хранения list объектов Xml

public class KantarXmlForm implements Serializable { private List<KantarXml> xmls;

public List<KantarXml> getXmls () { return xmls;

} public void setXmls (List<KantarXml> xmls) { this. xmls = xmls;

} }

ConstructorForXml. java

// класс для создания XML файла

public class ConstructorsForXML { DocumentBuilder builder;

public ConstructorsForXML (KantarXmlForm kantarXmlForm) throws TransformerException, IOException { ParamLangXML (); // Инициализация XML WriteParamXML (kantarXmlForm. getXmls ()); // запись } public void ParamLangXML () { DocumentBuilderFactory factory = DocumentBuilderFactory. newInstance ();

try { builder = factory. newDocumentBuilder (); } catch (ParserConfigurationException e) { e. printStackTrace (); } } /** * Запись настроек в XML файл */ // <NEWS> public void WriteParamXML (List<KantarXml> xmls) throws TransformerException, IOException { Document doc=builder. newDocument ();

Element RootElementNews = doc. createElement ("NEWS");

doc. appendChild (RootElementNews);

Element NameElementOrder_id = doc. createElement ("order_id");

NameElementOrder_id. appendChild (doc. createTextNode (xmls. get (0). getOrder_id ()));

RootElementNews. appendChild (NameElementOrder_id);

Element NameElementCountry = doc. createElement ("country");

NameElementCountry. appendChild (doc. createTextNode (xmls. get (0). getCountry ()));

RootElementNews. appendChild (NameElementCountry);

Element NameElementDate = doc. createElement ("date");

NameElementDate. appendChild (doc. createTextNode (xmls. get (0). getDate ()));

RootElementNews. appendChild (NameElementDate);

for (KantarXml xml: xmls) { Element RootElementArticle = doc. createElement ("Article");

RootElementNews. appendChild (RootElementArticle);

Element NameElementId = doc. createElement ("id");

NameElementId. appendChild (doc. createTextNode (xml. getId ()));

RootElementArticle. appendChild (NameElementId);

Element NameElementCompile = doc. createElement ("source");

NameElementCompile. appendChild (doc. createTextNode (xml. getSource ()));

RootElementArticle. appendChild (NameElementCompile);

Element NameElementIssue = doc. createElement ("issue");

NameElementIssue. appendChild (doc. createTextNode (xml. getIssue ()));

RootElementArticle. appendChild (NameElementIssue);

Element NameElementDate_Issue = doc. createElement ("date_issue");

NameElementDate_Issue. appendChild (doc. createTextNode (xml. getDate_issue ()));

RootElementArticle. appendChild (NameElementDate_Issue);

Element NameElementPage = doc. createElement ("page");

NameElementPage. appendChild (doc. createTextNode (xml. getPage ()));

RootElementArticle. appendChild (NameElementPage);

Element NameElementInfo = doc. createElement ("info");

NameElementInfo. appendChild (doc. createTextNode (xml. getInfo ()));

RootElementArticle. appendChild (NameElementInfo);

Element NameElementTitle = doc. createElement ("title");

NameElementTitle. appendChild (doc. createTextNode (xml. getTitle ()));

RootElementArticle. appendChild (NameElementTitle);

Element NameElementBody = doc. createElement ("body");

NameElementBody. appendChild (doc. createTextNode (xml. getBody ()));

RootElementArticle. appendChild (NameElementBody);

Element NameElementSummary = doc. createElement ("summary");

NameElementSummary. appendChild (doc. createTextNode (xml. getSummary ()));

RootElementArticle. appendChild (NameElementSummary);

Element NameElementPdf_Url = doc. createElement ("pdf_url");

NameElementPdf_Url. appendChild (doc. createTextNode (xml. getPdf_url ()));

RootElementArticle. appendChild (NameElementPdf_Url);

} SavetoFile (doc);

} public void SavetoFile (Document doc) throws TransformerException, FileNotFoundException { Transformer t=TransformerFactory. newInstance (). newTransformer ();

t. setOutputProperty (OutputKeys. METHOD, "xml");

t. setOutputProperty (OutputKeys. INDENT, "yes");

// t. transform (new DOMSource (doc), new StreamResult (new FileOutputStream ("/Users/sergejsafonov/proxy. xml")));

t. transform (new DOMSource (doc), new StreamResult (new FileOutputStream ("/home/sersaf/Rolex_. xml")));

} }

Приложение Б. Контроллеры

LoginController. java

Приложение В. Представления

Main. jsp

Приложение Г. Скрипты

Script. js

Приложение Д. Файлы конфигурации

servlet-context. xml

Приложение 2. Разработка с использованием технологий Spring web flow, jsf

Приложение А. Используемые классы сущностей

Audio. java

package wps. newsrussia. entities;

import java. sql. Date;

/** * Created by sergejsafonov on 12.05.16.

*/ public class Audio { private long id;

private String title;

private Date date;

private String type;

private String path;

private String description;

private String annotation;

private Genre genreId;

private Storage storageId;

}

/* Getters and setters

*/

@Override public boolean equals (Object o) { if (this == o) return true;

if (o == null || getClass ()! = o. getClass ()) return false;

Audio audio = (Audio) o;

if (id! = audio. id) return false;

if (title! = null?! title. equals (audio. title): audio. title! = null) return false;

if (date! = null?! date. equals (audio. date): audio. date! = null) return false;

if (type! = null?! type. equals (audio. type): audio. type! = null) return false;

if (path! = null?! path. equals (audio. path): audio. path! = null) return false;

if (description! = null?! description. equals (audio. description): audio. description! = null) return false;

if (annotation! = null?! annotation. equals (audio. annotation): audio. annotation! = null) return false;

if (genreId! = null?! genreId. equals (audio. genreId): audio. genreId! = null) return false;

return storageId! = null? storageId. equals (audio. storageId): audio. storageId == null;

} @Override public int hashCode () { int result = (int) (id ^ (id >>> 32));

result = 31 * result + (title! = null? title. hashCode (): 0);

result = 31 * result + (date! = null? date. hashCode (): 0);

result = 31 * result + (type! = null? type. hashCode (): 0);

result = 31 * result + (path! = null? path. hashCode (): 0);

result = 31 * result + (description! = null? description. hashCode (): 0);

result = 31 * result + (annotation! = null? annotation. hashCode (): 0);

result = 31 * result + (genreId! = null? genreId. hashCode (): 0);

result = 31 * result + (storageId! = null? storageId. hashCode (): 0);

return result;

} }

Di

gest. java

package wps. newsrussia. entities;

import java. sql. Date;

public class Digest { private long id;

private String name;

private Date lastmodify;

private String startDate;

private String lang;

private Byte status;

private Storage storageId;

private Genre genreId;

private DigestCover digestCoverId;

/* Getters and setters

*/

@Override public boolean equals (Object o) { if (this == o) return true;

if (o == null || getClass ()! = o. getClass ()) return false;

Digest digest = (Digest) o;

if (id! = digest. id) return false;

if (name! = null?! name. equals (digest. name): digest. name! = null) return false;

if (lastmodify! = null?! lastmodify. equals (digest. lastmodify): digest. lastmodify! = null) return false;

if (startDate! = null?! startDate. equals (digest. startDate): digest. startDate! = null) return false;

if (lang! = null?! lang. equals (digest. lang): digest. lang! = null) return false;

if (status! = null?! status. equals (digest. status): digest. status! = null) return false;

if (storageId! = null?! storageId. equals (digest. storageId): digest. storageId! = null) return false;

if (genreId! = null?! genreId. equals (digest. genreId): digest. genreId! = null) return false;

return digestCoverId! = null? digestCoverId. equals (digest. digestCoverId): digest. digestCoverId == null;

} @Override public int hashCode () { int result = (int) (id ^ (id >>> 32));

result = 31 * result + (name! = null? name. hashCode (): 0);

result = 31 * result + (lastmodify! = null? lastmodify. hashCode (): 0);

result = 31 * result + (startDate! = null? startDate. hashCode (): 0);

result = 31 * result + (lang! = null? lang. hashCode (): 0);

result = 31 * result + (status! = null? status. hashCode (): 0);

result = 31 * result + (storageId! = null? storageId. hashCode (): 0);

result = 31 * result + (genreId! = null? genreId. hashCode (): 0);

result = 31 * result + (digestCoverId! = null? digestCoverId. hashCode (): 0);

return result;

} }

DigestCover. java

package wps. newsrussia. entities;

public class DigestCover { private long id;

private String img;

/* Getters and setters

*/

@Override public boolean equals (Object o) { if (this == o) return true;

if (o == null || getClass ()! = o. getClass ()) return false;

DigestCover that = (DigestCover) o;

if (id! = that. id) return false;

if (img! = null?! img. equals (that. img): that. img! = null) return false;

return true;

} @Override public int hashCode () { int result = (int) (id ^ (id >>> 32));

result = 31 * result + (img! = null? img. hashCode (): 0);

return result;

} }

DigestIssues. java

package wps. newsrussia. entities;

import java. sql. Date;

public class DigestIssues { private long id;

private long issue;

private String title;

private Date date;

private String path;

private String keywords;

private Digest digestId;

/* Getters and setters

*/

@Override public boolean equals (Object o) { if (this == o) return true;

if (o == null || getClass ()! = o. getClass ()) return false;

DigestIssues that = (DigestIssues) o;

if (id! = that. id) return false;

if (issue! = that. issue) return false;

if (title! = null?! title. equals (that. title): that. title! = null) return false;

if (date! = null?! date. equals (that. date): that. date! = null) return false;

if (path! = null?! path. equals (that. path): that. path! = null) return false;

if (keywords! = null?! keywords. equals (that. keywords): that. keywords! = null) return false;

return digestId! = null? digestId. equals (that. digestId): that. digestId == null;

} @Override public int hashCode () { int result = (int) (id ^ (id >>> 32));

result = 31 * result + (int) (issue ^ (issue >>> 32));

result = 31 * result + (title! = null? title. hashCode (): 0);

result = 31 * result + (date! = null? date. hashCode (): 0);

result = 31 * result + (path! = null? path. hashCode (): 0);

result = 31 * result + (keywords! = null? keywords. hashCode (): 0);

result = 31 * result + (digestId! = null? digestId. hashCode (): 0);

return result;

} }

Genre. java

package wps. newsrussia. entities;

public class Genre { private long id;

private String name;

/* Getters and setters

*/

@Override public boolean equals (Object o) { if (this == o) return true;

if (o == null || getClass ()! = o. getClass ()) return false;

Genre genre = (Genre) o;

if (id! = genre. id) return false;

if (name! = null?! name. equals (genre. name): genre. name! = null) return false;

return true;

} @Override public int hashCode () { int result = (int) (id ^ (id >>> 32));

result = 31 * result + (name! = null? name. hashCode (): 0);

return result;

} @Override public String toString () { return name;

} }

Group. java

package wps. newsrussia. entities;

public class Group { private int idGroup;

private String groupName;

/* Getters and setters

*/

@Override public boolean equals (Object o) { if (this == o) return true;


Подобные документы

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

    курсовая работа [2,0 M], добавлен 21.06.2011

  • Разработка логической схемы базы данных автомобилестроительного предприятия. Инфологическое моделирование системы. Создание графического интерфейса пользователя для базы данных средствами языка программирования Java. Тестирование программных средств.

    курсовая работа [2,3 M], добавлен 16.12.2013

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

    курсовая работа [2,5 M], добавлен 23.02.2014

  • Разработка приложения для работы с базой данных с использованием объектно-ориентированного и визуального программирования. Обзор языка элементов языка программирования Delphi. Проектирование базы данных автозаправки. Клиентская система приложения.

    курсовая работа [2,3 M], добавлен 31.01.2016

  • Разработка базы данных "Тюрьма" для управления информацией, повышение оперативности выдачи информации, добавления и хранения информации о заключенных, охранниках и обслуживающем персонале. Использование языка Java, среды разработки NetBeans и СУБД Derby.

    курсовая работа [996,8 K], добавлен 31.01.2016

  • Разработка и анализ интерфейса пользователя базы данных. Ознакомление с процессом поэтапного создания проекта и добавления файла локальной базы данных. Исследование и характеристика главных принципов программирования функциональной части интерфейса.

    дипломная работа [3,0 M], добавлен 27.09.2017

  • Возможности программы DBDesigner. Проектирование и реализация информационно-поисковой системы с помощью CASE-средства DBDesigner в среде Intranet. Этапы проектирования базы данных, установление соединения с базой данных на сервере, синхронизация.

    лабораторная работа [1,5 M], добавлен 18.08.2009

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

    курсовая работа [610,7 K], добавлен 20.01.2012

  • Разработка приложения, позволяющего автоматизировать документооборот предприятия по списанию основных средств. Мероприятия по защите и обеспечению целостности базы данных. Разработка клиентского приложения. Запросы к базе данных, руководство пользователя.

    курсовая работа [700,0 K], добавлен 14.01.2015

  • Проектирование концептуальной, логической и физической модели базы данных. Формирование сущностей и связей между ними. Создание форм с функциями добавления, редактирования, удаления, поиска, печати. Разработка клиентской части БД с помощью среды Lazarus.

    курсовая работа [1,3 M], добавлен 05.04.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.