Поиск по сайту:

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


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

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

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

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

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

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

HTML и HTTP

Веб-сервер и веб-клиент — это два отдельных программного обеспечения, поэтому должен быть какой-то общий язык для общения. HTML является общим языком между сервером и клиентом и расшифровывается как язык гипертекстовой разметки. Веб-серверу и клиенту нужен общий протокол связи, HTTP (протокол передачи гипертекста) — это протокол связи между сервером и клиентом. 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 — это аббревиатура от Universal Resource Locator, которая используется для поиска сервера и ресурса. Каждый ресурс в сети имеет свой уникальный адрес. Давайте рассмотрим части URL-адреса на примере. виртуальный хост веб-сервера позаботится об отправке запроса на конкретный экземпляр сервера. 8080 — это порт, на котором сервер прослушивает, это необязательно, и если мы не укажем его в URL-адресе, запрос будет отправлен на порт протокола по умолчанию. Номера портов от 0 до 1023 зарезервированы для известных служб, например, 80 для HTTP, 443 для HTTPS, 21 для FTP и т. д. FirstServletProject/jsps/hello.jsp — ресурс, запрошенный с сервера. Это может быть статический html, pdf, JSP, сервлеты, PHP и т.д.

Зачем нам нужны Servlet и JSP?

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

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

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

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="<html><body>";
	public static final String HTML_END="</body></html>";
       
    /**
     * @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 + "<h2>Hi There!</h2><br/><h3>Date="+date +"</h3>"+HTML_END);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}
<%@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>

Скачать проект FirstServlet

Скачать пример проекта сервлета Hello World

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

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

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

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

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

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

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