JSP или Java Server Pages — это технология Java, которая позволяет создавать динамические веб-страницы для Java приложений.
В этой статье мы подробнее поговорим о том, что такое JSP, обсудим некоторые возможности данной технологии, рассмотрим структуру JSP страниц, а также попробуем на практике взглянуть на то, что представляют собой эти Java Server Pages.
Но для начала поговорим о преимуществах и важности JSP.
JSP позволяет разработчику:
Пример простейшей JSP страницы:
Стоит оговориться, что Tomcat — это не полноценный Java EE сервер приложений. Однако для жизненных нужд сервлетов и JSP-страниц, сервера Tomcat более чем достаточно.
Приступим к установке. Скачать Tomcat можно с официальной страницы.
Для ОС Windows установить томкат можно следующим образом:
![Что такое JSP? Разбираемся с возможностями на практике - 6]()
Взглянем на то, как можно получить доступ к скрытым объектам в JSP, в том числе и параметрам URL. Для этого запустим Tomcat и откроем браузер на странице http://localhost:8080/
Затем перейдем на страницу Examples:
После чего перейдем по ссылке JSP Examples:
На странице примеров перейдем по ссылке Implicit Objects -> Execute:
На этой странице можно увидеть пример использования скрытых объектов. Ниже — скрин страницы с подробными разъяснениями:
Попробуйте изменить значение параметра
Вот он:
Теперь обновим страницу скрытых объектов и взглянем на внесенные изменения:
![Что такое JSP? Разбираемся с возможностями на практике - 13]()

- получать данные из веб-страницы в 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), c вкраплениями JSP элементов (или jsp тегов). Внутри данных тегов содержатся обращения к серверному коду (данным), а также выполняются некоторые вычисления. Данные файлы обрабатываются на сервере, в результате чего все JSP теги преобразуются в html теги, и на выходе получается обычная html страница. На схеме ниже представлена диаграмма структуры 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.
Скачиваем 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. Пошагово, с картинками.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ