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

JSP поддерживает все логические и арифметические операторы Java.

В следующей таблице перечислены распространённые операторы JSP, с приоритетом от высокого к низкому:

Категория Operator Ассоциативность
Постфиксные () [] . (оператор точка) Слева направо
Унарные ++ - - ! ~ Справа налево
Мультипликативные * / %  Слева направо
Аддитивные + -  Слева направо
Сдвиг >> >>> <<   Слева направо
Реляционные > >= < <=   Слева направо
Равенство / Неравенство == !=  Слева направо
Побитовое И &  Слева направо
Побитовое XOR ^  Слева направо
Побитовое ИЛИ |  Слева направо
Логическое И &&  Слева направо
Логическое ИЛИ ||  Слева направо
Conditional ?:  Справа налево
Присваивание = += -= *= /= %= >>= <<= &= ^= |=  Справа налево
Запятая ,  слева направо

Литералы JSP

Язык JSP определяет следующие литералы:

  • Логический (boolean): true и false;
  • Целочисленный (int): как в Java;
  • Число с плавающей точкой (float): как в Java;
  • Строка (string): начинается и заканчивается одинарными или двойными кавычками;
  • Null: null.
Другие расширения