Java приложения доступ к которым можно получить из web браузера
Одной из самых приятных особенностей Java является её многогранная природа. Конечно, создание традиционных десктопных и даже мобильных приложений — это здорово. Но что, если вы хотите уйти с проторенных дорожек и зайти на территорию разработки web приложений на Java? Для вас есть хорошая новость: в комплекте с языком идёт полноценный Servlet API, который позволяет вам создавать надёжные веб-приложения без особых хлопот.
Это статья для продолжающих. Если вы только начинаете знакомство с Java, советуем пройти быстрый старт, посмотреть видеокурс и выбрать одну из книг для новичков.
Создание приложений на Java с помощью Servlets
Встречайте сервлеты, особый тип Java-программ, выполняемый в пределах веб-контейнера (также называемый контейнером сервлетов, как, например, Tomcat и Jelly), которые позволяют обрабатывать запросы клиентов и ответы сервера просто и эффективно. Сейчас не время и не место дотошно объяснять вам, что из себя представляет сервлет. Достаточно сказать, что сервлеты создаются и уничтожаются их контейнерами, а не разработчиком, и действуют как промежуточный уровень между клиентами (как правило, веб-браузерами) и другими приложениями, запущенными на сервере (например, базами данных).
Сервлет — классная штука, которая помимо всего прочего может принимать данные от клиента, как правило через GET и POST-запросы, работать с cookie и параметрами сеанса. А ещё она обрабатывает данные через дополнительные уровни приложений и отправляет выходные данные клиенту как в текстовом, так и в бинарном форматах (HTML, XML, PDF, JPG, GIF и т.д.), во многих случаях используя Java Server Pages (JSP) файлы.
Лучше всего начинать работу с сервлетами через конкретный пример. Мы создадим простое веб-приложение, которое позволит клиентам регистрироваться с помощью простой HTML-формы. Данные, предоставленные клиентами, будут собираться сервлетом и проверяться валидаторами.
Разбираемся с конфигурационными файлами
Чтобы вы понимали структуру нашего будущего приложения, вот как она будет выглядеть:
Первым шагом к созданию приложения является определение так называемого дескриптора развёртывания. Он указывает, как приложение должно быть развёрнуто в определенной среде. Когда дело касается веб-приложений, дескриптор развёртывания представляет собой простой XML-файл, называемый web.xml и является частью стандартной спецификации Java EE. В нашем случае он будет выглядеть так:
Как вы видите, web . xml только определяет версию Java Servlet Specification (3.1), которую мы будем использовать в приложении. Разумеется, в нём может быть гораздо больше содержимого, включая директивы сопоставления сервлетов, параметры инициализации, список приветственных файлов и несколько дополнительных настроек. Но чтобы не усложнять процесс разработки, давайте оставим его таким как есть.
Так как наше приложение будет использовать Servlet API и Java Servlet Pages (JSP) для отображения данных клиента, нам нужно загрузить все необходимые JAR. Maven сделает за нас трудную работу, вот как будет выглядеть файл POM:
Если говорить просто, pom.xml определяет все зависимости, необходимые для работы с сервлетами: JSP, Java Standard Tag Library (JSTL) и Java Expression Language (JEL).
Итак, мы уже создали конфигурационные файлы приложения. Однако в текущем состоянии оно буквально ничего не делает. Мы хотим, чтобы клиенты могли регистрироваться с помощью HTML-формы, поэтому следующее, что нам нужно сделать, — это создать JSP-файлы, которые будут отображать вышеупомянутую форму и данные клиента после успешного завершения регистрации. Этим мы сейчас и займёмся.
Работаем над внешним видом
Внешний вид приложения будет определяться двумя JSP-файлами — в контексте MVC они называются представлениями. Первый будет отвечать за отображение формы регистрации и возможных ошибок, вызванных после проверки введённых данных. Второй будет обычной страницей приветствия, в которой будут показаны данные, введённые клиентом, после успешного завершения процесса регистрации.
Вот первый JSP-файл:
Файл содержит простой HTML с парочкой дополнений. Вот она, прелесть JSP в сочетании с JSTL и JEL. Обратите внимание на то, как легко проверить наличие ошибок валидации, используя такие стандартные теги, как и .
Атрибут формы регистрации action указывает на следующий URL: $/processcustomer . Это значит, что каждый раз, когда клиент пытается зарегистрироваться, данные будут отправляться в processcustomer независимо от URL, по которому доступна форма. Это достигается за счёт функциональности объектов, доступных из JSP-файла, таких как request .
Скоро мы увидим, как сервлет связывается с URL processcustomer и как он взаимодействует с введёнными данными. А пока давайте посмотрим на JSP-файл, который отвечает за страницу приветствия:
Теперь, когда мы разобрались с отображением страниц, следующим шагом будет создание сервлета, ответственного за сбор данных клиента из POST-запросов и подтверждение данных простым способом.
Пишем контроллер
Вот как он выглядит:
Здесь мы назвали сервлет CustomerController , так как считается хорошей практикой использовать имя класса сервлета в качестве значения атрибута name аннотации @WebServlet . В противном случае некоторые контейнеры не смогут выполнить сопоставление, что приведёт к ошибке 404.
Валидаторы — это простые классы, которые проверяют определённые свойства, например, является ли строка пустой и выглядит ли email как email. На GitLab автора можно посмотреть на их реализацию.
Результат валидации влияет на дальнейший ход событий: если данные не валидны, клиент перенаправляется через объект RequestDispatcher на страницу регистрации, где отображаются соответствующие ошибки. Если всё в порядке, то отображается страница приветствия.
Итак, мы создали целое веб-приложение на Java, которое позволяет зарегистрировать клиентов с помощью HTML-формы, базового сервлета и нескольких JSP-файлов. Пора его запустить.
Запускаем приложение
Для запуска приложения нужно проделать следующие шаги:
- Для начала нам понадобится Git (убедитесь, что скачиваете подходящую версию), Maven и контейнер сервлета (например, Apache Tomcat, Jetty, или JBoss Wildfly). Если что-то из этого уже включено в вашу IDE, то вы можете использовать встроенный вариант.
- Используйте Git, чтобы клонировать репозиторий приложения, и импортируйте его в вашу IDE, желательно как проект Maven.
- Разверните проект в контейнере сервлета и запустите его. Развёртывание подразумевает создание WAR-файла или exploded WAR и его помещение в папку развёртывания контейнера по умолчанию. Зачастую IDE способна сделать развёртывание за вас, поэтому не перегружайте себя лишней работой и посмотрите документацию вашей IDE (документация для IntelliJ IDEA). Когда вы развернёте проект и запустите его, должен запуститься бразуер по умолчанию с окном регистрации.
- Попробуйте заполнить не все поля в форме или вовсе не заполнить их и вы увидите, как поверх соответствующих полей отобразятся ошибки. Введите всё как положено, и вас перенаправит на страницу приветствия.
Заключение
Итак, вы приобрели все навыки, необходимые для создания собственного веб-приложения на Java без необходимости прибегать к сложным фреймворкам. Всё, что вам нужно, — Servlet API, технология вроде JSP для отображения и встроенные средства Java. Здорово, правда?
Когда-то Java укрепил свои позиции благодаря тому, что выбрал приоритетным направлением веб-приложения. С первых дней Java пытался найти свой путь. Сначала — предложил апплеты. Это предоставило много возможностей разработчикам по созданию динамического контента (содержимого) на статических HTML страницах. Однако апплеты не оправдали ожиданий по многим причинам: безопасность, накладные расходы и другие. Тогда разработчики языка Java предложили альтернативу — Servlet API. И это оказалось правильным решением. Servlet API — это спецификация, на которой построено любое веб-приложение на Java, будь то приложение с веб-интерфейсом или веб-сервис, который возвращает информацию согласно запросу. Поэтому путь к пониманию работы веб-приложений на Java начинается с понимания Servlet API.
Servlet API
Web-server
Connectors
— На входе у нас есть Connectors (т.е. коннекторы), которые принимают входящие запросы от клиентов. HTTP коннектор в Tomcat реализован при помощи компонента "Coyote". Коннекторы принимают данные от клиента и передают их дальше в Tomcat Engine. Servlet Container — Tomcat Engine в свою очередь обрабатывает полученный от клиента request при помощи компонента "Catalina", который является сервлет контейнером. Подробнее см. документацию Tomcat : "Architecture Overview". Сущестуют и другие веб-серверы, поддерживающие спецификацию Servlet API. Например, "Jetty" или "Undertow". Их архитектура похожа, поэтому понимая принцип работы с одним сервлет контейнером, можно перестроиться на работу с другим.
Веб-приложение (Web Application)
Итак, чтобы мы смогли запустить веб-приложение, нам нужен веб-сервер, который поддерживает Servlet API (т.е. в котором есть компонент-расширение, реализующее для веб-сервера поддержку Servlet API). Хорошо. А что же такое вообще веб-приложение? Согласно главе "10 Web Applications" спецификации Servlet API, Web application — это набор сервлетов, HTML страниц, классов и других ресурсов, которые составляют законечнное приложение на веб-сервере. Согласно главе "10.6 Web Application Archive File", веб-приложение может быть запаковано в Web ARchive (в архив с расширением WAR). Как сказано на странице "Glossary-219":
То есть WAR сделано вместо JAR, чтобы показать, что это веб-приложение. Следующий важный факт: у нас должна быть определённая структура каталогов в нашем WAR архиве. В спецификации Servlet API в главе "10.5 Directory Structure". В этой главе сказано, что есть особый каталог, который называется "WEB-INF". Данный каталог особен тем, что он не виден клиенту и напрямую ему не показывается, но он доступен для кода сервлетов. Также сказано, что может содержать каталог WEB-INF:
Для чего используется схема для XML файлов? В схемах указано, как правильно заполнять XML документ: какие элементы можно использовать, какого типа данные в элементах могут быть указаны, в каком порядке элементы должны идти, какие элементы обязательны и т.д. Можно сравнить схему XML документа с интерфейсом в Java, ведь схема в Java тоже указывает, каким образом должны быть написаны классы, которые удовлятворяют данному интерфейсу (т.е. которые реализуют данный интерфейс). Итак, мы вооружены тайными знаниями и готовы создавать своё первое веб-приложение!
Создание веб-приложения
Работы с современным Java-приложением уже трудно представить без использования систем автоматической сборки проектов. Одними из самых популярных систем являются Maven и Gradle. Воспользуемся для данного обзора Gradle. Установка Gradle описана на официальном сайте. Для создания нового приложения нам понадобится встроенный в Gradle плагин: "Build Init Plugin". Для создания Java-приложения необходимо выполнить следующую команду: gradle init --type java-application
После создания проекта нам понадобится отредактировать файл build.gradle. Это так называемый Build Script (подробнее см. документацию Gradle: "Writing Build Scripts"). В данном файле описывается то, каким образом необходимо собирать проект и другие аспекты работы с Java проектом. В блоке plugins описывается, какие "Gradle плагины" необходимо использовать для текущего Gradle проекта. Плагины расширяют возможности нашего проекта. Например, по умолчанию исопльзуется плагин "java". Данный плагин всегда используется, если нам нужна поддержка Java. Но вот плагин "application" нам не нужен, т.к. в его описании указано, что он служит для создания "executable JVM application", т.е. выполняемых JVM приложений. Нам же нужно создание Web приложения в виде WAR архива. И если мы в документации Gradle поищем слово WAR, найдём и "War Plugin". Следовательно, укажем следующие плагины: Так же в "War Plugin Default Settings" сказано, что каталог со всем содержимым веб-приложения должен быть "src/main/webapp", там должен лежать тот самый каталог WEB-INF, в котором должен лежать web.xml. Создадим такой файл. Заполнять же его будем несколько позднее, т.к. мы ещё не имеем достаточно информации для этого. В блоке "dependencies" указываем зависимости нашего проекта, то есть те библиотеки/фрэймворки, без которых не может работать наше приложение. В данном случае, мы пишем веб-приложение, а значит мы не можем работать без Servlet API: providedCompile говорит о том, что зависимость не нужно включать в наш WAR архив веб-приложения: она нужна только для компиляции. А при выполнении данная зависимость будет предоставлена кем-то другим (то есть веб-сервером). Ну и оставляем в build script информацию о том, какой репозиторий зависимостей мы хотим использовать — из него будут скачаны все указанные dependencies: Всё остальное из файла build script'а убираем. Теперь отредактируем класс src\main\java\App.java. Сделаем из него сервлет. В спецификации Servlet API в главе "CHAPTER 2. The Servlet Interface" сказано, что Servlet Interface имеет базовую реализацию HttpServlet, которой должно быть достаточно в большинстве случаев и разработчикам достаточно унаследоваться от неё. А в главе "2.1.1 HTTP Specific Request Handling Methods" указаны основные методы, которые обрабатывают входящие запросы. Таким образом, перепишем класс App.java: Итак, у нас вроде всё готово. Осталось правильно написать дескриптор развёртывания. Из схемы скопируем в web.xml следующий текст: А также путь к схеме, который указан в ней: http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd Теперь посмотрим пример того, как должен выглядеть web.xml в спецификации Servlet API. Данный пример указан в главе "14.5.1 A Basic Example". Совместим то, что указано в схеме с примером, который указан в спецификации. Получим следующее: Как видно, мы использовали схему и schemaLocation, которые были указаны ранее. А описание самих элементов взяли из примера из главы 14.5.1. Если мы сделали всё правильно, выполним gradle задачу gradle war без ошибок:
Запуск веб-приложения
Выполнив http://localhost:8080/javaweb/app , мы обратимся к нашему сервлету, т.к. обращение /app ранее мы "замапили" (то есть сопоставили) на сервлет App. Существует более быстрый способ проверить, как работает приложение. И в этом нам снова помогает система сборки. В build script нашего Gradle проекта мы можем добавить в секцию plugins новый плагин "Gretty": id "org.gretty" version "2.3.1" И теперь мы можем выполнять gradle task для запуска нашего приложения: gradle appRun
Spring и Servlet API
Аннотации
Как мы видели, аннотации — это удобно. И не мы одни так подумали. Поэтому в спецификации Servlet API начиная с версии 3.0 появилась глава "CHAPTER 8 Annotations and pluggability", которая указывает, что сервлет контейнеры должны поддерживать возможность указывать то, что раньше указывалось в Deployment Descriptor'е через аннотации. Таким образом, web.xml можно совсем удалить из проекта, а над классом сервлета указывать аннотацию @WebServlet и указывать, на какой путь "мапить" сервлет. Тут вроде всё понятно. Но что делать, если мы к проекту подключили Spring, который требует более сложных настроек? Тут всё чуть-чуть сложнее. Во-первых, в документации Spring сказано, что для настройки Spring без web.xml нужно использовать свой класс, который будет реализовывать WebApplicationInitializer. Подробнее см. главу "1.1. DispatcherServlet". Получается, что это класс Spring'а. Как же тогда используется Servlet API тут? На самом деле, в Servlet API 3.0 был добавлен ServletContainerInitializer. Используя особый механизм в Java (называется SPI), Spring указывает свой инициализатор сервлет контейнера, который называется SpringServletContainerInitializer . В свою очередь, он уже ищет реализации WebApplicationInitializer и вызывает нужные методы и выполняет нужные настройки. Подробнее см. "How servlet container finds WebApplicationInitializer implementations". Вышеуказанные настройки можно выполнить так: Теперь при помощи "Java-based configuration" укажем, какой пакет сканировать + включим аннотации: А сам SpringController был перенесён в ru.javarush.javaweb.controllers , чтобы при сканировании конфигурация не находила сама себя, а искала только контроллеры.
Если у вас в папке web лежит index.jsp — удаляйте его. Вместо него в этой папке создадим простой html-файл с именем index.html: Тут ничего сложного. В title указываем заголовок нашей страницы. В теле страницы у нас два основных дива: header (шапка) и content (контент). В контенте у нас холдер для наших кнопок, ну и собственно две кнопки, которые по нажатию отправляют на соответствующие адреса. Можете запустить проект, и посмотреть, как он сейчас выглядит. Если нажимать на кнопки, открываются страницы с ошибкой 404, потому что у нас их пока нет. Но это говорит о том, что кнопки работают. Замечу, это не самый универсальный вариант, поскольку если у вас вдруг отключён JavaScript, в браузере от этих кнопок толку никакого. Но будем считать, что никто JavaScript не отключал:). Ясно, что можно было бы обойтись простыми ссылками, но мне больше по душе кнопочки. Вы же делайте, как вам больше нравится. И не смотрите, что в моих примерах будет много div-ов. Потом мы их наполним стилями, и всё станет выглядеть красивее:).
Создаем jsp-файлы для отрисовки результата
- add.jsp — страничка для добавления пользователей;
- list.jsp — страничка для показа списка пользователей.
Создадим два сервлета
- entities — тут будут лежать наши сущности (сам класс, который будет описывать объекты пользователей);
- model — тут будет наша модель (об этом чуть позже);
- servlets — ну а тут будут наши сервлеты.
- AddServlet — будет обрабатывать запросы, поступившие по адресу /add;
- ListServlet — будет обрабатывать запросы, поступившие по адресу /list.
Подключение зависимостей в Maven
Tomcat версии 9.* реализует спецификации Servlet версии 4.0 и JavaServer Pages версии 2.3. Об этом написано в официальной документации 9-го Tomcat в первом же абзаце во второй строке. Это значит, что если вы, как и я, используете эту версию Tomcat, то наш код, который мы напишем и отправим выполняться, будет использовать именно указанные версии. Но нам бы хотелось иметь эти спецификации и в нашем проекте, чтобы наш код, который их использует, хотя бы успешно компилировался. А для этого нам надо их подгрузить к себе в проект. Вот тут-то и приходит на помощь Maven.
Общее правило следующее: если вам надо подключить что-то к вашему проекту, используя Maven:
- идете на сайт репозитория от Maven;
- ищите там нужную вам библиотеку нужной версии;
- получаете код зависимости, который надо вставить в ваш pom.xml;
- вставляете! :)
Делаем из наших сервлетов настоящие сервлеты
Маппинг или разметка
- сначала описываем сервлет (даем какое-то имя и указываем путь к самому классу);
- потом привязываем этот сервлет к конкретному адресу (указываем имя сервлета, которое мы ему только-что дали и указываем адрес, запросы с которого стоит отправлять на этот сервлет).
Краткое лирическое отступление: что происходит «под капотом»?
Многие современные программисты предпочитают в своей работе пользоваться Java. Несмотря на то, что спросом пользуется Си-семейство, Джава тоже не уступает. Связано это с тем, что данный язык является универсальным. Он удобен, понятен и практичен.
С самого своего возникновения (в 1995 году) стал активно развиваться и совершенствоваться. Сейчас Java удобно использовать как для компьютерных программ, так и для мобильных платформ. Это – полноценный язык, поддерживающий объектно-ориентированное программирование. Ключевая особенность Java – возможность создавать веб-приложения и расширения.
Java в программировании – сильные стороны языка
Перед тем, как садиться за написание первых приложений на Джаве, нужно знать, какими особенностями обладает соответствующий язык. Далеко не все «способы общения» с софтом и «железом» подходят для написания конкретного контента.
У Java следующие особенности:
- наличие функционала для ООП;
- понятный и относительно простой синтаксис – освоить его может даже начинающий программист-любитель;
- хорошая пользовательская поддержка – она дружелюбна к новичкам;
- достаточное количество документации на всех языках, включая русский;
- движок и библиотеки для написания игр и всевозможных веб утилит.
Java великолепно «работает» с Сетью. Именно для этой цели изначально планировалось создание оного. Также стоит отметить – упомянутый язык является кроссплатформенным. Перенести программу из одной ОС в другую удается в кратчайшие сроки и без потери качества исходной кодификации.
Понятие веб-приложения
Веб-приложение в Java – это специальная программа, основанная на принципе работы по типу клиент-сервис. Давайте рассмотри соответствующие понятия позже. Сначала стоит разобраться, что собой представляет тип утилиты, которую хочется написать на Джаве на этот раз.
В веб-приложении клиент будет взаимодействовать с веб-сервером посредством вспомогательных утилит. Их называют браузерами. Логика распределяется между сервером и клиентом. Хранение информации производится в основном на servers. Обмен данными обеспечивается Сетью.
Основное преимущество подобного контента – это то, что клиенты не будут зависеть от той или иной операционной системы. Не важно, какая ОС установлена на задействованном устройстве. Web-приложения будут работать везде. Это – кроссплатформенный вариант.
Техособенности
Веб приложения имеют ряд особенностей, которые делают соответствующий контент удобным и продуктивным. Важно учитывать следующие моменты:
- Функции выполняются независимо от ОС пользователя.
- Приложение будет создаваться всего один раз для произвольно выбранной платформе. Именно на ней осуществляется дальнейшее развертывание.
- Иногда пользовательские права на редактирование настроек интернет-обозревателя способны доставить немало хлопот. Приложения для работы с сетью будут отображаться некорректно.
- Не исключены проблемы при разработке и поддержке утилит из-за разной реализации CSS и DOM.
- Возможно использование Java-апплетов и Adobe Flash. Со вторым типом приложений сегодня возникают затруднения. Связано это с тем, что Flash-технологии с 2015 года перестали поддерживаться.
В каком-то смысле веб приложения можно отнести к «толстым» клиентам. Связано это с особенностями архитектуры рассматриваемого контента.
Архитектурный вопрос
Для начала рекомендуется разобраться, какова архитектура у приложений типа «веб». Она включает в себя клиентскую и серверную части. За счет этого в жизнь воплощается технология под названием «клиент-сервер».
Клиент отвечает за реализацию пользовательского interface. Также он формирует серверные запросы и обрабатывает ответы, получаемые от соответствующих «команд».
Веб приложение может являться клиентом иных служб.: баз данных или иных утилит, хранящихся на тех или иных серверах. Пока удается привести один узнаваемый пример – Википедия и ее система управления. Здесь n-количество участников способны принимать участие в разработке сетевой энциклопедии. Работа ведется посредством браузеров. Дополнительные исполняемые модули не загружаются.
Веб-сервер – это…
Перед тем, как писать собственный контент, надо хорошо разбираться в том, какие процессы будут происходить внутри программы. Особенно тогда, когда речь заходит о создании утилит для работы с Сетью.
Web Applications работают по принципу «клиент-сервер». Но не совсем понятно, что такое server, как он реализован. Даже сложные и глобальные проекты будут функционировать по примерно одному и тому же принципу.
Web Servers, как сказано в Google, обладают дополнительным функционалом. Примеры:
Вариантов веб-серверов очень много. Это говорит о том, что данное направление является весьма перспективным. Вот примеры самых популярных веб-серверов:
- Apache;
- Nginx;
- Microsoft IIS.
Выбрать можно вариант, который пользователю кажется наиболее удобным.
Сервер приложений
Java, как и любой другой язык программирования, непрестанно совершенствуется. Для того, чтобы написать любое приложение, сначала необходимо изучить максимум информации о процессах и ресурсах, которые могут потребоваться в процессе реализации задачи.
В случае с веб утилитами (не только на Java) важно разграничивать сервера и сервера приложений. Это два разных элемента.
Application Server – утилита, представленная сервером. Последний занимается системной поддержкой программ, а также отвечает за обеспечение жизненных циклов в соответствие с установленными принципами работы. Функционирует или самостоятельно, или выступает в качестве поставщика страниц для иных web-servers. Отвечает за обмен информации между софтом и клиентами. Создает программную среду для итогового приложения, помогает авторизовывать и идентифицировать клиентов, организовывает сессии для каждого «подключившегося».
Вот несколько распространенных серверов утилит на Java:
- Tomcat Apache;
- JBoss;
- IBM WebSphere;
- Oracle WebLogic.
Веб-сервер имеет отношение преимущественно к способу передачи данных. Если говорить об Application Server, можно сделать вывод о том, что это – более узкое понятие. Относится к способу исполнения программ (удаленная обработка клиентских команд). В одном ряду соответствующие термины не размещаются. Они отвечают за совершенно разные признаки софта.
Серверные технологии
Java, как и любой другой язык программирования, позволяет создавать уникальный контент. Если он относится к типу «веб», предстоит сначала разобраться в технологиях, используемых для запуска софта и обработки информации. У Джавы их несколько. Выбирать стоит в зависимости от того, для чего конкретно пишется программа.
Технология AJAX
AJAX – это асинхронный JavaScript и XML. Технология, которую можно считать относительно новой. При ней утилита не будет перезагружаться полностью. Для обновления информации осуществляется подгрузка недостающих/новых сведений. Это значительно ускоряет работу и упрощает ее.
AJAX в основном используется при интерактивных пользовательских интерфейсах. Обмен данными «браузер-сервер» протекает в фоновом режиме. Описать данный процесс можно так:
- Юзер открывает страничку в интернете.
- Происходит взаимодействие с тем или иным элементом.
- Скрипт JS определяет, какие данные нужны для обновления.
- Браузер отправляет соответствующий запрос на веб-сервер.
- Последний отвечает за возврат документа, на которую посылался запрос.
- Скрипт корректирует страницу с учетом полученных данных.
Вообще, принцип работы базируется на двух вариантах. Каждый обладает своими нюансами.
Динамическое обращение
Первый вариант развития событий – это технология динамического обращения к серверам «на лету» посредством динамического создания:
- фреймов дочернего характера;
- тегов ;
- тегов .
После применения данных технологий происходит функционирование без перезагрузки всей страницы целиком. Это – относительно быстрое решение поставленной задачи.
Второй подход – задействование DHTML для динамического корректирования информации на страничке.
Что включает в себя AJAX
При составлении кода утилиты и изучении материалов о принципах работы веб-софта нужно уяснить – AJAX не является самостоятельной технологией. Она включает в себя следующие методы реализации:
Фактически AJAX – это концепция применения сразу нескольких технологий серверного характера.
Технологии WebSocket
WebSoket – еще один популярный нынче вариант. Стараясь разобраться в теме веб-приложений перед написанием оного, важно осознавать, какие технологии будут применяться в том или ином случае.
WebSoket – протокол полнодуплексной связи, накладываемый поверх TCP-соединения. Он предназначается для того, чтобы сервер обменивался данными с интернет-обозревателем в режиме реального времени, «здесь и сейчас». Комментарии тут излишни.
Достаточно запомнить, что данный вариант предусматривает две URI схема:
- ws: – нешифрованное соединение;
- wss: — шифрованный «коннектинг».
Технология не требует постоянных запросов клиент-сервер. В процессе реализации всегда создается двунаправленное соединение. Данные с server могут отправляться к client без запроса от оного.
А что о CGI?
Создавая приложение на Джаве, программист должен предварительно изучить возможные технологии работы веб-утилит. Есть вариант CGI. Это – низкоуровневый вариант. Стандарт, который использует интерфейс. Последний задействуется для связи внешней программы с сервером.
CGI обладает хорошей реализацией. Там можно использовать практически любой язык программирования, а не просто Java или JavaScript. Соответствующий вариант имеет следующие плюсы и минусы:
- универсален за счет отсутствия требований к платформам;
- позволяет использовать тот язык программирования, который хотим;
- CGI – это готовый к запуску файл, что делает затрудненным расширение системы.
Все это заставило программистов развиваться в технологиях работы с серверными каналами. Теперь существуют более совершенные «версии» технологий.
Java Servlet
Сервлет относится к «методикам» Java. Сочетает в себе особенности API и CGI. Помогает разобраться с производительностью, так как все запросы будут выполняться в едином потоке в одном и том же процессе. Сервлеты не имеют никакой зависимости от платформы.
Servlet – это класс Java, который выполняется внутри Джава VM:
- Контейнер веб-утилиты вида Tomcat начинает загрузку сервлета. Это происходит при первом обращении или в процессе запуска сервера согласно установленным конфигурационным параметрам.
- Servlet загружается и остается в подобном состоянии до тех пор, пока не будет произведена явная выгрузка.
- Возможно отключение посредством остановки контейнера.
Java Servlets имеет программный интерфейс, позволяющий вести обработку запросов на низком уровне. Обработка ведется в едином процессе посредством создания потоков внутри. Код предстоит составлять так, чтобы он был безопасным.
JSP – нюансы
Еще один вариант, применяемый для приложений, написанных на Джаве – это JSP. Разработка здесь больше не требует особых временных затрат. Связано это с тем, что программисту предстоит работать с шаблонами.
JSP – шаблоны страничек, похожих на ASP и PHP. Привязки к ПО и аппаратным платформам нет. Производительность ограничена:
- странички нужно компилировать в сервлеты, но только при первом обращении;
- servlets обрабатываются в JVM.
Основная нагрузка при реализации за счет кластеризации переходит на аппаратное обеспечение.
PHP – что такое?
PHP – распространенный «формат», который используют многие сервисы и приложения. Обладает высоким уровнем безопасности. Основывается на принципе построения страничек по шаблонам.
PHP-страницы – это обычные HTML, включающие в себя особые тэги. Каждый такой элемент виден сразу. Он имеет форму .
— А вот и я. Как ты и просил, сейчас я расскажу тебе, как написать первую программу для веб-сервера.
Веб-сервер – это как операционная система. Он ценен не сам по себе, а потому, что в нем можно запускать специальные веб-программы – сервлеты (Servlet).
Именно эти сервлеты и обрабатывают запросы, приходящие от пользователей.
— А как они обрабатывают запросы? Как вообще запустить свою программу внутри веб-сервера?
— А как моя программа вообще попадет в web-server?
— Тут все просто. Ты пишешь программу, компилируешь ее и кладешь в специальную папку, в директорию, куда установил Tomcat.
Сервлеты – это большая отдельная и интересная тема. Поэтому я не буду тебе сегодня ее рассказывать. Я расскажу тебе немного о другом.
Есть одна очень интересная разновидность сервлетов – это JSP. Чем-то напоминает PHP.
Давай мы напишем самую простую веб-программу с использованием JSP, и запустим ее.
Инструкция актуальна для версии IDEA Ultimate 2020.2.3
Шаг 1. Cоздай новый проект
Шаг 2. Выбери тип модуля (Java) и версию JDK
Шаг 3. Подключи библиотеку — Servlet
Шаг 4. Укажи имя проекта и жми Finish
Шаг 5. Создай файл index.jsp. Правый клик по webapp > New > JSP/JSPX. Назови файл index
— Ты должен видеть новый созданный пустой проект. В нем будет один файл – index.jsp
Шаг 6. Найди jsp-файл в дереве проекта
— Отлично. Вот в нем можно будет написать код нашего сервлета.
Но давай сначала немного настроим Intellij IDEA.
Можно запускать сервлеты в Tomcat’е прямо из Intellij IDEA. Дебажить их, если надо. В общем, это очень удобно и круто. Ты это оценишь, когда придет время.
— Верю. Так что делать дальше?
— Мы «научим» Intellij IDEA запускать наш webmodule (наше приложение) в Tomcat.
Шаг 7. Зайди в меню Run, во вкладку EditConfiguration
Шаг 8. Чтобы создать новую конфигурацию, нажми на плюсик. Укажи что именно нужно запускать (TomcatServer, Local)
Шаг 9. Теперь пропишем конфигурации запуска приложения
— Задаем имя этой конфигурации в поле Name – отмечено красным.
Зеленым выделен порт, на котором будет запускаться сервлет с Tomcat’ом.
Надо еще указать IntellijIDEA, где находится наш Tomcat. Жми кнопку Configure…
Шаг 10. Укажи месторасположение Tomcat’а
— Должно получиться что-то типа такого:
Шаг 11. Результат настройки будет выглядеть так:
Теперь нужно привязать наш проект к Tomcat’у.
— Сколько всего надо сделать. Хорошо, что есть такая подробная инструкция.
— А, то! Для друга же стараюсь.
Шаг 12. Теперь жми кнопку Fix, и IDEA все сделает сама
Шаг 13. IDEA делает привязку проекта и Tomcat
— Отлично. Еще одно замечание. Порт 8080 уже скорее всего занят. Ведь Tomcat запустился сразу после установки.
Intellij IDEA умеет «подкладывать» сервлеты к уже запущенному проекту, но сейчас для простоты она будет каждый раз запускать новый Tomcat.
— Т.е. у нас будет несколько запущенных Tomcat’ов?
— Ага. И каждому нужен свой порт. Поэтому, давай-ка в настройках проекта поменяем порт 8080, на порт 8888.
— 4 восьмерки – мне нравится.
Шаг 14. Измени порт на 8888
— Отлично. С настройками мы покончили.
— Так, а что дальше?
— Теперь давай немного поменяем наш index.jsp
Напиши там что-нибудь, например «Вся власть – крабообразным».
Шаг 15. Измени текст в файле index.jsp, например, следующим образом:
— Не, я лучше «Вся власть роботам!» напишу.
— Отлично. Теперь осталось совсем немного.
Шаг 16. Запусти сервлет и Tomcat (Run ‘WebApp’)
Должен быть виден лог работающего Tomcat, без ошибок и stackTrace.
Что-то типа такого:
Шаг 17. Лог запущенного Tomcat выглядит так:
При этом IDEA должна открыть браузер с ссылкой на твой сервлет.
Должно получиться что-то типа такого:
— Ага. Так и есть. Круто!
— А теперь напиши в браузере ссылку:
— Ничего не поменялось.
Тут в браузере отображается тот файл index.jsp, который ты видел в IntellijIDEA.
— Который я менял?
Но если в запросе браузера указан только домен без остальной части запроса, то будет вызван обработчик по умолчанию. В нашем случае – это index.jsp
Допустим, у тебя есть три файла: index.jsp , apple.jsp , google.jsp . Вот как будут обстоять дела:
Билаабо. Ты так долго рассказывал, что JSP это круто. Но они же очень похожи на самые обычные HTML-страницы. Все то же самое.
— Ну не совсем. Попробуй написать в JSP такой текст:
Внутри JSP-страницы можно делать вставки Java-кода и он будет работать!
Java-код в JSP-странице называется скриптлетом и обозначается двумя «скобками – « »
Читайте также: