Лабораторные работы

1-й семестр (осень) 

Лабораторная работа #1 

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

Отчёт по лабораторной работе должен содержать:

  1. Текст задания.
  2. Исходный код получившейся программы.
  3. Описание базовых утилит в составе JDK - java, javac, javadoc, jar и наиболее часто используемых аргументов этих команд.
  4. Выводы по работе.

Вопросы к защите лабораторной работы:

  1. Язык Java. Особенности языка.
  2. Средства разработки. Состав JDK.
  3. Переменные окружения. Classpath.

Лабораторная работа #2 

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

Отчёт по работе должен содержать:

  1. Текст задания.
  2. Код получившейся программы.
  3. Результаты выполнения.
  4. Выводы по работе.

Вопросы к защите лабораторной работы:

  1. Объектно-ориентированное программирование. Основные понятия: объекты, наследование, полиморфизм, инкапсуляция.
  2. Классы и интерфейсы. Наследование и реализация. Реализация методов "по умолчанию" в интерфейсах.
  3. Переменные в Java и их области видимости.
  4. Простые типы данных, классы-оболочки.
  5. Управляющие конструкции.
  6. Модификаторы.
  7. Использование объектов.
  8. Функциональные интерфейсы. Лямбда-выражения.

Лабораторная работа #3 

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

Вопросы к защите лабораторной работы:

  1. Основные пакеты JDK 1.8.
  2. Пакет java.lang.*. Классы Object, Class, System.
  3. Обработка исключительных ситуаций, три типа исключений.
  4. Работа с массивами данных.
  5. Класс String.
  6. Классы InputStream, InputStreamReader.
  7. Пакет java.nio. Класс Buffer. Каналы ввода-вывода.
  8. Коллекции. Сортировка элементов коллекций.
  9. Параметризованные типы.

Лабораторная работа #4 

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

Вопросы к защите лабораторной работы:

  1. Компоненты пользовательского интерфейса. Иерархия компонент.
  2. Базовый класс Component и Container.
  3. Менеджеры компоновки.
  4. Модель обработки событий. Класс-слушатель и класс-событие.
  5. События AWT.
  6. Технология JavaFX. Особенности архитектуры, отличия от AWT / Swing.
  7. Компоненты JavaFX. Особенности реализации обработки событий
  8. Способы задания разметки интерфейса в JavaFX. SceneBuilder.
  9. Многопоточные программы. Концепции.
  10. Класс Thread и интерфейс Runnable.
  11. Состояние потока. Синхронизация потока.
  12. Пакет java.util.concurrent. Интерфейс Lock и его реализации.
  13. Атомарные операции.

Лабораторная работа #5 

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

Вопросы к защите лабораторной работы:

  1. Интернационализация и локализация.
  2. Способы хранения локализованных данных. Классы ResourceBundle, PropertyResourceBundle, ListResourceBundle.
  3. Форматирование числовых данных. Классы NumberFormat, DecimalFormat, DecimalFormatSymbols.
  4. Форматирование даты и времени. Классы DateFormat, SimpleDateFormat, DateFormatSymbols.
  5. Сетевое взаимодействие - клиент-серверная архитектура, основные протоколы, их сходства и отличия.
  6. Протокол TCP. Классы Socket и ServerSocket.
  7. Протокол UDP. Классы DatagramSocket и DatagramPacket.
  8. Передача данных по сети. Сериализация объектов, интерфейс Serializable.
  9. Механизм рефлексии (reflection) в Java. Класс Class.

2-й семестр (весна) 

Лабораторная работа #6 

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

Вопросы к защите лабораторной работы:

  1. Протокол HTTP. Структура запросов и ответов, методы запросов, коды ответов сервера, заголовки запросов и ответов.
  2. Язык разметки HTML. Особенности, основные теги и атрибуты тегов.
  3. Структура HTML-страницы. Объектная модель документа (DOM).
  4. HTML-формы. Задание метода HTTP-запроса. Правила размещения форм на страницах, виды полей ввода.
  5. Каскадные таблицы стилей (CSS). Структура - правила, селекторы. Виды селекторов, особенности их применения. Приоритеты правил. Преимущества CSS перед непосредственным заданием стилей через атрибуты тегов.
  6. Клиентские сценарии. Особенности, сферы применения. Язык JavaScript.
  7. Синхронная и асинхронная обработка HTTP-запросов. AJAX.
  8. Серверные сценарии. CGI - определение, назначение, ключевые особенности.
  9. FastCGI - особенности технологии, преимущества и недостатки относительно CGI.
  10. Язык PHP - синтаксис, типы данных, встраивание в веб-страницы, правила обработки HTTP-запросов. Особенности реализации принципов ООП в PHP.

Лабораторная работа #7 

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

Приложение должно быть реализовано в соответствии с шаблоном MVC и состоять из следующих элементов:

  • ControllerServlet, определяющий тип запроса, и, в зависимости от того, содержит ли запрос информацию о координатах точки и радиусе, делегирующий его обработку одному из перечисленных ниже компонентов. Все запросы внутри приложения должны передаваться этому сервлету (по методу GET или POST в зависимости от варианта задания), остальные сервлеты с веб-страниц напрямую вызываться не должны.
  • AreaCheckServlet, осуществляющий проверку попадания точки в область на координатной плоскости и формирующий HTML-страницу с результатами проверки. Должен обрабатывать все запросы, содержащие сведения о координатах точки и радиусе области.
  • Страница JSP, формирующая HTML-страницу с веб-формой. Должна обрабатывать все запросы, не содержащие сведений о координатах точки и радиусе области.

Разработанная страница JSP должна содержать:

  1. "Шапку", содержащую ФИО студента, номер группы и номер варианта.
  2. Форму, отправляющую данные на сервер.
  3. Набор полей для задания координат точки и радиуса области в соответствии с вариантом задания.
  4. Сценарий на языке JavaScript, осуществляющий валидацию значений, вводимых пользователем в поля формы.
  5. Интерактивный элемент, содержащий изображение области на координатной плоскости (в соответствии с вариантом задания) и реализующий следующую функциональность:
    • Если радиус области установлен, клик курсором мыши по изображению должен обрабатываться JavaScript-функцией, определяющей координаты точки, по которой кликнул пользователь и отправляющей полученные координаты на сервер для проверки факта попадания.
    • В противном случае, после клика по картинке должно выводиться сообщение о невозможности определения координат точки.
    • После проверки факта попадания точки в область изображение должно быть обновлено с учётом результатов этой проверки (т.е., на нём должна появиться новая точка).
  6. Таблицу с результатами предыдущих проверок. Список результатов должен браться из контекста приложения, HTTP-сессии или Bean-компонента в зависимости от варианта.

Страница, возвращаемая AreaCheckServlet, должна содержать:

  1. Таблицу, содержащую полученные параметры.
  2. Результат вычислений - факт попадания или непопадания точки в область.
  3. Ссылку на страницу с веб-формой для формирования нового запроса.

Разработанное веб-приложение необходимо развернуть на сервере GlassFish.

Вопросы к защите лабораторной работы:

  1. Java-сервлеты. Особенности реализации, ключевые методы, преимущества и недостатки относительно CGI и FastCGI.
  2. Контейнеры сервлетов. Жизненный цикл сервлета.
  3. Диспетчеризация запросов в сервлетах. Фильтры сервлетов.
  4. HTTP-сессии - назначение, взаимодействие сервлетов с сессией, способы передачи идентификатора сессии.
  5. Контекст сервлета - назначение, способы взаимодействия сервлетов с контекстом.
  6. JavaServer Pages. Особенности, преимущества и недостатки по сравнению с сервлетами, область применения.
  7. Жизненный цикл JSP.
  8. Структура JSP-страницы. Комментарии, директивы, объявления, скриптлеты и выражения.
  9. Правила записи Java-кода внутри JSP. Стандартные переменные, доступные в скриптлетах и выражениях.
  10. Bean-компоненты и их использование в JSP.
  11. Стандартные теги JSP. Использование Expression Language (EL) в JSP.
  12. Параметры конфигурации JSP в дескрипторе развёртывания веб-приложения.

Лабораторная работа #8 

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

Вопросы к защите лабораторной работы:

  1. Шаблоны проектирования и архитектурные шаблоны.
  2. Архитектура веб-приложений. Шаблон MVC. Model 1 и Model 2.
  3. Технология JavaServer Faces. Особенности, отличия от сервлетов и JSP, преимущества и недостатки. Структура JSF-приложения.
  4. Использование JSP-страниц и Facelets-шаблонов в JSF-приложениях.
  5. JSF-компоненты - особенности реализации, иерархия классов. Дополнительные библиотеки компонентов. Модель обработки событий в JSF-приложениях.
  6. Конвертеры и валидаторы данных.
  7. Представление страницы JSF на стороне сервера. Класс UIViewRoot.
  8. Управляемые бины - назначение, способы конфигурации. Контекст управляемых бинов.
  9. Конфигурация JSF-приложений. Файл faces-config.xml. Класс FacesServlet.
  10. Навигация в JSF-приложениях.
  11. Доступ к БД из Java-приложений. Протокол JDBC, формирование запросов, работа с драйверами СУБД.
  12. Концепция ORM. Библиотеки ORM в приложениях на Java. Основные API. Интеграция ORM-провайдеров с драйверами JDBC.
  13. Библиотеки ORM Hibernate и EclipseLink. Особенности, API, сходства и отличия.
  14. Технология JPA. Особенности, API, интеграция с ORM-провайдерами.

Лабораторная работа #9 

Чтобы получить задание, введите свой номер варианта.
Вопросы к защите лабораторной работы:
  1. Платформа Java EE. Спецификации и их реализации.
  2. Принципы IoC, CDI и Location Transpanency. Компоненты и контейнеры.
  3. Управление жизненным циклом компонентов. Дескрипторы развёртывания.
  4. Java EE API. Виды компонентов. Профили платформы Java EE.
  5. Компоненты EJB. Stateless & Stateful Session Beans. EJB Lite и EJB Full.
  6. Работа с электронной почтой в Java EE. JavaMail API.
  7. JMS. Реализация очередей сообщений. Способы доставки сообщений до клиента. Message-Driven Beans.
  8. Понятие транзакции. Управление транзакциями в Java EE. JTA.
  9. Веб-сервисы. Технологии JAX-RS и JAX-WS.
  10. Платформа Spring. Сходства и отличия с Java EE.
  11. Модули Spring. Архитектура Spring Runtime. Spring Security и Spring Data.
  12. Реализация IoC и CDI в Spring. Сходства и отличия с Java EE.
  13. Реализация REST API в Java EE и Spring.
  14. Google Web Toolkit. Архитектура и основные принципы разработки интерфейсов.
  15. Компоненты gwt. Обработка событий UI.
  16. Расширения gwt. Vaadin Framework.
  17. React JS. Архитектура и основные принципы разработки приложений.
  18. Компоненты React. "Умные" и "глупые" компоненты.
  19. Разметка страниц в React-приложениях. JSX.
  20. Навигация в React-приложениях. ReactRouter.
  21. Управление состоянием интерфейса. Redux.
  22. AngularJS. Архитектура и основные принципы разработки приложений.
  23. Компоненты Angular. Навигация в Angular-приложениях.
  24. Отличия Angular 1 от Angular 2 и 3.