Рубрики
Без рубрики

Учебник по веб-приложениям Java для начинающих

Учебник по разработке веб-приложений Java для начинающих. Начните с веб-разработки Java в Eclipse, создав примеры проектов и загрузив их для игры.

Автор оригинала: Pankaj Kumar.

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

Веб-приложение Java

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

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

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

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

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

HTML и HTTP

Веб-сервер и веб-клиент-это два отдельных программного обеспечения, поэтому должен быть какой-то общий язык для общения. HTML является общим языком между сервером и клиентом и расшифровывается как H yper T ext M arkup L anguage.

Веб-серверу и клиенту необходим общий протокол связи, HTTP ( H yper T ext T ransfer P rotocol) – это протокол связи между сервером и клиентом. 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






Hello


Hi There!


Date=Wed Aug 07 12:57:55 PDT 2013

Тип MIME или Тип содержимого : Если вы видите выше пример заголовка HTTP-ответа, он содержит тег “Тип содержимого”. Это также называется типом MIME, и сервер отправляет его клиенту, чтобы сообщить ему, какие данные он отправляет. Это помогает клиенту в визуализации данных для пользователя. Некоторые из наиболее часто используемых типов mime-это текст/html, текст/xml, приложение/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/jsp/hello.jsp – Ресурс, запрошенный у сервера. Это может быть статический html, pdf, JSP, сервлеты, PHP и т.д.

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

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

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

Веб-разработка на Java

Первое веб-приложение с сервлетом и JSP

Мы будем использовать “Eclipse IDE для разработчиков Java EE” для создания вашего первого приложения-сервлета. Поскольку сервлет-это технология на стороне сервера, нам понадобится веб-контейнер, поддерживающий технологию сервлетов, поэтому мы будем использовать сервер Apache Tomcat. Это очень легко настроить, и я оставляю эту часть на ваше усмотрение.

Для простоты разработки мы можем добавить настройку Tomcat с помощью Eclipse, это помогает в простом развертывании и запуске приложений.

Перейдите в настройки Eclipse и выберите Среды выполнения сервера и выберите версию вашего сервера tomcat, мой-Tomcat 7.

Укажите расположение каталога apache tomcat и информацию о JR для добавления среды выполнения.

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

Примечание : Если вкладка Серверы не отображается, вы можете выбрать Окно > Показать вид > Серверы, чтобы она была видна в окне Eclipse. Попробуйте остановить и запустить сервер, чтобы убедиться, что он работает нормально. Если вы уже запустили сервер с терминала, то вам придется остановить его с терминала, а затем запустить его с Eclipse, иначе он не будет работать идеально.

Теперь мы готовы с нашей настройкой создать первый сервлет и запустить его на сервере tomcat.

Выберите Файл > Создать > Динамический веб-проект и используйте изображение ниже, чтобы обеспечить время выполнения в качестве сервера, который мы добавили на последнем шаге, и версию модуля как 3.0 для создания нашего сервлета с использованием спецификаций сервлета 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 Auto-generated constructor stub
    }

	/**
	 * @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 Auto-generated method stub } }

Перед сервлетом 3 нам необходимо предоставить информацию о шаблоне URL-адреса в дескрипторе развертывания веб-приложения, но сервлет 3.0 использует аннотации java, которые легко понять, и вероятность ошибок меньше.

Теперь выберите “Выполнить” > “Запустить на сервере” в окне редактора сервлетов и используйте для параметров изображения ниже.

После нажатия кнопки Готово браузер откроется в Eclipse, и мы получим следующую HTML-страницу.

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

Таким образом, сервлет используется для генерации HTML и отправки его в ответ, если вы посмотрите на реализацию doGet (), мы фактически создаем HTML-документ, записывая его в объект response PrintWriter, и мы добавляем динамическую информацию там, где она нам нужна.

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

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

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>





Hello


Hi There!


Date=<%= new Date() %>

Если мы запустим выше JSP, мы получим вывод, как показано на рисунке ниже.

Окончательная иерархия проекта выглядит так, как показано на рисунке ниже в Eclipse.

Скачать Первый Проект Сервлета

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

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

Tomcat-это веб-контейнер, когда запрос поступает от клиента к веб-серверу, он передает запрос в веб-контейнер, и задача веб-контейнера-найти правильный ресурс для обработки запроса (сервлет или JSP), а затем использовать ответ от ресурса для генерации ответа и предоставления его веб-серверу. Затем веб-сервер отправляет ответ обратно клиенту.

Когда веб-контейнер получает запрос и если он предназначен для сервлета, контейнер создает два объекта HttpServletRequest и HttpServletResponse. Затем он находит правильный сервлет на основе URL-адреса и создает поток для запроса. Затем он вызывает метод servlet service() и на основе метода HTTP-метода service() вызывает методы doGet() или doPost (). Методы сервлета генерируют динамическую страницу и записывают ее в ответ. Как только поток сервлета завершен, контейнер преобразует ответ в HTTP-ответ и отправляет его обратно клиенту.

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

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

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

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

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

web.xml файл является дескриптором развертывания веб-приложения и содержит сопоставление для сервлетов (до версии 3.0), страниц приветствия, конфигураций безопасности, параметров тайм-аута сеанса и т.д.

Это все для руководства по запуску веб-приложений Java, мы подробнее рассмотрим сервлеты и JSP в будущих публикациях.

Обновление : Следующий учебник в этой серии – Учебник по сервлетам Java