Понятие Web-компонента

Содержание

Слайд 2

Понятие Web-компонента Согласно спецификации J2EE Web-компонентами являются Сервлеты Фильтры Слушатели событий

Понятие Web-компонента
Согласно спецификации J2EE Web-компонентами являются
Сервлеты
Фильтры
Слушатели событий
JSP-страницы,
которые могут отвечать на HTTP-запросы

Web-клиентов.
Управление работой web-компонентов возлагается на Web-контейнер
Слайд 3

Понятие Web-контейнера Web-контейнер –стандартизованный компонент, который занимается системной поддержкой Web-компонентов и

Понятие Web-контейнера

Web-контейнер –стандартизованный компонент, который занимается системной поддержкой Web-компонентов и обеспечивает

их жизненный цикл в соответствии с правилами, определенными в спецификациях
Функции Web-контейнера
Управление жизненным циклом компонентов
Перенаправление запросов
Управление конкурентным доступом
Управление безопасностью
Слайд 4

Понятие сервлета Сервлет - это самостоятельный Web-компонент, который, согласно спецификации J2EE,

Понятие сервлета
Сервлет - это самостоятельный Web-компонент, который, согласно спецификации J2EE, функционирует

под управлением Web-контейнера.
Сервлет в ответ на полученный от клиента запрос динамически генерирует HTML-страницу, или другой документ.
Сервлеты являются компонентами, работающими на стороне сервера и предоставляющими мощный механизм для разработки серверных программ.
Слайд 5

Сервлет с точки зрения Java Все сервлеты реализуют общий интерфейс Servlet

Сервлет с точки зрения Java

Все сервлеты реализуют общий интерфейс Servlet из

пакета javax.servlet. Для обработки HTTP-запросов можно воспользоваться в качестве базового класса абстрактным классом HttpServlet из пакета javax.servlet.http.
Для этого подключим зависимости в Maven.

javax.servlet
javax.servlet-api
3.0.1

Слайд 6

Функции сервлетов Чтение данных, переданных пользователем Например, из HTML-форм Просмотр информации

Функции сервлетов

Чтение данных, переданных пользователем
Например, из HTML-форм
Просмотр информации о запросе,

которая встроена в HTTP-запрос
Сведения о возможностях браузера, cookies, имени хоста клиента, делающего запрос, и т.д.
Обращение к компонентам бизнес-логики и получение результатов
Генерация ответа
Возможность генерации бинарных данных
Установка параметров HTTP-ответа
Возвращение ответа клиенту
Слайд 7

Жизненный цикл сервлета Жизненный цикл сервлета управляется контейнером, в котором сервлет

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

Жизненный цикл сервлета управляется контейнером, в котором сервлет был

развернут.
Когда запрос отображается на сервлет, контейнер выполняет следующие шаги:
Если экземпляр сервлета не существует, Web-контейнер
Загружает класс сервлета
Создает экземпляр класса сервлета
Инициализирует экземпляр сервлета, вызывая метод init()
После этого сервлет можно считать запущенным, он находится в ожидании запросов от клиентов.
Появившийся запрос обслуживается методом service(HttpServletRequest req, HttpServletResponse res) сервлета, а все параметры запроса упаковываются в объект req класса HttpServletRequest, передаваемый в сервлет.
Еще одним параметром этого метода является объект res класса HttpServletResponse, в который загружается информация для передачи клиенту.
Для каждого нового клиента при обращении к сервлету создается независимый поток, в котором производится вызов метода service().
Метод service() предназначен для одновременной обработки множества запросов.
Если контейнеру нужно удалить сервлет, он его финализирует, вызывая метод destroy()
Слайд 8

Работа нескольких Web-компонентов в одном Web-контейнере Browser1 Browser2 Browser3 Web-контейнер 8080

Работа нескольких Web-компонентов в одном Web-контейнере

Browser1

Browser2

Browser3

Web-контейнер

8080

GET http://localhost:8080/web-comp1

Web-comp1

Web-comp2

Thread1

Thread3

Thread2

200 OK

html

GET http://localhost:8080/web-comp2

200 OK

html

GET http://localhost:8080/web-comp1

200

OK

html

service()

service()

service()

Слайд 9

Класс HttpServlet При разработке сервлетов в качестве базового класса в большинстве

Класс HttpServlet

При разработке сервлетов в качестве базового класса в большинстве случаев

используется не интерфейс Servlet, а класс HttpServlet, отвечающий за обработку запросов HTTP. Этот класс уже имеет реализованный метод service().
Метод service() класса HttpServlet служит диспетчером для других методов, каждый из которых обрабатывает методы доступа к ресурсам.
В спецификации HTTP определены следующие методы: GET, HEAD, POST, PUT, DELETE, OPTIONS и TRACE. Наиболее часто употребляются методы GET и POST, с помощью которых на сервер передаются запросы, а также параметры для их выполнения.
Метод service() класса HttpServlet вызывает один из методов doXxx(), в зависимости от типа запроса:
doGet(HttpServletRequest req, HttpServletResponse resp) – предназначен для обработки GET-запросов
doPost(HttpServletRequest req, HttpServletResponse resp)– предназначен для обработки POST-запросов
doPut(…)
doDelete(…), и др.
Слайд 10

Интерфейс HttpServletRequest При каждом вызове методы doGet и doPost класса HttpServlet

Интерфейс HttpServletRequest

При каждом вызове методы doGet и doPost класса HttpServlet принимают

в качестве параметра объект, который реализует интерфейс HttpServletRequest. Web-сервер, который исполняет сервлет, создает объект HttpServletRequest и передает его методу service сервлета (который в свою очередь передает его методу doGet или doPost). Данный объект содержит запрос, поступивший от клиента.
Ряд ключевых методов, использованных в примерах, представлены в таблице. Полный список методов интерфейса HttpServletRequest можно найти в документации компании Sun.
String getParameter(String name) Получение из запроса значения параметра. Наименование параметра определено значением name.
Enumeration getParameterNames() Получение из запроса имен всех параметров.
String[ ] getParameterValues(String name) Для параметра с несколькими значениями данный метод возвращает строковый массив.
Cookie[ ] getCookies () Получение массива объектов Cookie, сохраненных на компьютере клиента. Cookie могут быть использованы для уникальной идентификации клиента сервером.
HttpSession getSession(boolean create) Возвращает объект HttpSession текущего сеанса клиента. Если параметр create равен true и объект HttpSession не существует, то создается новый объект HttpSession.
Слайд 11

Излечение данных из запроса request.getHeader(“User-Agent”): “Mozilla/4.0 (compa…”

Излечение данных из запроса

request.getHeader(“User-Agent”): “Mozilla/4.0 (compa…”

Слайд 12

Использование других ресурсов сервера Чтобы Ваш сервлет получил доступ к другим

Использование других ресурсов сервера

Чтобы Ваш сервлет получил доступ к другим ресурсам

сервера, таким как другой сервлет, страница JSP, и т.д вы можете сделать запрос ресурса с помощью объекта RequestDispatcher, если ресурс доступен на сервере, на котором запущен сервлет.
Чтобы получить доступ к объекту RequestDispatcher, используйте метод getRequestDispatcher класса ServletContext. Этот метод в качестве аргумента берет URL запрашиваемого ресурса. Формат этого аргумента последовательность имен директорий разбитых знаком слэш /, и именем ресурса на конце.
Как только Вы получаете объект RequestDispatcher, Вы можете дать возможность ассоциированному с ним ресурсу отвечать на запрос клиента. Перенаправление очень полезно, например, когда сервлет производит запрос, и ответ носит общий характер, так что он может быть передан другому ресурсу.
request.getRequestDispatcher("/index.jsp").forward(request, response);
Слайд 13

Пример обработки данных формы import javax.servlet.http.*; import javax.servlet.*; import java.io.*; @WebServlet(name

Пример обработки данных формы

import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
@WebServlet(name = "StudentCreate", urlPatterns =

{"/student-create"})
public class StudentCreate extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Student student = new Student();
student.setNameStudent(request.getParameter("name"));
student.setSurnameStudent(request.getParameter("toname"));
student.setGroupe(request.getParameter("groupe"));
}
Слайд 14

Интерфейс HttpServletResponse При каждом обращении к сервлету методы doGet и doPost

Интерфейс HttpServletResponse

При каждом обращении к сервлету методы doGet и doPost класса

HttpServlet принимают объект, который реализует интерфейс HttpServletResponse. Web-сервер, который исполняет сервлет, создает объект HttpServletResponse и передает его методу service сервлета (который в свою очередь передает его методу doGet или doPost). Объект HttpServletResponse описывает ответ клиенту.
Имеется множество методов, дающих возможность сервлету сформировать ответ клиенту. Полный список методов интерфейса HttpServletResponse можно найти в документации компании Sun.
void addCookie (Cookie cookie) Метод используется для добавления Cookie в заголовок ответа клинту. Установленный максимальный возвраст Cookie, а также разрешение клиентом хранения Cookie определяют, будут ли Cookies сохранены на клиенте и время их хранения.
ServletOutputStream getOutputStream() Получение бинарного потока вывода для отправления бинарных данных клиенту.
Слайд 15

Установка данных ответа response.setContentType("text/html") response.setLocale(Locale.GERMAN); response.setDateHeader("Date", Calendar.getInstance().getTimeInMillis());

Установка данных ответа

response.setContentType("text/html")

response.setLocale(Locale.GERMAN);

response.setDateHeader("Date", Calendar.getInstance().getTimeInMillis());

Слайд 16

Установка Web-приложения Перед запуском скомпилированного Web-приложения, его необходимо внедрить (deploy) в

Установка Web-приложения

Перед запуском скомпилированного Web-приложения, его необходимо внедрить (deploy) в Web-контейнер.
Для

этого необходим дескриптор поставки (deployment descriptor) – XML файл с информацией о web-приложении
Для удобства все необходимые ресурсы для Web-приложения (классы, jsp и статические HTML-страницы, ресурсы, дескриптор поставки и т.п.) упаковывают в Web-ARchive (WAR)
Web-контейнер содержит контексты, в которые помещаются Web-приложения.
Слайд 17

Содержимое Web-приложения / - корневой каталог, содержит JSP-файлы HTML-файлы картинки др.

Содержимое Web-приложения

/ - корневой каталог, содержит
JSP-файлы
HTML-файлы
картинки
др. ресурсы
каталог WEB-INF (недоступен для

клиента)
/classes – каталог с необходимыми классами
/lib – каталог с библиотеками (Jar)
web.xml – дескриптор развертывания
Создание WAR – так же, как JAR:
jar cvf archiveName.war *
Слайд 18

Дескриптор развертывания web.xml В этом файле описывается Название и описание web-приложения

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

В этом файле описывается
Название и описание web-приложения
Страница по

умолчанию
Страница, которая будет отображаться в случае возникновения ошибки
Сервлеты и “маппинг” к ним
Параметры инициализации
Параметры ограничений доступа к ресурсам и т.д.
Спецификации сервлетов 3.0 притерпела ряд лучшений - программирование и развертывание сервлетов упростилось главным образом за счет введения аннотаций для декларирования сервлет (@WebServlet), фильтров (@WebFilter), листнеров (@WebListener) .
Таким образом, и дескриптор развертывания web.xml стал опциональным элементом.
Слайд 19

Структура web.xml Файл web.xml – это дескриптор развертывания приложения. Он может

Структура web.xml

Файл web.xml – это дескриптор развертывания приложения. Он может содержать

следующие теги

My Web Application
Description

myservlet


MyServlet
com.mycompany.MyServlet

В данном примере: http://host:port/context/myservlet -->

MyServlet
/myservlet


Здесь приведены лишь некоторые из возможных тегов дескриптора поставки
Слайд 20

Что такое JSP JSP — это документы текстового вида, которые описывают

Что такое JSP

JSP — это документы текстового вида, которые описывают создание

отклика на запрос клиента. Технология JSP позволяет комбинировать в одном файле HTML-содержимое web-страницы и программный код на языке Java
JSP определяются спецификацией,
разработанной международным
сообществом JCP (Java Community Process)
и поддерживаемой компанией Sun
Microsystems Inc в качестве официального стандарта
JSP в соответствии со спецификацией представляют собой технологию, входящую в состав J2EE . И JSP, и сервлеты в рамках технологии J2EE получили статус Web-компонентов
Страницы JSP не зависят от конкретной реализации Web-контейнера, что обеспечивает возможность их повторного использования
Слайд 21

Общий принцип работы Web-Browser Web-Container JSP HTML

Общий принцип работы

Web-Browser

Web-Container

JSP

HTML

Слайд 22

Обработка запроса к JSP Получение запроса Генерация исходного кода сервлета Компиляция

Обработка запроса к JSP

Получение
запроса

Генерация
исходного
кода сервлета

Компиляция
сервлета

Обработка
запроса
сервлетом

Отправка
ответа

Слайд 23

Вставка кода в JSP-страницах Выражения (expressions) Выражения Java вычисляются, конвертируются в

Вставка кода в JSP-страницах

Выражения (expressions)
Выражения Java вычисляются, конвертируются в строку и

вставляются в страницу. Эти вычисления происходит во время выполнения (то есть при при запросе страницы), а потому существует полный доступ к информации о самом запросе. Например, следующий код служит для отображения даты и времени запроса данной страницы:
Текущее время: <%= new java.util.Date() %>
Скриптлеты (scriptlets) – Если вы хотите сделать что-то большее чем вставка простых выражений, скриплеты JSP дадут вам возможность вставить любой код в метод сервлета, который будет создан при обработке данной страницы. Скриплеты имеют следующий вид: <% System.out.println(“Hello”); %>
Объявления (declarations) – участки кода, вставляемые в тело сервлета вне его методов.
<%! declarations %>
Комментарии
<%-- This text will not appear in the response --%>
Слайд 24

Объявления Объявления: Объявления JSP позволят вам задать методы или поля, для

Объявления

Объявления:
Объявления JSP позволят вам задать методы или поля, для вставки

в тело класса сервлета (вне метода service, обрабатывающего запрос). Они имеют следующую форму:
Поскольку объявления не осуществляют вывода, обычно они используются совместно с JSP выражениями или скриплетами. В приведенном в качестве примера фрагменте JSP отображается количество запросов к данной странице с момента загрузки сервера (или с момента последнего изменения и перезагрузки сервлета):
Пример:
<%@ page import="java.util.*" %>

<%!
Date theDate = new Date();
Date getDate() {
System.out.println( "In getDate() method" );
return theDate;
}%>
Hello! The time is now <%= getDate() %>

Слайд 25

Пример JSP-страницы создать страницу, которая возвращает приветствие в зависимости от времени

Пример JSP-страницы

создать страницу, которая возвращает приветствие в зависимости от времени суток

<%@ page contentType="text/html; charset=windows-1251" %>
<% java.util.Calendar rightNow = java.util.Calendar.getInstance();
int hour = rightNow.get(java.util.Calendar.HOUR_OF_DAY);
String greeting;
if (hour < 12)
greeting = "Доброе утро!";
else if (hour < 17)
greeting = "Добрый день!";
else if (hour < 22)
greeting = "Добрый вечер!";
else
greeting = "Доброй ночи!";
%>

<%=greeting%>

Слайд 26

Предопределенные переменные Для упрощения кода в выражениях JSP и скриплетах, вам

Предопределенные переменные

Для упрощения кода в выражениях JSP и скриплетах, вам предоставлен

набор их восьми автоматически определенных переменных, иногда называемых неявными объектами. Доступные переменные это request, response, out, session, application, config, pageContext и page
request – переменная класса HttpServletRequest, предоставляет доступ к текущему запросу
response – переменная класса HttpServletResponse
session – переменная класса HttpSession – доступ к объекту сеанса данного пользоателя.
out – переменная класса JspWriter (буферизированная версия PrintWriter), может использоваться для отправки сформированного выходного документа
Слайд 27

Директивы Директивы JSP воздействуют на всю структуру класса сервлета. Обычно они

Директивы

Директивы JSP воздействуют на всю структуру класса сервлета. Обычно они имеют

следующую форму:
Директивы JSP должны заключаться символами <%@ … %>
<%@ page pageEncoding="windows-1251" %> - задание кодировки страницы
<%@ page contentType=“appication/vnd.ms-excel" %> - задание типа содержимого
<%@ page import="java.util.List" %> - импорт класса
<%@ page session=“true”%> - задает, будет ли использоваться сессия
<%@ page buffer=“Xkb”%> - задает размер буфера
<%@ page isThreadSafe=“true" %> - задание SingleThreadModel
<%@ page errorPage=“relative URL" %> - задание страницы, на которую буде осуществлен переход в случае возникновения исключительной ситуации
Слайд 28

Включения файлов Существует 2 основных способа включения файлов в тело основной

Включения файлов

Существует 2 основных способа включения файлов в тело основной страницы:
На

этапе трансляции страницы. В этом случае код включаемой страницы будет помещен в код сервлета основной страницы
<%@ include file="hello.jsp" %>
На этапе выполнения запроса. В этом случае страница будет включаться каждый раз динамически

Компиляция

Запрос

Обработка
запроса

Ответ

Запрос

<%@ include
file=“…” %>

page=“…”
flush=“true” />

Слайд 29

Перенаправление запроса Для перенаправления запроса предназначен тег … … Запрос p1.jsp Ответ

Перенаправление запроса

Для перенаправления запроса предназначен тег




Запрос

p1.jsp

Ответ

Слайд 30

Пример: forward.jsp double freeMem = Runtime.getRuntime().freeMemory(); double totlMem = Runtime.getRuntime().totalMemory(); double

Пример: forward.jsp


<%
double freeMem = Runtime.getRuntime().freeMemory();
double totlMem = Runtime.getRuntime().totalMemory();

double percent = freeMem/totlMem;
if (percent < 0.5) {
%>

<% } else { %>

<% } %>

forward.jsp

Слайд 31

JSTL для написания JSP страниц в JSP можно использовать Java вставки

JSTL для написания JSP страниц

в JSP можно использовать Java вставки кода,

но это является плохим тоном программирования а также не очень безопасно
Добавим необходимую зависимость :

javax.servlet
jstl
1.1.2

В начало JSP страницы вы должны подключить JSTL core:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Слайд 32

Синтаксис Переменные: В этом случае у нас будет создана переменная которая

Синтаксис

Переменные:

В этом случае у нас будет создана переменная которая

будет иметь в значение «Alex»
Вызвать эту переменную можно так:

${myName}


Операторы условий

True

False
Выше продемонстрировано пример if … else в виде jstl тегов, где:
test — это условие при котором оно будет выполнятся.

Слайд 33

Это choose который дает возможность выбора, в java аналог switch, choose

Это choose который дает возможность выбора, в java аналог switch, choose

имеет вложенный тег when который отвечает за определенное действие при условии что test будет истинно.



Если num <= 0


Если num > 1000


Если не одно условие не есть верно.


Слайд 34

Тэг Позволяет, как это ни странно, сделать цикл. Пример использования: ${movie}

Тэг
Позволяет, как это ни странно, сделать цикл. Пример использования:

var=”movie” items=”${movieList}” >


${movie}

У тэга есть опциональный параметр varStatus, с помощью которого, к примеру, можно реализовать счетчик (как “i” в обыкновенном цикле)

count: ${movieLoopCount.count}
${movie}