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

Java Web Application используется для создания динамических веб-сайтов. Java предоставляет поддержку для веб-приложений с использованием Servlets и JSPs. Мы можем создать веб-сайт с помощью статических HTML-страниц, но когда нам нужна динамичная информация, нам необходимо использовать веб-приложение.

Java Web Application

Целью этой статьи является предоставление основных сведений о различных компонентах веб-приложения и тому, как мы можем использовать Servlet и JSP для создания нашего первого веб-приложения на Java.

  1. Веб-сервер и клиент
  2. HTML и HTTP
  3. Понимание URL
  4. Почему нам нужны Servlet и JSP?
  5. Первое веб-приложение с использованием Servlet и JSP
  6. Веб-контейнер
  7. Структура каталогов веб-приложения
  8. Файл развертывания

Веб-сервер и клиент

Веб-сервер – это програмное обеспечение, которое может обрабатывать запросы клиента и отправлять ответ обратно клиенту. Например, Apache является одним из самых широко используемых веб-серверов. Веб-сервер работает на физической машине и слушает запросы клиентов на определенном порту. Веб-клиент – это программа, которая помогает в общении с сервером. Некоторые из самых широко используемых веб-клиентов – Firefox, Google Chrome, Safari и т. д. Когда мы запрашиваем что-то с сервера (через URL), веб-клиент берет на себя создание запроса, отправку его на сервер, затем разбор ответа сервера и представление его пользователю.

HTML и HTTP

Веб-сервер и веб-клиент – два отдельных программных обеспечения, поэтому должен существовать общий язык для общения. HTML – это общий язык между сервером и клиентом и означает HyperText Markup Language. Веб-серверу и клиенту нужен общий протокол обмена данными, HTTP (HyperText Transfer Protocol) – это протокол обмена данными между сервером и клиентом. HTTP работает поверх протокола передачи данных TCP/IP. Некоторые важные части HTTP-запроса:

  • Метод HTTP – действие, которое должно быть выполнено, обычно GET, POST, PUT и т. д.
  • URL – страница для доступа
  • Параметры формы – аналогичны аргументам в методе Java, например, данные пользователя и пароля со страницы входа.

Пример HTTP-запроса:

GET /FirstServletProject/jsps/hello.jsp HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache

Некоторые из важных частей HTTP-ответа:

  • Код состояния – целое число, указывающее, был ли запрос успешен или нет. Некоторые из хорошо известных кодов состояния: 200 для успеха, 404 для “Не найдено” и 403 для “Доступ запрещен”.
  • Тип содержимого – текст, html, изображение, pdf и т. д. Также известен как MIME-тип
  • Содержимое – фактические данные, которые отображаются клиентом и показываются пользователю.

Пример HTTP-ответа:

200 OK
Date: Wed, 07 Aug 2013 19:55:50 GMT
Server: Apache-Coyote/1.1
Content-Length: 309
Content-Type: text/html;charset=US-ASCII

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=Wed Aug 07 12:57:55 PDT 2013
</h3>
</body>
</html>

MIME-тип или тип содержимого: Если вы видите заголовок HTTP-ответа выше, он содержит тег “Content-Type”. Его также называют MIME-типом, и сервер отправляет его клиенту, чтобы сообщить им, какие данные он отправляет. Это помогает клиенту отображать данные для пользователя. Некоторые из наиболее используемых типов MIME: text/html, text/xml, application/xml и т. д.

Понимание URL

URL – это аббревиатура от Универсальный указатель ресурса, и он используется для определения сервера и ресурса. Каждый ресурс в сети имеет собственный уникальный адрес. Давайте рассмотрим части URL на примере. https://localhost:8080/FirstServletProject/jsps/hello.jsp https:// – Это первая часть URL и предоставляет протокол связи, который будет использоваться в общении между сервером и клиентом. localhost – Уникальный адрес сервера, чаще всего это имя хоста сервера, которое отображается на уникальный IP-адрес. Иногда несколько имен хостов указывают на один и тот же IP-адрес, и виртуальный хост веб-сервера заботится о направлении запроса к конкретному экземпляру сервера. 8080 – Это порт, на котором сервер ожидает соединения, он необязателен, и если мы не указываем его в URL, то запрос отправляется на порт по умолчанию протокола. Порты с номерами от 0 до 1023 зарезервированы для известных служб, например, 80 для HTTP, 443 для HTTPS, 21 для FTP и т. д. FirstServletProject/jsps/hello.jsp – Ресурс, запрашиваемый у сервера. Это может быть статический HTML, PDF, JSP, сервлеты, PHP и т. д.

Зачем нам нужны сервлеты и JSP?

Веб-серверы хорошо подходят для статических HTML-страниц, но они не умеют генерировать динамический контент или сохранять данные в базы данных. Поэтому нам нужен еще один инструмент, который мы можем использовать для создания динамического контента. Существует несколько языков программирования для динамического контента, таких как PHP, Python, Ruby on Rails, Java Servlets и JSPs. Java Servlet и JSP – это технологии на стороне сервера, которые расширяют возможности веб-серверов, предоставляя поддержку для динамических ответов и сохранения данных.

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

Первое веб-приложение с использованием Servlet и JSP

Мы будем использовать “Eclipse IDE для разработчиков Java EE” для создания нашего первого сервлетного приложения. Поскольку сервлет – это технология на стороне сервера, нам понадобится веб-контейнер, который поддерживает технологию Servlet, поэтому мы будем использовать сервер Apache Tomcat. Он очень легко настроить, и я оставляю эту часть вам. Для удобства разработки мы можем настроить Tomcat с помощью Eclipse, это помогает легко развертывать и запускать приложения. Перейдите в настройки Eclipse и выберите среду выполнения сервера, а затем выберите версию вашего сервера Tomcat, мой – Tomcat 7. Укажите местоположение каталога Apache Tomcat и информацию о JRE, чтобы добавить среду выполнения. Теперь перейдите в вид серверов и создайте новый сервер, указав на добавленную ранее среду выполнения, как показано на изображении ниже. Примечание: Если вкладка Серверы не видна, выберите Окно > Показать вид > Серверы, чтобы она стала видимой в окне Eclipse. Попробуйте остановить и запустить сервер, чтобы убедиться, что он работает нормально. Если вы уже запустили сервер из терминала, вам придется остановить его из терминала и затем запустить из Eclipse, иначе это не будет работать идеально. Теперь мы готовы с настройкой создать первый сервлет и запустить его на сервере Tomcat. Выберите Файл > Новый > Динамический веб-проект и используйте нижеприведенное изображение, чтобы указать среду выполнения как сервер, добавленный на последнем этапе, и версию модуля как 3.0, чтобы создать наш сервлет с использованием спецификаций Servlet 3.0. Вы можете нажать кнопку “Готово” для создания проекта, либо нажать на кнопки “Далее”, чтобы проверить другие варианты. Теперь выберите Файл > Новый > Сервлет и используйте нижеприведенное изображение, чтобы создать наш первый сервлет. Снова мы можем нажать “Готово” или проверить другие варианты через кнопку “Далее”. Когда мы нажимаем кнопку “Готово”, генерируется наша каркасная код сервлета, поэтому нам не нужно вводить все различные методы и импорты в сервлете, что экономит нам время. Теперь мы добавим некоторый HTML с кодом динамических данных в методе doGet(), который будет вызван для HTTP GET-запроса. Наш первый сервлет выглядит примерно так.

package com.journaldev.first;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class FirstServlet
 */
@WebServlet(description = "My First Servlet", urlPatterns = { "/FirstServlet" , "/FirstServlet.do"}, initParams = {@WebInitParam(name="id",value="1"),@WebInitParam(name="name",value="pankaj")})
public class FirstServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	public static final String HTML_START="";
	public static final String HTML_END="";
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FirstServlet() {
        super();
        // TODO Автоматически сгенерированный конструктор
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		Date date = new Date();
		out.println(HTML_START + "

Hi There!


Date="+date +"

"+HTML_END); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Автоматически сгенерированный метод } }

До Servlet 3 нам нужно было предоставлять информацию о шаблоне URL в файле описания развёртывания веб-приложения, но в Servlet 3.0 используются аннотации java, что делает код более понятным и уменьшает вероятность ошибок. Теперь выберите Run > Run on Server из окна редактора сервлетов и используйте нижеуказанные изображения для опций. После завершения процесса загрузки браузер откроется в Eclipse, и мы получим следующую HTML-страницу. Вы можете обновить ее, чтобы проверить, что дата динамична и постоянно меняется. Вы также можете открыть ее в любом другом браузере вне Eclipse. Таким образом, сервлет используется для генерации HTML и отправки его в ответ. Если рассмотреть реализацию метода doGet(), можно увидеть, что мы фактически создаем HTML-документ, записывая его в объект PrintWriter и добавляя динамическую информацию там, где это необходимо. Это хорошо для начала, но если ответ большой с большим количеством динамических данных, это подвержено ошибкам и сложно читать и поддерживать. Вот основная причина введения JSP. JSP также является технологией на стороне сервера и похожа на HTML с дополнительными возможностями добавления динамического контента там, где это необходимо. JSP подходит для представления, потому что его легко написать, так как он похож на HTML. Вот наша первая программа JSP, которая делает то же самое, что и вышеописанный сервлет.

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=<%= new Date() %>
</h3>
</body>
</html>

Если мы запустим вышеуказанный JSP, мы получим вывод, подобный изображению ниже. Конечная иерархия проекта выглядит так, как на изображении ниже в Eclipse.

Загрузить проект FirstServlet

Загрузить пример проекта Servlet Hello World

Мы рассмотрим Servlets и JSPs более подробно в будущих сообщениях, но прежде чем завершить это сообщение, мы должны хорошо понимать некоторые аспекты веб-приложений на Java.

Веб-контейнер

Tomcat – это веб-контейнер. Когда клиент делает запрос на веб-сервер, он передает запрос контейнеру, и задача контейнера – найти правильный ресурс для обработки запроса (сервлет или JSP), а затем использовать ответ от ресурса для создания ответа и передачи его веб-серверу. Затем веб-сервер отправляет ответ обратно клиенту. Когда веб-контейнер получает запрос, и если это запрос для сервлета, то контейнер создает два объекта HTTPServletRequest и HTTPServletResponse. Затем он находит правильный сервлет на основе URL и создает поток для запроса. Затем он вызывает метод service() сервлета и на основе метода HTTP service() вызывает методы doGet() или doPost(). Методы сервлета генерируют динамическую страницу и записывают ее в ответ. После завершения потока сервлета контейнер преобразует ответ в HTTP-ответ и отправляет его обратно клиенту. Некоторые важные работы, выполняемые веб-контейнером, включают:

  • Поддержка коммуникации – Контейнер предоставляет простой способ коммуникации между веб-сервером и сервлетами, а также JSP. Благодаря контейнеру нам не нужно создавать серверный сокет для прослушивания запросов от веб-сервера, разбирать запрос и генерировать ответ. Все эти важные и сложные задачи выполняются контейнером, и все, что нам нужно сделать, – это сосредоточиться на нашей бизнес-логике для наших приложений.
  • Управление жизненным циклом и ресурсами – Контейнер заботится о управлении жизненным циклом сервлета. Контейнер заботится о загрузке сервлетов в память, инициализации сервлетов, вызове методов сервлетов и их уничтожении. Контейнер также предоставляет утилиты, такие как JNDI для пула ресурсов и их управления.
  • Поддержка многопоточности – Контейнер создает новый поток для каждого запроса к сервлету, и когда он обрабатывается, поток умирает. Таким образом, сервлеты не инициализируются для каждого запроса и экономят время и память.
  • Поддержка JSP – JSP не выглядят как обычные java классы, и веб-контейнер предоставляет поддержку для JSP. Каждый JSP в приложении компилируется контейнером и преобразуется в сервлет, после чего контейнер управляет ими как другими сервлетами.
  • Разнообразные задачи – Веб-контейнер управляет пулом ресурсов, проводит оптимизацию памяти, запускает сборщик мусора, предоставляет конфигурации безопасности, поддержку для множества приложений, горячую установку и несколько других задач за кулисами, которые упрощают нашу жизнь.

Структура каталогов веб-приложений

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

Дескриптор развёртывания

Файл web.xml является дескриптором развёртывания веб-приложения и содержит отображение для сервлетов (до версии 3.0), страниц приветствия, конфигурации безопасности, настройки времени ожидания сеанса и др. Это все для руководства по запуску веб-приложения на Java. Мы рассмотрим сервлеты и JSP более подробно в будущих сообщениях. Обновление: Следующий урок в этой серии – Учебник по Java Servlets

Source:
https://www.digitalocean.com/community/tutorials/java-web-application-tutorial-for-beginners