JSP Синтаксис
В этом разделе кратко описывается базовый синтаксис в разработке на JSP.
Скриптлет
Скриптлет может содержать любое количество инструкций Java, переменных, методов или выражений, если они допустимы в языке сценариев.
Формат синтаксиса скриптлета:
<% code snippet %>
В качестве альтернативы можно также записать эквивалентную XML-инструкцию, например так:
<jsp:scriptlet> 代码片段 </jsp:scriptlet>
Любой текст, HTML-теги или JSP-элементы должны быть написаны вне скриптлета.
Ниже приведён пример, и это также первый пример JSP в этом руководстве:
<html>
<head><title>Hello World</title></head>
<body>
Hello World!<br/>
<%
out.println("Your IP address is " + request.getRemoteAddr());
%>
</body>
</html>
Примечание:Убедитесь, что Apache Tomcat установлен в каталоге C:\apache-tomcat-7.0.2 и среда выполнения настроена правильно.
Сохраните приведённый выше код как hello.jsp, затем поместите его в каталог C:\apache-tomcat-7.0.2\webapps\ROOT, откройте браузер и введите http://localhost:8080/hello.jsp в адресную строку. После запуска вы получите следующий результат:
Проблема с кодировкой китайского текста
Если мы хотим правильно отображать китайский текст на странице, нам нужно добавить следующий код в начало JSP-файла:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Далее мы изменим вышеприведённую программу следующим образом:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
Hello World!<br/>
<%
out.println("你的 IP 地址 " + request.getRemoteAddr());
%>
</body>
</html>
Таким образом, китайский текст будет отображаться правильно.
Объявление JSP
Оператор объявления может объявлять одну или несколько переменных или методов для использования последующим Java-кодом. В JSP-файле необходимо объявить эти переменные и методы до их использования.
Синтаксический формат объявления JSP:
<%! declaration; [ declaration; ]+ ... %>
В качестве альтернативы можно также записать эквивалентную XML-инструкцию, например так:
<jsp:declaration> 代码片段 </jsp:declaration>
Пример программы:
<%! int i = 0; %> <%! int a, b, c; %> <%! Circle a = new Circle(2.0); %>
Выражение JSP
Выражение на языке сценариев, содержащееся в выражении JSP, сначала преобразуется в String, а затем вставляется в место появления выражения.
Поскольку значение выражения преобразуется в String, вы можете использовать выражение в строке текста, не беспокоясь о том, является ли оно HTML-тегом.
Элемент выражения может содержать любое выражение, соответствующее спецификации языка Java, но нельзя использовать точку с запятой для завершения выражения.
Синтаксический формат выражения JSP:
<%= expression %>
Аналогично можно также записать эквивалентную XML-инструкцию:
<jsp:expression> 表达式 </jsp:expression>
Пример программы:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body>
</html>
После запуска вы получите следующий результат:
今天的日期是: 2016-6-25 13:40:07
Комментарии JSP
Комментарии JSP в основном имеют две цели: комментировать код и закомментировать блок кода.
Синтаксический формат комментариев JSP:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<%-- 该部分注释在网页中不会被显示--%>
<p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body>
</html>
После запуска вы получите следующий результат:
今天的日期是: 2016-6-25 13:41:26
Правила синтаксиса использования комментариев в различных ситуациях:
| Синтаксис | Описание |
|---|---|
| <%-- comment --%> | Комментарий JSP; содержимое комментария не отправляется в браузер и даже не компилируется. |
| <!-- comment --> | HTML-комментарий; содержимое комментария можно увидеть при просмотре исходного кода страницы в браузере. |
| <\% | Представляет статическую константу <% |
| %\> | Представляет статическую константу %> |
| \' | Одинарные кавычки, используемые в атрибутах |
| \" | Двойные кавычки, используемые в атрибутах |
Директивы JSP
JSP-директивы используются для установки свойств, относящихся ко всей JSP-странице.
Формат синтаксиса JSP-директив:
<%@ directive attribute="value" %>
Существует три типа тегов директив:
| Директива | Описание |
|---|---|
| <%@ page ... %> | Определяет атрибуты, зависящие от страницы, такие как язык сценариев, страница ошибки, требования к кэшу и т. д. |
| <%@ include ... %> | Включает другие файлы |
| <%@ taglib ... %> | Вводит определения библиотек тегов, которые могут быть пользовательскими тегами. |
Действия JSP
Теги действий JSP используют структуру синтаксиса XML для управления сервлетным движком. Они могут динамически вставлять файл, повторно использовать компоненты JavaBean, перенаправлять пользователей на другую страницу, генерировать соответствующий HTML для плагинов Java и т. д.
Теги действий имеют только один формат синтаксиса, который строго следует стандарту XML:
<jsp:action_name attribute="value" />
Теги действий по сути являются предопределенными функциями. В следующей таблице перечислены некоторые доступные теги действий JSP:
| Синтаксис | Описание |
|---|---|
| jsp:include | Используется для включения статических или динамических ресурсов в текущую страницу |
| jsp:useBean | Находит и инициализирует компонент JavaBean |
| jsp:setProperty | Устанавливает значение компонента JavaBean |
| jsp:getProperty | Вставляет значение компонента JavaBean в вывод |
| jsp:forward | Передает объект запроса, содержащий запрос пользователя, из одного JSP-файла в другой |
| jsp:plugin | Используется для включения объектов Applet и JavaBean в генерируемую HTML-страницу |
| jsp:element | Динамически создаёт XML-элемент |
| jsp:attribute | Определяет атрибуты динамически созданного XML-элемента |
| jsp:body | Определяет тело динамически созданного XML-элемента |
| jsp:text | Используется для инкапсуляции данных шаблона |
Неявные объекты JSP
JSP поддерживает девять автоматически определяемых переменных, широко известных как неявные объекты. Это объекты, автоматически доступные на страницах JSP без необходимости дополнительного объявления или инициализации.
В следующей таблице даётся краткое описание этих девяти неявных объектов:
| Object | Описание |
|---|---|
| request | HttpServletRequestЭкземпляр класса, объект, представляющий HTTP-запрос, содержащий информацию, отправленную от клиента серверу, например данные формы, параметры URL и т. д. |
| response | HttpServletResponseЭкземпляр класса, объект, представляющий HTTP-ответ, используемый для отправки данных и ответов клиенту. |
| out | JspWriterЭкземпляр класса, объект, используемый для вывода текстового содержимого клиенту, обычно применяется для генерации HTML. |
| session | HttpSessionЭкземпляр класса, объект, представляющий сеанс пользователя, может использоваться для хранения и извлечения данных, специфичных для пользователя, на нескольких страницах. |
| application | ServletContextЭкземпляр класса, представляет контекст веб-приложения, может использоваться для хранения и извлечения глобальных данных приложения. |
| config | ServletConfigЭкземпляр класса, содержит информацию о конфигурации текущей страницы JSP, например параметры инициализации. |
| pageContext | PageContextЭкземпляр класса предоставляет доступ ко всем объектам и пространствам имён JSP-страницы. |
| page | Подобно ключевому слову `this` в классах Java, он представляет текущий экземпляр JSP-страницы и может использоваться для вызова методов страницы. |
| исключение | exceptionОбъект класса, представляющий соответствующий объект исключения на JSP-странице, где произошла ошибка. Используется для обработки исключений на JSP-страницах и может применяться для перехвата и обработки исключений, возникающих на странице. |
Операторы управления потоком выполнения
JSP обеспечивает всестороннюю поддержку языка Java. В JSP-программах можно использовать Java API и даже создавать блоки кода Java, включая условные операторы и операторы циклов и т. д.
Условные операторы
if…elseБлок, см. следующий пример:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%! int day = 3; %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h3>IF...ELSE 实例</h3>
<% if (day == 1 || day == 7) { %>
<p>今天是周末</p>
<% } else { %>
<p>今天不是周末</p>
<% } %>
</body>
</html>
После запуска вы получите следующий результат:
IF...ELSE 实例 今天不是周末
Теперь рассмотрим блок switch...case, который довольно сильно отличается от блока if...else. В нём используется out.println(), а всё это содержится внутри тегов scriptlet, как показано ниже:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%! int day = 3; %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h3>SWITCH...CASE 实例</h3>
<%
switch(day) {
case 0:
out.println("星期天");
break;
case 1:
out.println("星期一");
break;
case 2:
out.println("星期二");
break;
case 3:
out.println("星期三");
break;
case 4:
out.println("星期四");
break;
case 5:
out.println("星期五");
break;
default:
out.println("星期六");
}
%>
</body>
</html>
При обращении через браузер после запуска вы получите следующий результат:
SWITCH...CASE 实例 星期三
Операторы циклов
В JSP-программах можно использовать три основных типа циклов Java: for, while и do...while.
Давайте рассмотрим пример цикла for. Следующий код выводит "Example Tutorial" разными размерами шрифта:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%! int fontSize; %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h3>For 循环实例</h3>
<%for ( fontSize = 1; fontSize <= 3; fontSize++){ %>
<font color="green" size="<%= fontSize %>">
Example
</font><br />
<%}%>
</body>
</html>
После запуска вы получите следующий результат:

Перепишите приведённый выше пример с использованием цикла while:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%! int fontSize=0; %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h3>While 循环实例</h3>
<%while ( fontSize <= 3){ %>
<font color="green" size="<%= fontSize %>">
Example
</font><br />
<%fontSize++;%>
<%}%>
</body>
</html>
Доступ через браузер, результат вывода таков (fontSize инициализируется значением 0, поэтому выводится одна дополнительная строка):
JSP поддерживает все логические и арифметические операторы Java.
В следующей таблице перечислены распространённые операторы JSP, с приоритетом от высокого к низкому:
| Категория | Operator | Ассоциативность |
|---|---|---|
| Постфиксные | () [] . (оператор точка) | Слева направо |
| Унарные | ++ - - ! ~ | Справа налево |
| Мультипликативные | * / % | Слева направо |
| Аддитивные | + - | Слева направо |
| Сдвиг | >> >>> << | Слева направо |
| Реляционные | > >= < <= | Слева направо |
| Равенство / Неравенство | == != | Слева направо |
| Побитовое И | & | Слева направо |
| Побитовое XOR | ^ | Слева направо |
| Побитовое ИЛИ | | | Слева направо |
| Логическое И | && | Слева направо |
| Логическое ИЛИ | || | Слева направо |
| Conditional | ?: | Справа налево |
| Присваивание | = += -= *= /= %= >>= <<= &= ^= |= | Справа налево |
| Запятая | , | слева направо |
Литералы JSP
Язык JSP определяет следующие литералы:
- Логический (boolean): true и false;
- Целочисленный (int): как в Java;
- Число с плавающей точкой (float): как в Java;
- Строка (string): начинается и заканчивается одинарными или двойными кавычками;
- Null: null.