Содержимое страницы JSP фактически делится на код html (а также css/javascript) и код на языке java. Для вставки кода Java на страницу JSP можно использовать пять основных элементов:
Выражения JSP (JSP Expression)
Скриплет JSP (JSP Scriplet)
Объявления JSP (JSP Declaration)
Директивы JSP (JSP Directive)
Комментарии JSP
JSP Expression представляет выражение, заключенное между тегами <%=
и %>
. При обращении к JSP вычисляется
значение этого выражения.
Например, определим следующую страницу JSP:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>First JSP App</title> </head> <body> <p>2 + 2 = <%= 2 + 2 %></p> <p>5 > 2 = <%= 5 > 2 %></p> <p><%= new String("Hello").toUpperCase() %></p> <p>Today <%= new java.util.Date() %></p> </body> </html>
Здесь используются четыре JSP-выражения. Первое выражение - простая арифметическая операция сложения. При обработке страницы вместо
<p>2 + 2 = <%= 2 + 2 %></p>
будет сгенерирована следующая html-разметка:
<p>2 + 2 = 4</p>
Второе выражение - операция сравнения во многом аналогична. Третье выражение - создание объекта String и вызов у него
метода toUpperCase()
, который возвращает строку в верхнем регистре. То есть выражение также может представлять вызов метода.
И четвертое выражение - вызов конструктора класса Date, который создает объект с текущей датой.
Когда придет запрос к этой странице, из нее будет сгенерирован следующий код:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>First JSP App</title> </head> <body> <p>2 + 2 = 4</p> <p>5 > 2 = true</p> <p>HELLO</p> <p>Today Fri Aug 31 11:37:26 MSK 2018</p> </body> </html>
И соответственно эту страницу мы увидим в браузере:
JSP Scriplet представляет одну или несколько строк на языке Java. Скриплет заключается внутри следующих тегов:
<% код Java %>
Например, определим следующую страницу JSP:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>First JSP App</title> </head> <body> <% for(int i = 1; i < 5; i++){ out.println("<br>Hello " + i); } %> </body> </html>
В данном случае скриплет представляет цикл for, в котором генерируется вывод с помощью метода out.println()
.
В итоге в браузере будет выведено четыре разо слово Hello с соответствующей цифрой:
Другой пример - определим переменную и массив и выведим их содержимое на страницу:
<% String[] people = new String[]{"Tom", "Bob", "Sam"}; String header = "Users list"; %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>First JSP App</title> </head> <body> <h3><%= header %></h3> <ul> <% for(String person: people){ out.println("<li>" + person + "</li>"); } %> </ul> </body> </html>
В скриплете в начале страницы определяются две переменных - переменная типа String и массив строк. С помощью второго скриплета содержимое массива через цикл for выводится на страницу.
JSP Declaration позволяют определить метод, который мы затем можем вызывать в скриплетах или в JSP-выражениях. Определение метода
помещается между тегами <%!
и %>
. Например, определим следующую JSP-страницу:
<%! int square(int n){ return n * n; } %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>First JSP App</title> </head> <body> <p><%= square(6) %></p> <ul> <% for(int i = 1; i <= 5; i++){ out.println("<li>" + square(i) + "</li>"); } %> </ul> </body> </html>
В данном случае метод square возвращает квадрат числа. Затем этот метод используется в выражении JSP и в скриплете в цикле for.
Директивы предназначены для установки условий, которые применяются ко всей странице JSP. Наиболее используемая директива - это директива page. Например, с помощью атрибута import этой директивы мы можем импортировать пакеты или отдельные классы на страницу jsp.
Например, в первом коде статьи для вывода даты использовалось выражение new java.util.Date()
. Но мы можем использовать данное выражение на странице
многократно, либо использовать другие классы из пакета java.util. И в этом случае мы можем испортировать нужные нам классы или пакеты:
<%@ page import="java.util.Data" %>
Импорт всего пакета:
<%@ page import="java.util.*" %>
Если необходимо импортировать несколько классов и(или) пакетов, то они перечисляются через запятую:
<%@ page import="java.util.Data, java.text.*" %>
Другой полезный и часто используемый атрибут - pageEncoding, который задает кодировку jsp. Например:
<%@ page import="java.util.Date" pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JSP Application</title> </head> <body> <h2>Сегодня: <%= new Date() %></h2> </body> </html>
Комментарии JSP добавляются с помощью тега <%-- Текст_комментария --%>
:
<%-- Первое приложение на JSP --%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>First JSP App</title> </head> <body> <h2>Hello</h2> </body> </html>
При этом внутри скриплета мы можем использовать стандартные для языка Java комментарии:
<% /* Пример цикла в JSP */ // вывод строки Hello четыре раза for(int i = 1; i < 5; i++){ out.println("<br>Hello " + i); } %>