JSTL (JavaServer Pages Standard Tag Library) Борислава Спасова Мартин Чиллев
Съдържание JSP  потребителски тагове и библиотеки JSTL тагове Структурни Локализация XML Достъп до бази данни   и  SQL
JSP  потребителски тагове и библиотеки JSP Custom Tags and Tag Libraries
Какво e  потребителски таг ? Потребителските тагове ( custom tags)  са компоненти за многократно използване Всеки разработчик може да ги създаде Могат да се  изтеглят  от  Интернет   ( http://www.jsptags.com ) Позволяват компонентно-ориентирана разработка в уеб приложенията Скриват сложността на визуализацията Разработчиците  се съсредоточават  върху   същината на проекта
Потребителски тагове Потребителските тагове изглеждат като  HTML  тагове Дизайнери и разработчици са свикнали да работят с тях Имат поведение, дефинирано от програмиста Могат да приемат параметри Пример: <myTags:calendar date=&quot;17/12/2006&quot; />
Какво е библиотека с тагове? Библиотеките с тагове ( tag libraries)  са съвкупности от тагове Имат име ( prefix)  и  URI  идентификатор Състоят се от: Интерфейс ( TLD  файлове) XML  базирано описание на таговете Имплементация ( JAR  файлове) Съвкупност от компилирани класове и ресурси
Как да използваме библиотека с тагове? Включваме библиотеката с тагове към уеб приложението Слагаме необходимите  TLD  и  JAR  файлове в  /WEB-INF  и в  /WEB-INF/lib Регистрираме библиотеката с тагове Използваме тагове от библиотеката чрез посочения при регистрацията префикс <%@ taglib prefix=&quot;c&quot; uri=&quot;http://java.sun.com/jsp/jstl/core&quot; %> <c:out value=&quot;I am a custom tag&quot; />
JSTL (JavaServer Pages Standard Tag Library) Стандартната библиотека с тагове в  JSP  стандарта
Какво е  JSTL? JSTL е стандартна библиотека с тагове Част от JSP 2.0 стандарта JSTL имплементира често използвани  в уеб приложенията  функционалности JSTL Core –  базови (основни)  функции Работа с променливи, условия, цикли , I/O JSTL Format –  ф орматиране   и  i18n Message bundles, числа, дати JSTL XML –  работа с  XML  данни Парсване на  XML ,  XSL  трансформации JSTL SQL –  Работа с бази от данни и  SQL Изпълнение на  SQL  заявки
Защо JSTL? Позволява JSP страниците да съдържат чист XML (JSPX страници) Избягваме употребата на JSP елементи за скриптиране Избягване на Java код в страниците Кодът става по-лесен за четене и поддръжка Спестяваме усилия Ползваме наготово най-често използваната функционалност
JSTL Core Tags
JSTL Core тагове Включване на  JSTL  Core  библиотеката Работа с променливи : <%@ taglib prefix=&quot;c&quot; uri=&quot;http://java.sun.com/jsp/jstl/core&quot;> <%-- Save data in scoped variables --%>  <c:set var=&quot;name1&quot; value=&quot;value1&quot; scope=&quot;page&quot; /> <c:set var=&quot;name2&quot; value=&quot;value2&quot; scope=&quot;request&quot; />  <c:set var=&quot;name3&quot; value=&quot;value3&quot; scope=&quot;session&quot; /> <c:set var=&quot;name4&quot; value=&quot;value4&quot; scope=&quot;application&quot; />
Core тагове <c:out> <c:remove> <c:catch> <c:out value='${pageScope.someBean}' /> <c:out value='${user.login}' />  <c:out value='${user.name}' /> <c:out value='${user.title}' escape Xml ='false' />  <c:remove var=&quot;name&quot; scope=&quot;page&quot; /> <c:catch var=&quot;myException&quot;> Inside the catch… <% int x = 10/0; %> </c:catch>
Core тагове Условни <c:if> <c:choose>, <c:when>, <c:otherwise> <c:if test='${param.p == &quot;someValue&quot;}'>  The property p of param is equal to &quot;someValue&quot; </c:if>  <c:choose>  <c:when test='${param.p == &quot;someValue&quot;}'> Generate this if p equals someValue  </c:when>  <c:otherwise> Otherwise generate this template </c:otherwise> </c:choose>
Core тагове Итерация <c:forEach> Итерация върху масив или списък <c:forEach var='item' begin='1' end='10'> <c:out value='${item}'/> </c:forEach>  <ul> <c:forEach var='item' items='${itemsList}'> <li><c:out value='${item}'/></li> </c:forEach>  </ul>
Core тагове Итерация Итерация върху  Map  обект (например  HashTable ) <c:forEach var='item' items='${map}'>  <c:out value='Key=${item.key} /> <c:out value='Key=${item.value} /> </c:forEach>
Core тагове Създаване на URL с параметри <c:url>  –  построява и encode-ва URL <c:redirect>  –  праща redirect заявка към клиента <c:url value=&quot;http://www.somewhere.com/ customers/register&quot; var=&quot;registrationURL&quot;> <c:param name=&quot;name&quot; value=&quot;${param.name}&quot;/> <c:param name=&quot;country&quot;  value=&quot;${param.country}&quot;/> </c:url> <a href='<c:out value=&quot;${registrationURL}“/>'>  Customer Registration>/a> <c:redirect url=&quot;http://www.somewhere.com/register&quot;>
JSTL Formatting and Internationalization Tags
Internationalization тагове Включване на библиотеката за форматиране Предефиниране на текущия locale Предефиниране на кодирането на HTTP заявката <%@ taglib uri=&quot;http://java.sun.com/jsp/jstl/fmt&quot; prefix= &quot; fmt &quot; > <fmt:setLocale value=&quot;bg&quot; /> <fmt:requestEncoding value=&quot;UTF-8&quot;/>
Internationalization  тагове Задаване на файл с текстови   ресурси  (resource bundle) Отпечатване на локализирани съобщения от  resource bundle <fmt:setBundle basename=&quot;Messages&quot; var= &quot; messagesBundle &quot; /> <fmt:bundle basename=&quot;Messages&quot;> <%-- Контекст повлиян от локализацията --%> <fmt:message key=&quot;EnterUserNameMsg&quot; /> </fmt:bundle>
Internationalization  тагове Изкарване на съобщение от ресурсен файл Зареждане на съобщение с параметър <fmt:message key=&quot;messageKey&quot; bundle=&quot;resourceBundle&quot;   /> <fmt:message key= &quot; messageKey &quot; bundle= &quot; resourceBundle &quot; > <fmt:param value= &quot; messageValue &quot;  /> </fmt:message>
Internationalization  тагове Форматиране на число Форматиране на дата   по шаблона на  java.text.SimpleDateFormat <fmt:formatNumber value= &quot; ${someNumber} &quot; pattern= &quot; ###,###.## &quot;  /> <fmt:formatDate value= &quot; ${someDate} &quot; pattern= &quot; hh:mm:ss MM/dd/yy &quot;  /> <fmt:formatNumber value= &quot; ${someMoney} &quot; type= &quot; currency|percent|number &quot;  />
Internationalization  тагове Парсване на число Парсване на дата <c:catch var=&quot;parsingError&quot; <fmt:parseNumber value=&quot;${numberToParse}&quot; type=&quot;number&quot; var=&quot;parsedNumber&quot;/> </c:catch> <fmt:parseDate value= &quot; 2/5/53 &quot; pattern= &quot; dd/MM/yy &quot;  var= &quot; johnBirthdate &quot; />
Internationalization  тагове Задаване на времева зона <fmt:timeZone value= &quot; US/Eastern &quot; > <fmt:parseDate value= &quot; 2/5/53 &quot; pattern= &quot; dd/MM/yy &quot;  var= &quot; johnBirthday &quot; /> <fmt:formatDate value= &quot; ${johnBirthday} &quot; dateStyle= &quot; short &quot; /> <%-- ще изкара 5/2/53 --%> </fmt:timeZone>
JSTL XML Tags
JSTL XML тагове Включване на  JSTL  XML  библиотеката Парсване на  XML  низ в променлива: Извеждане на стойност от  XPath  израз от  XML  документ от променливата  catalog : <%@ taglib uri=&quot;http://java.sun.com/jstl/xml&quot; prefix=&quot;x&quot; %> <x:out select=&quot;$catalog/book/title&quot;/> <x:parse var=&quot;catalog&quot; xml=&quot;${catalogXml}&quot; />
JSTL XML тагове Итериране по  XPath  израз: <x:forEach var=&quot;item&quot; select=&quot;$catalog/items&quot;> <tr> <td><x:out select=&quot;author/name/first&quot; /></td> <td><x:out select=&quot;author/name/last&quot; /></td> <td><x:out select=&quot;title&quot; /></td> <td><x:out select=&quot;price&quot; /></td> </tr> </x:forEach>
JSTL SQL Tags
SQL  тагове Конфигуриране на базата <sql:setDataSource var=&quot;example&quot;   driver=“org.hsqldb.jdbcDriver&quot;   url=&quot;jdbc:hsqldb:file:testdb&quot;   user=“sa&quot;   password=“sa&quot; />
SQL  тагове Създаване на  SQL  заявка <sql:query var= &quot; resultSet&quot; dataSource= &quot; ${example}&quot;   sql= &quot; SELECT BAND, TITLE FROM SONG WHERE ID=? &quot; > <param value= &quot; 1 &quot; > … </sql:query>
SQL  тагове Заявка за промяна на таблица <sql:update var= &quot; resultSet&quot; dataSource= &quot; ${example}&quot;   sql=&quot;INSERT INTO SONG (BAND, TITLE)  VALUES(?, ?)&quot;> <param value= &quot; AC/DC &quot;  /> <param value= &quot; T.N.T &quot;  /> </sql:update>
JSTL Въпроси?

JSTL

  • 1.
    JSTL (JavaServer PagesStandard Tag Library) Борислава Спасова Мартин Чиллев
  • 2.
    Съдържание JSP потребителски тагове и библиотеки JSTL тагове Структурни Локализация XML Достъп до бази данни и SQL
  • 3.
    JSP потребителскитагове и библиотеки JSP Custom Tags and Tag Libraries
  • 4.
    Какво e потребителски таг ? Потребителските тагове ( custom tags) са компоненти за многократно използване Всеки разработчик може да ги създаде Могат да се изтеглят от Интернет ( http://www.jsptags.com ) Позволяват компонентно-ориентирана разработка в уеб приложенията Скриват сложността на визуализацията Разработчиците се съсредоточават върху същината на проекта
  • 5.
    Потребителски тагове Потребителскитетагове изглеждат като HTML тагове Дизайнери и разработчици са свикнали да работят с тях Имат поведение, дефинирано от програмиста Могат да приемат параметри Пример: <myTags:calendar date=&quot;17/12/2006&quot; />
  • 6.
    Какво е библиотекас тагове? Библиотеките с тагове ( tag libraries) са съвкупности от тагове Имат име ( prefix) и URI идентификатор Състоят се от: Интерфейс ( TLD файлове) XML базирано описание на таговете Имплементация ( JAR файлове) Съвкупност от компилирани класове и ресурси
  • 7.
    Как да използвамебиблиотека с тагове? Включваме библиотеката с тагове към уеб приложението Слагаме необходимите TLD и JAR файлове в /WEB-INF и в /WEB-INF/lib Регистрираме библиотеката с тагове Използваме тагове от библиотеката чрез посочения при регистрацията префикс <%@ taglib prefix=&quot;c&quot; uri=&quot;http://java.sun.com/jsp/jstl/core&quot; %> <c:out value=&quot;I am a custom tag&quot; />
  • 8.
    JSTL (JavaServer PagesStandard Tag Library) Стандартната библиотека с тагове в JSP стандарта
  • 9.
    Какво е JSTL? JSTL е стандартна библиотека с тагове Част от JSP 2.0 стандарта JSTL имплементира често използвани в уеб приложенията функционалности JSTL Core – базови (основни) функции Работа с променливи, условия, цикли , I/O JSTL Format – ф орматиране и i18n Message bundles, числа, дати JSTL XML – работа с XML данни Парсване на XML , XSL трансформации JSTL SQL – Работа с бази от данни и SQL Изпълнение на SQL заявки
  • 10.
    Защо JSTL? ПозволяваJSP страниците да съдържат чист XML (JSPX страници) Избягваме употребата на JSP елементи за скриптиране Избягване на Java код в страниците Кодът става по-лесен за четене и поддръжка Спестяваме усилия Ползваме наготово най-често използваната функционалност
  • 11.
  • 12.
    JSTL Core таговеВключване на JSTL Core библиотеката Работа с променливи : <%@ taglib prefix=&quot;c&quot; uri=&quot;http://java.sun.com/jsp/jstl/core&quot;> <%-- Save data in scoped variables --%> <c:set var=&quot;name1&quot; value=&quot;value1&quot; scope=&quot;page&quot; /> <c:set var=&quot;name2&quot; value=&quot;value2&quot; scope=&quot;request&quot; /> <c:set var=&quot;name3&quot; value=&quot;value3&quot; scope=&quot;session&quot; /> <c:set var=&quot;name4&quot; value=&quot;value4&quot; scope=&quot;application&quot; />
  • 13.
    Core тагове <c:out><c:remove> <c:catch> <c:out value='${pageScope.someBean}' /> <c:out value='${user.login}' /> <c:out value='${user.name}' /> <c:out value='${user.title}' escape Xml ='false' /> <c:remove var=&quot;name&quot; scope=&quot;page&quot; /> <c:catch var=&quot;myException&quot;> Inside the catch… <% int x = 10/0; %> </c:catch>
  • 14.
    Core тагове Условни<c:if> <c:choose>, <c:when>, <c:otherwise> <c:if test='${param.p == &quot;someValue&quot;}'> The property p of param is equal to &quot;someValue&quot; </c:if> <c:choose> <c:when test='${param.p == &quot;someValue&quot;}'> Generate this if p equals someValue </c:when> <c:otherwise> Otherwise generate this template </c:otherwise> </c:choose>
  • 15.
    Core тагове Итерация<c:forEach> Итерация върху масив или списък <c:forEach var='item' begin='1' end='10'> <c:out value='${item}'/> </c:forEach> <ul> <c:forEach var='item' items='${itemsList}'> <li><c:out value='${item}'/></li> </c:forEach> </ul>
  • 16.
    Core тагове ИтерацияИтерация върху Map обект (например HashTable ) <c:forEach var='item' items='${map}'> <c:out value='Key=${item.key} /> <c:out value='Key=${item.value} /> </c:forEach>
  • 17.
    Core тагове Създаванена URL с параметри <c:url> – построява и encode-ва URL <c:redirect> – праща redirect заявка към клиента <c:url value=&quot;http://www.somewhere.com/ customers/register&quot; var=&quot;registrationURL&quot;> <c:param name=&quot;name&quot; value=&quot;${param.name}&quot;/> <c:param name=&quot;country&quot; value=&quot;${param.country}&quot;/> </c:url> <a href='<c:out value=&quot;${registrationURL}“/>'> Customer Registration>/a> <c:redirect url=&quot;http://www.somewhere.com/register&quot;>
  • 18.
    JSTL Formatting andInternationalization Tags
  • 19.
    Internationalization тагове Включванена библиотеката за форматиране Предефиниране на текущия locale Предефиниране на кодирането на HTTP заявката <%@ taglib uri=&quot;http://java.sun.com/jsp/jstl/fmt&quot; prefix= &quot; fmt &quot; > <fmt:setLocale value=&quot;bg&quot; /> <fmt:requestEncoding value=&quot;UTF-8&quot;/>
  • 20.
    Internationalization таговеЗадаване на файл с текстови ресурси (resource bundle) Отпечатване на локализирани съобщения от resource bundle <fmt:setBundle basename=&quot;Messages&quot; var= &quot; messagesBundle &quot; /> <fmt:bundle basename=&quot;Messages&quot;> <%-- Контекст повлиян от локализацията --%> <fmt:message key=&quot;EnterUserNameMsg&quot; /> </fmt:bundle>
  • 21.
    Internationalization таговеИзкарване на съобщение от ресурсен файл Зареждане на съобщение с параметър <fmt:message key=&quot;messageKey&quot; bundle=&quot;resourceBundle&quot; /> <fmt:message key= &quot; messageKey &quot; bundle= &quot; resourceBundle &quot; > <fmt:param value= &quot; messageValue &quot; /> </fmt:message>
  • 22.
    Internationalization таговеФорматиране на число Форматиране на дата по шаблона на java.text.SimpleDateFormat <fmt:formatNumber value= &quot; ${someNumber} &quot; pattern= &quot; ###,###.## &quot; /> <fmt:formatDate value= &quot; ${someDate} &quot; pattern= &quot; hh:mm:ss MM/dd/yy &quot; /> <fmt:formatNumber value= &quot; ${someMoney} &quot; type= &quot; currency|percent|number &quot; />
  • 23.
    Internationalization таговеПарсване на число Парсване на дата <c:catch var=&quot;parsingError&quot; <fmt:parseNumber value=&quot;${numberToParse}&quot; type=&quot;number&quot; var=&quot;parsedNumber&quot;/> </c:catch> <fmt:parseDate value= &quot; 2/5/53 &quot; pattern= &quot; dd/MM/yy &quot; var= &quot; johnBirthdate &quot; />
  • 24.
    Internationalization таговеЗадаване на времева зона <fmt:timeZone value= &quot; US/Eastern &quot; > <fmt:parseDate value= &quot; 2/5/53 &quot; pattern= &quot; dd/MM/yy &quot; var= &quot; johnBirthday &quot; /> <fmt:formatDate value= &quot; ${johnBirthday} &quot; dateStyle= &quot; short &quot; /> <%-- ще изкара 5/2/53 --%> </fmt:timeZone>
  • 25.
  • 26.
    JSTL XML таговеВключване на JSTL XML библиотеката Парсване на XML низ в променлива: Извеждане на стойност от XPath израз от XML документ от променливата catalog : <%@ taglib uri=&quot;http://java.sun.com/jstl/xml&quot; prefix=&quot;x&quot; %> <x:out select=&quot;$catalog/book/title&quot;/> <x:parse var=&quot;catalog&quot; xml=&quot;${catalogXml}&quot; />
  • 27.
    JSTL XML таговеИтериране по XPath израз: <x:forEach var=&quot;item&quot; select=&quot;$catalog/items&quot;> <tr> <td><x:out select=&quot;author/name/first&quot; /></td> <td><x:out select=&quot;author/name/last&quot; /></td> <td><x:out select=&quot;title&quot; /></td> <td><x:out select=&quot;price&quot; /></td> </tr> </x:forEach>
  • 28.
  • 29.
    SQL таговеКонфигуриране на базата <sql:setDataSource var=&quot;example&quot; driver=“org.hsqldb.jdbcDriver&quot; url=&quot;jdbc:hsqldb:file:testdb&quot; user=“sa&quot; password=“sa&quot; />
  • 30.
    SQL таговеСъздаване на SQL заявка <sql:query var= &quot; resultSet&quot; dataSource= &quot; ${example}&quot; sql= &quot; SELECT BAND, TITLE FROM SONG WHERE ID=? &quot; > <param value= &quot; 1 &quot; > … </sql:query>
  • 31.
    SQL таговеЗаявка за промяна на таблица <sql:update var= &quot; resultSet&quot; dataSource= &quot; ${example}&quot; sql=&quot;INSERT INTO SONG (BAND, TITLE) VALUES(?, ?)&quot;> <param value= &quot; AC/DC &quot; /> <param value= &quot; T.N.T &quot; /> </sql:update>
  • 32.

Editor's Notes

  • #3 ## * * 07/16/96
  • #5 ## * * 07/16/96
  • #13 ## * * 07/16/96
  • #14 ## * * 07/16/96
  • #15 ## * * 07/16/96
  • #16 ## * * 07/16/96
  • #17 ## * * 07/16/96
  • #18 ## * * 07/16/96 java.net.URLEncoder – кодиране на URL java.net.URLDecoder – декодиране на URL sendRedirect() - javax.servlet.http.HttpServletResponse – въща заявка към клиента за redirect RequestDispatcher dispatcher = aRequest.getRequestDispatcher(aDestination.toString()); dispatcher.forward(aRequest, aResponse); - прави servlet chain &apos;Refresh: 10; url=http://www.mysite.com/otherpage.php&apos; – client redirect header
  • #27 ## * * 07/16/96
  • #28 ## * * 07/16/96
  • #33 ## * * 07/16/96