Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 426

Ильдар Шаукатович Хабибуллин

5. Что означает процедура установки сервлета?

6. Может ли сервлет отправить клиенту не страницу HTML, а другой документ?

7. Может ли сервлет обрабатывать параллельно несколько запросов?

8. Могут ли сервлеты, установленные в один контейнер, обмениваться информацией?

9. Может ли сервлет установить сеанс связи с клиентом?

ГЛАВА 27

Страницы JSP

Как видно из приведенных в предыдущей главе листингов, большую часть сервлета занимают операторы вывода в выходной поток тегов HTML, формирующих результат — страницу HTML. Эти операторы почти без изменений повторяются из сервлета в сервлет. Возникла идея не записывать теги HTML в операторах Java, а, наоборот, записывать операторы Java в коде HTML с помощью тегов специального вида. Затем обработать полученную страницу препроцессором, распознающим все теги и преобразующим их в код сервлета Java.

Так получился язык разметок JSP (JavaServer Pages), расширяющий язык HTML тегами вида <% имя_тега атрибуты %>. С помощью тегов можно не только записать описания, выражения и операторы Java, но и вставить в страницу файл с текстом или изображением, вызвать объект Java, компонент JavaBean или компонент EJB.

Программист может даже расширить язык JSP своими собственными, как говорят, пользовательскими тегами (custom tags), которые сейчас чаще называют расширениями тегов (tag extensions).

В листинге 27.1 приведен пример JSP-страницы "Hello, World!" с текущей датой.

Листинг 27.1. Простейшая страница JSP

<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> <%@ page contentType=Mtext/html;charset=windows-1251M %>

<%@ page import="java.util.*, java.text.*" %> <html><head><title> Простейшая страница JSP </title>

<META http-equiv=Content-Type

content="text/html; charset=windows-1251">

</head><body>

Hello, World!<p>

Сегодня <%= getFormattedDate() %>

</body></html>

String getFormattedDate(){

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy hh:mm"); return sdf.format(new Date());

}

%>

Контейнер сервлетов расширили препроцессором, переводящим запись, подобную листингу 27.1, в сервлет. В контейнере сервлетов Tomcat такой препроцессор называется Jasper. Препроцессор срабатывает автоматически при первом обращении к странице JSP. Полученный в результате его работы сервлет тут же компилируется и выполняется. Откомпилированный сервлет затем хранится в контейнере, так же как и все сервлеты, и выполняется при следующих вызовах страницы JSP.

Для сервлетов и страниц JSP придумано общее название — Web-компоненты (Web Components). Контейнер сервлетов, расширенный средствами работы с JSP, называется Web-контейнером (Web Container или JSP Container). Приложение, составленное из сервлетов, страниц JSP, апплетов, документов HTML и XML, изображений и прочих документов, относящихся к приложению, называется Web-приложением (Web Application).

Весь статический текст HTML, называемый в документации JSP шаблоном HTML (template HTML), сразу направляется в выходной поток. Выходной поток страницы буферизуется. Буферизацию обеспечивает класс JspWriter, расширяющий класс Writer. Размер буфера по умолчанию 8 Кбайт, его можно изменить атрибутом buffer тега <%@ page>. Наличие буфера позволяет заносить заголовки ответа в выходной поток вперемешку с выводимым текстом. В буфере заголовки будут размещены перед текстом.