* Директиви в JSP
Публикувано на 12 февруари 2015 в раздел Уеб JSP.
Директивите са специални указания към JSP компилатора. Те не генерират изходни данни, но променят начина, по който самата страница ще бъде обработена. Всички директиви се ограждат с тагове <%@ и %>. Обикновено добавяме директивите в самото начало на JSP страницата, но това не е задължително условие. Синтаксисът за добавяне на директиви е следния:
<%@ директива атрибут="стойност" %>
Вече се запознахме с една конкретна директива с няколко атрибута - указвахме каква е кодировката на изходния поток. Използвахме я в предишните примери понеже JSP страницата ни генерираше текст с букви на кирилица, който беше кодиран в UTF8. Ето реда, който вмъквахме във всяка JSP страница дотук:
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF8" %>
Реално тук се използват три атрибута на директивата "page":
page contentType: Указва на браузъра на клиента, че страницата е UTF8 кодирана. Така той ще възпроизвежда символите коректно.
page pageEncoding: Указва на самия компилатор, че има UTF8 кодирана информация в неговия входен поток от информация (символите от JSP файла, който той ще чете). Обикновено всичко ще работи дори и да го укажете, но присъствието на този атрибут в никакъв случай не пречи.
page language: Указва на какъв език е сорс кода на страницата. Единствената възможна стойност на този етап е java.
По-надолу ще разгледаме още няколко атрибута на "page" директивите, както и "include" директивата. Няма да разглеждаме един цял раздел от директиви - т.нар. taglibs. За тях ще отделим специална статия по-късно.
page import: Това е може би най-често използвания атрибут, защото се използва при добавяне на класове и библиотеки. Много е подобна на нормалния import от програмирането на Java, но с една основна разлика - прави се един import на много класове разделени със запетая, а не поредица от много import указания. Ето един пример:
<%@ page import="java.util.Scanner,java.io.*, java.io.DataInputStream" %>
include: С include директивата (тя НЕ е атрибут на "page" директивата, а е самата тя e директива) вие вкарвате съдържанието на друг файл във вашия. За разлика от page import, където вие давате възможност за използване на даден клас, с include вие буквално вмъквате целия код от посочения файл. Той може да е всякакъв - HTML, JSP, JavaScript, дори и обикновен текстови файл. Тази директива е особено полезна когато правим шаблони - например ето така бихме могли да вмъкваме един и същи заглавен код на всяка страница (header):
<%@ include file="header.html" %>
page buffer: Всичко, което се генерира от JSP страницата започва да се съхранява в буфер. Когато този буфер се напълни съдържанието му се изпраща към браузъра на клиента и съответно буфера се изпразва. Стойността по подразбиране е 8kb и обикновено вие няма да желаете да го променяте. Буферът трябва да е по-голям или равен на големината на пакетите, които изпраща сокета, който се връзва с клиента - в противен случай ще се намали бързодействието на системата. Този атрибут влияе върху клас JSPWriter, който може да достъпите чрез pageContext.getOut(). Пример за промяна на буфера е следния:
<%@ page buffer="16kb" %>
Ако допълнително добавите атрибут autoFlush="false", ще забраните автоматичното изпразване на буфера и ще трябва да го правите ръчно. Ако буфера се препълни, ще се генерира изключение.
page errorPage: Ако вашата JSP генерира изключение и този атрибут е наличен, браузъра на клиента (с целия му request) ще бъде пренасочен към указаната като стойност на атрибута JSP страница. По този начин се реализира т.нар. "error handler", т.е. страница за прихващане на грешки:
<%@ page errorPage="error.jsp" %>
page isErrorPage: Една JSP страница би било хубаво да може да се самопознава в смисъл дали е страница за грешки или е нормална. По подразбиране стойността е false. Ако правите страница за прихващане на грешки, трябва да добавите този атрибут в нея със стойност true. Това ще добави някои допълнителни възможности за вашата error страница, които ще разгледаме по-късно.
<%@ page isErrorPage="true" %>
page session: Сесиите са начин да предаваме информация от една JSP страница на друга. По подразбиране всяка JSP страница стартира сесия. Ако това не ни е нужно, т.е. правим просто самостоятелна страница, която няма общо с останалите на сайта, сесията може да се изключи с:
<%@ page session ="false" %>
В следваща статия ще разгледаме по-подробно как се използват сесиите.
page trimDirectiveWhitespaces: Често когато пишем JSP код и го миксираме с HTML остават празни интервали и празни редове, които не пречат на визуализацията в браузъра на клиента (те не се отпечатват), но ги има в нейния код. Това не пречи с нищо, освен че предаваме допълнителна (ненужна) информация по мрежата. Ако искаме, можем да накараме компилатора да премахне ненужните символи от изходния поток с този атрибут:
<%@ page trimDirectiveWhitespaces ="true" %>
Добавете го в някой от предишните примери и сравнете оригиналния код (page source) на HTML документа в браузъра с генерирания нов. Ще видите, че най-вероятно ще изчезнат празни редове в началото.
page extends: Указва кой е суперкласа на текущо генерирания сървлет (всяка JSP страница се компилира до вид клас, които се нарича сървлет). Това се използва рядко в практиката, но все пак е възможност да се възползвате от наследяване.
<%@ page extends="myPackage.mySuperClass" %>
page info: Текст с описание на текущата страница, който може да бъде достъпен чрез метод getServletInfo():
<%@ page info="Начална страница" %>
Добави коментар