Веб-сервер Apache Tomcat 6

Содержание

Слайд 2

Содержание лекции

Ключевые вопросы организации веб-сервера
Понятие веб-сервера и его функции
Протокол HTTP
Аутентификация и авторизация

Содержание лекции Ключевые вопросы организации веб-сервера Понятие веб-сервера и его функции Протокол
пользователей
Управление сессиями и Cookies
Постоянное HTTP-соединение
Веб-сервер Apache Tomcat 6
Структура каталогов сервера
Структура J2EE веб-приложения
Введение в сервлеты
Основные классы Servlet API
Использование Comet Servlet
JSP – Java Server Pages
Конфигурация веб-приложения для Tomcat
Дескриптор контекста веб-приложения
Дескриптор развёртывания веб-приложения

Слайд 3

1.1 Понятие веб-сервера и его функции

Веб-сервер – это программное обеспечение, обеспечивающее доставку

1.1 Понятие веб-сервера и его функции Веб-сервер – это программное обеспечение, обеспечивающее
контента конечному пользователю по сети.
Веб-сервер реализует серверную часть протокола HTTP.

Слайд 4

Функции и особенности веб-серверов:
передача контента пользователю;
получение контента от пользователей;
поддержка динамически генерируемых страниц;
аутентификация

Функции и особенности веб-серверов: передача контента пользователю; получение контента от пользователей; поддержка
и авторизация пользователей;
ведение журнала обращений пользователей к ресурсам;
поддержка HTTPS для защищённых соединений с клиентами.

Слайд 5

Реализации веб-серверов:
исторически первым считается веб-сервер CERN httpd (1991 год)
java:
Apache Tomcat
Jetty
другие:
Apache
IIS
Nginx
Lighttpd

Реализации веб-серверов: исторически первым считается веб-сервер CERN httpd (1991 год) java: Apache

Слайд 6

1.2 Протокол HTTP

HyperText Transfer Protocol - текстовый протокол передачи данных прикладного уровня
Текущая

1.2 Протокол HTTP HyperText Transfer Protocol - текстовый протокол передачи данных прикладного
версия – 1.1. Принята в 1999 году. В этой версии добавлен режим «постоянного соединения» с сервером.

Слайд 7

HTTP-пакет состоит из:
Стартовая строка
GET /page.php HTTP/1.1 – запрос
HTTP/1.1 404 Not Found

HTTP-пакет состоит из: Стартовая строка GET /page.php HTTP/1.1 – запрос HTTP/1.1 404
– ответ
Заголовки - разделённые двоеточием пары параметр-значение
Content-Type: text/plain; charset=utf8
Тело сообщения – любой текст, в том числе закодированный или сжатый
HTTP-методы:
HEAD, GET, OPTIONS, TRACE - безопасные
POST, PUT, DELETE - небезопасные

Слайд 9

1. 3 Аутентификация и авторизация пользователей

Basic access authentication - логин и пароль

1. 3 Аутентификация и авторизация пользователей Basic access authentication - логин и
кодируются с помощью Base64, поддерживается всеми браузерами
Digest access authentication - логин и пароль шифруются алгоритмом MD5
При доступе к защищённому контенту клиент получает ответ:
HTTP/1.1 401 Authorization Required
WWW-Authenticate: Basic realm="Secure Area"
либо
WWW-Authenticate: Digest realm="[email protected]", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093"
Авторизация не поддерживается протоколом HTTP и полностью возлагается на веб-сервер

Слайд 10

1. 4 Управление сессиями и Cookies

Веб-приложению бывает необходимо контролировать передвижения клиентов по

1. 4 Управление сессиями и Cookies Веб-приложению бывает необходимо контролировать передвижения клиентов
сайту. HTTP не отслеживает состояние своих клиентов (stateless протокол). Возможные решения данной проблемы:
Добавление параметра session_id в URL:
функции по контролю времени жизни сессии возлагаются на веб-сервер
сессия не сохраняется после перезапуска браузера
Хранение session_id в cookies браузера. Cookies – небольшой фрагмент данных, созданный веб-сервером и хранимый на компьютере пользователя в виде файла, который браузер может пересылать веб-серверу в HTTP-запросе:
функции по контролю времени жизни сессии возлагаются на браузер
сессия сохраняется после перезапуска браузера

Слайд 11

1.5 Постоянное HTTP-соединение

Протокол HTTP поддерживает возможность отправки нескольких запросов веб-серверу сразу, не

1.5 Постоянное HTTP-соединение Протокол HTTP поддерживает возможность отправки нескольких запросов веб-серверу сразу,
создавая при этом новых TCP-соединений.
Для этого в первом запросе в заголовке передаётся параметр Connection: Keep-Alive.
По умолчанию все соединения являются постоянными.

Слайд 12

Преимущества постоянного соединения:
меньшая нагрузка на память, сеть и процессор, т.к. создаётся меньше

Преимущества постоянного соединения: меньшая нагрузка на память, сеть и процессор, т.к. создаётся
TCP-соединений
возможность отправки сразу нескольких запросов, не дожидаясь ответов (http-pipeline)
возможность ожидания ответа в течении длительного промежутка времени (server-push)

Слайд 13

2. Apache Tomcat 6

Apache Tomcat 6 является одним из наиболее популярных Web-серверов,

2. Apache Tomcat 6 Apache Tomcat 6 является одним из наиболее популярных
реализующих спецификацию JEE 5 (Java Enterprise Edition). Он бесплатно распространяется для коммерческого и некоммерческого использования под лицензией Apache Software License с открытыми исходными кодами.
Сам продукт, документацию и исходные коды можно найти на http://tomcat.apache.org.

Слайд 14

Web Connector Coyote, реализующий протокол HTTP/1.1, с помощью которого пользователь, используя Интернет-браузер,

Web Connector Coyote, реализующий протокол HTTP/1.1, с помощью которого пользователь, используя Интернет-браузер,
может отправлять запросы к серверу и получать ответ.
2. Web Container Catalina реализует спецификацию Servlet API 2.5 из JEE 5. Servlet API является основой для всех остальных технологий Java касающихся Web и дает возможность динамически генерировать любой Web-контент, используя любые библиотеки, доступные для java.
3. Jasper Compiler – компилятор JSP-страниц (поддерживает спецификацию JSP 2.1). JSP страница является наиболее популярным (но не единственным) средством создания динамически-генерируемых HTML, XML и других документов, имеющих текстовое представление.

Apache Tomcat состоит из следующих компонентов:

Слайд 15

2.1 Структура каталогов сервера

/bin/ - скрипты запуска, остановки и пр.
/startup.bat (startup.sh)

2.1 Структура каталогов сервера /bin/ - скрипты запуска, остановки и пр. /startup.bat
– запуск
/shutdown.bat (shutdown.sh) – остановка
/catalina.bat (catalina.sh) – скрипт запуска и настройки параметров (вызывается из startup.bat)
/conf/ - конфигурационные файлы
/server.xml – основной конфигурационный файл, тут задаются порты, коннекторы и пр.
/web.xml – включается во все web.xml файлы приложений по-умолчанию
/lib – библиотеки сервера, все библиотеки из этой папки доступны всем приложениям. Сюда необходимо положить JDBC-драйвер, если приложение использует БД
/log – логи (протоколы) сервера. Используются для статистики, диагностики и отладки
/temp – папка для временных файлов сервера и приложений
/webapps – папка для приложений. Все, что здесь лежит будет развернуто и запущено при старте сервера, а так же во время его работы (hot-deploy)
/ROOT – специальное имя для корневого контекста. Приложение в этой папке будет привязано к контексту “/”, т.е. доступно через http://localhost:8080/
/docs, examples, host-manager, manager, ROOT – примеры приложений, документация и административная консоль, входящие в поставку сервера. Их можно без ущерба удалить.
/work – рабочая папка сервера. Сюда будут складываться скомпилированные на лету JSP файлы, сериализованные сессии пользователей (чтобы рестарт сервера не выкинул пользователей из системы) и пр. Содержимое можно (и, иногда, нужно) без ущерба удалять.

Слайд 16

2.2 Структура J2EE веб-приложения

2.2 Структура J2EE веб-приложения

Слайд 17

2.3 Введение в сервлеты

Сервлет – Java-класс, наследуемый от javax.servlet.http.HttpServlet:
doGet(), обработка http-метода GET
doPost(),

2.3 Введение в сервлеты Сервлет – Java-класс, наследуемый от javax.servlet.http.HttpServlet: doGet(), обработка
обработка http-метода POST
doPut(), обработка http-метода PUT
doDelete(), обработка http-метода DELETE
init() and destroy(), управление жизненным циклом сервлета
getServletInfo(), возвращает описание сервлета

Слайд 18

Жизненный цикл сервлета состоит из следующих шагов:
В случае отсутствия сервлета в контейнере.

Жизненный цикл сервлета состоит из следующих шагов: В случае отсутствия сервлета в

Класс сервлета загружается контейнером.
Контейнер создает экземпляр класса сервлета.
Контейнер вызывает метод init(). Этот метод инициализирует сервлет и вызывается в первую очередь, до того, как сервлет сможет обслуживать запросы. За весь жизненный цикл метод init() вызывается только однажды.
Обслуживание клиентского запроса. Каждый запрос обрабатывается в своем отдельном потоке. Контейнер вызывает метод service() для каждого запроса. Этот метод определяет тип пришедшего запроса и распределяет его в соответствующий этому типу метод для обработки запроса. Разработчик сервлета должен предоставить реализацию для этих методов. Если поступил запрос, метод для которого не реализован, вызывается метод родительского класса и обычно завершается возвращением ошибки инициатору запроса.
В случае если контейнеру необходимо удалить сервлет, он вызывает метод destroy(), который снимает сервлет из эксплуатации. Подобно методу init(), этот метод тоже вызывается единожды за весь цикл сервлета.

Слайд 19

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

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

Слайд 20

Пример сервлета:
public class SimpleServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest

Пример сервлета: public class SimpleServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest
request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("Заголовок

Пример сервлета

");
out.println("");
} finally {
out.close();
}
}
@Override
public String getServletInfo() {
return "Пример сервлета";
}
}

Слайд 21

2.4 Основные классы Servlet API (javax.servlet.http.*)

HttpServletRequest – класс, экземпляры кот. представляют запрос

2.4 Основные классы Servlet API (javax.servlet.http.*) HttpServletRequest – класс, экземпляры кот. представляют
от браузера
String getContextPath() – возвращает путь к контексту приложения
String getServletPath() – URL вызванного сервлета (JSP)
HttpSession getSession() – Сессия пользователя
Object getAttribute() / void setAttribute(String name, Object value) – Хранение пользовательских атрибутов, связанных с запросом
String getParameter(String value) – Параметр запроса (и для GET и для POST)
void setCharacterEncoding(String enc) – Кодировка значений параметров запроса (windows-1251, UTF-8)
HttpServletResponse – класс, экземпляры кот. представляют ответ браузеру
void setContentType(String contentType) – MIME-тип ответа браузеру
java.io.PrintWriter getWriter() – поток вывода для ответа браузеру
void sendRedirect(String location) – перенаправление на другую страницу
HttpSession – класс, экземпляры кот. хранят состояние сессии клиента
Object getAttribute() / void setAttribute(String key, Object value) – Атрибуты сессии (сохраняются между запросами одного клиента)
HttpServletContext – класс, экземпляры кот. представляют все web-приложение
Object getAttribute() / void setAttribute(String key, Object value) – Атрибуты контекста (общие для всех пользователей и запросов к web-приложению)

Слайд 22

2.5 Использование Comet Servlet

Comet - модель работы веб-приложения, при которой постоянное HTTP-соединение

2.5 Использование Comet Servlet Comet - модель работы веб-приложения, при которой постоянное
позволяет веб-серверу отправлять (push) данные браузеру, без дополнительного запроса со стороны браузера.
Примеры: различные чаты, vkontate.ru, GWT-декларант

Слайд 23

Сравнение классического подхода к построению веб-приложений с Comet

Классический подход

Comet подход (он же

Сравнение классического подхода к построению веб-приложений с Comet Классический подход Comet подход
long polling)

Streaming (он же server-push)

Слайд 24

Для использования Comet сервлет должен реализовать интерфейс org.apache.catalina.CometProcessor
с единственным методом event(CometEvent event),

Для использования Comet сервлет должен реализовать интерфейс org.apache.catalina.CometProcessor с единственным методом event(CometEvent
вызываемым при поступлении следующих событий:
EventType.BEGIN – при создании соединения с веб-сервером
EventType.READ – при получении данных для сервлета
EventType.END – при завершении соединения с веб-сервером
EventType.ERROR – при возникновении ошибки

Слайд 25

Клиентский код для соединения с Comet сервлетом:

Слайд 26

Клиентский код для соединения с Streaming сервлетом:
На страницу вставляется скрытый iframe, загружающий

Клиентский код для соединения с Streaming сервлетом: На страницу вставляется скрытый iframe,
данные с Streaming сервлета
Данные от сервера должны поступать в виде кусков javascript:

Соединение не будет закрываться до тех пор, пока не закроется браузер.

Слайд 27

2.6 JSP – Java Server Pages

Жизненный цикл

1. Жизненный цикл класса страницы

2.

2.6 JSP – Java Server Pages Жизненный цикл 1. Жизненный цикл класса
Жизненный цикл объекта страницы

Слайд 28

import java.util.*;
public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase
{
// Объявляется поле в классе страницы
int

import java.util.*; public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase { // Объявляется поле
my_integer_field = 777;
// Объявляется метод в классе страницы
private String make_greeting(String name) {
return "Hello, "+name + "!";
}
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
PageContext pageContext = null;
HttpSession session = null;
JspWriter out = null;
Object page = this;
response.setContentType("text/html; charset=UTF-8");
session = pageContext.getSession();
out = pageContext.getOut();
out.write("\n");
out.write("\n");
out.write("\tSample Hello world page\n");
out.write("\n");
out.write("\r\n");
// Скриптлет 1
for (int i=0; i<10; i++) {
out.write("\r\n");
out.write("

");
out.print( /* Вывод в поток out */ make_greeting("World "+i) );
out.write("

\r\n");
// Скриптлет 2
} // Конец цикла
out.write("\n");
out.write("\n");
out.write("");
}
}

<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ page import="java.util.*" %>
<%!
// Объявляется поле в классе страницы
int my_integer_field = 777;
// Объявляется метод в классе страницы
private String make_greeting(String name) {
return "Hello, "+name + "!";
}
%>


Sample Hello world page


<% // Скриптлет 1
for (int i=0; i<10; i++) {
%>


<%=
/* Вывод в поток out */
make_greeting("World "+i)
%>


<% // Скриптлет 2
} // Конец цикла
%>


Слайд 29

3. Конфигурация веб-приложения

Глобальные файлы конфигурации:
Конфигурационный файл сервера conf/server.xml
Дескриптор развёртывания web-приложения по-умолчанию conf/web.xml
Относящиеся

3. Конфигурация веб-приложения Глобальные файлы конфигурации: Конфигурационный файл сервера conf/server.xml Дескриптор развёртывания
к конкретному приложению:
Дескриптор контекста web-приложения META-INF/context.xml
Дескриптор развёртывания web-приложения WEB-INF/web.xml

Слайд 30

3.1 Дескриптор контекста web-приложения context.xml

Контекст web-приложения – это совокупность следующих параметров URL:
Виртуальное

3.1 Дескриптор контекста web-приложения context.xml Контекст web-приложения – это совокупность следующих параметров
имя хоста (www.mysite.com)
Относительный путь к web-приложению (/myapplication)
Таким образом, при запросе от клиента страницы по адресу http://www.mysite.com/myapplication/page.jsp веб-сервер отправит запрос на обработку нужному сервлету, описанному в файле web.xml приложения myapplication

Слайд 31







… … … … Resource – подключение ресурсов, например, исчтоников данных (БД)
className="com.mycompany.mypackage.MyListener" />

Resource – подключение ресурсов, например, исчтоников данных (БД)
Valve – подключение фильтров, например, блокирование запросов по IP-адресу
Manager – использовать собственный менеджер сессий
Realm – подключение источника данных, хранящий логины и пароли пользователей для их аутентификации в приложении
Listener – отслеживание жизненного цикла контекста

Слайд 32

Настройка источника данных (подключение к БД):
Файл /META-INF/context.xml

контекст web-приложения - префикс всех URL для данного приложения -->


  driverClassName="oracle.jdbc.driver.OracleDriver
maxActive="20" maxIdle="10" maxWait="-1" name="jdbc/sample"
url="jdbc:oracle:thin:@:1521:spm" username="o50" password="o50" />

Использование DataSource:
// Создаем начальный контекст JNDI (Java Naming Directory)
InitialContext ctx = new InitialContext();
// Достаем из контекста источник данных
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/sample");
// Получаем соединение с БД из источника данных
return ds.getConnection();

Слайд 33

3.2 Дескриптор развёртывания web-приложения web.xml

Веб-приложения Java используют файл дескриптора развертывания для определения

3.2 Дескриптор развёртывания web-приложения web.xml Веб-приложения Java используют файл дескриптора развертывания для
способа сопоставления URL с сервлетами, URL, для которых необходима аутентификация, и других сведений. Этот файл называется web.xml и находится в каталоге WEB-INF/web.xml и является частью стандарта Servlet для веб-приложений.

Слайд 34

Сервлеты и пути URL

SendEmailService
mycompany. SendEmailServlet


AbcServlet
mycompany.AbcServlet


SendEmailService
/SendEmail


AbcServlet

Сервлеты и пути URL SendEmailService mycompany. SendEmailServlet AbcServlet mycompany.AbcServlet SendEmailService /SendEmail AbcServlet /*.abc
/*.abc

Слайд 35

Безопасность и аутентификация


SecurePages
/admin/*
GET
POST


Only authenticated users may pass

Безопасность и аутентификация SecurePages /admin/* GET POST Only authenticated users may pass
admin



Administrator role
admin


BASIC
MySite Admin Security Check

Слайд 36

Список приветственных файлов

index.jsp
index.html

Обработчики ошибок

500
/errors/servererror.jsp

Кодировка и локаль

Список приветственных файлов index.jsp index.html Обработчики ошибок 500 /errors/servererror.jsp Кодировка и локаль

ru
UTF-8


Время жизни сессии

30

Слайд 37

Контрольные вопросы

Из каких частей состоит HTTP-пакет?
Что такое Cookies? Как реализовано управление сессией

Контрольные вопросы Из каких частей состоит HTTP-пакет? Что такое Cookies? Как реализовано
с помощью Cookies?
Из каких основных компонентов состоит Apache Tomcat?
Что такое сервлет? Что такое Comet-сервлет?
Перечислите файлы конфигурации веб-приложения. Какие параметры в них можно задавать?

Слайд 38

Практика

Написать веб-приложение, которое по GET-запросу http://localhost:8082/app/sum?a=3&b=4 выводит на страницу сумму a и

Практика Написать веб-приложение, которое по GET-запросу http://localhost:8082/app/sum?a=3&b=4 выводит на страницу сумму a
b.

Создать сервлет SumServlet.
В нём переопределить метод doGet(). Используя метод getParameter() объекта request получить значения a и b
Используя объект response вывести результат на страницу:
PrintWriter out = response.getWriter();
try {
out.println(…);
} finally {
out.close();
}
4. Прописать созданный сервлет в дескрипторе развёртывания web.xml:

SumServlet
mycompany.SumServlet


SumService
/sum

Имя файла: Веб-сервер-Apache-Tomcat-6.pptx
Количество просмотров: 240
Количество скачиваний: 2