Десять відповідей на питання, що найчастіше зустрічаються про JSP.
1. Вибір правильного механізму включенняЗ метою формування найбільш повного повідомлення на запит, що надійшов сторінка JSP може включати в себе фрагменти інших файлів. Це можна використовувати, наприклад, для того, щоб зберігати заголовок, виноски та навігаційні посилання в окремому файлі, щоб включати їх у всі інші сторінки. Тут можуть використовуватися два механізми включення:директивавключення тадіявключення. Для кожного окремого випадку вибирається один із них.
Директива включення (include directive) - у процесі трансляції (коли сервер конвертує сторінку) включає дані певного файлу. Основна сторінка і файл, що включається, просто "зрощуються". Це означає, що змінні скрипта, оголошені в одному файлі (за допомогою елементів скрипта або робочих елементів типу ), видно у всіх файлах і повинні мати унікальні імена. Деякі контейнери виявляють зміни у файлах, які включаються директивою, але специфікація цього не вимагає. Таким чином, зміни, які ви вносите у файл під час роботи системи, можуть не відразу проявити себе. Іноді вам доведеться оновлювати головну JSP-сторінку або видаляти файл класу, згенерований для головної сторінки, щоб побачити внесені зміни.
Моїм головним правилом вибору між цими двома механізмами є таке:
Найчастіше це викликає особливих проблем. За замовчуванням розмір буфера становить 8КВ, що більш ніж достатньо стандартної сторінки. Хоча ви можете збільшити розмір за допомогою атрибута buffer директиви page. Але, якщо ви використовуєте у своїй сторінці дію включення, то на вас може чекати сюрприз. Через обмеження у порядку визначення використовуваних дієюфункцій сервлета, буфер завжди "порожняється" перед тим, як ви ініціюєте потрібну сторінку. Це означає, що ви не зможете встановити заголовки або скористатися після дії.
Неприємним побічним ефектом такого чищення може бути те, що помилки виконання програми, викликані JSP-елементами після дії не завжди коректно доповідаються, оскільки багато JSP-контейнерів використовують для відображення сторінки з повідомленням про помилку (error page) механізм пересилання (forward mechanism). Якщо ви побачите на сторінці з елементами повідомлення про помилку типу "response already committed", я раджу вам у цьому випадку використати директиву включення (принаймні, доки ви не встановите причину проблеми).
Перш за все, сторінка, ініційована за допомогою дій або , отримує доступ до всіх параметрів запитів HTTP, що надійшли до першої сторінки. Крім того, ви можете вказати нові параметри запиту за допомогою вкладених дій:
Сторінка, до якої ми звертаємося, отримує однаковий доступ до всіх параметрів, незалежно від того, чи існують вони спочатку чи були додані пізніше.
Параметри запиту можуть зберігати лише строкові значення. Якщо вам потрібно передати об'єкт, скажімо, UserInfoBean з різними інформативними властивостями, вам доведеться передавати його як атрибут запиту (або як бін-компонент сесії або програми, але про це не зараз). Атрибут запиту являє собою те ж, що й об'єкт програми, так що перша сторінка може створити цей об'єкт і встановити всі його властивості за допомогою дій і: