Углубленное 
программирование на 
Java 
Занятие 1.1 «Введение» 
Виталий Чибриков
Java сервер 
2 
Углубленное программирование на Java 
Особенности курса 
Один проект на два предмета 
100 баллов = отлично = демонстрация проекта 
модуль = лекция + 2 * лекция и семинар + РК 
Ревью кода на github 
Разработка игровой механики начиная с 2 модуля
Освой Java за 24 часа 
Дополнительные материалы и ресурсы 
Skype tully_at_work «Кружок любителей Java» 
3 
SCORM http://www.intuit.ru/studies/courses/3711/953/info 
Видео https://tech-mail.ru/learn 
Github https://github.com/vitaly-chibrikov
Освой Java за семестр 
4 
№ Тема занятия тип занятия 
max 
баллов 
ДЗ дата 
1 
Знакомство, инструменты, 
настройка окружения 
Лекция 
Настроить переменные окружения и 
среду разработки. Запустить свой Jetty 
сервер. 
06.сен 
2 
Сервлеты, вебсокеты, 
фронтенд на сервере 
лекция + семинар 
Обрабатывать ассинхронные запросы от 
браузера я помощью вебсокетов. 
Обрабатывать запросы на авторизацию. 
13.сен 
3 
Углубленные основы языка, 
деплой проекта 
лекция + семинар Запустить проект на внешнем сервере. 20.сен 
4 КР-1 20 баллов 20 27.сен 
5 
Организация классов в 
проекте. Игровая механика. 
Тестирование 
Лекция 
Написать тесты на авторизацию 
пользователя. Написать примитивную 
механику. 
04.окт 
6 
Утилиты. Работа со 
времением, случаными 
числами, фаловой системой. 
Лекция Разработка механики. 11.окт 
7 Ресурсная система лекция + семинар 
Перевести все константы механики в 
ресурсы. 
18.окт 
8 КР-2 25 баллов 45 25.окт
Освой Java за семестр 
5 
9 Работа с базами Лекция 
Перевести модуль авторизации на работу 
с базами данных. 
30.окт 
10 ORM. Аннотации лекция + семинар 08.ноя 
11 
Объединение первых трех 
модулей. Запуск проекта на 
внешнем сервере 
семинар 
Подготовить проект к предзащите. 
Проект должен содержать основы 
игровой механики, пользователи могут 
пройти аторизацию и сыграть партию. 
15.ноя 
12 КР-3 25 баллов 70 22.ноя 
13 Многопоточность Лекция 29.ноя 
14 Система обмена сообщениями лекция + семинар 
Запустить сервисы игры в разных 
потоках. 
06.дек 
15 Альфа версия проекта семинар 13.дек 
16 КР-4 20 баллов 95 20.дек 
17 Защита проекта 5 баллов 100 27.дек
План лекции 
6 
1. Java 
2. Углубленное 
3. Программирование 
4. Платформа Java 
5. Настройка окружения 
6. Jetty 
7. Сервлеты 
8. Шаблонизатор
История Java 
Java ― ОО язык программирования разработанный в 1995г. 
Изначально ― платформа для программирования бытовых приборов 
Компилляция в байт код и исполнение байт кода в виртуальной машине 
Встроенный сборщик мусора 
Платформа .Net от Microsoft осована на идеях Java 
7
История успеха 
1995 - 2000 ― скрипты для браузера 
2000 - 2005 ― приложения для телефонов 
8 
2005 - 2014 ― сервера 
1995 - 2014 ― приложения для бытовых приборов
Cross-platform 
9 
«Классические» варианты решения 
Компиллятор ― поставляем исходники, перед стартом сибираем 
Интерпретатор ― поставляем скрипты, не эффективное выполнение 
Гибридное решение 
Собираем в byte-code, интерпретируем «на месте»
Задумка Java платформы 
Приложение 
Архитектурно независимый байт код 
JVM для Windows JVM для Linux 
10
Задачи и результат 
Ключевые идеи 
Написанно один раз – работает везде 
Встроенный сборщик мусора 
Безопасность исполнения 
Результат 
+ «Переносимые» программисты 
- Программы все равно зависят от архитектуры 
+ Сборщик мусора устраняет утечки памяти 
- Сборщик мусора «всегда» работает в ненужное время 
11
Почему Java? 
ОО язык высокого уровня с простым и понятным синтаксисом 
Большое количество специалистов со знанием Java 
Легкость перехода с С++ 
Большое количество библиотек 
Постоянные улучшения и доработки 
Прекрасная документация 
12
План лекции 
13 
1. Java 
2. Углубленное 
3. Программирование 
4. Платформа Java 
5. Настройка окружения 
6. Jetty 
7. Сервлеты 
8. Шаблонизатор
«Углубленное» 
Углубленное значит «глубже чем» 
14 
Примитивные типы, переполнение примитивных типов 
Объекты, классы, наследование, полиморфизм, инкапсуляция 
Область видимости переменной, статические переменные 
Ветвления и циклы 
Преобразования примитивных типов 
Интерфейс, реализация интерфейса 
Операторы 
Стек, куча 
private, protected, public
«Углубленное» 
Платформа Java. Java editions. Java Virtual Machine. 
Контейнеры и алгоритмы (Hash, Map, Set, List, Array), Generics. 
Многопоточность. Thread Object. Concurrency. 
Исключение, обработка исключений 
Message System. Address. Abonent. 
Frontend. Game Mechanics. 
Serialization. I/O. Stream. 
Reflection. Annotation. 
JDBC. DataSet. DAO. Hibernate. 
QA. Tests. Автоматизация тестрования. 
15
План лекции 
16 
1. Java 
2. Углубленное 
3. Программирование 
4. Платформа Java 
5. Настройка окружения 
6. Jetty 
7. Сервлеты 
8. Шаблонизатор
Модули учебного сервера 
utils 
gameMechanics 
base 
messageSystem 
frontend 
main 
resourceSystem 
1. 
1. 
4. 
2. 
2. 2. 
2. 
3. dbService 
17
План лекции 
18 
1. Java 
2. Углубленное 
3. Программирование 
4. Платформа Java 
5. Настройка окружения 
6. Jetty 
7. Сервлеты 
8. Шаблонизатор
Обзор платформы Java 
Запуск приложений 
Java Runtime Environment (JRE) 
Java Virtual Machine(JVM) 
Class Libraries 
Создание приложений 
Java Development Kit (JDK) 
JRE 
Java compiler 
IDE ― в состав Java не входит 
19
Обзор платформы Java 
JVM 
Interpreter 
Just-In-Time (JIT) compiler 
Byte code verifier 
Garbage collector (GC) 
Javac 
Превращает *.java в *.class 
*.class можно собрать в *.jar (zip архив) 
20
Сборщик мусора 
Garbage collector (GC) 
Поиск ненужных объектов Stack Heap 
Освобождение памяти 
21
Java editions 
Java SE (Standard Edition) 
Стандартная редакция 
JVM + библиотека классов 
Java EE (Enterprise Edition) 
Java SE 
Спецификация 
API + runtime environment services 
Java ME (Micro Edition) 
Мобильные телефоны, бытовые приборы 
22
Наименования 
Классы в Java собирают в пакеты (packages) 
Пакеты обычно собирают в *.jar файлы (zip архивы) 
Класс может быть однозначно идетифицирован по полному имени 
packageName.directoryName.ClassName 
Имена пакетов и директорий принято начинать с маленькой буквы 
Имена классов: MySuperClassName 
Имена функций: getMyVariable() 
Имена переменных: myVariable 
Пакеты не могут иметь циклических зависимостей 
23
Анонимный тест 
24
План лекции 
25 
1. Java 
2. Углубленное 
3. Программирование 
4. Платформа Java 
5. Настройка окружения 
6. Jetty 
7. Сервлеты 
8. Шаблонизатор
Инструменты 
26 
JDK 1.8 Java Development Kit 8 
IntelliJ IDEA среда разработки приложений на Java 
Maven система сборки проекта 
Git система контроля версий 
*Jetty библиотека для web сервера 
*freemarker шаблонизатор
JDK 1.8 
27 
http://www.oracle.com/technetwork/java/javase/downloads/ 
Linux export JAVA_HOME = your java directory 
в файле /etc/profile 
Windows Control Panel -> System -> Advanced 
добавьте в переменные среды 
JAVA_HOME = your java directory
IntelliJ IDEA 
28 
http://www.jetbrains.com/idea/download/ 
Community Edition FREE 
Linux: запуск через bin/idea.sh 
Windows: обычная установка и запуск
Maven 
29 
Распакуйте архив в инсталляционную директорию. 
Windows: C:Program Filesmaven 
Linux: /opt/maven 
Установите переменную окружения 
M2_HOME = инсталляционная директория 
Установите переменную окружения PATH 
Windows: в переменной PATH добавьте к списку директорий строку 
%M2_HOME%bin. 
Linux: можно добавить строку export PATH=$PATH:$M2_HOME/bin в 
файл /etc/profile . 
Запустите в командной строке mvn -version
Создание проекта 
30 
http://wiki.jetbrains.net/intellij/Creating_and_importing_Maven_projects 
Project Object Model – pom.xml 
<groupId> адрес проекта </groupId> 
<artifactId> название приложения </artifactId> 
<version> версия приложения</version> 
<dependencies> 
<dependency> 
<groupId>org.eclipse.jetty</groupId> 
<artifactId>jetty-server</artifactId> 
<version>9.1.0.M0</version> 
</dependency> 
</dependencies>
Git 
31 
Git http://git-scm.com/downloads 
github https://help.github.com/
План лекции 
32 
1. Java 
2. Углубленное 
3. Программирование 
4. Платформа Java 
5. Настройка окружения 
6. Jetty 
7. Сервлеты 
8. Шаблонизатор
Jetty 
33 
java based http server 
создание динамических страниц 
пересылка статических файлов 
(html страницы, картинки…) 
<dependency> 
<groupId>org.eclipse.jetty</groupId> 
<artifactId>jetty-server</artifactId> 
<version>9.1.0.M0</version> 
</dependency>
Jetty 
connector принимает http запросы (request) 
handler(s) возвращают response 
ThreadPool pool потоков для обработки запроса 
34
Jetty 
public class Main { 
public static void main(String[] args) throws Exception { 
Frontend frontend = new Frontend(); 
Server server = new Server(8080); 
ServletContextHandler context = 
new ServletContextHandler(ServletContextHandler.SESSIONS); 
server.setHandler(context); 
context.addServlet(new ServletHolder(frontend), "/authform"); 
server.start(); 
server.join(); 
} 
} 
35
План лекции 
36 
1. Java 
2. Углубленное 
3. Программирование 
4. Платформа Java 
5. Настройка окружения 
6. Jetty 
7. Сервлеты 
8. Шаблонизатор
Java Servlet 
Servlet класс расширяющий возможности сервера 
как applet, только на web сервере 
java решение для создания динамических страниц 
объект, который обрабатывает http запрос 
(request) и возвращает ответ (response) – 
html станицу 
ServletContainer часть web сервера, содержащая сервлеты 
связывает URL с сервлетом 
37
Java Servlet 
<dependency> 
<groupId>org.eclipse.jetty</groupId> 
<artifactId>jetty-webapp</artifactId> 
<version>9.1.0.M0</version> 
</dependency> 
38
Jetty 
public class Frontend extends HttpServlet { 
private String login = ""; 
public void doGet(HttpServletRequest request, 
HttpServletResponse response) 
throws ServletException, IOException { 
… 
} 
public void doPost(HttpServletRequest request, 
HttpServletResponse response) 
throws ServletException, IOException { 
… 
} 
} 
39
Java Servlet 
public class Frontend extends HttpServlet { 
public void doGet(HttpServletRequest request, 
HttpServletResponse response) { 
… 
} 
public void doPost(HttpServletRequest request, 
HttpServletResponse response) { 
… 
} 
} 
40
План лекции 
41 
1. Java 
2. Углубленное 
3. Программирование 
4. Платформа Java 
5. Настройка окружения 
6. Jetty 
7. Сервлеты 
8. Шаблонизатор
<freemarker> 
Шаблонизатор создает страницы для response 
42
<freemarker> 
<html> 
<head> 
<title>Пример шаблона</title> 
</head> 
<body> 
<p>Имя пользователя: ${userName}</p> 
<p>Id пользователя: ${userId}</p> 
</body> 
43
<freemarker> 
<dependency> 
<groupId>org.freemarker</groupId> 
<artifactId>freemarker</artifactId> 
<version>2.3.20</version> 
</dependency> 
44
Спасибо за внимание 
Виталий Чибриков 
chibrikov@corp.mail.ru

Java осень 2014 занятие 1

  • 1.
    Углубленное программирование на Java Занятие 1.1 «Введение» Виталий Чибриков
  • 2.
    Java сервер 2 Углубленное программирование на Java Особенности курса Один проект на два предмета 100 баллов = отлично = демонстрация проекта модуль = лекция + 2 * лекция и семинар + РК Ревью кода на github Разработка игровой механики начиная с 2 модуля
  • 3.
    Освой Java за24 часа Дополнительные материалы и ресурсы Skype tully_at_work «Кружок любителей Java» 3 SCORM http://www.intuit.ru/studies/courses/3711/953/info Видео https://tech-mail.ru/learn Github https://github.com/vitaly-chibrikov
  • 4.
    Освой Java засеместр 4 № Тема занятия тип занятия max баллов ДЗ дата 1 Знакомство, инструменты, настройка окружения Лекция Настроить переменные окружения и среду разработки. Запустить свой Jetty сервер. 06.сен 2 Сервлеты, вебсокеты, фронтенд на сервере лекция + семинар Обрабатывать ассинхронные запросы от браузера я помощью вебсокетов. Обрабатывать запросы на авторизацию. 13.сен 3 Углубленные основы языка, деплой проекта лекция + семинар Запустить проект на внешнем сервере. 20.сен 4 КР-1 20 баллов 20 27.сен 5 Организация классов в проекте. Игровая механика. Тестирование Лекция Написать тесты на авторизацию пользователя. Написать примитивную механику. 04.окт 6 Утилиты. Работа со времением, случаными числами, фаловой системой. Лекция Разработка механики. 11.окт 7 Ресурсная система лекция + семинар Перевести все константы механики в ресурсы. 18.окт 8 КР-2 25 баллов 45 25.окт
  • 5.
    Освой Java засеместр 5 9 Работа с базами Лекция Перевести модуль авторизации на работу с базами данных. 30.окт 10 ORM. Аннотации лекция + семинар 08.ноя 11 Объединение первых трех модулей. Запуск проекта на внешнем сервере семинар Подготовить проект к предзащите. Проект должен содержать основы игровой механики, пользователи могут пройти аторизацию и сыграть партию. 15.ноя 12 КР-3 25 баллов 70 22.ноя 13 Многопоточность Лекция 29.ноя 14 Система обмена сообщениями лекция + семинар Запустить сервисы игры в разных потоках. 06.дек 15 Альфа версия проекта семинар 13.дек 16 КР-4 20 баллов 95 20.дек 17 Защита проекта 5 баллов 100 27.дек
  • 6.
    План лекции 6 1. Java 2. Углубленное 3. Программирование 4. Платформа Java 5. Настройка окружения 6. Jetty 7. Сервлеты 8. Шаблонизатор
  • 7.
    История Java Java― ОО язык программирования разработанный в 1995г. Изначально ― платформа для программирования бытовых приборов Компилляция в байт код и исполнение байт кода в виртуальной машине Встроенный сборщик мусора Платформа .Net от Microsoft осована на идеях Java 7
  • 8.
    История успеха 1995- 2000 ― скрипты для браузера 2000 - 2005 ― приложения для телефонов 8 2005 - 2014 ― сервера 1995 - 2014 ― приложения для бытовых приборов
  • 9.
    Cross-platform 9 «Классические»варианты решения Компиллятор ― поставляем исходники, перед стартом сибираем Интерпретатор ― поставляем скрипты, не эффективное выполнение Гибридное решение Собираем в byte-code, интерпретируем «на месте»
  • 10.
    Задумка Java платформы Приложение Архитектурно независимый байт код JVM для Windows JVM для Linux 10
  • 11.
    Задачи и результат Ключевые идеи Написанно один раз – работает везде Встроенный сборщик мусора Безопасность исполнения Результат + «Переносимые» программисты - Программы все равно зависят от архитектуры + Сборщик мусора устраняет утечки памяти - Сборщик мусора «всегда» работает в ненужное время 11
  • 12.
    Почему Java? ООязык высокого уровня с простым и понятным синтаксисом Большое количество специалистов со знанием Java Легкость перехода с С++ Большое количество библиотек Постоянные улучшения и доработки Прекрасная документация 12
  • 13.
    План лекции 13 1. Java 2. Углубленное 3. Программирование 4. Платформа Java 5. Настройка окружения 6. Jetty 7. Сервлеты 8. Шаблонизатор
  • 14.
    «Углубленное» Углубленное значит«глубже чем» 14 Примитивные типы, переполнение примитивных типов Объекты, классы, наследование, полиморфизм, инкапсуляция Область видимости переменной, статические переменные Ветвления и циклы Преобразования примитивных типов Интерфейс, реализация интерфейса Операторы Стек, куча private, protected, public
  • 15.
    «Углубленное» Платформа Java.Java editions. Java Virtual Machine. Контейнеры и алгоритмы (Hash, Map, Set, List, Array), Generics. Многопоточность. Thread Object. Concurrency. Исключение, обработка исключений Message System. Address. Abonent. Frontend. Game Mechanics. Serialization. I/O. Stream. Reflection. Annotation. JDBC. DataSet. DAO. Hibernate. QA. Tests. Автоматизация тестрования. 15
  • 16.
    План лекции 16 1. Java 2. Углубленное 3. Программирование 4. Платформа Java 5. Настройка окружения 6. Jetty 7. Сервлеты 8. Шаблонизатор
  • 17.
    Модули учебного сервера utils gameMechanics base messageSystem frontend main resourceSystem 1. 1. 4. 2. 2. 2. 2. 3. dbService 17
  • 18.
    План лекции 18 1. Java 2. Углубленное 3. Программирование 4. Платформа Java 5. Настройка окружения 6. Jetty 7. Сервлеты 8. Шаблонизатор
  • 19.
    Обзор платформы Java Запуск приложений Java Runtime Environment (JRE) Java Virtual Machine(JVM) Class Libraries Создание приложений Java Development Kit (JDK) JRE Java compiler IDE ― в состав Java не входит 19
  • 20.
    Обзор платформы Java JVM Interpreter Just-In-Time (JIT) compiler Byte code verifier Garbage collector (GC) Javac Превращает *.java в *.class *.class можно собрать в *.jar (zip архив) 20
  • 21.
    Сборщик мусора Garbagecollector (GC) Поиск ненужных объектов Stack Heap Освобождение памяти 21
  • 22.
    Java editions JavaSE (Standard Edition) Стандартная редакция JVM + библиотека классов Java EE (Enterprise Edition) Java SE Спецификация API + runtime environment services Java ME (Micro Edition) Мобильные телефоны, бытовые приборы 22
  • 23.
    Наименования Классы вJava собирают в пакеты (packages) Пакеты обычно собирают в *.jar файлы (zip архивы) Класс может быть однозначно идетифицирован по полному имени packageName.directoryName.ClassName Имена пакетов и директорий принято начинать с маленькой буквы Имена классов: MySuperClassName Имена функций: getMyVariable() Имена переменных: myVariable Пакеты не могут иметь циклических зависимостей 23
  • 24.
  • 25.
    План лекции 25 1. Java 2. Углубленное 3. Программирование 4. Платформа Java 5. Настройка окружения 6. Jetty 7. Сервлеты 8. Шаблонизатор
  • 26.
    Инструменты 26 JDK1.8 Java Development Kit 8 IntelliJ IDEA среда разработки приложений на Java Maven система сборки проекта Git система контроля версий *Jetty библиотека для web сервера *freemarker шаблонизатор
  • 27.
    JDK 1.8 27 http://www.oracle.com/technetwork/java/javase/downloads/ Linux export JAVA_HOME = your java directory в файле /etc/profile Windows Control Panel -> System -> Advanced добавьте в переменные среды JAVA_HOME = your java directory
  • 28.
    IntelliJ IDEA 28 http://www.jetbrains.com/idea/download/ Community Edition FREE Linux: запуск через bin/idea.sh Windows: обычная установка и запуск
  • 29.
    Maven 29 Распакуйтеархив в инсталляционную директорию. Windows: C:Program Filesmaven Linux: /opt/maven Установите переменную окружения M2_HOME = инсталляционная директория Установите переменную окружения PATH Windows: в переменной PATH добавьте к списку директорий строку %M2_HOME%bin. Linux: можно добавить строку export PATH=$PATH:$M2_HOME/bin в файл /etc/profile . Запустите в командной строке mvn -version
  • 30.
    Создание проекта 30 http://wiki.jetbrains.net/intellij/Creating_and_importing_Maven_projects Project Object Model – pom.xml <groupId> адрес проекта </groupId> <artifactId> название приложения </artifactId> <version> версия приложения</version> <dependencies> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>9.1.0.M0</version> </dependency> </dependencies>
  • 31.
    Git 31 Githttp://git-scm.com/downloads github https://help.github.com/
  • 32.
    План лекции 32 1. Java 2. Углубленное 3. Программирование 4. Платформа Java 5. Настройка окружения 6. Jetty 7. Сервлеты 8. Шаблонизатор
  • 33.
    Jetty 33 javabased http server создание динамических страниц пересылка статических файлов (html страницы, картинки…) <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>9.1.0.M0</version> </dependency>
  • 34.
    Jetty connector принимаетhttp запросы (request) handler(s) возвращают response ThreadPool pool потоков для обработки запроса 34
  • 35.
    Jetty public classMain { public static void main(String[] args) throws Exception { Frontend frontend = new Frontend(); Server server = new Server(8080); ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); server.setHandler(context); context.addServlet(new ServletHolder(frontend), "/authform"); server.start(); server.join(); } } 35
  • 36.
    План лекции 36 1. Java 2. Углубленное 3. Программирование 4. Платформа Java 5. Настройка окружения 6. Jetty 7. Сервлеты 8. Шаблонизатор
  • 37.
    Java Servlet Servletкласс расширяющий возможности сервера как applet, только на web сервере java решение для создания динамических страниц объект, который обрабатывает http запрос (request) и возвращает ответ (response) – html станицу ServletContainer часть web сервера, содержащая сервлеты связывает URL с сервлетом 37
  • 38.
    Java Servlet <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> <version>9.1.0.M0</version> </dependency> 38
  • 39.
    Jetty public classFrontend extends HttpServlet { private String login = ""; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { … } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { … } } 39
  • 40.
    Java Servlet publicclass Frontend extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) { … } public void doPost(HttpServletRequest request, HttpServletResponse response) { … } } 40
  • 41.
    План лекции 41 1. Java 2. Углубленное 3. Программирование 4. Платформа Java 5. Настройка окружения 6. Jetty 7. Сервлеты 8. Шаблонизатор
  • 42.
    <freemarker> Шаблонизатор создаетстраницы для response 42
  • 43.
    <freemarker> <html> <head> <title>Пример шаблона</title> </head> <body> <p>Имя пользователя: ${userName}</p> <p>Id пользователя: ${userId}</p> </body> 43
  • 44.
    <freemarker> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.20</version> </dependency> 44
  • 45.
    Спасибо за внимание Виталий Чибриков chibrikov@corp.mail.ru