Конфигурация 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, создать файл pom. xml и прописать в нем все
необходимые зависимости для того, чтобы подключить используемые библиотеки. Все
библиотеки располагаются в центральном репозитории maven, что избавляет нас от
нужны каждый раз вручную подключать все библиотеки к проекту (Рис.8). В pom файле мы так же
прописываем используемую версию java и название проекта, которое будет деплоиться на
сервер приложений Glassfish. На данном этапе нам необходимы только 2 зависимости, а
именно spring-context и spring-webmvc.
Рис. 8. Подключение библиотек в файле pom. xml
Далее нам необходимо настроить наше приложение, а именно
прописать настройки DispatcherServlet в файлах конфигурации web. xml и указать в servlet-context. xml, где будут находится
наши ресурсы, а также задать бину InternalResourceViewResolver расположение и тип
нашего представления.
В inteliij idea Glassfish подключается довольно просто: необходимо
указать локальный адрес (порт по умолчанию 8080), используемый domain, а также заранее
подготовленный maven’ом war артефакт, который и будет деплоиться на сервер (Рис. 9).
Рис. 9. Настройка Glassfish
Так как наше приложение будет генерировать xml файл, на основе введенных данных пользователем, нам потребуется 2 контроллера. Первый контроллер послужит для отображения самой формы и передаче данных между представлениями и контроллерами.
. Любой http запрос попадает в 1 контроллер, благодаря аннотации @RequestMapping (value = "/", method = RequestMethod. GET), которая ловит все запросы начальной страницы. Далее выводится представление login, где отображается сама форма. На вход она принимает List<KantarXml>, где KantarXml - класс содержащий все поля, необходимого xml файла.
2. Благодаря Jsp namespace "form" мы можем однозначно отобразить наш массив объектов с помощью размножения полей формы, а для заполнения таких форм нам не обойтись без цикла. Естественно, стандартный путь, где страница собирается вручную с помощью html тегов нам не подходит, так как у нас динамическое количество объектов в массиве. В namesapce "#"897033.files/image010.jpg">
Рис. 10. До размножения полей
Рис. 11. После размножения полей
В этом варианте я рассмотрел принципы Java spring mvc, изучил основные принципы работы с jsp под управлением spring контроллеров. Так же была написана динамическая форма для генерации xml файлов на основе введенных пользователем данных. Конечно, возникает множество трудностей при использовании jsp, связанных с передачей информации в представление, а так же сложность разбиения большой системы на потоки.
Можно сделать вывод, что такой вариант не подходит для написания информационно-поисковой системы, так как существует множество ограничений связанных с бизнес логикой и выводом информации в пользовательском интерфейсе.
Для построения такой системы сначала необходимо разбить ее на небольшие подсистемы, которые будут отвечать за некоторую задачу. Так, пакет DAO отвечает за выборку необходимых данных из базы данных определенного типа. В нем описаны методы поиска по этим данным, которые соеденены только с объектами из базы данных.
Пакет objects отвечает за формирование результата вывода информации пользователю, так же там расположены некоторые вспомогательные методы, которые необходимы для того, чтобы правильно отобразить найденную информацию из базы данных по заданному критерию.
В пакете Servlets расположены сервлеты из стандартной спецификации
J2EE, которые необходимы для
не стандартных решений, призванных ускорить работу системы. Например, для того
что бы не загружать все изображения журналов из базы данных при загрузке
страницы, а выводить только то, что помещается на страницу и загружать
следующие изображения при переходе к данным журналам с помощью Ajax запроса, используется
сервлет ShowImage. java. Данный сервлет проверяет, какие элементы открыты на странице и
загружает к этим элементам соответствующие изображения из базы данных.
Рис. 12. Диаграмма пакетов
В 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).
. Шапка сайта, в которую выводятся уведомления пользователю, выбор языка интерфейса и личный кабинет. Так же по нажатию на кнопку в правом верхнем углу открывается чат с менеджером (Рис.17).
2. С левой стороны расположено раскрывающееся по нажатию или наведению главное меню системы.
. Строка поиска с выбором типа поиска.
4. Главная страница поиска.
Рис. 17. Чат
Рис. 18. Главная страница поиска
На главной странице постранично выводится вся информация
данного раздела из базы данных, разделенные пагинацией. Пользователь их может
открыть и скачать, а администратор еще и отредактировать и удалить. При нажатии
на обложку журнала открываются все выпуски данного журнала/выпуска. При нажатии
на видео запускается просмотр данного видео.
Данный подход к созданию web-приложений является
наиболее оптимальным. Так как он позволяет строить сложную бизнес-логику без
усложнения вывода информации в представлении.
В рамках данной работы была спроектирована и реализована информационно-поисковая система для хранения слабо-структурированных данных для предприятия, обладающая всем требуемым функционалом. Перед проектированием были рассмотрены возможные решения и выделены их плюсы и минусы.
В ходе выполнения работы были выбраны инструменты и технологии, выделены требования, была спроектирована база данных и бизнес-логика.