Министерство образования и науки Российской Федерации Федеральное государственное автономное образовательное учреждение высшего профессионального образования «Национальный исследовательский ядерный университет «МИФИ» ОБНИНСКИЙ ИНСТИТУТ АТОМНОЙ ЭНЕРГЕТИКИ Кафедра информационных систем УЧЕБНО-ИССЛЕДОВАТЕЛЬСКАЯ РАБОТА Проектирование динамического web-приложения «Расписание занятий» Выполнил: Студент гр. ИС – 09 _____________________ Созинов К.Б. Руководитель: ст. преподаватель _____________________ Обнинск 2012г. Охрименко И.В. Реферат 30 стр., 4 рис., 3 ист., 1 прил. Java, web-программирование, Spring framework, web-приложение Учебно-исследовательская работа посвящена изучению фреймворка для языка программирования Java. Цель работы – изучение Spring framework и освоение навыков практического использования некоторых его модулей на примере динамического web-приложения “Расписание занятий”. В процессе работы изучаются отдельные модули Spring Framework, основы Hibernate и основы некоторых смежных технологий. На базе существующих и полученных знаний проектируется и реализуется web-приложение. Содержание: Введение………………………………………………………………..…………4 1. Цели и задачи………………………………………………………..…………5 2. Описание используемых средств и решений……………………….………..5 2.1. Spring framework …………………………………………………………….6 2.1.1. Spring IoC……………………………………………………...……………7 2.1.2. Spring Security…………………………………………………………........8 2.1.3. Spring MVC…………………………………………………………………8 2.2. Hibernate…………………………………………………………..……........10 2.3. Описание других используемых технологий………………...……………11 3. Этапы проектирования приложения….…………………………...…………13 3.1. Проектирование структуры приложения………………………………….15 3.2. Проектирование базы данных…………………………………………...…17 4. Написание исходного кода……………………………………………….….17 4.1. Конфигурирование Spring IoC…………………………….............………19 4.2. Конфигурирование Spring Security…………………………………...……20 4.2.1 Настройка XML конфигураций Spring Security………………………….20 4.2.2. Расширение провайдера аунтификации…………………………………21 4.3. Определение сущностей для ORM………………………………...………23 4.4 Реализация шаблона DAO………………………………………….………24 4.4. Написание контроллеров MVC……………………………………….……26 4.5. Разработка представлений…………………………………………….……27 Заключение…………………………………………………………….…….…...29 Список использованных источников…………………………………..……….30 Приложение А: Техническое задание на разработку web-приложения…...…31 Введение В настоящее время существует тенденция уменьшения количества настольных приложений и переход приложений в сеть интернет и внутренние сети организаций. Так же все чаще в корпоративных приложениях отказываются от использования толстого клиента и переходят к тонкому клиенту, отображение интерфейса которого, зачастую, происходит через обычный веб-браузер. Как правило, корпоративные приложения имеют большой объем и высокую сложность бизнес-логики, поэтому Java и подобные языки программирования имеют огромное преимущество при разработке такого рода приложений, по сравнению со скриптовыми языками, которые классически используются в web. Существует множество различных фреймворков облегчающих и ускоряющих разработку корпоративных приложений. Spring Framework является одним из них и имеет реализации для платформы Java и форк для платформы .Net Framework. Использование Spring Framework позволяет уменьшить связность приложения за счет реализации контейнера инверсии контроля, а так же содержит множество модулей способствующих относительно простой и быстрой разработке. 1. Цели и задачи Целями данной работы является: Изучение основных модулей Spring Framework. Разработка динамического web-приложения с использованием Spring Framework. Задачи, решаемые в ходе работы: Ознакомление с Spring Framework Проектирование структуры приложения Разработка базы данных Разработка web-приложения с использованием Spring Framework 2. Описание используемых средств и решений Разработка web-приложений всегда сопровождается использованием большого числа связанных технологий. В данной работе были применены технологии: Java JavaEE (JSP, JPA, JSTL) Oracle GlassFish Server JDBC Hibernate SQL (СУБД: MySQL) Spring Framework (IoC, Security, MVC) HTML, CSS, JavaScript, JQuery, AJAX 2.1. Spring framework Spring Framework - это универсальный фреймворк с открытым исходным кодом. Часто о нем говорится как о полноценной корпоративной платформе. Фреймворк включает в себя: • Гибкую систему внедрения зависимостей с конфигурацией через XML или на основе аннотаций. • Поддержку аспектно-ориентированного программирования • Мощная абстракция для работы с Java EE • Поддержка известных ORM фреймворков (Hibernate, MyBatis, …) • Гибкий web-фреймворк, реализующий модель MVC • Широкие средства для модульного тестирования В состав фреймворка входит множество модулей. Структура Spring отображена на рисунке 1. Рисунок 1 – структура Spring Framework. Для нашей задачи будут использоваться модули IoC Container, Spring Web MVC, Spring Security (поставляется как отдельная библиотека, поэтому не включен в данную схему). 2.1.1. Spring IoC В основе Spring лежит паттерн Inversion of control. Применительно к легковесным контейнерам, основная идея этого паттерна заключается в устранении зависимости компонентов или классов приложения от конкретных реализаций вспомогательных интерфейсов и делегировании полномочий по управлению созданием нужных реализаций IoC контейнеру. Основные преимущества IoC контейнеров: управление зависимостями упрощение повторного использования классов или компонентов упрощение unit-тестирования простота замены реализаций того или иного модуля программы 2.1.2. Spring Security Современные web-приложения в своем большинстве являются многопользовательскими, что диктует необходимость разграничения прав доступа в различные модули программы. Основными понятиями в данной области являются аунтификация (опознание пользователя по введенным им данным username/password) и авторизация (предоставление определённому лицу или группе лиц прав на выполнение определённых действий). Авторизация бывает локальная и сквозная, причем реализация сквозной авторизации может быть достаточно сложной. Spring Security предоставляет готовые модули для аунтификации и авторизации. В базовом комплекте поставки есть возможность аунтификации посредством ввода имени пользователя/пароля, которые могут храниться в конфигурации, либо находится в базе данных. При необходимости, пользователь библиотеки может реализовать свои собственные способы хранения данных для аунтификации и собственные способы получения данных от пользователя. В составе Spring Security находятся программные модули для шифрования поступающих данных, а так же механизмы управления пользовательской сессией, для хранения в ней данных текущего пользователя. 2.1.3. Spring MVC Для упрощения создания web-приложений, в состав Spring Framework входит реализация паттерна проектирование MVC (Model-View-Controller). Реализация Основная цель применения концепции MVC состоит в разделении бизнес-логики (модели) от её визуализации (представления, вида). За счет такого разделения повышается возможность повторного использования. Наиболее полезно применение данной концепции в тех случаях, когда пользователь должен видеть те же самые данные одновременно в различных контекстах и/или с различных точек зрения. Концепция MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента: Модель (англ. Model). Модель предоставляет знания: данные и методы работы с этими данными, реагирует на запросы, изменяя своё состояние. Не содержит информации, как эти знания можно визуализировать. Представление, вид (англ. View). Отвечает за отображение информации (визуализацию). Часто в качестве представления выступает форма (окно) с графическими элементами. Контроллер (англ. Controller). Обеспечивает связь между пользователем и системой: контролирует ввод данных пользователем и использует модель и представление для реализации необходимой реакции. Преимущества использования Spring MVC: Ясное и прозрачное разделение между слоями в MVC и запросах. Каждый интерфейс делает только свою часть работы. Интерфейс всегда может быть заменен альтернативной реализацией. Интерфейсы тесно связаны с Servlet API. Высокий уровень абстракции для веб-приложений. Эти преимущества и пологая кривая обучения делают Spring MVC удобным средством для создания web-приложений. 2.2. Hibernate Hibernate — библиотека для языка программирования Java, предназначенная для решения задач объектно-реляционного отображения (Object-Relational Mapping — ORM). Она представляет собой свободное программное обеспечение с открытым исходным кодом. Данная библиотека предоставляет лёгкий в использовании фреймворк для отображения объектно-ориентированной модели данных в традиционные реляционные базы данных. Целью Hibernate является освобождение разработчика от значительного объёма сравнительно низкоуровневого программирования по обеспечению хранения объектов в реляционной базе данных. Разработчик может использовать Hibernate как в процессе проектирования системы классов и таблиц «с нуля», так и для работы с уже существующей базой данных. Hibernate не только решает задачу связи классов Java с таблицами базы данных (и типов данных Java с типами данных SQL), но также предоставляет средства для автоматической генерации и обновления набора таблиц, построения запросов и обработки полученных данных и может значительно уменьшить время разработки, которое обычно тратится на ручное написание SQL- и JDBC-кода. Hibernate автоматизирует генерацию SQL-запросов и освобождает разработчика от ручной обработки результирующего набора данных и преобразования объектов, максимально облегчая перенос приложения на любые базы данных SQL. Hibernate обеспечивает прозрачную поддержку сохранности данных (persistence) для «POJO» (то есть для стандартных Java-объектов); Единственное строгое требование для сохраняемого класса — наличие конструктора по умолчанию. 2.3. Описание других используемых технологий JPA (Java Persistence API) — API, который предоставляет возможность сохранять в удобном виде Java-объекты в базе данных. Существует несколько реализаций этого интерфейса, одна из самых популярных использует для этого Hibernate. Объектом, для описания которого применяется JPA, является сущность (Entity) Entity— POJO класс связанный с БД с помощью аннотации (@Entity) или через XML. Такой класс должен: • Иметь пустой конструктор (public или protected), могут быть и другие конструкторы • Не может быть вложенным, интерфейсом или enum • Не может быть final и не должен содержать final поля/свойства • Содержать хотя бы одно @Id поле а так же может: • Наследоваться и быть наследованным • Содержать другие методы, и реализовывать интерфейсы Entities могут быть связаны друг с другом (один-к-одному, один-ко-многим, многие-к-одному и многие-ко-многим). HTML (HyperText Markup Language) - стандартный язык разметки документов во Всемирной паутине. Большинство веб-страниц создаются при помощи языка HTML (или XHTML). Язык HTML интерпретируется браузерами и отображается в виде документа в удобной для человека форме. CSS (Cascading Style Sheets) — формальный язык описания внешнего вида документа, написанного с использованием языка разметки. Преимущественно используется как средство описания, оформления внешнего вида веб-страниц, написанных с помощью языков разметки HTML и XHTML. JavaScript — прототипно-ориентированный скриптовый язык программирования. Обычно используется как встраиваемый язык для программного доступа к объектам приложений. Наиболее широкое применение находит в браузерах как язык сценариев для придания интерактивности веб-страницам. jQuery — библиотека JavaScript, фокусирующаяся на взаимодействии JavaScript и HTML. Библиотека jQuery помогает легко получать доступ к любому элементу DOM, обращаться к атрибутам и содержимому элементов DOM, манипулировать ими. Также библиотека jQuery предоставляет удобный API по работе с AJAX. AJAX (Asynchronous Javascript and XML — «асинхронный JavaScript и XML») — подход к построению интерактивных пользовательских интерфейсов веб-приложений, заключающийся в «фоновом» обмене данными браузера с веб-сервером. В результате, при обновлении данных вебстраница не перезагружается полностью, и веб-приложения становятся более быстрыми и удобными. Не является самостоятельной технологией, а позиционируется как концепция использования нескольких смежных технологий. 3. Этапы проектирования приложения Проектирование web-приложения обычно состоит из определения требуемого функционала, определения средств реализации, разработки структуры приложения и проектирования базы данных. В разрабатываемом приложении уже определен набор требуемых функций и решено при помощи каких технологий данные возможности будут реализованы, поэтому можно перейти к этапу разработки структуры приложения. 3.1. Проектирование структуры приложения В приложении будет применятся простой подход с высокой степенью модульности. Приложение разбивается на несколько слоев, которые взаимодействуют между собой в процессе работы программы. Схема приложения изображена на рисунке 2. Браузер – веб-браузер на стороне клиента. Отправляет GET/POST запросы и получает в ответ html страницы. JPS (Java Server Pages)– view часть шаблона MVC. JSP страница после запуска приложения компилируется в сервлет. После получения HTTP запроса, содержимое страницы генерируется и направляется клиенту в браузер. Слой контроллеров содержит в себе контроллеры – часть модели MVC. Контроллер, получив запрос, делает соответствующие запросы к модели данных и помещает информацию из модели в представление. Работу с моделями данных осуществляет слой бизнес-логики. В нем обрабатываются поступившие от пользователя данные, а так же обрабатываются данные, полученные из базы данных. Для того, чтобы упростить работу с базой данных, используется шаблон проектирования DAO (Data access object). Объекты такого типа составляют слой доступа к данным. Сами данные хранятся в базе данных, которая находится под управлением какой-либо СУБД. Все приложение функционирует в контейнере инверсии управления, что позволяет подключать нужные реализации модулей простым изменением конфигурации в одном месте программы, вместо изменения большого количества кода. При любой операции, которая требует проверки прав доступа пользователя, вызываются методы Spring Security. Рисунок 2 – изображение схемы приложения 3.2. Проектирование базы данных В основе большинства web-приложений лежит база данных, позволяющая хранить информацию, необходимую для работы приложения. Проектирование базы данных начинается с анализа предметной области, результатом чего является концептуальная схема. Концептуальная схема базы данных системы управления расписанием изображена на рисунке 3. Рисунок 3 – концептуальная схема базы данных приложения Вторым этапом проектирования БД является выбор СУБД. В данной работе была выбрана СУБД MySQL, как бесплатная, легкая и имеющая в наличии удобный инструмент для работы MySQL Workbench. После создания концептуальной схемы и выбора СУБД, создается физическая схема базы данных, которая отображает, в каком виде данные будут храниться в БД. Физическая схема БД представлена на рисунке 4. Рисунок 4 – физическая схема базы данных (EER-диаграмма) 4. Написание исходного кода Кодирование динамического приложения с использованием Spring Framework, Spring Security, Hibernate начинается с настройки конфигурации, которая в данном приложении хранится в 4-х файлах. web.xml – файл конфигурации сервера приложений Java. В данном файле указывается список конфигурационных файлов Spring: Листинг 1: <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext.xml /WEB-INF/applicationContext-security.xml </param-value> </context-param> Задается список используемых сервлетов: Листинг 2: <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> Декларируются сервлетные фильтры: Листинг 3: <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> Сервлетный фильтр, в соответствии со спецификацией, это Java-код, пригодный для повторного использования и позволяющий преобразовать содержание HTTP-запросов, HTTP-ответов и информацию, содержащуюся в заголовках HTML. Сервлетный фильтр занимается предварительной обработкой запроса, прежде чем тот попадает в сервлет, и/или последующей обработкой ответа, исходящего из сервлета. Для того, чтобы избежать проблем при работе программы, определяются фильтры для перекодирования текста в UTF-8. 4.1. Конфигурирование Spring IoC В конфигурации Spring IoC перечисляются бины, которые будут использоваться для внедрения: Листинг 4: <bean class="erw.timetable.dao.GenericDAOHibernate" id="studentDAO"> <property name="type"> <value>erw.timetable.entities.Student</value> </property> </bean> Так как в программе внедряются только реализации интерфейса GenericDAO, то список бинов соответствует списку сущностей, чьё число, в свою очередь, равно списку основных таблиц в базе данных. После перечисления списка бинов, необходимо внедрить их для использования в коде. Внедрение зависимостей в Spring Framework производится при помощи аннотации @Autowired или @Inject, первая из которых является аннотацией Spring, а вторая объявлена в одной из спецификаций Java. Действие этих двух аннотаций идентично. В листинге 5 показан пример использования аннотации @Autowired. Часто, для того чтобы уточнить какой именно бин необходимо подключить, используется аннотация @Qualifier(value=”…”) Для использования аннотаций @Autowired и @Qualifier необходимо сделать импорт классов Qualifier и Autowired из пакета «org.springframework.beans.factory.annotation» Листинг 5: public class DaytableController { @Autowired @Qualifier(value="daytableDataCollector") private DaytableDataCollector daytable; … //Логика контроллера … } 4.2. Конфигурирование Spring Security В конфигурацию Spring Security входит: • Добавление и настройка фильтра в web.xml • Настройка XML конфигурации • Реализация своего UserDetailService для доступа к списку пользователей в БД Настройка фильтров уже была выполнена, что отражено в листинге 3. 4.2.1 Настройка XML конфигураций Spring Security После этого необходимо произвести настройку Security в XML файле. Данные настройки отражены в листинге 6. В конфигурации нужно указать используемый провайдер аунтификации, указать алгоритм шифрования, по которому будут шифроваться пароли. Так же требуется указать список ролей, которые необходимы для доступа по URL, соответствующему указанному шаблону. Листинг 6: <b:bean class="erw.timetable.security.UserDetailsServiceImpl" id="userDetailsServiceImpl"/> <authentication-manager> <authentication-provider user-service-ref="userDetailsServiceImpl"> <password-encoder hash="md5"/> </authentication-provider> </authentication-manager> <b:bean class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler" id="expressionHandler"/> <http use-expressions="true" auto-config="true"> <intercept-url access="permitAll()" pattern="/"/> <intercept-url access="permitAll()" pattern="/menu"/> <intercept-url access="permitAll()" pattern="/hello"/> <intercept-url access="permitAll()" pattern="/index"/> <intercept-url access="permitAll()" pattern="/login/**"/> <intercept-url access="permitAll()" pattern="/resources/**"/> <intercept-url access="permitAll()" pattern="/errorpages/**"/> <intercept-url access="hasAnyRole('editor','master')" pattern="/edit/**"/> <intercept-url access="isAuthenticated()" pattern="/daytable/**"/> <intercept-url access="isAuthenticated()" pattern="/**"/> <form-login authentication-failure-url="/login" default-target-url="/" login-page="/login" loginprocessing-url="/login/check"/> <logout logout-success-url="/hello" logout-url="/login/logout"/> </http> </b:beans> Как видно из листинга 6, для каждого пути, для которого необходимо установить особые роли пользователя, необходимо добавить строчку в конфигурационный файл. 4.2.2. Расширение провайдера аунтификации Последним шагом, который необходимо сделать для того, чтобы данные аунтификации извлекались из базы данных, это реализовать интерфейс UserDetailsService. Код данного шага изложен в листинге 7. Листинг 7: public class UserDetailsServiceImpl implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException,DataAccessException { Session ss = HibernateUtil.getSessionFactory().getCurrentSession(); ss.beginTransaction(); List<Student> list = ss.createQuery("from Student as user where user.login = '"+username+"'").list(); ss.close(); if (!list.isEmpty()) { Student e = list.get(0); ss = HibernateUtil.getSessionFactory().getCurrentSession(); ss.beginTransaction(); ss.close(); Set<GrantedAuthority> set = new HashSet<GrantedAuthority>(); set.add(new GrantedAuthorityImpl(e.getRole())); return new User(e.getLogin(),e.getPassword(),true,true,true,true,set); } } } 4.2. Определение сущностей для ORM Для работы с Hibernate необходимо настроить соответствие между полями классов и полями таблиц. Для данной цели используются JPA аннотации. Пример маппинга показан в листинге 8. Листинг 8: @Entity public class Student implements Serializable { @Id private Long id; //ФИО… @Temporal(value= TemporalType.DATE) private Date birthday; //Spring security fields… @ManyToOne private Group group; @ManyToMany(targetEntity=erw.timetable.entities.Pair.class, fetch = FetchType.LAZY) @JoinTable(name="`pair_has_student`", joinColumns={@JoinColumn(name="student_id",referencedColumnName="id")}, inverseJoinColumns={@JoinColumn(name="pair_id",referencedColumnName="id")} ) private Set<Pair> pairs; @Column(name="Role_idRole") private String role; … //Геттеры и сеттеры … } Использованные аннотации: • @Entity – аннотация сообщает, что описывается сущность JPA • @Id – этой аннотацией обозначается идентификатор сущности • @Column(name=”…”) – если имя поля класса не совпадает с названием поля в таблице, то этой аннотацией необходимо указать имя соответствующего поля таблицы • @Temporal – этой аннотацией отмечаются поля data/time • @ManyToOne – сообщает о связи многие-к-одному • @ManyToMany – сообщает о связи многие-ко-многим • @JoinTable – указывает наименование смежной таблицы для аннотации @ManyToMany 4.3 Реализация шаблона DAO Для удобства доступа к базе данных и чистоты кода, необходимо реализовать объекты доступа к данным (DataAccessObjects – DAO). Можно описать DAO для каждой сущности, но лучше, используя механизм Generic реализовать один интерфейс GenericDAO, а так же его реализацию GenericDAOHibernate. Код данных классов приведен в листингах 9 и 10 соответственно. В листинге 9 видно, что интерфейс предоставляет операции выборки, удаления, обновления и вставки объектов, а так же расширенные варианты некоторых из этих методов. В листинге 10 приведена часть реализации GenericDAO. Важным моментом является строка «protected SessionFactory ssf = HibernateUtil.getSessionFactory();» где происходит получение фабрики сессий Hibernate. Листинг 9: public interface GenericDAO <T, PK extends Serializable> { List<T> selectAll(); List<T> selectAllSortedBy(String fieldname); T selectById(PK id); List<T> selectByFieldValue(String fieldname, Serializable value); String selectName(PK id, String fieldname); void delete(T o); void insert(T o); void update(T o); } Листинг 10: @Repository public class GenericDAOHibernate<T, PK extends Serializable> implements GenericDAO<T, PK> { protected SessionFactory ssf = HibernateUtil.getSessionFactory(); protected Session ss; protected Class<T> type; public void setType(Class<T> type) { this.type = type; } //множество других методов… @Override public void update(T o) { ss = ssf.getCurrentSession(); ss.beginTransaction(); ss.update(o); ss.getTransaction().commit(); } } 4.4 Написание контроллеров MVC Контроллеры Spring MVC так же конфигурируются достаточно просто, при условии использования аннотаций. Пример кода контроллера приведен в листинге 11. Листинг 11: @Controller @RequestMapping("/daytable") public class DaytableController { @Autowired @Qualifier(value="daytableDataCollector") private DaytableDataCollector daytable; @RequestMapping("") public String daytable(){ return "daytable"; } @RequestMapping(value="daydata",method=RequestMethod.POST) public ModelAndView daydata(@RequestParam(value="date") String date) { return new ModelAndView("daydata","pairs",daytable.getUserPairs()); } } Основными аннотациями для настройки контроллера являются: • @Controller – указывает, что класс является компонентом Spring типа «контроллер». • @RequestMapping(“…”) указывает какой URL будет обрабатываться этим методом. Внутри методов класса, URL складывается из пути класса и пути метода. Например, если у класса указано @RequestMapping("/daytable"), а у метода @RequestMapping("update"), то метод будет вызываться при переходе пользователя по пути %approot/daytable/update • @RequestParam(value="date") <T> t – указывается вместе с объявленным методом POST, и обозначает, что метод ожидает, что в теле POST запроса будет отправлена переменная date. 4.3. Разработка представлений Представление (view) – часть модели MVC, которая отображается в браузере пользователя. Есть несколько технологий для представлений, но наиболее подходящей под модель MVC является технология JSP. JSP обычно является документом, содержащим HTML код, JavaScript код, а так же JSTL теги и вставки Java кода. В листинге 12 приведен пример страницы с формой для ввода идентификационных данных пользователя. Некоторые теги, стандартно содержащиеся в HTML документе, в данной странице отсутствуют так как эта страница не загружается в браузере как отдельная страница, а подключается в уже существующую страницу при помощи асинхронного (AJAX) запроса. Листинг 12: <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:set var="approot" value="${pageContext.servletContext.contextPath}"/> <script> $(document).ready(function(){ $("#submit").click(function(){ $.ajax({ type: "post", url: "${approot}/login/check", dataType: 'json', data: { j_username : $("#username").val(), j_password : $("#password").val() }, complete: function(data){ $('#content').fadeOut(500,function(data){ contentbeginloading("${approot}/hello"); $.get("${approot}/menu",function(result){$("#menu").html(result);}); }); $('#content').fadeIn(); } }); }); }); </script> <div id="login"> <table> <tr><td></td><td><h1>Р’С…РѕРґ РІ систему:</h1> </td></tr> <tr><td>Р›Логин: </td><td><input id="username" name="j_username"/></td></tr> <tr><td>Пароль:</td><td> <input type="password" id="password" name="j_password"/></td></tr> <tr><td></td><td><input type="button" id="submit" class="button" value="Войти"/></td></tr> </table> </div> Заключение В итоге работы были изучены основные функциональные возможности Spring Framework. С использованием полученных знаний было спроектировано и разработано web-приложение. Из заявленного функционала были реализованы возможности опознания пользователя, возможность вывода индивидуального расписания на один день, выбранный в календаре. Некоторые заявленные функции не удалось реализовать из-за неверной оценки времени, необходимого для выполнения работы. Так, например, не была реализована возможность ввода и изменения расписания через интерфейс приложения, и такая возможность доступна лишь напрямую через СУБД. Так же были реализованы не все виды отображения расписания. Список использованных источников 1. Craig Walls Spring in Action , Manning Publications; Third Edition edition (June 29, 2011) , 424 с. 2. Patrick Peak, Hibernate quickly, Manning Publications; 1 edition (August 8, 2005), 220 с. 3. http://static.springsource.org/spring/docs/3.2.x/spring-frameworkreference/html - Spring Framework Reference Documentation Приложение А: Техническое задание на разработку web-приложения 1. Введение. Программа предназначена для управления расписанием занятий академических групп. 2. Основание для разработки. Учебно-исследовательская работа. 3. Назначение разработки. Программа предназначена для просмотра и редактирования расписания занятий академических групп. Будет использоваться студентами. 4. Требования к программе. 1. Требования к функциональным характеристикам. ◦ Доступ к функциям программы должен осуществляться через web-интерфейс. ◦ Должны быть реализованы возможности просмотра и редактирования расписания. ◦ В программе должно быть реализовано разграничение прав доступа. ◦ Расписание должно составляться индивидуально, с учетом подгруппы. ◦ Необходимо учесть, что расписание по четным и нечетным неделям отличается. ◦ Должна быть возможность просмотра расписания на день, неделю, месяц. 2. Требования к надежности. Требования повышенной надежности нет. 3. Условия эксплуатации. Условия эксплуатации совпадают с условиями эксплуатации персонального компьютера. 4. Требования к составу и параметрам технических средств. ◦ Процессор 2GHz ◦ Оперативная память 2Gb 5. Требования к информационной и программной совместимости. Программа будет написана на языке Java и сможет быть запущена на любом устройстве, на котором может работать JavaEE сервер приложений. 5. Требования к программной документации. Техническое задание. Описания программных модулей при помощи встроенных комментариев. Документация, сгенерированная JavaDoc 5. Технико-экономические показатели. Разработка программы займёт порядка 50 человеко-часов. 6. Стадии и этапы разработки. ◦ Проектирование ◦ Написание кода ◦ Тестирование и отладка