Разработка WEB-приложений
МИНИСТЕРСТВО
ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ
ГОСУДАРСТВЕННОЕ
АВТОНОМНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО
ОБРАЗОВАНИЯ
«САМАРСКИЙ
ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ
УНИВЕРСИТЕТ
ИМЕНИ АКАДЕМИКА С.П. КОРОЛЕВА
(НАЦИОНАЛЬНЫЙ
ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ)» (СГАУ)
Факультет
Информатики
Кафедра
Информационных систем и технологий
ПОЯСНИТЕЛЬНАЯ
ЗАПИСКА
к
курсовому проекту
по
теме «Разработка WEB-приложений»
Студент Малыхин М.Ю. группа 6401
Руководитель Лёзина И.В.
Самара 2015
г.
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
СТРУКТУРА
БАЗЫ ДАНЫХ
.1
Логическая схема БД
.2
Физическая схема БД
АРХИТЕКТУРА
ПРИЛОЖЕНИЯ
.1
Технологии
.2
Обоснования использования
.3
Взаимодействие элементов системы
ИНТЕРФЕЙС
ПОЛЬЗОВАТЕЛЯ
.1
Разработка и описание интерфейса
.2
Диаграмма вариантов использования
ЗАКЛЮЧЕНИЕ
СПИСОК
ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
ПРИЛОЖЕНИЕ
А Исходный код программы
ПРИЛОЖЕНИЕ
Б Служебныефайлы
ПРИЛОЖЕНИЕ
В HTML, CSS, XML
ВВЕДЕНИЕ
Информационная система (ИС) - это система
обработки данных какой-либо предметной области со средствами накопления,
хранения, обработки, преобразования, передачи, обновления информации с
использованием компьютерной и другой техники[1]. В ИС выполняются следующие
процессы:
− ввод информации из
внешних и внутренних источников;
− обработка входящей
информации;
− хранение информации
для последующего ее использования;
− вывод информации в
удобном для пользователя виде [2].
Основа ИС, объект ее обработки - база данных
(БД). База данных - это совокупность сведений о конкретных объектах реального
мира в какой-либо предметной области или разделе предметной области[3]. Таким
образом, БД выполняет функцию хранения информации в ИС.
В офисе хранение актуальной информации играет
ключевую роль в эффективной работе его сотрудников. Штату необходимо быстро
выполнять запросы начальства (например, помощь в поиске документов по типам или
работниками), поэтому в БД должна содержатьсяследующая информация:
− информация о
работниках;
− информация об
организации;
− информация о
документах;
Для работы необходим удобный пользовательский
интерфейс, который обеспечивает представление, добавление и редактирование
данных.
1
СТРУКТУРА БАЗЫ ДАНЫХ
1.1 Логическая схема БД
информационный
система интерфейс сервер
Логическая модель БД описывает понятия
предметной области, их взаимосвязь, а также ограничения на данные, налагаемые
предметной областью без учета её реализации в конкретной СУБД [4].
Основным средством разработки логической модели
данных в настоящий момент являются различные варианты ER-диаграмм
(Entity-Relationship, диаграммы сущность-связь).
На рисунке 1 представлена логическая схема базы
данных предметной области «Офис». На логической
схеме
изображены
следующие
сущности:
Organization, Employee, Job_Title, Document, Document_type. Описание
сущностей содержится в таблице 1.
Рисунок 1 - Логическая схема БД
Таблица 1 - Описание сущностей логической модели
данных
Название
|
Назначение
|
Employee
|
Описывает
работников находящихся в штате организации. Содержит атрибуты: ФИО,
занимаемая должность и организация в штате которой состоит. Связана связью
«один к одному» с сущностью «JobTitle» .
|
Organization
|
Описывает
организацию в которой работают сотрудники. Содержит атрибуты: название,
адрес. Связана связью «один к одному» с сущностью «Employee».
|
Job_Title
|
Справочник
должностей. Содержит атрибут: должность (название должности).
|
Document
|
Описывает
все документы и кто из работников над ними работает. Содержит атрибуты:
название, тип документа, работник. Связана связью «один к одному» с сущностью
Employee и связью
«один к одному» с сущностью DocumentType.
|
Document_type
|
Справочник
типов документов. Содержит атрибут тип документа.
|
1.2 Физическая схема БД
Физическая модель данных оперирует категориями,
касающимися организации внешней памяти и структур хранения, используемых в
данной операционной среде [5]. В настоящий момент в качестве физических моделей
используются различные методы размещения данных, основанные на файловых
структурах: это организация файлов прямого и последовательного доступа,
индексных файлов и инвертированных списков.
На рисунке 2 представлена физическая схема БД.
На схеме изображены сущности, а также указаны типы данных. Так как сущности «Document_type»
и «Employee» связаны с
сущностью «Document»
связью «один к одному», в физической схеме добавляются сущности-связки «Document_type\Document»и
«Employee\Document».
Сущности-связки содержат внешние ключи, обеспечивающие вид связи «один к
одному».
Рисунок 2 - Физическая схема БД
2.1 Технологии
При разработке информационной системы
использовались следующие технологии Java EE: JSP (Java Server Pages) и Servlet,
а также ORM (Object/Relational Mapper) реализация - Hibernate. В качестве
локального сервера приложений использовался Tomcat
8.0.21. Для создания информационной системы была использована IDE (Integrated
development environment)IntelliJIDEA
14.0.2.
Технология JavaServer Pages (JSP) позволяет
легко создавать webсодержимое, которое имеет как статические, так и динамические
компоненты[6].Она воплощает все динамические возможности технологии Java
Servlet, но обеспечивает более естественный способ создания статического
содержимого. Страница JSP является текстовым документом, которая содержит текст
двух типов: статические исходные данные, которые могут быть оформлены в одном
из текстовых форматов HTML, SVG, WML, или XML, и JSP элементы, которые
конструируют динамическое содержимое.
Сервлеты (Servlets) - это java-программы,
которые выполняются на серверной стороне Web-приложения и динамически расширяют
функциональные возможности Web-сервера [7].
Работа сервлета заключается в том, что при
приходе запроса от клиента Web-сервер с помощью специального конфигурационного
файла определяет, какой сервлет необходимо выполнить. JAVA-машина, в свою
очередь выполняет сервлет, который создает HTML-страницу и передает содержимое
Web-серверу. Web-сервер отправляет клиенту сформированную сервлетом
HTML-страницу.
Для отображения объектно-ориентированной модели
данных в традиционные реляционные базы данных использовалась технология Hibernate[8].
Для создания статической составляющей веб-страниц применялся язык
гипертекстовой разметки HTML [9],
для стилизации страниц были использованы каскадные таблицы стилей CSS
(Cascading Style Sheets) [10].
Для придания интерактивности веб-страницам был использован язык сценариев
JavaScript [11].
.2 Обоснования использования
Технология JSP
представляет собой простой способ добавлять динамические данные к фиксированным
шаблонным данным путем Java
вставок, заключенных в специальные теги, что значительно упрощает разработку web-приложения.Технология
является независимой от платформы на динамических web-страницах
и web-серверах, включает
многократное использование компонентов (JavaBeans)и
библиотек тегов. Использование заранее определенных переменных session,
response, и requestпозволяет
разработчику эффективно обрабатывать запросы клиента и создавать динамические
ответына них.
Сервлеты обеспечивают компонентный,
платформонезависимый способ создания веб-приложений, без ограничений
производительности. Они не привязаны ни к конкретному серверу, ни к платформе.
Сервлеты не предназначены для какого-то конкретного протокола, хотя чаще всего
их используют совместно с HTTP(HyperText Transfer Protocol). Сервлет дает возможность
передавать пользовательские данные заданному ресурсу и сохранять полученные с
ресурса данные в БД.
Технология Hibernateпозволяет
выполнить отображение объектов объектно-ориентированного языка в структуры
реляционных баз данных со всеми полями, значениями, отношениями и так далее.
Hibernate значительно уменьшает время разработки приложений, работающих с БД,
заботится о связи Java классов с таблицами БД (и типов данных Java с типами
данных SQL), предоставляет средства для автоматического построения запросов и
извлечения данных. Hibernate предлагает три вида запросов к БД: традиционные
SQL-запросы; HQL-запросы
(The Hibernate Query Language), похожие на SQL-запросы,
однако являющиеся полностью объектно-ориентированными; критериальные запросы.
HTML,CSS
и JavaScriptпозволяют создать
интерактивные страницы с приятным дизайном.JavaScript,исполняемый
браузером, может изменять, добавлять и удалять содержимое страницы при
возникновении какого-либо события. В результате страница может реагировать на
действия пользователя,причем скрипт выполняется на стороне клиента, а не на
сервере.
.3 Взаимодействие элементов системы
Реализованная информационная система имеет
трехуровневую архитектуру, т.е. разделена на три слоя: слой представления
(клиентское приложение), слой бизнес-логики (сервер приложений), слой доступа к
данным (сервер БД). Слой представления - интерфейсный компонент системы,
предоставляемый конечному пользователю. Данный слой выполняет функции
отображения и ввода данных для последующей обработки, и не нагружается
существеннойбизнес-логикой. Она в основном сосредоточена на сервере приложений,
который располагается на втором уровне архитектуры. Связующее программное
обеспечение позволяет принимать запросы от клиентского приложения, и после их
анализа выполнять запросы к серверу БД. Слой доступа к данным обеспечивает
хранение данных и выносится на отдельный уровень, реализуется, как правило,
средствами систем управления базами данных, подключение к этому компоненту
обеспечивается только с уровня сервера приложений.
ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ
3.1 Разработка и описание интерфейса
При разработке интерфейса необходимо следовать
следующим принципам: интерфейс должен помогать выполнять задачу, а не
становиться ею. Он должен быть дружелюбным, удобным, интуитивно-понятным, чтобы
минимизировать время, которое пользователь тратит на осознание того, как
работать с системой.
На начальной странице пользователю предоставлен
выбор таблицы, с которой он будет продолжать работу (рисунок5).
Рисунок 5 - Главная страница
При нажатии на одну из кнопок, осуществится
переход на страницу, которая будет включать в себя отображение данных выбранной
таблицы, а также кнопки с доступными для пользователя действиями. На рисунке 6
изображена страница, предназначенная для работы с сущностью «Employee».
Рисунок 6 - Страница для работы с сущностью «Employee»
Для того, чтобы добавить запись, необходимо
нажать на соответствующую кнопку, после чего откроется страница для добавления
(рисунок 7).
Рисунок 7 - Страница добавления записи в таблицу
«Employee»
При нажатии кнопки «Ок» введенные данные
сохраняются в БД. При этом осуществляется контроль ввода обязательных для
заполнения полей. Если такое поле не заполнено, появляется подсказка с
сообщением. Аналогично контролируется формат вводимых данных (рисунок 8). Если
данные введены правильно, и заполнены необходимые поля, то после сохранения
страница обновляется, а поля ввода очищаются. Кнопка «Очистить» позволяет
очистить заполненные поля. Пользователь имеет возможность вернуться на страницу
для работы с сущностью.
Рисунок 8 - Контроль ввода данных
Для удаления записей из БД необходимо запись в
таблице а затем нажать на кнопку «Удалить»(рисунок 9).
Рисунок 9 - Удаление записи
Рисунок 10 - Неактивные кнопки Изменить и
Удалить
Если при нажатии кнопки «Удалить» не выбрана ни
одна запись, то кнопка останется не активной до тех пока запись не будет
выбрана. Аналогично для кнопки «Изменить»
Редактирование записи производится аналогично
удалению (рисунок 11).
Рисунок 11- Редактирование записи
.2 Диаграмма вариантов использования
На рисунке 17 представлена диаграмма вариантов
использования [9]. На этой диаграмме определяются возможности пользователя в
ИС.
В соответствии с ней пользователь может выбрать
сущность для просмотра данных. При просмотре данных пользователь имеет
возможность добавлять, редактировать и удалять записи в БД, выполнять
дополнительные выборки. Добавление данных подразумевает непременное заполнение
обязательных полей, и заполнение необязательных полей по желанию, после чего пользователь
может сохранить данные. Для редактирования пользователь должен выбрать запись
из таблицы. После чего он имеет возможность редактировать некоторые параметры,
однако, как и в случаем добавления, пользователь обязан оставить заполненными
обязательные поля. Для удаления пользователь должен выбрать одну или несколько
записей из таблицы.
Рисунок 17 -Диаграмма вариантов использования
ЗАКЛЮЧЕНИЕ
В соответствии с заданием для курсового проекта
был проведен анализ предметной области, логическое проектирование и затем
выполнена физическая реализация проекта в выбранной разработчиком среде. При
разработке использовались следующие технологии: Servlet, JSP, Hibernate, язык
сценариев - JavaScript, каскадные таблицы стилей - CSS. Итогом проделанной
работы является информационная система «Офис».
В разработанной системе реализован
веб-интерфейс, который обеспечивает работу с сервер-приложением, в свою
очередь, взаимодействующим с БД. Пользователю предоставлена возможность выполнения
основных операций: чтения, добавления, редактирования, удаления данных.
Предусмотрен контроль ввода обязательных для заполнения данных и формата
вводимой информации.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1 Вишнякова, С.М. Профессиональное
образование. Словарь. Ключевые понятия, термины, актуальная лексика
[Электронный ресурс]/ С.М.Вишнякова - М.: НМЦ СПО, 1999.
Понятие информационной системы (ИС)
[Электронный ресурс]. - URL:
http://cde.osu.ru/demoversion/course157/text/1.5.html (дата обращения: 07 04
2015).
Информационные системы. Базы
данных[Электронный ресурс]. - URL:
http://www.kolomna-school7-ict.narod.ru/st40401.htm (дата обращения: 07 04
2015).
Кривошеин, М. ER-диаграммы
сущность-связь[Электронный ресурс] /М.Кривошеин - URL: http://kitzip.ru/upload/iblock/770/770e94b98016f3f4917cb4e38633d0f1.pdf
(Дата обращения: 27 10 2014).
Классификация моделей
данных[Электронный ресурс]. -
URL:http://www.sqlshop.ru/publ/klassifikacija_modelej_dannykh/1-1-0-5 (дата
обращения: 18 12 2014).
Технология JavaServer
Pages[Электронный ресурс]. -
URL:http://www.javable.com/tutorials/j2ee/JSPIntro/ (дата обращения: 11 04
2015).
Сервлеты. Введение[Электронный
ресурс]. - URL: http://www.java2ee.ru/servlets/ (дата обращения: 04 11 2015).
Java Hibernate. Часть 1 - Введение[Электронный
ресурс]. - URL:http://javaxblog.ru/article/java-hibernate-1/(дата обращения: 11
04 2015).
Самоучитель HTML4 [Электронный
ресурс]. - URL: http://htmlbook.ru/samhtml (дата обращения: 11 04 2011).
Самоучитель CSS[Электронный ресурс].
- URL: http://htmlbook.ru/samcss(дата обращения: 11 04 2015).
JS для начинающих. Введение
[Электронный ресурс]. - URL:
http://true-coder.ru/js-dlya-nachinayushhix/js-dlya-nachinayushhix-urok-0-vvedenie.html
(дата обращения: 11 04 2015).
ПРИЛОЖЕНИЕ А
Исходный код программы
//Класс WorkWithDbпакета,
обеспечивающий соединение с БД и получение сессии
public class WorkWithDB {static
final SessionFactory ourSessionFactory;static final Configuration
configuration;{{= new Configuration();=configuration.configure().buildSessionFactory(ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry());
} catch (Throwable ex)
{.err.println("Initial SessionFactory creation failed." + ex);new
ExceptionInInitializerError(ex);
}
}static Session getSession()
{ourSessionFactory.openSession();
}
}
//Класс AuthorServlet
пакета servlets
- сервлет для страницы, предназначенной //для работы с сущностью «Автор».class
EmployeeServlet extends HttpServlet {void doPost(HttpServletRequest request
,HttpServletResponse response) throws ServletException,IOException{ba = new
BusinessEmployee();<Employee> employees = ba.selectAll();result = new
LinkedList();(Employee
employee:employees){.add(employee.getId_author());.add(employee.getName());.add(employee.getJobTitle());.add(employee.getOrganization());
}.setAttribute("employees",
result);view=request.getRequestDispatcher("employee.jsp");.forward(request,response);
}void doGet(HttpServletRequest
request, HttpServletResponse response) throws ServletException, IOException {(request.getParameter("deleteEmployee")!=null){ids
=
request.getParameter("hiddenTB");((ids!=null)&&(!ids.equals("")))
{[] idSplit = ids.split("&");<Integer> idList = new
LinkedList<Integer>();(int
i=0;i<idSplit.length;i++){.add(Integer.parseInt(idSplit[i]));
}ba = new
BusinessEmployee);.deleteEm ployee(idList);
}(request,response);
}
}
//КлассAUpdateServletпакетаservlets
- сервлет для страницы, //предназначенной для редактирования данных сущности «Employee».
public class AUpdateServlet extends
HttpServlet {void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {ids =
request.getParameter("hiddenTextBox");((ids!=null)&&(!ids.equals("")))
{ba = new BusinessEmployee();employee = ba.getEmployeeById(Integer.parseInt(ids));result
= new
LinkedList();.add(employee.getId_author());.add(employee.getName());.add(employee.getJobTitle());.add(employee.getOrganization());.setAttribute("employee",
result);
}view =
request.getRequestDispatcher("empUpdate.jsp");.forward(request,
response);
}void doPost(HttpServletRequest
request, HttpServletResponse response) throws ServletException,
IOException{.setCharacterEncoding("UTF-8");(request.getParameter("submit")!=null)
{.setContentType("text/html; charset=UTF-8");.getEmpl();name =
request.getParameter("name");jobtitle =
request.getParameter("jobtitle");corganization =
request.getParameter("organization");session =
request.getSession();idStr = (String) session.getAttribute("id");id =
Integer.parseInt(idStr);oldName = (String) session.getAttribute("oldName");oldJobtitle
=(String) session.getAttribute("oldJobtitle");oldOrganization =
(String) session.getAttribute("oldOrganization");ba = new
BusinessEmployee();(!name.equals(oldname)) {.updatename(id, name);
}(!jobtitle.equals(oldJobtitle))
{.updatejobtitle(id, jobtitle);
}(!organization.equals(oldorganization))
{.updateCorganization(id, organization);
}.sendRedirect("employee.do");
}
}
}
//КлассAInsertServletпакетаservlets
- сервлет для страницы, //предназначенной для добавления данных сущности «Employee».
public class AInsertServlet extends
HttpServlet{void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {view =
request.getRequestDispatcher("authInsert.jsp");.forward(request,
response);
}void doPost(HttpServletRequest
request, HttpServletResponse response)throws ServletException,IOException
{.setCharacterEncoding("UTF-8");name
=request.getParameter("name");jobtitle =
request.getParameter("jobtitle");organization = request.getParameter("organization");ba
= new BusinessEmployee();.insertEmployee(name,jobtitle,organization);view =
request.getRequestDispatcher("emplInsert.jsp");.forward(request,
response);
}
}
//Класс
Organization-сущность
«Organization». Объектное представление сущности БД
с //помощью Hibernate.
@Entity
@javax.persistence.SequenceGenerator(="sOrganization",=
"sOrzanization"
)
@Table(name =
"CURSE_ORGANIZATION")class Organization extends StandardEntity {
@Column(name = "NAME",
nullable = false, unique = true)String name;
@Column(name = "ADRESS",
unique = true)String adress;static final long serialVersionUID =
-6686727428074422681L;void setName(String name) {.name = name;
}String getName() {name;
}void setAdress(String adress)
{.adress = adress;
}String getAdress() {adress;
}
}
//Класс Employee
- сущность «Employee».
Объектное представление сущности БД с //помощью Hibernate.
@Entity
@javax.persistence.SequenceGenerator(="sEmployee",=
"sEmployee"
)
@Table(name =
"CURSE_EMPLOYEE")class Employee extends StandardEntity {
@Column(name = "NAME",
nullable = false, unique = true)String name;
@JoinColumn(name =
"JOB_TITLE_ID", unique = true)
@OneToOne(fetch = FetchType.LAZY,
optional = false)Job_title job_title;
@OneToOne(fetch = FetchType.LAZY,
optional = false)
@JoinColumn(name =
"ORGANIZATION_ID", unique = true)Organization organization;static
final long serialVersionUID = 5032259168833785924L;Job_title getJob_title()
{job_title;
}void setJob_title(Job_title
job_title) {.job_title = job_title;
}void setName(String name) {.name =
name;
}String getName() {name;
}void setOrganization(Organization
organization) {.organization = organization;
}Organization getOrganization()
{organization;
}
}
//Класс Document
- сущность «Document».
Объектное представление сущности БД с //помощью Hibernate.
@Entity
@javax.persistence.SequenceGenerator(="s
Document",= "s Document"
)
@Table(name =
"CURSE_DOCUMENT")class Document extends StandardEntity {
@Column(name = "TITLE",
nullable = false, unique = true)String title;
@JoinColumn(name = "DOCUMENT_TYPE_ID")
@OneToOne(fetch = FetchType.LAZY,
optional = false)Document_type document_type;
@JoinColumn(name =
"EMPLOYEE_ID")
@OneToOne(fetch = FetchType.LAZY,
optional = false)Employee employee;static final long serialVersionUID =
-1148332596993295451L;Document_type getDocument_type() {document_type;
}void setDocument_type(Document_type
document_type) {.document_type = document_type;
}Employee getEmployee() {employee;
}void setEmployee(Employee employee)
{.employee = employee;
}void setTitle(String title) {.title
= title;
}String getTitle() {title;
}
}
//Класс JobTitle
- сущность «JobTitle».
Объектное представление сущности БД с //помощью Hibernate.
@Entity
@javax.persistence.SequenceGenerator(="sGenre",=
"sGenre"
)
@Table(name =
"CURSE_JOB_TITLE")class Job_title extends StandardEntity {static
final long serialVersionUID = -8639189992604587340L;
@Column(name =
"JOB_TITLE", nullable = false, unique = true)String job_title;void
setJob_title(String job_title) {.job_title = job_title;
}
}
//Класс DocumentType
- сущность «DocumentType».
Объектное представление сущности БД с //помощью Hibernate.
@Entity
@javax.persistence.SequenceGenerator(="sGenre",
sequenceName
= "sGenre"
)
@Table(name
= "CURSE_DOCUMENT_TYPE")
@Entity(name
= "curse$Document_type")class Document_type extends StandardEntity
{static final long serialVersionUID = -8274527782470999112L;
@Column(name
= "DOCUMENT_TYPE", nullable = false, unique = true)String document_type;void
setDocument_type(String document_type) {.document_type = document_type;
}String
getDocument_type() {document_type;
ПРИЛОЖЕНИЕ Б
Служебныефайлы
1.1.
//hibernate.cfg.xml - конфигурационный
файл
<?xml version='1.0'
encoding='utf-8'?>
<!DOCTYPE hibernate-configuration
PUBLIC
"-//Hibernate/Hibernate
Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property
name="connection.driver_class">org.postgresql.Driver</property>
<property
name="connection.url">jdbc:postgresql://localhost:5432/bookShop</property>
<property
name="connection.username">postgres</property>
<property
name="connection.password">qwerty</property>
<property
name="connection.pool_size">2</property>
<property
name="dialect">org.hibernate.dialect.PostgresPlusDialect</property>
<property
name="hbm2ddl.auto">update</property>
<property
name="show_sql">false</property>
<mapping
package="models"/>
<mapping>
<mapping>
<mapping>
<mapping>
<mapping>
<!-- DB schema will be updated if
needed -->
<!--<property
name="hbm2ddl.auto">update</property> -->
</session-factory>
</hibernate-configuration>
//web.xml - Дескрипторсервлета
<?xml version="1.0"
encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee":xsi="http://www.w3.org/2001/XMLSchema-instance":schemaLocation="http://java.sun.com/xml/ns/javaee://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"="2.5">
<context-param>
<description>Vaadin production
mode</description>
<param-name>productionMode</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<description>Web resources
version for correct caching in browser</description>
<param-name>webResourcesTs</param-name>
<param-value>2015_04_23_07_14</param-value>
</context-param>
<!-- Application properties
config files -->
<context-param>
<param-name>appPropertiesConfig</param-name>
<param-value>:cuba-web-app.properties:web-app.properties
/WEB-INF/local.app.properties:${catalina.home}/conf/app/local.app.properties
</param-value>
</context-param>
<listener>
<listener-class>com.haulmont.cuba.web.sys.WebAppContextLoader</listener-class>
</listener>
<servlet>
<servlet-name>app_servlet</servlet-name>
<servlet-class>com.haulmont.cuba.web.sys.CubaApplicationServlet</servlet-class>
<init-param>
<description>Application
class</description>
<param-name>application</param-name>
<param-value>com.company.curse.web.App</param-value>
</init-param>
<description>Widgetset
name</description>
<param-name>widgetset</param-name>
<param-value>com.haulmont.cuba.web.toolkit.ui.WidgetSet</param-value>
</init-param>
<init-param>
<description>UI
class</description>
<param-name>UI</param-name>
<param-value>com.haulmont.cuba.web.AppUI</param-value>
</init-param>
<init-param>
<description>UIProvider
class</description>
<param-name>UIProvider</param-name>
<param-value>com.haulmont.cuba.web.sys.CubaUIProvider</param-value>
</init-param>
<init-param>
<description>Heartbeat of
active UI in seconds</description>
<param-name>heartbeatInterval</param-name>
<param-value>30</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>com.haulmont.cuba.web.sys.CubaDispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/dispatch/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>app_servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>cuba_filter</filter-name>
<filter-class>com.haulmont.cuba.web.sys.CubaHttpFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cuba_filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
ПРИЛОЖЕНИЕ В
HTML, CSS,
XML
//index.jsp
- основная страница приложения (страница по умолчанию)
<%--by IntelliJ IDEA.: Endertul:
16.03.2015: 6:45change this template use File | Settings | File Templates.
-%>
<%@ page
import="java.sql.*"%>
<%@ page
import="javax.servlet.*" %>
<%@ page
contentType="text/html;charset=UTF-8" language="java"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="CONTENT-TYPE"
content="text/html; charset=UTF-8">
<link rel="stylesheet"
type="text/css" href="css/main.css">
<title>Офис</title>
</head>
<body>
<%response.setContentType("text/html;
charset=UTF-8");.getWriter ();.setCharacterEncoding
("UTF-8");%>
<h1 >Офис</h1>
<table>
<tbody>
<tr><td
colspan="4"><br/></td></tr>
<tr><td
colspan="4" align="center"><img
src="images/trudyBook.png"
align="center"></td></tr>
</tbody>
</table>
</body>
</html>
//employee_browse.xml
- страница, для работы с сущностью «Employee»
<?xml version="1.0"
encoding="UTF-8" standalone="no"?>
<dsContext>
<collectionDatasource
id="employeesDs"="com.company.curse.entity.Employee"="employee-view">
<query>
<![CDATA[select e from
curse$Employee e]]>
</query>
</collectionDatasource>
</dsContext>
<layout
expand="employeesTable"="true">
<filter
id="filter"="employeesDs">
<properties
include=".*"/>
</filter>
<table
id="employeesTable"="100%">
<actions>
<action
id="create"/>
<action id="edit"/>
<action
id="remove"/>
</actions>
<columns>
<column id="name"/>
<column
id="job_title"/>
<column
id="organization"/>
</columns>
<rows
datasource="employeesDs"/>
<rowsCount/>
<buttonsPanel
id="buttonsPanel"="true">
<button
id="createBtn"="employeesTable.create"/>
<button
id="editBtn"="employeesTable.edit"/>
<button
id="removeBtn"="employeesTable.remove"/>
</buttonsPanel>
</table>
</layout>
</window>
//employee_edit.xml
- страница, для редактирования и создания записей сущности «Employee»
<?xml version="1.0"
encoding="UTF-8" standalone="no"?>
<window
xmlns="http://schemas.haulmont.com/cuba/5.4/window.xsd"="msg://editCaption"="com.company.curse.gui.employee.EmployeeEdit"="employeeDs"="fieldGroup"="com.company.curse.gui.employee">
<dsContext>
<datasource
id="employeeDs"="com.company.curse.entity.Employee"="employee-view"/>
</dsContext>
<layout
expand="windowActions"="true">
<fieldGroup
id="fieldGroup"="employeeDs">
<column
width="250px">
<field id="name"/>
<field
id="job_title"/>
<field
id="organization"/>
</column>
</fieldGroup>
<iframe
id="windowActions"="editWindowActions"="window-actions"/>
</layout>
</window>