Разработка веб-приложений на Java. Web-разработка, создание приложений на Java


Оглавление (нажмите, чтобы открыть):

Простейшее web-приложение на Java на сервере Tomcat

Учебный пример для работы с Java сервером в Windows.

27.04.2020 7 комментариев 47 698 просмотров

В статье рассказывается о том, как поднять на своем компьютере локальный java сервер и прописать простейшее web-приложение.

Содержание

Введение

Tomcat нужен для работы Java сервера с применением сервлетов. Если грубо говоря, то сервелеты это аналог тех же php скриптов. На сервер Tomcat от клиентов приходят запросы. В зависимости от них сервер запустит те или иные сервелеты, которые сформируют ответы в виде текстовых файлов. Чаще всего это html страницы.

Установка JDK

Устанавливаем JDK. Если уже до этого устанавливали, то повторно не устанавливаем.

Если у вас в папке с java есть только папка с названием jdk, но нет с названием jre, то аналогичным способом устанавливаем jre.

Для работы современных версий Android Studio или IntelliJ IDEA не нужно производить дополнительные действия, чтобы программы могли найти JDK и запускать java приложения. Но мы будем на данный момент компилировать сервлеты вручную, так что для удобства мы пропишем путь к папке JDK в системную переменную Path в Windows. Ниже приведена инструкция для Windows 10.

У меня JDK находится в папке C:\Program Files\Java\jdk1.8.0_121\bin .

Кликните правой кнопкой по иконке Этот компьютер и перейдите в Свойства .

Внимание! Не вздумайте удалять всё содержимое переменной Path . Иначе у операционной системы возникнут очень большие проблемы. Вы должны дописать в эту переменную нужный путь.

Установка Apache Tomcat

Скачиваем установочный файл.

Эти компоненты должны быть выбраны.

Для учебных целей можно параметры оставить по умолчанию.

Далее нужно указать путь к JRE (устанавливается при установке JDK). Обычно программа сама находит папку.

Далее всё стандартно.

После этого в трее должен появится значок запущенного сервиса.

Перейдите по адресу https://localhost:8080/. Если вы видите это, то всё хорошо.

Кстати, потом включать (например, при перезапуске компа) сервер можно запуском программы Monitor Tomcat из Пуска .

Создание и сборка сервлета вручную

Напишем первое web-приложение вручную без каких-либо IDE.

Перейдем в папку, где установлен Tomcat. У меня это папка C:\Program Files\Apache Software Foundation\Tomcat 9.0 . Запомните этот путь, так как он вам еще много раз пригодится.

Выше говорилось, что сервлеты чем-то похожи на php скрипты (упоминание для тех, кто знает php). Но есть одна существенная разница. В php можно написать файл скрипта, закинуть в соответствующую папку и web-приложение готово. С java такой трюк не пройдет. Нам соответствующие сервлеты нужно будет скомпилировать в байт-код и уже с сгенерированными .class файлами работать.

Итак, где-нибудь создайте произвольную папку. Советовал бы не использовать русские буквы, пробелы. И в пути к папке тоже желательно обойтись без русских букв. Я на рабочем столе создал папку testapp .

В чем недостатки Java для веб-разработки?

Из большого количества ответов на сайте я понял, что сейчас для веб-разработки активно используются Ruby (RoR) и Python(Django).

Хочется узнать, в чём преимущества/недостатки Java перед тем же Python-ом и почему НЕ СТОИТ использовать java под веб.

  • Вопрос задан более трёх лет назад
  • 22571 просмотр

Забавно читать ответы.

Когда читал Философию Java, автор высоко оценивал python. И не с проста. Как и Java, у Python свои плюсы.

По производительности что Python, то и Java примерно равны. Python имеет «нативный» byte-code, если так можно выразиться (не смотря на то, что его портировали и на CIL, и на JVM, и на сам Python). Так что здесь паритет.

По удобству зависит от проекта и задач. Если цель — сделать как можно быстрее, то Python явно удобнее. Ибо можно набросать прототип в интерактиве, немного подправить его и вауля — проект «готов». Если цель надёжность — наш выбор Java: статическая типизация и компилируемость выявляет сотни ошибок ещё до запуска приложения.

Стоит заметить, что вэб в Java развит очень сильно. Причём настолько, что он просочился до клиентских вэб-приложений (и умер лет 10 назад), хотя backend всё равно в разы сильнее. Что это значит? Это значит, что для Java есть множество отличных фреймворков, ориентированных на web. Каноничная реализация ООП позволяет использовать паттерны банды четырёх «из коробки». Интерфейсы, если ими уметь пользоваться, решают. Python же не создавался как web-движок, а создавался просто как удобный инструмент для быстрого программирования как прикладных, так и теоретических задач. В этом помогает всё — и сахарный синтаксис, и крутейшие итераторы, и пресловутый интерактивный режим, и невероятные slice’ы, и неплохие лямбды, и красивый код. RoR, если говорить о языке фреймворка, так же сильно похож на Python, но магии в нём много больше. Но Python-приложения тяжко отлаживать. Можно пару лет вести баг, который окажется из-за того, что мы не проверили возможность преобразования объекта к строке в аргументах. Динамическая типизация, причём очень хардовая из всех, наверное, это и дар и проклятие.

Собственно, если вопрос стоит «стоит ли изучать», то да, конечно стоит. Как и Java, Python — мультипарадигмальный язык, и те практики, которые Вы изучите в Python несомненно улучшат код в Java.

Введение в разработку веб-приложений

В этой документации содержится пошаговое описание основ использования IDE NetBeans для разработки веб-приложений. Также здесь рассматриваются способы создания простого веб-приложения, его развертывания на сервере и просмотра в браузере. В этом приложении будет создана страница JavaServer Pages(tm) (JSP) с запросом на ввод имени пользователя. Для сохранения введенного имени во время сеанса HTTP и повторения имени на другой странице JSP будет использоваться компонент JavaBeans.

Содержание

Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.

Программное обеспечение или материал Требуемая версия
IDE NetBeans Версия 7.2, 7.3, 7.4, 8.0, Java EE
Комплект для разработчика на языке Java (JDK) версия 7 или 8
GlassFish Server Open Source Edition
или
Контейнер сервлетов Tomcat
или
Сервер Oracle Web Logic
4.x

7.x или 8.x

11gR1 (10.3.3) или более поздние версии

Примечания

  • Установка Java EE (но не Java SE!) позволяет, при желании, установить сервер GlassFish и контейнер сервлетов Apache Tomcat.
  • Если вы хотите сравнить проект с рабочим решением, можно загрузить демонстрационное приложение.

Настройка проекта веб-приложения

  1. Выберите в главном меню «Файл» > «Новый проект» (CTRL+SHIFT+N). В области «Категории» выберите «Java Web». В области «Projects» (Проекты) выберите «Web Application» (Веб-приложение) и нажмите кнопку «Next» (Далее).
  2. В экране 2 введите HelloWeb в текстовом поле «Project Name» (Имя проекта).
  3. В поле «Project Location» укажите любой каталог на компьютере. В данном учебном курсе этот каталог будет называться $PROJECTHOME.
  4. Установите флажок «Использовать отдельную папку для хранения библиотек» и укажите местоположение папки библиотек (необязательно). Дополнительные сведения об этой функции см. в разделе Создание проектов Java в документе Разработка приложений в IDE NetBeans
  5. Нажмите кнопку «Далее». Откроется панель сервера и параметров настройки. Выберите версию Java EE, которую требуется использовать для приложения.
  6. Выберите сервер, на котором требуется выполнить развертывание приложения. В списке представлены только те серверы, которые зарегистрированы в среде IDE. Обратите внимание, что для поля «Context Path» (например, на сервере) устанавливается значение /HelloWeb в основе которого находится имя проекта, указанное при выполнении предыдущего действия.
  7. Нажмите кнопку «Готово».

В среде IDE будет создана папка проекта $PROJECTHOME/HelloWeb. Структуру файлов проекта можно просмотреть в окне «Files» (Ctrl+2), а его логическую структуру – в окне «Projects» (Ctrl+1).

Папка проекта содержит все исходные файлы и метаданные проекта, например сценарий сборки Ant. После этого проект «HelloWeb» откроется в среде IDE. В главном окне редактора исходного кода откроется страница приветствия index.jsp.

Примечание. В зависимости от версий сервера и Java EE, указанных при создании проекта, IDE может создать страницу index.html в качестве стандартной страницы приветствия для веб-проекта. Вы можете следовать инструкциям этого руководства и использовать файл index.html либо создать файл index.jsp, который будет использоваться в качестве страницы приветствия, в мастере создания файлов. В последнем случае необходимо удалить файл index.html.

Создание и изменение исходных файлов веб-приложения

Наиболее важной функцией среды IDE является создание и изменение исходных файлов. Именно эти операции при разработке чаще всего отнимают наибольшее количество времени. Среда IDE предоставляет широкий спектр средств, подходящих под личный стиль любого разработчика — как сторонника кодирования вручную, так и разработчика, предпочитающего предоставить среде IDE создание крупных блоков кода.

Создание пакета Java и исходного файла Java

  1. В окне ‘Проекты’ разверните узел ‘Исходные пакеты’. Обратите внимание, что узел «Source Packages» содержит только пустой узел пакета по умолчанию.
  2. Щелкните узел «Source Packages» правой кнопкой мыши и выберите «New» > «Java Class». Введите NameHandler в текстовом поле «Class Name» и org.mypackage.hello в поле списка «Package». Нажмите кнопку ‘Готово’. Новый файл NameHandler.java будет открыт в редакторе исходного кода.
  3. Объявите в редакторе исходного кода переменную String, введя непосредственно под объявлением класса следующую строку:
  4. Добавьте следующий конструктор к классу:
  5. Добавьте следующую строку в конструктор NameHandler():

Создание методов получения и установки

  1. Щелкните правой кнопкой мыши поле name в редакторе исходного кода и выберите «Refactor» > «Encapsulate Fields».

Откроется диалоговое окно «Encapsulate Fields», в котором имеется поле name. Обратите внимание, что для параметра «Visibility» (Видимость) полей по умолчанию установлено значение «private» (закрытый), а для средств доступа – значение «public» (общедоступный); в результате модификатор доступа для объявления переменной класса будет определен как «private», в то время как методы получения и установки будут созданы с модификаторами public и private, соответственно.


Нажмите кнопку «Refactor» (Реорганизация).

Для поля name создаются методы получения и установки. Модификатор для переменной класса определяется как private, в то время как методы получения и установки создаются с модификаторами «public». Класс Java должен теперь выглядеть следующим образом.

Изменение файла JavaServer Pages по умолчанию

    Активируйте файл index.jsp, перейдя на вкладку, отображаемую в верхней части редактора исходного кода.

В палитре (Ctrl+Shift+8), расположенной справа от редактора исходного кода, разверните узел «HTML Forms» и перетащите элемент «Form» в позицию, находящуюся в редакторе исходного кода непосредственно после тегов

Программирование [javawebinar.ru] Практика Java. Разработка Web приложения

Роджер

Роджер

Хмельной монах

Автор: javawebinar.ru
Название: Практика Java. Разработка Web приложения

Приложение будет разрабатываться начиная со второго занятия, основываясь на базовых темах курса: объектная модель, коллекции, система ввода-вывода, работа с файлами, сериализация, работа с XML, SQL, персистентность в базу данных (PostgreSQL), сервлеты, технология JSP, веб-контейнер Tomcat, HTML, JavaScript, модульные тесты JUnit, java.util.Logging, система контроля версий Git. Данный курс направлен на быстрое получения необходимых знаний и практики, с тем, чтобы окончивший их смог успешно пройти собеседование и работать в команде разработчиков на языке Java. Для увеличения объема пройденного материала часть теории (типы, операции, управляющие конструкции, . ) будет Вашей домашней работой (по предоставленным материалам) с последующим закреплением в форме вопросов, обычно задаваемых на собеседовании. Курс будет построен на активном взаимодействии с обучаемыми: выбора оптимальной доменной модели; реализации, паттернов проектирования, дизайна разрабатываемого приложения. Побочным результатом курса будет ваше личное резюме java разработчика с одним из пунктов в списке достижений: разработка веб-приложения.

После лекции, через месяц у студента в голове остаётся 3% знаний. А если он выполнил упражнение на практике более 7 раз, то в памяти сохраняется 95% знаний + бонус. Студент, практикуя упражнение, открывает ещё 50% нюансов знаний, которые не были озвучены преподавателем.
Спойлер: Описание далее

  • Понимание и практика программирования на Java в объектно-ориентированном стиле.
  • Структурное (красивое и надежное) Java кодирование
  • По всем темам курса- подготовка к собеседованию на позицию Java- разработчик
  • Использование де-факто (lingua franca) стандартов в разработке ПО: IntelliJ IDEA, PostgreSQL, Tomcat, JUnit, FireBug, Git.
  • Итог курса- совместное написание с нуля сложного Web приложения на стеке: Servlets, JSP, JAXB, JDBC

Требование к участникам:

  • Умение программировать на любом языке.
  • Желательно иметь представление о XML, HTML, SQL, JavaScript.
  • Желание и возможность изучить простую часть материала (типы, операции, управляющие конструкции) в первой половине курса самостоятельно.

Подробнее:

Блог только про Java

Учимся программировать на Java с нуля

Разработка веб-приложений в Eclipse

IDE Eclipse – мощнейшая среда для разработки на Java. Разработчики предпочли удобство пользования легкости обучения. В этой статье мы рассмотрим детальную инструкцию по разработке веб-приложений (JSP/Servlet) в Eclipse при помощи контейнера сервлетов Apache Tomcat.

Подготовительный этап

Чтобы разрабатывать веб-приложения нам нужна версия Eclipse IDE for Java EE Developers, а также Apache Tomcat. Чтобы упростить изложение предположим, что каталогом установки tomcat является %TOMCAT_HOME%, в нашем примере это /opt/apache-tomcat-7.0.6/.

Для выполнения отладки проекта в контейнере сервлетов, его необходимо добавить в Eclipse:

  1. File/New/Server/Server:
  2. Define a New Server. Откроется окно, в котором нужно выбрать необходимый адаптер. Последний объясняет Eclipse каким образом необходимо взаимодействовать с контейнером сервлетов. Так как в этой статье мы рассматриваем работу с Apache Tomcat, то нам нужно выбрать адаптер Apache – Tomcat v0. Прочие параметры можно не менять.
  1. Tomcat Server. Необходимо настроить параметры сервера. Тут самое важное – указать путь к %TOMCAT_HOME%.
  1. Далее предлагается выбрать проекты, запускаемые на данном сервере. Просто кликаем Finish.

После того как вы добавили сервер Eclipse создаст каталог Servers, где будут хранится файлы конфигурации Tomcat. Важно, что при этом не происходит изменения самой установки tomcat’a. Если нужно будет поменять параметры сервера (к примеру, определить набор подключений к БД), вы сможете сделать это в данных файлах.

Также сервер появляется на нижней вкладке Servers. Если у вас отсутствует такая вкладка, нужно проверить перспективу (Java EE) или включить view вручную: Window/Show View/Servers либо при отсутствии в перечне предложенных поискать в Others. Сделав двойной клик по строчке сервера откроются его параметры. Важнейший момент здесь – Timeouts – время ожидания запуска сервера. Рекомендуется увеличивать это значение, дабы избежать проблем при отладке запуска приложения.

Создаем приложение

  1. File/New/Dynamic Web Project.
  2. Dynamic Web Project. Здесь нужно указать название проекта, а остальные поля можно не менять. Заметьте, что Target runtime является сервер, который мы создали ранее. Также вы можете поменять версию спецификации сервлетов в Dynamic web module version.
  3. Java. Стандартные параметры приложения на Java. Можно указать пути к директориям, где расположены исходные коды, а также директорию, где расположены скомпилированные классы. Кликаем
  4. Web Module. Тут менять ничего не нужно, но вы должны понимать, что означают поля:
    1. Context root – контекст, используя который в браузере можно будет получить доступ к вашему приложению. Полным путем будет https://localhost:8080/test-app, а test-app представляет собой значение поля.
    2. Content directory – корневая директория под war-архив. Тут будутWEB-INF/, META-INF.
    3. Generate web.xml – начиная от спецификации Servlets0 веб-приложениям не обязательно нужен файл web.xml. Выбранная опция в любом случае создаст файл. Рекомендуется всегда его создавать.

Чтобы запустить приложение кликните по нему ПКМ и выберите Run As/Run on Server. В открывшемся окне пометьте параметр Always use this server и кликните Finish. Приложение будет во вкладке Servers как узел сервера во встроенном браузере. Для его запуска в прочих браузерах нужно произвести настройку Eclipse: Window/Preferences/General/Web Browser, где указать браузеры.

Учтите, что нужные для разработки библиотеки tomcat’a будут автоматически подключены к проекту.

Разрабатываем приложение

После старта вам будет выведена ошибка 404, так и должно быть, поскольку приложение у вас пустое, соответственно tomcat не понимает, что отдавать пользователю. Начнем заполнять приложение создав простой html-файл:

  1. Кликаем ПКМ по папке проекта WebContent: New/Html File, даем ему имя index.html. Далее выбираем подходящий шаблон и кликаем Finish.
  2. Дополним файлик еще какой-то надписью, к примеру, Hello World и еще раз запустим приложение, либо можно просто обновить страницу в браузере. Вам должна открыться созданная страница.
  3. Создаем новый файлик page.html и тоже чем-то его заполняем. Кликаем ПКМ по созданной страничке и нажимаем Run As/Run on Server. В браузере должен открыться сервер с этой новой страничкой.

Чтобы создать сервлеты и JSP-страницы воспользуемся соответствующими командами, присутствующими в меню файл. В ходе создания сервлета нам будет предложено указать его начальные параметры и отображение (mapping).

Выполняем тонкую настройку проекта

В параметрах проекта есть возможность настройки еще некоторых достаточно важных опций:

  • Deployment Assembly – параметры расположения путей проекта (либо прочих директорий) на сервере приложений. К примеру, у вас существует директория data, находящаяся в корне проекта. Вам нужно, чтобы данные из этой директории попали в приложения по пути /data/. Чтобы это реализовать на вкладке Deployment Assembly необходимо выполнить это: Add/Folder, выбираем здесь папку data. Затем изменяем в таблице Deploy Path на data/.
  • Project Facets – дает возможность подключать к проекту различные фреймворки.
  • Web Project Editor – подключение tag libraries в процессе редактирования JSP.
  • Web Project Settings – изменение контекста приложения.

Экспортируем проект

Чтобы экспортировать проект в файл формата war с целью расположения в контейнере сервлетов, необходимо выполнить File/Export/Web/WAR File. Доступ к этой функции можно получить более быстро, воспользовавшись контекстным меню проекта Export/WAR. Учтите, что в процессе экспорта будут учтены настройки Web Deployment.

Решаем проблемы

Порой (если у вас одна из последних версий Eclipse, то такое происходит крайне редко), случаются проблемы с расположением приложения:

  • Для проверки, что в действительности видит tomcat заходим в директорию %WORKSPACE%/.metadata/.plugins/org.eclipse.wst.server.core/tmpX/wtpwebapps. Вместо Х, как правило, 0, однако может быть и другое.
  • Порой выручает команда из контекстного меню приложения во вкладке Servers (Servers/Server name/app name) Clean module work directory – команда очищает временные файлы приложения.
  • Самый мощный инструмент – это команда из контекстного меню сервера во вкладке Servers Clean tomcat work directory. Она полностью удаляет директорию tmpX, создавая новую. В данном случае все приложения размещаются наново.

Ищите недорогой и красивый домен для своего сайта? В таком случае заходите на 2домейнс.ру. Выбирайте нужную вам зону, придумывайте красивый домен и получайте его на самых выгодных условиях в Рунете!

Один комментарий на “ Разработка веб-приложений в Eclipse ”

Лет десять назад веб рассматривался лишь как инструмент для обмена информацией о предприятиях, продуктах и услугах. Никто не и думал, что первоначальные элементы сети станут базисом для приложений, которые теперь повсюду, на всех устройствах и экранах. Но теперь это необходимость.

Java EE

JAVA EE: Разработка web-приложения. Дизайн и настройка.

Третья статья по разработке web-приложения.

В данной статье мы спроектируем наше приложение, обговорим основные моменты, касающиеся его логики функционирования, а также приступим к работе со средой разработки (IDE).

Также мы рассмотрим способ подключение IDE к базе данных MySQL, создадим новую базу данных для нашего web-приложения.

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

Структура сайта

Из приведенного выше описания можно составить структуру сайта:

  1. Главная страница сайта. Содержит список последних добавленных статей.
  2. Страница чтения статьи. Содержит полное содержание выбранной статьи.
  3. Страница регистрации.
  4. Зона администрирования. Ограниченный вход только для авторизованных пользователей, имеющих права администратора сайта.

Наглядно расписанную структуру можно увидеть на рисунке ниже:

Архитектура Java EE проекта

Прежде чем приступить к программированию, необходимо рассмотреть архитектуру проекта. Обозначим обязанности между функциональными компонентами и определим каким образом они будут вести взаимодействие друг с другом.

При работе с JSP можно уместить бизнес-логику внутри jsp страниц с использованием скриплетов , однако такой подход не рекомендуется даже для малых проектов. Причин, почему этот подход является плохим, можно найти множество на просторах интернета, в частности:

  1. Скриплеты не масштабируемы и трудно поддерживаемы.
  2. Смесь программирования, верстки и дизайна в одном флаконе: верстальщик явно не обрадуется, глядя на jsp страницу с кучей непонятного для него кода.
  3. Читать такие страницы крайне неудобно.
  4. Сложность тестирования.

И это список далеко неполный.

Из вышесказанного выведем еще одно важное правило:

1Не злоупотребляйте, а лучше старайтесь не использовать скриплеты внутри jsp страниц.

В данной серии статей мы будем следовать паттерну MVC. Паттерн достаточно известный и подробно вдаваться в его подробности не имеет смысла.


Опишем основные моменты.

  • Модель (M Model): Хранит в себе бизнес-логику приложения, регулирует доступ к данным и их изменение.
  • Вид (V View): View отображает содержимое модели, определят как необходимо представить данные, полученные от модели. View берет на себя сбор пользовательских данных и передачи их контроллеру.
  • Контроллер (C Controller): Контроллер определяет поведение всего приложения, получает от view пользовательские данные, интерпретирует их в действия, выполняемые с помощью модели. Контроллер передает view указание, какое представление необходимо применить, на основе результатов работы модели и взаимодействия с пользователем.

Применительно к Java EE технологии шаблон MVC реализуется следующим образом. Сервлет используется как контроллер для обработки входящих запросов пользователей от представления, которое реализуется с помощью страниц jsp. Модель же представляет собой EJB сессионные компоненты, а также классы сущности (JPA), которые в свою очередь содержат в себе данные из БД.

Создание web-проекта

Приступим к работе со средой разработки.

1. Запустите Ваше IDE. Автор использует NetBeans.

2. Кликните по иконке «Создать проект. » , в списке категорий выберите «Java Web», в появившемся списке «Проекты» выберите «Веб-приложение».

3. Нажмите «Далее >». Введите наименование проекта «myblog».

4. Сервер и параметры настройки. Далее Вам необходимо выбрать сервер и версию Java EE платформы. Если в списке серверов нет Вашего сервера, то добавьте его, используя кнопку «Добавить».

После завершения всех настроек нажмите кнопку «Готово».

IDE сформирует каркас Вашего приложения. Имеется один файл index.jsp с простенькой разметкой. Это вполне работоспособный скелет приложения. Нажмите на кнопку «Запустить главный проект» или F6. В результате IDE развернет на выбранном вами сервере данное веб-приложение. Протестить его можно по перейдя по ссылке:

Чтобы посмотреть список развернутых приложений на сервере, перейдите на вкладку «Службы», раскройте выпадающий список «Серверы», в нем выберите ваш и в нем найдите список «приложения».

Взаимодействие IDE с базой данных

Подключим IDE к нашей базе данных. Для этого выполним простые действия.

1. На вкладке «Службы» кликните правой кнопкой мыши и в появившемся контекстном меню выберите пункт «Зарегистрировать сервер MySQL».

2. По умолчанию имя узла и номер порта сервера совпадают с предложенными. Вам нужно ввести ваше имя пользователя и пароль. Нажмите ОК.

В списке баз данных появится новое подключение. Выполните коннект к ней, используя соответствующий пункт в контекстном меню подключения.

Шаблоны страниц

Далее создадим несколько шаблонов наших страниц. Для этого нажмите на кнопку «Создать файл. » . Выберите тип файла «JSP» и нажмите «Далее. «, введите название страницы Article и нажмите «Готово«. Подобным же образом создайте jsp файл Registration.

Теперь создайте папку «css» в корневом каталоге и добавьте новую каскадную страницу стилей style.

В результате дерево проекта у Вас должно выглядеть следующим образом:

Можно посмотреть каждую из страниц, набрав в адресной строке браузера строку типа localhost:8080/article.jsp

Теперь произведем небольшую верстку сайта. Откройте файл index.jsp и добавьте в него следующий код.

Файл article.jsp будет отличать лишь то, что блок article у него будет встречаться единожды, поэтому скопируйте этот же код в файл article.jsp за исключением того, что блог div будет выглядеть вот так:

Файл registration.jsp.

Файл style.css будет содержать следующий код.

Можете вновь зайти на каждую из страниц и посмотреть что у нас получилось. Выглядеть должно примерно вот так:

На этом третья статья серии закончена.

В следующей статье мы займемся разработкой модели данных и создадим базу данных для нашего проекта, также познакомимся с дескриптором развертывания и jsp сегментами, и, на закуску, мы создадим сервлет-контроллер.

Комментарии

12.02.2020 Автор: Дмитрий

Здравствуйте, автору спасибо , почему то только нашел ваш сайт. Материалы будут новые?

17.06.2020 Автор: Abay

Планирую изучить Java + Web, но тупое копирование кода вряд ли поможет достичь хороших результатов.

Java WEB

При разработке WEB приложения можно использовать одну из наиболее популярных технологий, к которым следует отнести Java Servlets, Java Server Page, PHP, ASP.NET, Node.js. В статье приводятся преимущества и недостатки данных технологий при разработки Web приложения.

Web приложения реализуют бизнес-логику на стороне сервера и генерируют код для клиента. Т.е. клиент, как правило, является тонким, без каких-либо серьезных ресурсов обработки информации на сервере. Также у всех этих приложений одинакова архитектура взаимодействия сервера и клиента и общий протокол взаимодействия — HTTP.

Схематично логика работы WEB приложения представлена на рисунке.

Как следует из рисунка, работа приложений в облаке происходит в три основных этапа:

  • Запрос клиента. Браузер (клиент) инициирует запрос к серверной части WEB-приложения.
  • Обработка запроса сервером. После получения запроса сервер приложения проводит обработку запрашиваемой информации.
    Если запрашивается статический ресурс типа страницы HTML, рисунок, документ, то данная информация форматируется согласно протоколу HTTP и передается клиенту в качестве ответа.
    Если требуется динамический ресурс, то запрос передается на обработку соответствующему серверному приложению («контейнеру» WEB приложения), где и происходит дальнейшая обработка параметров запроса.
  • Ответ клиенту. После обработки запроса и формирования ответа, данные передаются браузеру (клиенту) с использованием протокола HTTP. Ответ содержит данные (обычно в виде HTML кода, иногда двоичные данные), а также дополнительные параметры в заголовке HTTP ответа.

Данный подход к разработке приложений создает определенные сложности, основной из которых является отсутствие состояния WEB приложения (так называемое stateless programming). Это означает, что приложение работает исключительно в режиме запрос-ответ, не имея данных о предыдущих шагах пользователя или какой-либо иной постоянной информации. Для решения данной проблемы в различных WEB технологиях используется понятие пользовательской сессии, которая позволяет хранить определенную информацию на сервере в течение сеанса работы пользователя.

Однако наличие сложности разработки WEB приложения не ограничивается только сессией работы пользователя. Для ускорения разработки серьезных WEB приложений используются различные дополнительные фреймворки. Таким образом, чем больше возможностей предоставляет платформа, тем быстрее и эффективнее может вестись разработка.

Выбор технологии

Какую выбрать технологию для разработки WEB приложения целиком и полностью зависит от руководителя проекта (конструктора, разработчика). Можно, конечно, освоить новую, самую модную на текущий момент технологию, для расширения своего кругозора и разработки в ней еще одного приложения. Это особенно оправданно, если за все это платят хорошие деньги. Но чтобы стать после этого хорошим специалистом в данной области требуется значительное время.

Большой проект (WEB приложение) в конечном итоге может оказаться «провальным». Нет, не то, чтобы его не выполнили и не смогли сдать заказчику. Нет это все как раз со скрипом прошло успешно; ведь и заказчику порой нужно списать деньги, чтобы получить в следующем году не меньше. Но эта уже другая тема — как сдавать проект заказчику. Просто WEB приложением не стали пользоваться и оно умерло, не успев родиться.

В каком случае проект может оказаться неудачным, с чем это может быть связано? Может быть с неумелым управлением? Или с неправильным выбором платформы, о чем стало известно на последнем этапе. Причин может несколько, а виновных нет. Как известно, только у Побед много родителей, а вот Поражение всегда сирота.

Выбор конкретного подхода для разработки WEB приложения полностью зависит от руководителей проектов (конструкторов, разработчиков и т.п.), их опыта и знаний. Трудно сказать, что та или иная технология может решить все проблемы. У каждой есть определенные преимущества и недостатки.

В статье рассмотриваются различные подходы к созданию WEB приложений, их достоинства и недостатки, а также рассмотрены конкретные платформы. Использование различных подходов рассматривается с точки зрения построения сложных гетерогенных глобальных систем. Не все популярные технологии приводятся в данной статье.

Серверная часть приложения

Для различных платформ создания WEB приложений необходимо выделить два основных существующих подхода к разработке серверной части:

  1. Формирование кода в виде текста определенного формата.
  2. Встраивание кода в определенные шаблоны.

Первый подход предоставляет наибольшие возможности по повышению производительности. Он предусматривает передачу всех данных о запросе непосредственно серверу, который может как сформировать ответ со страницей для пользователя, так и открыть на передачу поток двоичных данных, например для передачи изображения. Однако при таком подходе все данные для передачи формируются программным путем, что замедляет разработку простых страниц. Примерами данног подхода являются технологии CGI, Java Servlets.

Второй подход использует оформленные особым образом шаблоны страниц, что позволяет вставлять в них участки кода. Этот подход особенно эффективен при создании WEB приложений, основная информация в которых статична, а динамическая информация может быть сгенерирована простыми программными конструкциями. При разработке больших систем этот вариант усложняет взаимодействие между компонентами и затрудняет реализацию сложной архитектуры. Также он менее эффективен по производительности и ограничивает возможности по реализации сложных страниц. Примерами данного подхода являются наиболее популярные на данный момент технологии PHP, ASP, JSP.

Наиболее важные требований, выдвигаемые при создании сложных Web систем, наличие которых делает систему привлекательной для использования:

  • платформная независимость;
  • язык реализации;
  • производительность, масштабируемость;
  • возможности расширения и интеграции;
  • простота использования, наличие средств разработки;
  • наличие необходимых программных библиотек;

Таким образом определены требования, необходимые для платформы разработки. Далее рассматриваются наиболее популярные на данный момент платформы, их особенности

Common Gateway Interface, CGI

Технология Common Gateway Interface (CGI) в отличии от остальных рассматриваемых технологий является наиболее низкоуровневой. Кроме этого данная технология является стандартом интерфейса, который служит для связи внешней программы с WEB сервером.

Протокол CGI разработан таким образом, чтобы можно было использовать любой язык программирования, который работает со стандартными устройствами ввода/вывода. Так как данная возможность присутствует на уровне операционной системы, то, если не требуется сложный скрипт, его можно оформить в виде командного файла.

Основные достоинства и недостатки технологии CGI :

CGI не налагает особых условий на платформу, поэтому работает на всех популярных платформах и WEB серверах. Также технология не привязана к конкретному языку программирования и может быть использована на любом языке, работающем со стандартными потоками ввода/вывода.

Производительность программ CGI не очень высока. Основной причиной этого является то, что при каждом обращении к серверу создается отдельный процесс, требующий большого количества системных ресурсов. Кроме этого встроенных средств масштабируемости данная технология не предусматривает, и об этом разработчик должен заботиться отдельно.

CGI программа представляет из себя готовый к исполнению файл, что препятствует легкому расширению системы.

Данные причины привели к тому, что сейчас разработке приложений в технологии CGI предпочитают более развитые платформы, предоставляющие больше удобства разработчикам и обладающие повышенной производительностью. Тем не менее знание CGI необходимо для понимания работы высокоуровневых платформ.

Java Servlets

Технология Java Servlets (сервлеты) была разработана компанией Sun Microsystems, чтобы использовать преимущества платформы Java для решения проблем технологии CGI и API расширений сервера. Технология решает проблему производительности, выполняя все запросы как потоки в одном процессе. Сервлеты не зависят от платформы поскольку выполняются внутри Java Virtual Machine (JVM), и могут легко разделять ресурсы.

Модель безопасности Java делает обеспечивает управление уровнем доступа, а обработка исключений делает сервлеты более надежным средством. Технология обладает широкими функциональными возможностями, и большое количество библиотек предоставляет самые разнообразные средства, необходимые в разработке.

Сервлет является классом Java должен быть выполнен внутри Java VM. «Контейнер» WEB приложения типа Tomcat загружает класс сервлета при первом обращении к нему, либо сразу при запуске сервера согласно настройки конфигурации. Далее сервлет остается загруженным для обработки запросов, пока он не выгружается явным образом, либо до остановки контейнера.

Технология сервлетов является распространенной и может быть использована со всеми популярными WEB серверами, выполняющими функции контейнера сервлетов (Apache Tomcat, Java Web Server от Sun).

Программный интерфейс позволяет сервлетам обрабатывать запросы на низком уровне (заголовки запросов, их тип, и т.д). Это обеспечивает большую гибкость при разработке нестандартных обработчиков, например при работе с двоичным или мультимедийным содержимым.

В связи с тем, что сервлеты обрабатываются в одном процессе с помощью создания внутри него потоков, программный код сервлетов должен быть потокобезопасным. Это накладывает определенную ответственность на программиста. При этом сервлеты приобретают такое неоценимое преимущество как масштабируемость.

Таким образом, сервлеты обеспечивают компонентный, платформонезависимый метод построения WEB приложений без ограничений производительности. Они имеют широкий диапазон доступных прикладных API, позволяют использовать все преимущества Java, легко расширяются и масштабируются, поддерживаются всеми популярными WEB серверами. Все это обеспечивает использование данной технологии для разработки крупных WEB систем.

Java Server Page, JSP

Технология Java Server Pages (JSP) от компании Sun Microsystems является надстройкой над технологией Java Servlets, обеспечивающая более быструю и простую разработку WEB приложений с помощью использования шаблонов. Для понимания архитектуры и преимуществ JSP необходимо знать технологию Java Servlets, поскольку они тесно связаны.

Страницы JSP представляют из себя шаблоны страниц, схожие с шаблонами РНР и ASP. Основным отличием от других подобных технологий является то, что код, находящийся внутри страницы, предварительно компилируется в Java Servlet. Статические участки шаблона преобразуются в вызовы к функциям для их помещения в поток вывода. Код компилируется так, как если бы он находился внутри сервлета. Компиляция JSP страниц в сервлеты проводится один раз — либо при первом обращении к странице, либо при запуске контейнера сервлетов.


Технология JSP удачно объединяет все преимущества Java платформы b шаблонный подход к построению сайтов. Благодаря этому технология получила широкое распространение как среди профессиональных коммерческих разработчиков, так и при создании открытых бесплатных проектов.

Важным шагом к расширению шаблонного подхода стали так называемые библиотеки тэгов (tag libraries). Это гибкая возможность интегрировать стандартные, сторонние, или собственные программные компоненты в страницы. Простота создания и использования привели к большой популярности библиотек тэгов.

Технология JSP не привязана к конкретной аппаратной или программной платформе благодаря работе на основе Java. То есть JSP являются отличным решением для использования в гетерогенных средах.

Производительность технологии ограничена объективными особенностями архитектуры. Во-первых, страницы должны быть откомпилированы в сервлеты, но только один раз при первом к ним обращении. Во-вторых сервлеты выполняются в JVM, т.е. в режиме интерпретации. Однако эти ограничения компенсируются дополнительными возможностями. Так современные WEB «контейнеры» поддерживают кластеризацию серверов, что перекладывает нагрузку на аппаратное обеспечение. Это является экономически оправданным и простым решением.

Основными достоинствами JSP является простота разработки, характерная для шаблонного подхода, наличие большого количества сторонних библиотек, легкость их использования, мощные и разнообразные среды разработки. Благодаря всем этим факторам JSP является наиболее перспективной базовой технологией разработки при создании Web — сайтов. Однако при создании сложных WEB систем ограничения, накладываемые шаблонным подходом становятся серьезным препятствием к развитию.

Personal Home Page, PHP

Технология Personal Home Page (PHP) получила широкое распространение благодаря поддержке самых популярных платформ своей и бесплатности. Она базируется на принципе построения страниц на основе шаблонов. Страницы РНР имеют вид обычных HTML страниц, в которые могут быть включены специальные тэги вида . Между тэгами вставляются строки программного кода на специальном языке сценариев РНР.

Основные достоинства и недостатки платформы PHP :

  • Применяемый в РНР язык прост и удобен, однако не является в полном смысле объектно-ориентированным; Для РНР существуют обширные библиотеки, а также масса встроенных функций для решения самых разнообразных задач.
  • При использовании РНР с Web сервером Apache есть возможность эффективного исполнения ядра, как расширения сервера. В остальных случаях производительность платформы невысока. Собственных средств масштабирования РНР не имеет, все возможности по кластеризации целиком ложатся на WEB сервер и разработчиков.
  • Возможности интеграции ограничены включением модулей и использованием внешних функций, что не соответствует современным требованиям.

Хранение всего кода в файлах-страницах приводит к затруднению разделения бизнес-логики и интерфейса при создании больших систем.

Тем не менее можно заключить, что, благодаря простоте использования, наличию большого числа функций и библиотек, распространенности и поддержке большинства существующих WEB серверов и платформ, РНР является очень удобным средством разработки небольших систем. В то же время ограничения по производительности, масштабируемости, языку программирования и возможностям расширения и интеграции препятствуют использованию платформы при разработке масштабных систем.

Технология Microsoft .NET и среда ASP.NET

Технология .NET является последней разработкой компании Microsoft и заявлена как новый этап в развитии средств взаимодействия между приложениями. В настоящий момент она доступна в качестве дополнения .NET Framework к семейству операционных систем Microsoft Windows. Также продолжаются работы по созданию и совершенствованию технологии .NET Framework на других операционных системах.

Основой .NET является Common Language Runtime (CLR общая среда исполнения языков), опирающаяся на системные службы операционной системы и управляющая выполнением кода, написанного на любом языке программирования. Набор базовых классов дает доступ к сервисам платформы, которые можно использовать при программировании. CLR и базовые классы вместе составляют основу .NET платформы.

NET предлагает такие высокоуровневые сервисы для разработки WEB приложений как :

  • ASP .NET — новая версия ASP, позволяющая использовать любой (.NET совместимый) язык для программирования Web страниц;
  • Windows Forms и Web Forms — набор классов для построения пользовательского интерфейса локальных и WEB-ориентированных приложений.

Важной составляющей частью платформы .NET является обновленная среда ASP.NET (ранее использовалось ASP+). В ее основе лежит новая платформа, и основными языками программирования для нее выбраны С# и Visual Basic, вместо бывших скриптовых языков. В то же время, новая технология позволяет писать ASP страницы на любом подходящем языке программирования.

В технологию ASP.NET заложено все, чтобы сделать весь цикл разработки WEB приложения более быстрым, а поддержку проще. Основные возможности ASP.NET.

  1. Компилирование кода при первом обращении.
  2. Широкий выбор библиотек компонентов, поставляемых с .NET.
  3. Поддержка среды разработки Visual Studio.NET.
  4. Языковая независимость в пределах платформ для которых реализована общая языковая среда исполнения.
  5. Возможности расширения с помощью мультипроцессорных и кластерных решений.
  6. Новые возможности по обработке ошибок.
  7. Объектно-ориентированные языки разработки (С#).

Вместе с созданием технологии ASP.NET появились новые возможности по разработке WEB систем, отвечающие всем современным требованиям и позволяющие значительно ускорить и упростить разработку сложных приложений. Однако ASP.NET сильно привязана к серверу IIS, и, хотя архитектура .NET позволяет перенести приложения ASP.NET на другую платформу, на данный момент реальная возможность отсутствует.

Таким образом, многоплатформенность пока еще не может быть удовлетворена платформой .NET. Однако необходимо отметить, что такая система должна иметь возможности интеграции с платформой .NET (особенно WEB сервисы).

Node.js

Согласно Википедии Node или Node.js — это серверная реализация языка программирования JavaScript, основанная на движке V8. Предназначена Node для создания масштабируемых распределённых сетевых приложений, таких как WEB сервер. В отличие от большинства программ с использованием JavaScript, Node.js исполняется не в браузере клиента, а на стороне сервера.

Несомненно, Node.js и JavaScript имеют существенные отличия. В первую очередь Node.js — это платформа для разработки веб приложений, а JavaScript — это язык. Опять же под JavaScript подразумевают скрипт, выполняемый на стороне клиента (в браузере), а Node.js выполняется на сервере. То есть, Node.js просто другой контекст : он позволяет запускать JavaScript-код вне браузера.

Чтобы код JavaScript выполнился вне браузера (на backend), он должен быть интерпретирован. Именно это и делает Node.js. Для этого он использует движок V8 от Google — ту же самую среду исполнения для JavaScript, которую использует браузер Google Chrome.

Основные недостатки Node.js

1. Отсутствие полноценной IDE. Существуют плагины для Eclipse и NetBeans, есть частичная поддержка и в других IDE, но назвать их полноценными решениями на данный момент нельзя. Особый интерес представляет Cloud9 IDE для разработки на JavaScript прямо в браузере. Эта IDE быстро развивается и уже активно используется многими Node.JS разработчиками.

2. Необходимость перезапуска приложения после внесения изменения. Несмотря на существование утилит, автоматизирующих данный процесс, некоторое время на это всё равно уходит. Для сравнения, при использовании шаблонного подхода для разработки интерфейса (JSP, PHP) перезапуск приложения не требуется. Но если вносятся изменения к примеру в JavaBean или servlet, то также потребуется перезапуск WEB-приложения, и происходит это намного дольше.

Контроль за уечкой памяти. С этим сталкиваются начинающие Node.JS. За памятью надо следить всегда и везде, но быстро живущие PHP-скрипты или небольшой клиентский JavaScript сильно расслабляют. В таких приложениях многие разработчики особо не предают значения потере нескольких килобайт памяти, а некоторые вообще не следят за этим показателем. Node.JS таких поблажек не делает. Приложение на Node.JS работает долго, и в случае утечки, каждый запрос к сайту будет уносить с собой кусочек памяти, которая очень быстро закончится, что приведёт к известным последствиям. Специфика JavaScript также располагает к появлению этого типа ошибок.

Возврат ошибок из асинхронного кода. Например, в PHP весь код выполняется синхронно, поэтому отловить ошибку на любом уровне вложенности можно с помощью конструкции try-catch. Но в Node.js большая часть кода работает асинхронно (операции ввода/вывода). При этом исключительные ситуации, как правило, возникают не при вызове метода, а при работе его callback’а, который выполняется уже вне конструкции try-catch. Для передачи информации об ошибках в Node.JS принято использовать первый параметр callback-функции. Т.е. если у нас возникла ошибка, мы вызываем callback-функцию либо с одним единственным параметром, описывающем её, либо первый параметр выставляем в undefined/null, а в последующих передаём результаты работы нашего функционала. В реальных приложениях вложенность вызовов может быть довольно большой и каждый раз передавать ошибку наверх очень неудобно.

Сложные математические расчёты не для Node.JS. Конечно, можно и на велосипеде привезти кирпичи для дома. Но зачем? Так и в Node.JS всё же возможно производить сложные математические расчёты, путём разбиения задачи на короткие итерации, выполняемые за несколько витков event loop, но это уже извращения и фанатизм. Гораздо проще выносить такие задачи за пределы event loop или вообще выбрать другую технологию для разработки.

Достоинства Node.js

Асинхронный ввод/вывод. Это самое значимое преимущество Node.js и оно лежит в основе данной технологии. В Node.js можно одновременно выполнять несколько операций, не зависящих друг от друга. При синхронном выполнении, например в PHP, операции будут выполняться друг за другом последовательно, каждый раз ожидая завершения предыдущей. В Node.js запросы к СУБД можно отправить «параллельно». На самом деле запросы отправляются последовательно , но Node.JS не дожидается результата работы предыдущего запроса, чтобы отправить следующий. По мере выполнения запросов, будут вызваны callback-функции для обработки их результата.

Использование асинхронного ввода/вывода к примеру в JSP потребует включение в приложение дополнительной библиотеки jQuery, которая позволяет осуществлять Ajax-запрос к серверу без перезагрузки страницы.

Один и тот же язык на сервере и на клиенте. Это позволяет повторно использовать некоторый код для валидации форм, построения шаблонов на клиенте и т.п. В целом, это очень упрощает разработку, особенно, когда клиентская часть приложения сложная и требует серьёзной работы.

Обработка http-запроса внутри себя. Это значит, что для каждого нового запроса не выполняется инициализация, как, например, на PHP. Настройки загружены, соединения с БД и с кешем открыты, код скомпилирован и готов к работе. Благодаря такой архитектуре и гибкости открывается огромный простор для различных техник оптимизации. Например, один раз разобрав шаблон, можно хранить его в виде функции, принимающей на вход данные и возвращающей готовый HTML. Или можно легко организовать локальное (для процесса) кеширование, наиболее часто используемых данных, что даст прирост в скорости работы с ними.

Разработка веб-приложений на Java. Web-разработка, создание приложений на Java

Институт переподготовки и повышения квалификации выдает нашим слушателям, успешно прошедшим интенсив StartJava и курс BaseJava с проверкой домашних заданий или стажировку TopJava и заключившим отдельный образовательный договор, Дипломы государственного образца по специальностям «Java-разработчик веб-приложений» и «Enterprise Java-разработчик»:

Результаты опроса выпускников:

Ваши вопросы

Проект BaseJava идет в индивидуальном порядке с куратором, начинается с массивов и заканчивается веб-приложением, программа ниже. Если опыта немного, начинать надо однозначно с этого курса и ОЧЕНЬ рекомендую проверку домашних заданий (практически все домашние задания — часть разрабатываемого веб-проекта). Можно увидеть именно свои ошибки в стиле, структурах данных, алгоритмах и кодировании. Это самый эффективный способ научиться программировать. Если же опыт c Java уже есть и просто хочется подтянуть некоторые темы программы, то возможно участие без проверки ДЗ.
Проект начинается не с нуля, свой уровень можно оценить по выполнению первого задания, поэтому оплачивать можно только после выполнения первого задания и получения положительного фидбэка. Это означает, что в решении могут быть ошибки и оно неоптимально, но, в целом, участник готов к занятиям по данной программе.

Если опыта в программировании немного или первое задание BaseJava показался слишком сложным, рекомендую пройти Интенсив для начинающих программистов (StartJava) с поддержкой преподавателя. Это отличный способ подготовиться к обучению на BaseJava. По АКЦИИ можно приобрести оба курса StartJava + BaseJava одновременно.

Стажировка Java Spring 5/JPA Enterprise (TopJava) стартует 30.01.2020, начинается с сервлетов и требует наличия базовых знаний Java. Группа стартует каждые 4 месяца, возможно индивидуальное обучение.
Оплату BaseJava рекомендую делать вместе со стажировкой Java Enterprise (TopJava) со скидкой

20%. Доплату за проверку ДЗ TopJava можно будет сделать в любой момент. Также скидка 20% распространяется на другие варианты одновременной оплаты участия в проектах.

Проект Многомодульный maven. Многопоточность. XML. Веб-сервисы. Удаленное взаимодействие (MasterJava) идет в индивидуальном порядке (старт в любое время). Все материалы доступны сразу после оплаты. Ее прохождение рекомендую тем, кто уже имеет опыт программирования и знаком с самым востребованным стеком Java, который проходим на TopJava.

Все опции оплаты есть в личном профиле. Зайти в него можно либо при логине через Google/ GitHub/ VK, либо по ссылке » Личный профиль » в конце письма открытого занятия

Разработка веб-приложение на java

Разработал HTTP server, который может получать и возвращать запросы (Request и Response), сервер может делать и еще дополнительные задачи.

Теперь я хочу построить веб-приложение на java и протестировать свой сервер.

Могу ли я по обычному принципу создать веб-приложение с сервлетами и WebContent-ми и вместо Tomcat или GlassFish использовать свой сервер?

1 ответ 1

Вполне. Вам достаточно создать веб-приложение и запустить его на сервере.

Про создание web-приложений можете тут почитать.

Разработка web-приложения на основе технологии Java

Содержание

Java и web-разработка [ править ]

Сбор данных для web-приложения [ править ]

Парсинг [ править ]

Парсинг – это автоматический сбор информации с какого-либо источника.

Цель парсинга – сбор данных со страниц ресурсов с дальнейшей обработкой и преобразованием.

Работа парсинга заключается в сопоставлении строки естественного языка или языка программирования с формальными правилами. Приведем пример. Представьте себя радистом на войне. Вы получаете зашифрованное сообщение. У вас есть правила дешифровки. Вы начинаете разгадывать послание согласно этому методу. Вы смотрите вначале на символ из полученного сообщения. Потом на свою таблицу с его значением. Например, цифре «1» соответствует буква «Я». Вы сопоставляете все символы и получаете то сообщение, которое можно прочитать. Парсинг работает точно так же. Есть некоторый шаблон сообщения, написанный на формальном языке. С ним сравнивается какая-то строка.

Независимо от того на каком формальном языке программирования написан парсер, алгоритм его действия остается одинаковым:

  1. Сбор информации с одного или нескольких источников. В соответствии с заданными настройками программа обходит заданные источники информации в Сети. Поскольку чаще всего этими источниками являются веб-страницы, парсер обрабатывает их исходный HTML-код.
  2. Получение и преобразование информации. Данные, которые были собраны на первом этапе, обрабатываются средствами парсера — чаще всего с использованием регулярных выражений. При необходимости на данной стадии информация может преобразовываться в нужный формат.
  3. Генерация результатов. Итоговый этап, после которого программа выдает результат в заданном виде. Данные выводятся или записываются в удобной для пользователя форме.

В интернете часто встречаются выражения, из которых следует, будто парсер (поисковый робот, бот) путешествует по Всемирной сети. Но зачастую эта программа никогда не покидает компьютера, на котором она инсталлирована. Этим парсер коренным образом отличается от компьютерного вируса – автономной программы, способной к размножению, хотя по сути своей работы он похож на троян. Ведь он получает данные, иногда конфиденциального характера, не спрашивая желания их владельца.

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

Возможностью «спарсить» чужой контент для наполнения своего сайта пользуются многие веб-мастера и администраторы сайтов. Это оправдано, если требуется часто изменять контент для представления текущих новостей или другой, быстро меняющейся информации. Парсинг – «палочка-выручалочка» для организаторов спам-рассылок по электронной почте или каналам мобильной связи. Для этого им надо запустить «бота» путешествовать по социальным сетям и собирать «телефоны, адреса, явки». Ну и хозяева некоторых, особенно недавно организованных веб-ресурсов, любят наполнить свой сайт чужим контентом. Правда, они рискуют, поскольку поисковые системы быстро находят и банят любителей копипаста.

Теперь разберемся со сложностями парсинга, а точнее с этическими и техническими сложностями. Вопрос о том, является ли парсинг воровством контента, активно обсуждается во Всемирной сети. Большинство оппонентов считают, что заимствование части контента, не являющегося интеллектуальной собственностью, например, технических описаний, допустимо. Ссылка на первоисточник контента рассматривается как способ частичной легитимации. В то же время, наглое копирование, включая грамматические ошибки, осуждается интернет-сообществом, а поисковыми системами рассматривается как повод для блокировки ресурса.

Кроме этических проблем парсер способен создать и технические. Он автомат, робот, но его вход на сайт фиксируется, а входящий и исходящий трафики учитываются. Количество подключений к веб-ресурсу в секунду устанавливает создатель программы. Делать этот параметр очень большим нельзя, поскольку сервер может не переварить потока входящего трафика. При частоте 200–250 подключений в секунду работа парсера рассматривается как аналогичная DOS-атаке. Интернет-ресурс, к которому проявлено такое внимание, блокируется до выяснения обстоятельств.

Java библиотека jsoup [ править ]

Jsoup — это библиотека Java для работы с реальным HTML. Она обеспечивает очень удобный API (программный интерфейс приложения) для извлечения и манипулирования данными. Jsoup реализует WHATWG HTML5 спецификацию, и разбирает HTML в ту же объектную модель документа, как это делают современные браузер вроде Chrome и Firefox. Вот некоторые из полезных функций Jsoup библиотеки:

  1. Jsoup может очистить и разобрать HTML из URL, файла или строки.
  2. Jsoup может найти и извлечь данные используя обход объектной модели документа или CSS селекторы.
  3. Jsoup позволяет манипулировать HTML элементами, атрибутами и текстом.
  4. Jsoup обеспечивает очистку предоставленной пользователем информации по white-list, для предотвращения XSS атак.
  5. Также Jsoup выдает «аккуратный» HTML.


Jsoup предназначен для работы с различными видами HTML существующими в реальном мире, включая должным образом подтвержденный HTML c неполным неподтвержденным набором тэгов. Одно из основных преимуществ Jsoup это его надежность.

Сервлеты [ править ]

Технология сервлетов [ править ]

Сервлет – это Java-программа, которая в качестве своего суперкласса использует класс HttpServlet. Сервлет используется для того, чтобы расширить возможности существующего сервера, в частности веб-сервера.

В начале своего развития Интернет состоял только из статического содержимого, создаваемого с помощью языка разметки гипертекста (Hypertext Markup Language, HTML). В то время любой, кто мог создать страницу HTML, считался специалистом по Интернету. Это, однако, продолжалось недолго.

Динамическое содержимое стало доступно в web благодаря технологии интерфейса общего шлюза (Common Gateway Interface, CGI). CGI позволяет web-серверу вызывать внешнюю программу и передавать ей данные запроса HTTP для его обработки. Ответ внешней программы передается затем web-cepвepy, который пересылает его клиентскому браузеру. Программы CGI могут быть написаны на любом языке, который способен вызывать web-cepвep. Со временем самым популярным языком для написания программ CGI стал Perl.

Однако по мере роста популярности Интернета число пользователей, посещающих популярные web-сайты, росло экспоненциально, и стало очевидно, что CGI неспособен обеспечить масштабируемость приложений Интернета. Недостаток CGI состоит в том, что каждый клиентский запрос заставляет web-сервер порождать новый процесс запрошенной программы CGI. Как известно, создание процесса является дорогой операцией, которой требуется много процессорных циклов и оперативной памяти.

Постепенно новые технологии заменяют технологию CGI в разработке web-приложений. Мир был свидетелем появления следующих технологий:

  • ColdFusion. Предоставляет подобные HTML пользовательские теги, которые можно применять для выполнения ряда операций, главным образом для запроса базы данных. В свое время ColdFusion была основной технологией программирования web-приложений.
  • Серверный JavaScript (SSJS). Является расширением языка JavaScript — языка сценариев, который все еще широко используется в клиентском web-программировании. Применяя технологию LiveWire компании Netscape, SSJS может обращаться к классам Java, размещенным на сервере.
  • РНР. Интересная технология с открытым исходным кодом, которая развилась за последние годы. Облегчает разработку web-приложений, предоставляя собственное управление сеансами. Содержит встроенные функции, такие как пересылка файлов. Число программистов, использующих РНР, резко выросло в последние годы.
  • Сервлеты. Технология сервлетов была предложена компанией Sun Microsystems в 1996 г.
  • Серверные страницы Java (JSP). Являются расширением технологии сервлетов.
  • Активные серверные страницы (ASP). ASP компании Microsoft используют технологии сценариев, которые работают на платформах Windows. Предпринимались попытки переноса этой технологии на другие операционные системы. Windows ASP работают с web-сервером IIS (Internet Information Server). Эта технология будет заменена активными серверными страницами .NET.
  • Активные серверные страницы .NET (ASP.NET). Эта технология является частью инициативы .NET компании Microsoft. Интересно то, что платформа. NЕТ использует среду Common Language Runtime (единая система выполнения программ), которая похожа на виртуальную машину Java и предоставляет обширную библиотеку классов, доступную всем языкам .NET и страницам ASP.NET. ASP.NET вводит несколько новых технологий, включая управление состоянием, которое не зависит от файлов cookie и перезаписи URL.

Сервлеты и JSP имеют следующие преимущества:

  • Производительность. Сервлеты превосходят CGI по производительности, поскольку отсутствует создание процесса для каждого клиентского запроса. Закончив обработку запроса, сервлет остается резидентным в памяти, ожидая другой запрос.
  • Переносимость. Аналогично другим технологиям Java сервлетные приложения являются переносимыми. Можно перемещать их в другие операционные системы без особых проблем.
  • Быстрый цикл разработки. Будучи технологией Java, сервлеты имеют доступ к богатой библиотеке Java, которая помогает ускорить процесс разработки.
  • Надежность. Сервлеты управляются виртуальной машиной Java. Поэтому не приходится беспокоиться об утечке памяти или о сборке мусора, что помогает писать надежные приложения.
  • Широкая доступность. Java — широко распространенная технология. Многочисленные поставщики разрабатывают технологии на основе Java. Одним из достоинств этого является то, что можно легко найти и купить компоненты, удовлетворяющие конкретным потребностям, что сохраняет драгоценное время разработки.

Архитектура сервлетных приложений

Сервлет является классом Java, который может быть динамически загружен и выполнен специальным web-сервером. Этот поддерживающий сервлеты web-сервер называется контейнером сервлетов (servlet container). В начальный период развития технологии сервлетов он назывался процессором сервлетов (servlet engine). Сервлеты взаимодействую с клиентами по модели запрос-ответ на базе HTTP. Поскольку технология сервлетов работает поверх HTTP, контейнер сервлетов должен поддерживать HTTP как протокол для передачи запросов клиента и ответов сервера. Однако контейнер сервлетов может поддерживать и другие протоколы, такие как HTTPS (HTTP поверх SSL) для защищенных транзакций.

Как работает сервлет

Сервлет загружается контейнером сервлетов при первом запросе сервлета. Затем сервлету передается запрос пользователя, сервлет обрабатывает его и возвращает ответ контейнеру сервлетов, который в свою очередь посылает ответ пользователю. После этого сервлет остается в памяти, ожидая другие запросы, — он не будет выгружаться из памяти, если только контейнер сервлетов не почувствует недостаток в памяти. Однако каждый раз, когда запрашивается сервлет, контейнер сервлетов сравнивает метку времени загруженного сервлета с файлом класса сервлета. Если метка времени файла класса оказывается более поздней, сервлет перезагружается в памяти. Таким образом, не требуется перезапускать контейнер сервлетов всякий раз при обновлении сервлетов.

Контейнер сервлетов Tomcat и шаги создания сервлетов [ править ]

Сегодня доступно несколько контейнеров сервлетов. Наиболее популярным и признаваемым как официальный контейнер сервлетов/JSP является Tomcat. Разработанный первоначально компанией Sun Microsystems, исходный код Tomcat был передан Apache Software Foundation в октябре 1999 г. В своем новом доме Tomcat был включен в проект Jakarta. Apache, Sun и другие компании с помощью добровольцев со всего мира превратили Tomcat в эталонную реализацию контейнера сервлетов мирового уровня. Через два месяца после передачи была выпущена версия Tomcat 3.0. Затем было несколько промежуточных версий Tomcat, и на данный момент уже существует версия 9.0.

Контейнер сервлетов 9.0 (Catalina) основывается на совершенно новой архитектуре. Он был разработан заново с целью достижения максимальной гибкости и производительности. Версия 9.0 реализует спецификации Servlet 4.0.

Tomcat сам по себе является web-сервером. Это означает, что Tomcat можно использовать для обслуживания HTTP-запросов сервлетов, а также статических файлов (HTML, файлов изображений и т. д.). На практике, однако, Tomcat обычно применяется как модуль с другим более мощным web-сервером, таким как web- сервер Apache или сервер Microsoft, поскольку это ускоряет обработку запро¬сов без сервлетов и без JSP. Только запросы сервлетов или JSP передаются Tomcat.

Чтобы написать сервлет, требуется как минимум версия 1.2 набора разра¬ботчика Java (JDK, Java Development Kit). Эталонные реализации сервлетов и JSP не включены в J2SE, но они имеются в Tomcat. Tomcat написан полностью на Java.

Шесть шагов создания сервлетов

После установки и конфигурирования Tomcat следует привести его в рабочее состояние. По сути, чтобы написать и запустить сервлет, необходимо выполнить следующие шаги:

  1. Создать в Tomcat структуру каталогов для приложения
  2. Написать исходный код сервлета. Необходимо импортировать в свой файл исходного кода пакеты javax.servlet и javax.servlet.http.
  3. Откомпилировать исходный код.
  4. Создать дескриптор развертывания.
  5. Запустить Tomcat.
  6. Вызвать сервлет в web-браузере.

Жизненный цикл сервлетов [ править ]

Сервлеты разрабатываются с помощью пакета javax.servlet, который содержит семь интерфейсов, три класса и два исключения.

Пакет содержит семь интерфейсов:

  1. Request Dispatcher
  2. Servlet
  3. ServletConfig
  4. ServletContext
  5. ServletRequest
  6. ServletResponse
  7. SingleThreadModel
  1. GenericServlet
  2. ServletInputStream
  3. ServletOutputStream

И классы исключений:

  1. ServletException
  2. Unavailable Exception

Жизненный цикл сервлетов

Интерфейс Servlet в пакете javax.servlet является основой программирования сервлетов. Servlet — центральная абстракция технологии сервлетов Java. Каждый создаваемый сервлет должен явно или неявно реализовать интерфейс javax.servlet.Servlet. Жизненный цикл сервлета определяется тремя его методами: init, service и destroy.

Метод init вызывается контейнером сервлетов после создания экземпляра класса сервлета. Контейнер сервлетов вызывает этот метод только один раз для указания сервлету, что сервлет включается в работу. Метод init должен быть успешно выполнен, прежде чем сервлет сможет получить какие-либо запросы.

Можно переопределить этот метод для записи кода инициализации, который необходимо выполнить только один раз, такой как загрузка драйвера базы данных, инициализация значений и т.д. В других случаях этот метод обычно оставляют пустым.

Метод имеет следующую сигнатуру:

public void init(ServletConfig config) throws ServletException

Метод init является важным также потому, что контейнер сервлетов передает объект ServletConfig, который содержит конфигурационные значения, объявленные в файле web.xml для этого приложения.

Этот метод может порождать исключение ServletException. Контейнер сервлетов не может запустить сервлет в работу, если метод init порождает исключение ServletException или метод не возвращает управление в течение периода времени, определенного web-сервером.

Метод service вызывается контейнером сервлетов после метода init, чтобы позволить сервлету ответить на запрос.

Сервлеты обычно выполняются внутри многопоточных контейнеров сервлетов, которые могут обрабатывать множество запросов одновременно. Поэтому необходимо помнить о синхронизации доступа к любым общим ресурсам, таким как файлы, сетевые соединения и переменные класса и экземпляра сервлета. Например, если открыть файл и выполнить запись в этот файл в сервлете, то нужно учитывать, что другой поток того же сервлета может открыть тот же файл.

Метод имеет следующую сигнатуру:

public void service (ServletRequest request, ServletResponse response) throws ServletException, java. io. IOException

Контейнер сервлетов передает объекты ServletRequest и ServletResponse. Объект ServletRequest содержит запрос клиента, а объект ServletResponse содержит ответ сервлета. Эти два объекта позволяют писать код, который определяет, как сервлет обслуживает клиентский запрос.

Метод service генерирует исключение ServletException, если возникает исключение, которое влияет на нормальную работу сервлета. Метод service может также порождать исключение java.io. IOException, если во время выполнения метода возникает исключительная ситуация при вводе или выводе.

Метод service предназначен для того, чтобы можно было написать код, который заставляет сервлет функционировать требуемым образом.

Контейнер сервлетов вызывает метод destroy перед удалением экземпляра сервлета из службы. Это обычно происходит, когда контейнер сервлетов выключается или контейнеру сервлетов требуется дополнительная свободная память.

Этот метод вызывается только после того, как все потоки выполнения в методе service сервлета заканчиваются, или после того, как завершится период ожидания. После вызова метода destroy контейнер сервлетов не будет снова вызывать метод service этого сервлета.

Метод destroy дает сервлету возможность очистить все использовавшиеся ресурсы (например: память, дескрипторы файлов, потоки выполнения), и гарантирует, что любое устойчивое состояние синхронизировано с текущим состоянием сервлета в памяти.

Сигнатура этого метода:

public void destroy()

Демонстрация жизненного цикла сервлетов

При первом вызове сервлета на консоль выводятся следующие две строки:

Это говорит, что был вызван метод init, а затем метод service. Однако при последующих запросах вызывается только метод service. Сервлет выводит на консоль строку:

Это доказывает, что метод init вызывается только один раз.

Что делают в листинге getServletlnfo и getServletConfig? Ничего. В классе PrimitiveServlet они присутствуют лишь с целью удовлетворения спецификации, согласно которой класс должен предоставить реализации для всех методов в интерфейсе, который он реализует.

В методе getServletlnfo можно вернуть любую строку, например название компании, имя автора или другую необходимую информацию. Кто-то из про¬граммистов может расширить ваш класс сервлета, и он захочет узнать, какую полезную информацию предоставляет создатель сервлета.

Запросы и ответы [ править ]

Запросы и ответы составляют суть web-приложения. В сервлетном приложении пользователь с помощью web-браузера посылает запрос контейнеру сервлетов, а контейнер сервлетов передает запрос сервлету.

В сервлетной парадигме запрос пользователя представляется объектом ServletRequest, пересылаемым контейнером сервлетов в качестве первого аргумента метода service. Вторым аргументом метода service является объект ServletResponse, который представляет ответ пользователю.

Интерфейс ServletRequest определяет объект, используемый для инкапсуляции информации о запросе пользователя, включая пары имя/значение параметров, атрибуты и входной поток.

Интерфейс ServletRequest предоставляет важные методы, которые обеспечивают доступ к информации о пользователе. Например, метод getParameterNames возвращает Enumeration, содержащее имена параметров текущего запроса. Для получения значения каждого параметра служит метод getParameter интерфейса ServletRequest.

Методы getRemoteAddress и getRemoteHost можно применять для извлечения идентификационных данных компьютера пользователя. Первый метод возвращает строку, представляющую IP-адрес компьютера, который используется клиентом. Второй метод возвращает строку, содержащую квалифицированное имя хоста компьютера.

Листинги ниже демонстрируют объект ServletRequest в действии. Пример состоит из сервлета с именем RequestDemoServlet и формы HTML, содержащейся в файле indех.html, который необходимо поместить в каталог приложения.

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

После отправки формы на экране должен появиться список имен атрибутов и значений.

Интерфейс ServletResponse представляет ответ пользователю. Наиболее важным методом этого интерфейса является getWriter. Он позволяет получить объект java.io.PrintWriter, который можно применять для записи тегов HTML и другого текста для пользователя.

Листинги представляют файл HTML с именем index.html и сервлет, метод service которого переопределяется кодом, который выводит некоторые теги HTML пользователю. Этот сервлет является модификацией примера в предыдущих листингах, извлекающего различную информацию о пользователе. Вместо вывода информации на консоль, метод service посылает ее назад пользователю.

Запустите приложение, в форме введите любое значение в качестве значения автора.

Класс HttpServlet [ править ]

Выше говорилось о том, как создавать сервлеты, выполнять их с помощью пакета javax.servlet. Однако при программировании сервлетов обычно работают с пакетом javax.servlet.http. Классы и интерфейсы этого пакета являются производными от классов и интерфейсов пакета javax.servlet. Члены javax.servlet.http богаче и удобнее в использовании. В этом пакете класс HttpServlet, представляющий сервлет, расширяет javax.servlet.GenericServIet и вносит большое число соб¬ственных методов. Пакет javax.servlet.http имеет интерфейсы HttpServletRequest и HttpServletResponse, которые эквивалентны интерфейсам javax.servlet.Request и javax.servlet. Response соответственно. HttpServletResponse расширяет интер¬фейс javax.servlet.ServletResponse, a HttpServlet Request является производным от и нтерфейса javax.servlet.Servlet Response.

Имеются дополнительные классы, которые недоступны в пакете javax.servlet. Например, можно использовать класс с именем Cookie (это небольшие текстовые файлы, в которые браузер записывает данные с посещенных вами сайтов) для работы с файлами cookie. Кроме того, класс HttpServlet предоставляет методы для работы с сеан¬сами пользователей.

Теперь рассмотрим класс HttpServlet, который обычно расширяется при разработке сервлетов.

Класс HttpServlet расширяет класс javax.servlet.GenericServlet. Класс HttpSenvlet добавляет ряд интересных методов. Наиболее важными являются шесть методов doxxx. Это методы doPost, doPut, doGet, doDelete, doOptions и doTrace. Каждый из них вызывается при использовании соответствующего метода запроса HTTP. Например, метод doGet вызывается, когда сервлет получает запрос HTTP, который был послан с помощью метода GET.


Из шести методов doxxx наиболее часто используются методы doPost и doGet. Метод doPost вызывается, когда браузер посылает запрос HTTP с помощью метода POST. Метод POST может использоваться формой HTML. Рассмотрим следующую форму HTML на клиентской стороне:

Когда пользователь нажимает кнопку Submit, чтобы отправить форму, бра¬узер посылает серверу запрос HTTP с помощью метода POST. Web-сервер пе¬редает этот запрос сервлету Register, и вызывается метод cepвлета doPost. Пара имя/значение параметра формы посылается в теле запроса. Например, если в приведенной выше форме ввести Ann в качестве значения firstName и Go в качестве значения lastName, то в теле запроса будет содержаться:

Форма HTML может также использовать метод GET; однако POST приме¬няется с формами HTML значительно чаще.

Метод doGet вызывается, когда запрос HTTP посылается с помощью мето¬да GET. GET является методом, используемым в HTTP по умолчанию. При вводе URL, например www.yahoo.com, запрос посылается на Yahoo! с помо¬щью метода GET. Если метод GET применяется в форме, пара имя/значение параметра добавляется к URL. Поэтому, если в форме имеются два параметра с именами firstName и lastName и пользователь вводит Ann и Go соответствен¬но, то U RL сервлета будет таким:

При получении метода GET сервлет вызовет свой метод doGet.

Интерфейс HttpServletRequest имеет метод с именем getMethod, который возвращает String, содержащую метод HTTP, используемый клиентским запросом. Зная метод HTTP, метод service вызывает соответствующий метод doxxx.

Сервлет в листинге ниже применяет методы doGet и doPost.

Когда сервлет вызывается в первый раз из web-браузера путем ввода URL cepвлета в поле Address или Location, в качестве метода запроса используется GET. На серверной стороне вызывается метод doGet. Сервлет посылает строку «The servlet has received a GET. Now, click the button below». («Сервлет получил GET. Теперь нажмите кнопку, расположенную ниже».) плюс форму HTML.

Посылаемая браузеру форма применяет метод POST. Когда пользователь нажимает кнопку, чтобы отправить форму, серверу передается запрос POST. Сервлет вызывает метод doPost, посылая браузеру String, содержащую «The servlet has received a POST. Thank you» («Сервлет получил POST Спасибо»).

Интерфейс HttpServerRequest [ править ]

Помимо нескольких специфических для протокола методов, содержащихся в классе HttpServlet, пакетjavax.servlet.http предоставляет также развитые интер¬фейсы запроса и ответа: HttpServletRequest и HttpServletResponse. Сегодня мы познакомимся с интерфейсом запроса HttpServletRequest с помощью ряда примеров.

Получение заголовков запроса HTTP из HttpServletRequest

Запрос HTTP, который браузер клиента посылает серверу, включает в себя заголовок запроса HTTP с важной информацией, такой как cookie и referer. Доступ к заголовкам можно получить с помощью объекта HttpServletRequest, передаваемого методу doxxx.

Следующий пример демонстрирует, как можно использовать интерфейс HttpServletRequest для получения всех имен заголовков и для отправки пар имя/ значение заголовков в браузер.

RegisterServlet в листинге использует методы getHeaderNames и getHeader. Сначала вызывается getHeaderNames для получения Enumeration, содержащего все имена заголовков, находящиеся в клиентском запросе. Значение каждого заголовка извлекается с помощью метода getHeader, которому передается имя заголовка.

Выходные данные кода зависят от клиентского окружения, в частности от используемого браузера и операционной системы клиентской машины. Например, некоторые браузеры могут посылать серверу файлы cookie. На наличие заголовка referer запроса HTTP влияет то, как пользователь запрашивает сервлет: вводит URL в поле Address/Location или щелкает мышью на гиперссылке.

Получение строки запроса из HttpServletRequest Следующим важным методом является getQueryString, который использу¬ется для извлечения строки запроса HTTP. Строка запроса размещается в U RL справа от пути доступа к сер влету.

Если в форме HTML используется метод GET, то пара имя/значение пара¬метра добавляется к URL. Код в следующем листинге является сервлетом с именем HttpRequestDemoServlet, который выводит на экран значение строки запроса и форму.

Когда пользователь вводит URL сервлета в веб-браузере и сервлет вызывается в первый раз, строка запроса содержит null.

После ввода каких-то значений в форму HTML и отправки формы страница выводится заново (см. рис. ниже). Обратите внимание, что теперь имеется добавленная к URL строка. Строка запроса содержит пары имя/значение параметров, разделенные знаком амперсанда (&).

Получение параметров из HttpServletRequest

Выше было показано, как получить строку запроса, содержащую значение. Следовательно, можно получить пары имя/значение параметров формы или другие значения предыдущей страницы. Однако применение метода getQueryString для получения пар имя/значение параметров формы нежелательно, так как в этом случае придется самостоятельно выполнять анализ стро¬ки. Можно использовать другие методы HttpServletRequest для получения имен и значений параметров: методы getParameterNames и getParameter.

Метод getParameterNames возвращает Enumeration, содержащее имена па¬раметров. Однако во многих случаях имена параметров уже известны, и этот метод использовать не нужно. Для получения значения параметра служит ме¬тод getParameter, принимающий имя параметра в качестве аргумента. Следующий пример демонстрирует, как можно использовать методы getParameterNames и getParameter для вывода всех имен и значений парамет¬ров формы HTML c предыдущей страницы.

При первом вызове сервлет не имеет никаких параметров предыдущего зап¬роса, поэтому не выводится никаких пар имя/значение:

При последующих запросах пользователь должен ввести значения обоих параметров: firstName и lastName:

Обработка многозадачных параметров Нередко требуется использовать в форме параметры с одинаковыми именами, например, в случае применения элементов управления флажком, которые могут принимать несколько значений, или при наличии элемента управления HTML с множественным выбором. В подобных ситуациях нельзя использовать метод getParameter, так как он будет выдавать только первое значение. Вместо этого применяется метод getParameterValues.

Метод getParameterValues имеет один аргумент: имя параметра. Он возвращает массив строк, содержащий все значения этого параметра. Если параметр с данным именем не найден, метод getParameterValues вернет null.

В следующем примере используется метод getParameterValues для получения всех любимых музыкальных жанров, выбранных пользователем. Код этого сервлета показан в листинге ниже.

При первом вызове сервлета вызывается метод doGet, который посылает форму. Форма имеет четыре элемента управления флажком с одним именем: favoriteMusic. Однако значения флажков различны.

Когда пользователь устанавливает флажки, браузер посылает все выбранные значения. На серверной стороне используется метод getParameterValues для извлечения значений, посланных в запросе.

Интерфейс HttpServerResponse [ править ]

Интерфейс HttpServletResponse предоставляет несколько зависящих от протокола методов, недоступных в интерфейсе javax.servlet.ServletResponse. Интер¬фейс HttpServletResponse расширяет интерфейс javax.servlet.Servlet Response. В примерах, на прошлом уроке, использовались два метода HttpServletResponse при отправке выходных данных в браузер: setContentType и getWriter.

Имеются и другие методы. Метод addCookie посылает браузеру cookie. Для обработки URL, посылаемых браузеру, также используются специальные методы.

Еще одним интересным методом интерфейса HttpServletResponse является метод sendHeader. Он позволяет добавить поле имя/значение в заголовок ответа.

Можно также использовать метод sendRedirect для перенаправления пользователя на другую страницу. Когда вызывается этот метод, web-cepвер посылает специальное сообщение браузеру для запроса другой страницы. Поэтому всегда осуществляется взаимодействие с клиентской стороной, прежде чем извлекается другая страница. Этот метод применяется в следующем примере.

Следующий листинг показывает страницу Login, которая предлагает пользователю ввести имя пользователя и пароль. Если оба значения правильны, пользователь перенаправляется на страницу Welcome. В противном случае пользователь увидит ту же самую страницу Login.

При первом вызове сервлета вызывается метод doGet. Метод doGet выводит форму. Пользователь может ввести имя пользователя и пароль и отправить форму. Отметим, что форма применяет метод POST, что означает, что на серверной стороне вызывается метод doPost и имя пользователя, и пароль сравниваются с предопределенными значениями. Если имя и пароль совпадают, пользователь перенаправляется на страницу Welcome. В противном случае метод doPost снова выводит форму Login вместе с сообщением об ошибке.

В коде листинга присутствует закрытый (private) метод с именем sendLoginForm, который получает объект HttpServletResponse и логическое значение, указывающее, будет ли вместе с формой посылаться сообщение об ошибке. Метод sendLoginForm вызывается из методов doGet и doPost. Когда он вызывается из метода doGet, сообщение об ошибке не задается, так как это первый запрос страницы пользователем. Поэтому флаг withErrorMessge установлен в false. При вызове из метода doPost флаг принимает значение true, по¬скольку метод send Login Form вызывается из метода doPost только в том случае, если имя пользователя и пароль не соответствуют заданным.

Отправка специальных символов [ править ]

Несколько символов имеют в HTML специальное назначение. Например, сим¬вол «меньше» ( ) является закрывающим символом тега HTML.

При отправке этих символов для отображения в браузере необходимо зако¬дировать их, чтобы они выводились правильно. Например, рассмотрим код листинга ниже. Метод doGet из SpecialCharacterServlet предназначен для отправки строки, которая будет выводиться браузером как следующий текст:

Однако этот код создает проблему.

Поскольку означает в HTML перевод строки, текст выводится неправильно. интерпретируется как команда разбиения исходной строки на две, и выходные данные выводятся в двух строках. Если требуется вывести на экран специальный символ, его необходимо закодировать. Символ «меньше» ( ) как «&gt». Другими специальными символами являются амперсанд (&) и двойная кавычка («). Амперсанд (&) заменяется кодом «&аmp;», а двойная кавычка («) — «&quоt;». Кроме того, два и более пробелов всегда выводятся как один пробел, если не преобразовать каждый отдельный пробел в «&nbsр;».

Преобразование каждого вхождения специального символа является скучной работой. Имеется функция, которая делает это автоматически. Она называется encodeHtmlTag. Если строка String, посылаемая браузеру, содержит специальный символ, передайте ее на преобразование функции encodeHtmlTag.

Следующий листинг демонстрирует сервлет, который использует метод encodeHtmlTag для кодирования любой строки String со специальными символами:

Отправка кода ошибки

HttpServletResponse позволяет также посылать предопределенные сообщения об ошибках. Интерфейс определяет ряд public static final целых чисел, которые начинаются с SC_. Например, SC_FORBIDDEN будет транслироваться в НТТР-ошибку 403.

Вместе с кодом ошибки можно послать индивидуальное сообщение об ошибке. При неудачной регистрации, вместо повторного вывода на экран страницы Login, можно послать НТТР-ошибку 403 и сообщение:

Технология JavaServer Pages [ править ]

JavaServer Pages [ править ]

Серверные страницы Java (JavaServer Pages, JSP) представляют собой еще одну технологию Java для разработки web-приложений. JSP были выпущены в то время, когда технология сервлетов завоевала популярность как одна из лучших доступных web-технологий. Однако JSP не заменяют сервлеты. Фактически JSP являются расширением технологии сервлетов, и общая практика состоит в использовании сервлетов и страниц JSP в одном web-приложении.

Создание JSP является настолько простым, что можно писать приложения JSP, не имея больших знаний о базовом API. Однако высококлассный web-программист Java обязан знать как JSP, так и сервлеты. Даже если применяются только страницы JSP в web-приложениях Java, понимание технологии сервлетов по-прежнему очень важно. JSP используют те же методы, что применяются при программировании сервлетов. Например, в JSP работают с запросами HTTP и ответами HTTP, с параметрами запроса, атрибутами запроса, со средством управления сеансом, cookie, перезаписью URL и т.д.

История Java-программирования на стороне сервера началась с сервлетов. Компания Sun представила сервлеты в 1996 г. как небольшие приложения на основе Java для добавления динамического содержимого в web-приложения. С ростом популярности Java сервлеты стали одной из самых распространенных технологий Интернета. Однако программисты сервлетов знают, сколь обременительным является программирование с помощью сервлетов, особенно, когда необходимо послать длинную страницу HTML, которая содержит мало кода. Рассмотрим в качестве примера листинг ниже. Этот код является фрагментом приложения на основе сервлетов, который выводит имена и значения всех параметров в запросе HTTP.

Почти половина содержимого, посланного методом doPost, является статическим HTML. Однако каждый тег HTML должен быть помещен в String и передан с помощью метода println объекта PrintWriter. Это скучная работа. Хуже того, страница HTML может быть значительно больше.

Другим недостатком использования сервлетов является то, что любое изменение будет требовать вмешательства программиста сервлета. Даже незначительная графическая модификация, например изменение значения атрибута BGCOLOR тега с #DADADA на #FFFFFF, потребует работы программиста (который в этом случае будет действовать под управлением более сведущего в графике web-дизайнера).

Компания Sun увидела эту проблему и вскоре разработала ее решение. Результатом явилась технология JSP. Согласно web-сайту Sun, «технология JSP является расширением технологии сервлетов, созданным для поддержки разработки страниц HTML и XML». Применение JSP значительно облегчает комбинирование фиксированных или статических шаблонных данных с динамическим содержимым.

JSP исправляет недостатки технологии сервлетов, например, позволяя программисту вставлять в код статическое содержимое. При работе с шаблоном страницы HTML, написанным дизайнером Web, программист может добавить код на страницу HTML и сохранить ее как файл .jsp. Если впоследствии дизайнеру Web понадобится изменить цвет фона тела HTML, он сможет сделать это без привлечения программиста, открыв файл .jsp и отредактировав его.

Можно видеть, что теги не затрагиваются. Чтобы добавить динамическое содержимое, нужно лишь поместить код между тегами .

Еще раз подчеркнем, что JSP не являются заменой сервлетов. Скорее, технология JSP и сервлеты совместно предоставляют привлекательное решение для программирования и создания сценариев Web, предлагая независимость от платформы, улучшенную производительность, разделение логики и представления, легкость администрирования, расширяемость на уровень предприятия и, самое важное, легкость в использовании.

Создание первой серверной страницы. Принцип работы JSP [ править ]

Сегодня мы напишем простую страницу JSP и выполним ее. Для выполнения приложений JSP используем Tomcat 8. Если Tomcat 8 установлен и сконфигурирован для сервлетных приложений, то больше ничего делать не надо.

JSP существенно упрощает работу с сервлетами. Для выполнения своей страницы JSP необходимо только сконфигурировать контейнер JSP (Tomcat) и написать страницу JSP. Конфигурирование выполняется лишь однажды в самом начале. Не требуется никакой компиляции.

Создание файла JSP

В NetBeans файл создается следующим образом, в созданном веб-проекте кликните правой кнопкой мыши на папку каталога «веб-страницы» → новый → JSP.

Страница JSP содержит вперемешку теги HTML и код Java. Теги HTML выполняют задачу представления, а код создает содержимое. В своей наиболее простой форме страница JSP может включать в себя только HTML, как показано в листинге ниже:

Конечно, код в листингe выше не является полезным, но он иллюстрирует тот факт, что страница JSP вовсе не обязана иметь код. Если страница статичес¬кая, нет необходимости помещать ее в файл JSP, так как файлы JSP обрабаты¬ваются медленнее, чем файлы HTML. Использовать файл JSP для тегов HTML можно в том случае, если предполагается добавить в него в будущем код Java. Это избавит от проблемы изменения ссылок на эту страницу.

При помещении кода Java в файл JSP код вставляется между тегами . Например, листинг ниже является примером соединения кода Java и HTML в файле JSP.

Как мы видим код листинга использует код Java для отправки текста. Функции out.println служит для отправки String web-браузеру.

Другой пример представлен в листинге ниже. Этот фрагмент кода выводит строку «Добро пожаловать. Время сервера:» и время сервера:

Принцип работы JSP

Внутри контейнера JSP имеется специальный сервлет, называемый компиля¬тором страниц. Контейнер сервлетов сконфигурирован для переадресации этому компилятору всех запросов HTTP с URL, которые соответствуют фай¬ловому расширению .jsp. Компилятор страниц превращает контейнер сервле¬тов в контейнер JSP. Если страница .jsp вызывается в первый раз, компилятор страниц производит синтаксический разбор и компилирует страницу .jsp в класс сервлета. Если компиляция успешна, класс сервлета jsp загружается в память. При последующих вызовах класс сервлета для этой страницы .jsp уже находится в памяти; однако он может обновляться. Поэтому сервлет компи¬ляции страниц всегда будет сравнивать отметки времени сервлета jsp и стра¬ницы jsp. Если страница .jsp имеет более позднюю отметку времени, то требует¬ся перекомпиляция. При таком процессе после развертывания страницы JSP компилируются только один раз.

Можно предположить, что после развертывания первый запрос пользовате¬лем страницы .jsp будет обрабатываться медленно, поскольку необходимо вре¬мя на компиляцию файла .jsp в сервлет jsp. Во избежание этого механизм JSP позволяет предварительно откомпилировать страницы .jsp до получения како¬го-либо запроса. Либо можно развернуть приложение JSP как архивный файл в форме компилированного сервлета.

Скриплеты. Директивы [ править ]

Внешний признак скриптлета — обрамляющие скриптлет символы . Мы уже встречались с JSP-вставками в HTML-файл, когда на предыдущем уроке при помощи символов осуществляет вставку выражения в поток HTML-кода. Не всегда, оказывается, удобно вставлять Java-выражения в HTML-текст. Для создания блоков программ Java в HTML-странице удобно пользоваться скриптлетами. Скриптлет сам по себе не должен генерировать HTML-код, хотя, конечно, он может это делать.

Скриптлет — это кусок Java-программы, встроенной в HTML-страницу. Создадим JSP файл и вставим в него скриптлет, который будет выводить некоторый текст:

Скриплеты и HTML

В предыдущем примере мы использовали метод «out» для того, чтобы выводить HTML-текст. При программировании JSP вряд ли всегда будет удобно выводить HTML-текст средствами потока вывода «out». Допустим, нам нужно вывести результат поиска по базе данных. Это удобно сделать в виде HTML-таблицы. Для этого вовсе не обязательно использовать out. Более удобное решение показано в следующем листинге:

Директивы JSP используются для вставки существующих фрагментов кода в текущий текст, они напоминают директивы препроцессора. Директивы помещаются между знаками, . Мы уже использовали директивы в предыдущих примерах:

Кроме вставки уже существующих фрагментов кола директивы могут быть использованы для импортирования файлов:

Декларации в JSP

В JSP существует специальный ярлык, внутри которого описываются новые типы данных. Объявления типов и описания методов производятся между знаками . Например, описание методов может быть следующим:

Обработка форм с использованием компонента Beans [ править ]

Компоненты JavaBean – это многократно используемые классы Java, позволяющие разработчикам существенно ускорять процесс разработкии WEB-приложений путем их сборки из программных компонентов. JavaBeans и другие компонентные технологии привели к появлению нового типа программирования – сборки приложений из компонентов, при котором разработчик должен знать только сервисы компонентов; детали реализации компонентов не играют никакой роли.

JavaBean – это одноуровневые объекты, использующиеся для того, чтобы инкапсулировать в одном объекте код, данные или и то, и другое. Компонент JavaBean может иметь свойства, методы и события, открытые для удаленного доступа.

Требования к проектированию компонентов JavaBeans

Требования к проектированию компонентов JavaBeans определяют свойства класса и методы public, дающие доступ к свойствам. Свойство компонента JavaBeans может быть:

  1. для чтения/записи, только для чтения, только для записи
  2. простым (содержащим одно значение) или индексным (представляющим массив значений)

Не существует требования, чтобы свойство реализовывалось переменной экземпляра. Свойство просто должно быть доступно через методы public, следующие определенным правилам:

  1. Для каждого читаемого свойства компонент должен иметь метод в виде PropertyClass getProperty()
  2. Для каждого записываемого свойства компонент должен иметь метод в виде setProperty(PropertyClass pc)

Кроме методов свойств компонент JavaBeans должен определить конструктор без параметров.

Методы getters setters

Компонент JavaBean должен удовлетворять определенным соглашениям о наименовании методов и экспортируемых событий. Одним из важных понятий технологии JavaBeans является внешний интерфейс properties (свойства). Property JavaBean – это методы getters и setters, обеспечивающие доступ к информации о внутреннем состоянии компонента JavaBean. Для обращения к компонентам JavaBeans на странице JSP необходимо использовать следующее описание тега в разделе head :

Идентификатор Bean , т.е. текущая страница JSP.

Обязательный атрибут класса компонента «class» может быть описан следующим способом:

Свойства JavaBean — jsp:setProperty jsp:getProperty

Свойство JavaBean компонента устанавливается тегом jsp:setProperty. Пример :

Для чтения свойства компонента JavaBean с именем myBean используется тег jsp:getProperty :

Рассмотрим простой пример, в котором на странице JSP будет выведено приветствие и введённые данные пользователя в HTML форму. Первым делом создаем HTML форму и записываем файл как «index.jsp»

В форме задали три имени для различных элементов: name, lastname, age. Создаем класс NameHandler:

В этом классе описаны get и set для каждого элемента формы на основе имени этого элемента.

Запускаем приложение, вводим форму необходимые данные нажимаем кнопку «ок».

Мастер Йода рекомендует:  Регистрация доменных имен своими руками. Часть 1 немного теории.
Добавить комментарий