JSP або Java Server Pages — це технологія Java, яка дозволяє створювати динамічні веб-сторінки для програм Java. У цій статті ми детальніше поговоримо про те, що таке JSP, обговоримо деякі можливості даної технології, розглянемо структуру JSP сторінок, а також спробуємо на практиці поглянути на те, що це Java Server Pages. Але для початку поговоримо про переваги та важливість JSP. JSP дозволяє розробнику:
Погляньмо на те, як можна отримати доступ до прихованих об'єктів у JSP, у тому числі параметрів URL. Для цього запустимо Tomcat і відкриємо браузер на сторінці http://localhost:8080/ Потім перейдемо на сторінку Examples: Після чого перейдемо за посиланням JSP Examples: На сторінці прикладів перейдемо за посиланням Implicit Objects -> Execute: На цій сторінці можна побачити приклад використання прихованих об'єктів. Нижче – скрін сторінки з докладними роз'ясненнями: Спробуйте змінити значення параметра
- отримувати дані з веб-сторінки Java-код;
- надсилати дані з Java коду на веб-сторінку;
- писати Java-код, прямо всередині html (проте зловживати цим не варто).
- JSP – одна з основних Java web-технологій;
- JSP широко використовується в більшості компаній та проектів;
- JSP безшовно інтегрується з сервлет Java всередині контейнера сервлетів.
JSP - визначення
Наведу визначення з Вікіпедії: JSP (JavaServer Pages)— технологія, що дозволяє веб-розробникам створювати вміст, що має як статичні, так і динамічні компоненти. Сторінка JSP містить текст двох типів: статичні вихідні дані, які можуть бути оформлені в одному з текстових форматів HTML, SVG, WML, або XML та JSP-елементи, які конструюють динамічний вміст. Крім цього, можуть використовуватися бібліотеки JSP-тегів, а також Expression Language (EL) для впровадження Java-коду в статичний вміст JSP-сторінок. Код JSP-сторінки транслюється в Java-код сервлета за допомогою компілятора JSP-сторінок Jasper, а потім компілюється в байт-код віртуальної машини Java (JVM). Контейнери сервлетів, здатні виконувати JSP-сторінки, написані платформно-незалежною мовою Java. Технологія JSP є платформно-незалежною,Структура JSP сторінки
Загалом під JSP розуміються динамічні веб-сторінки, у яких динамічна частина генерується з допомогою Java, а статична формується з допомогою мов розмітки, найчастіше HTML. Така сторінка є текстовим документом з розширенням .jsp, написаним однією з мов розмітки (таких як HTML, SVG, WML і XML), з вкрапленнями JSP елементів (або jsp тегів). Всередині даних тегів містяться звернення до серверного коду (даних), а також виконуються деякі обчислення. Дані файли обробляються на сервері, в результаті чого всі JSP теги перетворюються на html теги, і на виході виходить звичайна html сторінка. На схемі нижче представлена діаграма структури JSP сторінки та її взаємодії із сервером. Приклад найпростішої JSP сторінки:<html>
<body>
<p> ${2 + 2} равно 4 </p>
</body>
</html>
У цьому прикладі всередину html коду "впроваджено" JSP вираз, написаний спеціальною мовою Expression Language (EL) . Він надає важливий механізм взаємодії шару подання (веб-сторінок) із шаром бізнес-логіки програми (Java-коду). Як видно з прикладу, JSP вираз укладено у фігурні дужки, з провідним знаком долара – ${...}
. Все, що знаходиться всередині фігурних дужок, обчислюється на сервері, і результат цього виразу наводиться в html, у те місце, де спочатку визначено вираз JSP. Після обробки всіх тегів сторінка набуде наступного вигляду:
<html>
<body>
<p> 4 равно 4 </p>
</body>
</html>
Встановлення та запуск контейнера сервлетів
Оскільки код JSP транслюється в код Java-сервлета, нам потрібно десь роздобути якийсь контейнер сервлетів, щоб ми могли говорити про роботу JSP. Інакше, без контейнера, JSP не почне працювати. Але для початку наведемо визначення контейнера сервлетів. Контейнер сервлетів — програма, яка є сервером, який займається системною підтримкою сервлетів і забезпечує їх життєвий цикл відповідно до правил, визначених у специфікаціях. Може працювати як повноцінний самостійний веб-сервер, бути постачальником сторінок іншого веб-сервера або інтегруватися в Java EE сервер додатків. Одним із найпопулярніших контейнерів сервлетів є Apache Tomcat. Варто зазначити, що Tomcat – це не повноцінний Java EE сервер додатків. Однак для життєвих потреб сервлетів та JSP-сторінок сервера Tomcat більш ніж достатньо. Приступимо до встановлення. Завантажити Tomcat можна з офіційної сторінки . Для Windows встановити томкат можна таким чином:-
Завантажуємо 32-bit/64-bit Windows Service Installer.
-
Запускаємо файл.
-
Далі слідуємо звичайній процедурі встановлення:
-
не забуваємо відзначити галочку Examples на відповідному вікні інсталятора:
-
та вказати шлях до попередньо встановленої JRE:
-
-
Після встановлення запускаємо Tomcat та відкриваємо браузер. Переходимо на http://localhost:8080/ .
Демонстраційні програми. Приховані об'єкти
Давайте подивимося на деякі можливості JSP у дії. Одна з них – доступ до так званих прихованих об'єктів ( Implicit Objects ). Це об'єкти, до яких можна отримати доступ, використовуючи мову виразів EL (Expression Language). Прикладом таких об'єктів можуть бути HTTP заголовки або параметри URL. Розкриємо (або освіжимо в пам'яті) що таке параметри URL. Нижче наведено URL з параметрами. Параметри виділені жирним шрифтом: http://example.net/foo/bar ?param1=value1¶m2=value2&a=1&name=Tom Параметри завжди починаються із символу питання (?). Далі слідує ім'я параметра, після – через знак рівності – визначається значення параметра. Параметрів може бути кілька чи один. Якщо їх кілька, кожна пара ім'я-значення поділяється символом амперсанда (&). У прикладі вище було визначено кілька параметрів та їх значення:Ім'я параметра | Значення параметра | |
---|---|---|
param1 | value1 | |
param2 | value2 | |
a | 1 | |
name | Tom |
foo
, використовуючи для цього відповідне поле на сторінці, після чого зверніть увагу, що значення даного параметра змінилося також і в адресаному рядку. Представлена сторінка не має великого функціонала, проте вона є гарним довідником, до якого можна звертатися надалі, коли потрібно буде отримати доступ до того чи іншого прихованого об'єкта. На цій сторінці наведено перелік прихованих об'єктів, до яких можна отримати доступ. А нижче в таблиці демонструється, як можна отримати доступ до того чи іншого об'єкта.
JSP функції
Тепер повернемося на попередню сторінку і поглянемо на вихідний код сторінки “приховані об'єкти”: Ось він:<%@page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<html>
<head>
<title>JSP 2.0 Expression Language - Implicit Objects</title>
</head>
<body>
<h1>JSP 2.0 Expression Language - Implicit Objects</h1>
<hr>
This example illustrates some of the implicit objects available
in the Expression Language. The following implicit objects are
available (not all illustrated here):
<ul>
<li>pageContext - the PageContext object</li>
<li>pageScope - a Map that maps page-scoped attribute names to
their values</li>
<li>requestScope - a Map that maps request-scoped attribute names
to their values</li>
<li>sessionScope - a Map that maps session-scoped attribute names
to their values</li>
<li>applicationScope - a Map that maps application-scoped attribute
names to their values</li>
<li>param - a Map that maps parameter names to a single String
parameter value</li>
<li>paramValues - a Map that maps parameter names to a String[] of
all values for that parameter</li>
<li>header - a Map that maps header names to a single String
header value</li>
<li>headerValues - a Map that maps header names to a String[] of
all values for that header</li>
<li>initParam - a Map that maps context initialization parameter
names to their String parameter value</li>
<li>cookie - a Map that maps cookie names to a single Cookie object.</li>
</ul>
<blockquote>
<u><b>Change Parameter</b></u>
<form action="implicit-objects.jsp" method="GET">
foo = <input type="text" name="foo" value="${fn:escapeXml(param["foo"])}">
<input type="submit">
</form>
<br>
<code>
<table border="1">
<thead>
<td><b>EL Expression</b></td>
<td><b>Result</b></td>
</thead>
<tr>
<td>\${param.foo}</td>
<td>${fn:escapeXml(param["foo"])} </td>
</tr>
<tr>
<td>\${param["foo"]}</td>
<td>${fn:escapeXml(param["foo"])} </td>
</tr>
<tr>
<td>\${header["host"]}</td>
<td>${fn:escapeXml(header["host"])} </td>
</tr>
<tr>
<td>\${header["accept"]}</td>
<td>${fn:escapeXml(header["accept"])} </td>
</tr>
<tr>
<td>\${header["user-agent"]}</td>
<td>${fn:escapeXml(header["user-agent"])} </td>
</tr>
</table>
</code>
</blockquote>
</body>
</html>
Якщо ви знайомі з HTML, вихідний код сторінки має бути цілком зрозумілий. Зверніть увагу на ці рядки:
<tr>
<td>${param.foo}</td>
<td>${fn:escapeXml(param["foo"])} </td>
</tr>
Тут ми бачимо html теги <tr>
та <td>
. За тегами <td>
слідують JSP теги, загорнуті у фігурні дужки ${ }
. Однак зверніть увагу, як виводиться значення URL параметра foo
:
${fn:escapeXml(param["foo"])}
Значення виводиться через використання JSP функції fn:escapeXml()
. JSP функції інкапсулюють деяку функціональність, яку можна перевикористовувати. У цьому випадку це екранування XML. Технологія JSP надає широкий вибір функцій на вибір, а також можливість створювати свої власні функції. Щоб використовувати JSP функцію, необхідно імпортувати в JSP файл відповідну бібліотеку, в якій визначено цю функцію.
Бібліотеки тегів
Подивимося ще один рядок вихідного коду (другий рядок), представленого вище:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
Саме в такий спосіб імпортуються бібліотеки тегів. Синтаксис інтуїтивно зрозумілий. Ми визначаємо кілька речей:
taglib
(tag library – бібліотеку тегів);url
, яким розташовується дана бібліотека;- префікс (у разі
fn
) через який можна буде викликати функції визначені у цій бібліотеці.
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
Як і у випадку з fn
, позначення c
опціональне та загальноприйняте. Таке позначення можна зустріти скрізь, де використовуються дані бібліотеки. Наведемо приклад функції з бібліотеки core:
<c:out value = "${'<div>'}"/>
Ця функція просто виведе тег <div>
. У цій функції вже здійснюється екранування XML. Ця функція важлива з погляду безпеки, оскільки виводячи значення змінних безпосередньо, через ${variable}
, ми відкриваємо двері для скрипт ін'єкцій.
Редагування JSP
Тепер, озброївшись новими знаннями, спробуємо внести зміни до демонстраційної програми всередині Tomcat. Для цього знайдемо вихідний код цієї сторінки всередині папки, в яку було встановлено цей контейнер сервлетів. Даний файл можна знайти за наступною адресаою: ...\Apache Software Foundation\Tomcat 9.0\webapps\examples\jsp\jsp2\el Потім відкриємо в будь-якому текстовому редакторі файл implicit-objects.jsp Додамо імпорт бібліотеки core, а потім з її допомогою здійснимо висновок якогось тексту: Тепер оновимо сторінку прихованих об'єктів та поглянемо на внесені зміни:Підсумки
Отже, ми поверхово розглянули таку технологію, як JSP. Ми обговорабо:- що таке JSP;
- структуру JSP сторінки;
- процедуру встановлення та запуску контейнера сервлетів Tomcat;
- демонстраційний додаток з доступу до прихованих об'єктів, що входить до постачання дистрибутива сервера Tomcat;
- JSP функції та бібліотеки тегів.
Що далі?
Для закріплення матеріалу можна:- Повторити все описане у цій статті.
- Розглянути інші демонстраційні програми, які входять до поставки сервера Tomcat.
- Написати самостійно додаток та задеплоїти його в контейнер сервлетів. Як посібник можна скористатися статтею Створення найпростішого веб-проекту в IntelliJ Idea Enterprise. Покроково, з картинками.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ