Скачиваний:
78
Добавлен:
09.05.2014
Размер:
166.4 Кб
Скачать

5. Директивы jsp

Директивы JSP воздействуют на всю структуру класса сервлета. Обычно они имеют следующую форму:

<%@ директива атрибут="значение" %>

Вы также можете объединить установку нескольких атрибутов для одной директивы:

<%@ директива атрибут1="значение1"

атрибут2="значение2"

...

атрибутN="значениеN" %>

Существуют два основных типа директив: page, которая позволяет вам совершать такие операции, как импорт классов, изменение суперкласса сервлета, и т.п.; и include, которая дает вам возможность вставить файл в класс сервлета при трансляции JSP файла в сервлет. Также следует упомянуть директиву taglib, которая не поддерживается в JSP версии 1.0, но позволяет авторам JSP задавать свои собственные тэги. Предполагается что эта директива станет основной особенностью JSP 1.1.

5.1 Директива JSP page

Директива page позволяет вам задать один и более следующих чувствительных к регистру атрибутов:

import="пакет.class" или import="пакет.class1,...,пакет.classN". Позволяет вам задать пакеты, которые должны быть импортированы. Например: <%@ page import="java.util.*" %> Атрибут import - единственный атрибут, допускающий многократное применение.

contentType="MIME-Тип" или  contentType="MIME-Тип; charset=Кодировка-Символов" Задает тип MIME для вывода. По умолчанию используется text/html. К примеру, директива  <%@ page contentType="text/plain" %> приводит к тому же результату, что и использование скриплета  <% response.setContentType("text/plain"); %>

isThreadSafe="true|false". Значение true ("истина", принимается по умолчанию) задает нормальный режим выполнения сервлета, когда множественные запросы обрабатываются одновременно с использованием одного экземпляра сервлета, исходя из соображения что автор синхронизировал доступ к переменным этого экземпляра. Значение false ("ложь") сигнализирует о том, что сервлет должен наследоватьSingleThreadModel (однопоточную модель) при которой последовательные или одновременные запросы обрабатываются отдельными экземплярами сервлета.

session="true|false". Значение true ("истина", принимается по умолчанию) сигнализирует о том, что заранее определенная переменнаяsession (тип HttpSession) должна быть привязана к существующей сессии, если таковая имеется, в противном случае создается новая сессия, к которой и осуществляется привязка. Значение false ("ложь") определяет что сессии не будут использоваться, и попытки обращения к переменной session приведут к возникновению ошибки при трансляции JSP страницы в сервлет.

buffer="размерkb|none". Задает размер буфера для JspWriter out. Значение принимаемое по умолчанию зависит от настроек сервера, но должно превышать 8kb.

autoflush="true|false". Значение  true ("истина", принимаемое по умолчанию) устанавливает что при переполнении буфер должен автоматически очищаться. Значение false ("ложь"), которое крайне редко используется, устанавливает что переполнение буфера должно приводить к возникновению исключительной ситуации. При установке значение атрибута buffer="none" установка значения false для этого атрибута недопустимо.

extends="пакет.class". Задает суперкласс для генерируемого сервлета. Этот атрибут следует использовать с большой осторожностью, поскольку возможно что сервер уже использует какой-нибудь суперкласс.

info="сообщение". Задает строку, которая может быть получена при использовании метода getServletInfo.

errorPage="url". Задает JSP страницу, которая вызывается в случае возникновения каких-либо событий Throwables, которые не обрабатываются на данной странице.

isErrorPage="true|false". Сигнализирует о том, может ли эта страница использоваться для обработки ошибок для других JSP страниц. По умолчанию принимается значение false ("ложь").

language="java". Данный атрибут предназначен для задания используемого языка программирования. По умолчанию принимается значение "java", поскольку на сегодняшний день это единственный поддерживаемый язык программирования.

Синтаксис задания директив на XML

<jsp:directive.типДирективы атрибут=значение />

Пример. Эквивалентом XML для

<%@ page import="java.util.*" %>

является

<jsp:directive.page import="java.util.*" />

5.2 Директива JSP include

Эта директива позволяет вам включать файлы в процессе трансляции JSP страницы в сервлет. Использование директивы выглядит следующим образом:

<%@ include file="относительный url" %>

Заданный URL обычно интерпретируется относительно JSP страницы, на которой расположена ссылка, но, как и при использовании любых других относительных URL вы можете задать системе положение интересующего вас ресурса относительно домашнего каталога Web сервера, добавив в начало URL символ "/". Содержимое подключаемого файла обрабатывается как обычный текст JSP и поэтому может включать такие элементы как статический HTML, элементы скриптов, директивы и действия.

Например, многие сайты используют небольшую панель навигации на каждой странице. В связи с проблемами использования фреймов HTML часто эта задача решается размещением небольшой таблицы сверху или в левой половине страницы, HTML код которой многократно повторяется для каждой страницы сайта. Директива include наиболее естественный способ решения этой задачи, избавляющий разработчика от кошмара рутины копирования HTML в каждый отдельный файл. Это происходит следующим образом:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE>Руководство по сервлетам: JavaServer Pages (JSP) 1.0</TITLE>

<META NAME="author" CONTENT="webmaster@somesite.com">

<META NAME="keywords" CONTENT="...">

<META NAME="description" CONTENT="...">

<LINK REL=STYLESHEET

HREF="Site-Styles.css"

TYPE="text/css">

</HEAD>

<BODY>

<%@ include file="/navbar.html" %>

<!-- Специфический фрагмент этой страницы ... -->

</BODY>

</HTML>

Учтите что поскольку директива include подключает файлы в ходе трансляции страницы, то после внесения изменений в панель навигации вам потребуется повторная трансляция всех использующих ее JSP страниц. Что в данном случае является хорошим компромиссом, поскольку как правило панель навигации меняется достаточно редко и процесс подключения не теряет своей эфективности. Если же подключенные файлы меняются довольно часто, вы можете использовать вместо этого действие jsp:include. Это действие подключает файл в процессе обращения к JSP странице и более подробно рассмотрено в разделе "Действия  JSP" данного руководства.

Соседние файлы в папке лабораторная работа 6 (jsp)