Глухих Михаил Игоревич mailto

Страница создана Тимур Усов
 
ПРОДОЛЖИТЬ ЧТЕНИЕ
Глухих Михаил Игоревич mailto
Глухих Михаил Игоревич
mailto: glukhikh@mail.ru
Глухих Михаил Игоревич mailto
   © intuit.ru

                  2
HTTP request
                               Сервер:
 Клиент:

              HTTP response      JVM-
Браузер (!)
                              программа

                  HTML +
                 JavaScript

                                          3
   HTTP = Hyper-text transfer protocol =
    Протокол передачи гипертекста ~
    HTML-файлов
   HTML = Hyper-text markup language =
    Язык разметки гипертекста !=
    Язык программирования
   Browser (браузер) = программа для
    Интернет-сёрфинга
   JavaScript = язык программирования ~
    язык сценариев для Web-страниц

                                            4
   Модель из MVC – по-прежнему полезна
    ◦ Как правило она «живёт» на сервере
      (бывают исключения)

   По-прежнему есть представление –
    но совершенно другое…

                                           5
   Клиент должен уметь отобразить HTML
    ◦ Это умеют готовые браузеры или встроенные их
      варианты, например, JavaFX WebView

   Сервер должен уметь сформировать HTML
    ◦ По своей структуре этот код +- похож на
      формирование «дерева сцены».
    ◦ Но только по структуре, сам код другой!

                                                     6
   WebView = панель мини-браузера
    ◦   Умеет отображать HTML
    ◦   Использует WebEngine для загрузки HTML-файла
    ◦   И WebHistory для слежения за историей
    ◦   Является разновидностью узла (JavaFX Node)
    ◦   …
   https://docs.oracle.com/javafx/2/webview/
    jfxpub-webview.htm

   NB: JavaFX не умеет формировать HTML

                                                       7
   Браузер соединяется с сервером по
    указанному адресу
   Загружает оттуда HTML-страницу
   Отображает ее в своем окне
   В процессе отображения с того же сервера
    могут загружаться элементы страницы:
    ◦   изображения
    ◦   звуки
    ◦   видео
    ◦   …

                                               8
   В изначальной форме – лишь язык разметки
    гипертекста
   Может включать в себя описание
    GUI-компонентов
   Может включать в себя скрипты, например:
    ◦ PHP (выполняется на сервере)
    ◦ JavaScript (выполняется на клиенте)
    ◦ …

                                               9
Калькулятор: складываем два числа.

                                                       10
   PHP и JavaScript – оба Тьюринг-полные
    языки…
   … а это значит, что на любом из них можно
    написать программу общего назначения
    любой сложности (как и на Java или Kotlin)

                                                 11
   PHP и JavaScript – оба Тьюринг-полные
    языки…
   … а это значит, что на любом из них можно
    написать программу общего назначения
    любой сложности (как и на Java или Kotlin)

   Принципиальные отличия от Java/Kotlin:
    ◦ Нет компилятора (есть интерпретатор)
    ◦ Динамическая типизация
      (для переменных не задаются типы)

                                                 12
   Традиционно PHP и JavaScript используются
    в веб-программировании
    ◦ PHP для дополнительной обработки/генерации
      HTML на стороне сервера
    ◦ JavaScript как элемент HTML-страниц на стороне
      браузера
   И такое их использование уже имеет мало
    отношения к программам общего
    назначения

                                                       13
   Скриптовый язык программирования
   4-е место в RedMonk ranking (Jan 2020)

   Программа на PHP интерпретируется на
    сервере, а её вывод передаётся в браузер
    как часть HTML-файла
   Программа может, например, генерировать
    на сервере ответы на запросы пользователя
    из браузера

                                                14
PHP sample 1

                               15
PHP sample 2

                        16
PHP sample 3
   https://www.ict.social/php/basics

   One more example: lesson 5 about forms

                                             18
   Скриптовый язык программирования
   1-е место в RedMonk ranking (Jan 2020)
   Несмотря на название, не имеет никакого
    отношения к языку Java

   Программа на JavaScript встраивается в
    HTML-файл и интерпретируется
    непосредственно в браузере

                                              19
   Создание всплывающих окон в браузере
    ◦ Фрагменты кода (сценарии, скрипты) на JavaScript
      встраиваются в HTML-файлы
      (тег script)

         alert('Hello, World!');
     
                                                         20
   Создание всплывающих окон в браузере
   Обработка событий, связанных с
    действиями пользователя на странице
    ◦ https://www.codeproject.com/Articles/753724/
      JavaScript-Front-End-Web-App-Tutorial-Part

                                                     21
   Создание всплывающих окон в браузере
   Обработка событий, связанных с
    действиями пользователя на странице
    ◦ NB: PHP это тоже может
    ◦ NB2: JS (в отличие от PHP) в процессе обработки
      не имеет доступа к информации на сервере

                                                        22
   Создание всплывающих окон в браузере
   Обработка событий, связанных с действиями
    пользователя на странице
   Анимации: см.
    ◦ https://habr.com/ru/company/ruvds/blog/354438/
   Посылать запросы на сервер
   …

                                                       23
   Сервер
    ◦ Приложение пишем на Java/Kotlin
    ◦ На сервере находится модель, контроллер и
      «генератор» для представления – HTML
   Клиент
    ◦ В простом случае это браузер + HTML,
      принимаемый с сервера
    ◦ В сложном случае это ещё и скрипты
      Хорошо подходит JavaScript
      Они могут лежать прямо в HTML
      Либо быть отдельными файлами

                                                  24
   И сервер и клиент пишем на Kotlin…
    ◦ Сервер компилируем в JVM байт код
    ◦ Клиент компилируем в JavaScript

                                          25
   https://github.com/mglukhikh/job-scheduler
    ◦ См. пакет web
    ◦ Маленькое web-приложение, моделирующее запуск
      «задач» нажатиями клавиш из браузера
    ◦ Написано на обычной Java без дополнительных
      библиотек
    ◦ Использует com.sun.net.httpserver.HttpServer для
      реализации простого HTTP-сервера

                                                         26
   https://github.com/mglukhikh/PK
    ◦ Пакет ktor
    ◦ Игрушечное web-приложение на Kotlin
    ◦ Использует библиотеку kotlinx.html для более удобной
      генерации HTML
    ◦ … и библиотеку Ktor для реализации клиент-серверного
      взаимодействия

                                                             27
   Рассмотрели
    ◦ Общие принципы построения Web-приложений
      на Java / Kotlin
   Далее
    ◦ Многопоточность

                                                 28
Вы также можете почитать