Использование пользовательских тегов JSP в ColdFusion MX

В этой статье (оригинальное название - “Using JSP Custom Tags in CFMX”) повествуется об использовании пользовательских тегов разработанных на основе JSP. Что они из себя представляют, как и для чего вы можете их использовать, и где их можно обнаружить. CFMX, новая версия ColdFusion, позволит нам использовать пользовательские теги JSP в наших программах для ColdFusion. Кто-то может сказать "И что из этого?".

В этой статье я надеюсь показать вам, почему действительно стоит обратить внимание на это новшество. Во время написания этой статьи, CFMX (ранее известный также как Neo) все еще находился в стадии бета и соглашение о неразглашении мешает людям описывать его характеристики, но одной из новых особенностей, опубликованных с недавних пор, является возможность использовать пользовательские теги JSP.

Компанией Macromedia мне было дано одобрение на то, чтобы я рассказал вам об этом средстве. Но идея, о которой я рассказываю состоит в рассказе о том, как все работает в версии бета 3. Возможно, ситуация изменится со следующей версией продукта, но еще раз отмечу, что эта возможность реализована в нынешней версии и сохранится примерно год.

 

Появление пользовательских тегов JSP

Скоро может стать обычным видеть в CFMX что-то похожее на следующий ColdFusion код:

<cal:calendar month="3" year="2002" />
Это пример вызова пользовательского тега JSP. Конкретно этот тег (а он реально существует в природе) создаст HTML-календарь на март 2002 года, как показано на рисунке 1. Очень современное решение. Мы не имеем прямой возможности использовать подобный тег в ColdFusion, и это не так просто – построить календарь. По этому очень удобно и полезно уметь построить календарь таким простым способом.


Рисунок 1. Календарь

Кто-то сразу сообразит, что кто-нибудь может создать (на самом деле это уже случилось - пишут) простой вид пользовательского тега ColdFusion и сделать его доступным в форуме специалистов Macromedia. Пользовательские теги уже давно были внедрены в ColdFusion и они несомненно используются многими разработчиками.

Но это – пользовательский тег JSP и это не должно приводить вас в отчаяние. Рассмотренный выше пример для вас, как для CF разработчика, выглядит совсем незнакомым? Конечно, синтаксис немного отличается от обычного вызова CF тегов. Там, где мы могли использовать тег вида <cf_calendar> (если бы такой тег существовал), здесь мы используем <cal:calendar>. Это интересно и будет раскрыто в подробностях через пару мгновений.

Кроме всего перечисленного, нет необходимости знать, как этот тег работает (или как он был построен) – все, что нужно для работы – это вызвать его. И эта особенность несет в себе гораздо больше возможностей, чем просто один пример (можно легко и просто организовать создание дат, всевозможных ссылок добавления и др.) Вот прекрасный пример пользовательского тега: Для повышения функциональности, мы можем использовать в своих программах то, что не присутствует в языке по умолчанию. Если кем-то был создан и опубликован тег, его могут использовать многие. Это придает значительную гибкость в создании кода.

 

Новый источник появления пользовательских тегов

Важно отметить что пример, описанный выше, свободно распространяется на сайте, посвященном пользовательским тегам JSP (http://coldjava.hypermart.net/servlets/). Не обращайте внимания на слово "coldjava" в адресе, т.к. сайт не содержит ничего, что можно было бы применить в ColdFusion.

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

То, что мы можем сделать сейчас – это приоткрыть дверь в огромное пространство возможных мест, где мы можем найти пользовательские теги. Теперь точно можно сказать, что специальные JSP теги для нас понятны.

 

Рассмотрим ситуацию поближе

Давайте рассмотрим более подробно приведенный выше пример. Я упустил несколько таких важных моментов, как: что нужно для создания пользовательского тега, где разместить его определение и несколько других нужных деталей.

Во первых, этот тег доступен на (http://coldjava.hypermart.net/servlets/caltag.htm). Если у вас есть возможность, откройте эту страницу. Как я говорил, тег сгенерирует календарь в формате HTML. Также на сайте приведено много как различных синтаксических вариантов, так и результатов работы этих настроек.

В простейшем примере показанного здесь пользовательского тега JSP, использование тега почти идентично тому, как мы могли бы сделать это непосредственно в ColdFusion. Вот пример того, как мы можем это сделать:

<%@ taglib uri="taglib.tld" prefix="cal" %>
<cal:calendar month="3" year="2002" />
Эти две строки и есть полноценный пример JSP страницы, хотя он и выглядит очень просто. Первая строка для нас действительно незнакома – это определение JSP. Мы не можем использовать именно эту строку, но в будущем модифицируем ее в вид, пригодный для работы в CF.

Итак, первая строка приведенного выше примера объясняет JSP странице место, где искать пользовательский тег, что означает - в каком месте на сервере страница должна располагать пользовательский тег. Через мгновение мы изменим ее в соответствующий CF вид.

Вы можете подумать "ага! В CF нам не нужно определять, где сохранены модули пользовательских тегов. CF сам определит их местонахождение". И это - правда, что является, несомненно, отличным свойством ColdFusion. Но на деле CFMX разработчики выбрали иной логический алгоритм для использования пользовательских тегов JSP. Чтобы определенно использовать простой пример, который и показал ранее необходимо выполнить команды, которые можно описать следующим образом:

<cfimport taglib="/WEB-INF/lib/caltag.jar" prefix="cal">
<cal:calendar month="3" year="2002" header="true" />
Первая строка выглядит ужасно по сравнению с JSP кодом, приведенным выше. Это также совершенно новый тег в CFMX. Тег <cfimport> объясняет CF странице, где на сервере нужно искать библиотеку с пользовательским тегом, который вы пытаетесь использовать. Он также назван как "префикс", который объясняет путь, по которому вы ссылаетесь на тег в библиотеке. Это делает код более похожим на JSP код и приносит определенную пользу, которая также будет доступна в пользовательских тегах ColdFusion, но это выходит за рамки данной статьи, содержание которой перекрыло бы страницы NDA, если бы речь об этом пошла и далее.

Обратите внимание, также, что тег <cfimport> определяет библиотеку, содержащую описание тега, а не сам тег. Это еще одно отличие от пользовательских тегов CF. JSP теги, в основном, включаются как библиотеки с несколькими тегами, которые часто называют "taglibs", поэтому и атрибут называется taglib. Это более эффективный способ организации установки пользовательских тегов. Конечно, мы можем использовать простую совместимость в организации списков пользовательских тегов CF.

Для уточнения: "calendar" после "cal" есть настоящее имя пользовательского тега. Или, чтобы быть технически более грамотным, это заголовок пользовательского тега в библиотеке тегов. В любом случае, для наших целей достаточно знать, что документация к тегу ответит на вопрос – что написать справа от двоеточия. Также не следует учитывать регистр символов – CF одинаково воспримет имя тега, указанное в любом регистре. В общем, в ваших руках выбрать свой собственный префикс и использовать его с левой стороны двоеточия. Регистр префикса и имени тега не имеют значения. Я говорил, что тег <cfimport> говорит CF где на сервере расположена библиотека пользовательского тега. Как вам найти его на сервере? И где расположить?

 

Установка пользовательского тега JSP

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

В данном случае предлагается ссылка на файлы с расширением как *.jar так и *.tld . Расширение *.tld представляет еще один тип JSP файлов, обеспечивающих поддержку пользовательских тегов. Аббревиатура расшифровывается как "tag library descriptor". Это XML файл. Нам совершенно необязательно знать, как устроен файл, чтобы использовать пользовательский тег. Мы должны уметь использовать файлы *.tld и в этом случае CFMX будет их отрабатывать, но у меня было несколько не очень удачных попыток использовать их, что я определил как недоработки бета-версии продукта.

Все, что нам нужно для работы – это файл с расширением *.jar, который на самом деле представляет из себя файл java архив, который содержит код, определяющий пользовательский тег. Не следует пугаться слова Java. Вам не нужно знать, как работает Java, чтобы использовать пользовательские теги. Помните, в CF тег представлен строкой <cal:calendar> , которая достаточно знакома для разработчика CF. Итак, вы хотите сохранить файл *.jar с сайта (это можно, как известно, сделать двумя путями. Или просто нажать на ссылку дав при этом команду браузеру, или непосредственно выбрать опцию "сохранить как" по правой кнопке мыши.). Сохраните его там, где обычно сохраняете ваши CFMX приложения.

Если корневая директория для сохранения CFMX приложений c:\CfusionMX\wwwroot\ (которую вы указали в конфигурационном файле вашего web-сервера) то вам необходимо создать папку c:\CfusionMX\wwwroot\WEB-INF\lib\ и сохранить в ней скачанный *.jar файл (так как CFMX есть априорно J2EE платформа, структура с директорией WEB-INF об этом говорит, но вам не нужно об этом знать – достаточно просто положить ваши файлы в корень структуры или в любую ее поддиректорию.). После того как файл будет размещен в директории, как в моем случае с бета версией CFMX сервера, вам нужно перезапустить CFMX сервер. Возможно, в следующих версиях этот момент будет изменен.

 

Определение пользовательских тегов

После того как мы расположили *.jar файл в указанном месте, все готово для использования тега <cfimport>. Запомните, еще раз, что JSP пример выглядит так:

<%@ taglib uri="taglib.tld" prefix="cal" %>
Но мы приведем его к виду:
<cfimport taglib="/WEB-INF/lib/caltag.jar" prefix="cal">
Здесь присутствует пара различий. Мы не только используем TAGLIB атрибут вместо URL атрибута, на настоящий момент я буду рекомендовать вам изменить старый путь с *.tld файла на *.jar файл, который вы скачали с сайта. (если я упущу какой-либо момент с использованием *.tld файлов, я упомяну об этом в комментариях к он-лайн версии статьи на сайте SYS-CON).

Помните также, что слэш должен выглядеть как "/" а не "\". Иначе файл не будет найден. Если вы копируете откуда-либо и вставляете в значение опции директиву TAGLIB, не забудьте удалить знак "%" в конце строки, перед знаком ">". Иначе вы получите ошибку "an invalid token".

И последнее. Вы можете подумать: "а что если я хочу использовать пользовательские теги в совмещенных CF шаблонах? Ведь мне достаточно определить тег в Application.cfm.". Этого делать нельзя. Вы также не можете положить тег <cfimport> в файл и включить его в страницу с помощью <cfinclude>. На настоящий момент вам придется разместить тег там, где вы планируете использовать пользовательский тег. Не существует какого-либо места на сервере, где пользовательские теги JSP могли бы быть определены один раз для всех приложений.

Итак, подведем итог. Чтобы определить пользовательский тег нужно выполнить следующие шаги:

Теперь можно смотреть интересующие теги на сайте.

 

Как найти другие библиотеки пользовательских тегов

Ранее я упоминал, что существуют библиотеки пользовательских тегов, в каждом по дюжине или более тегов. Я нашел там подходящие теги для таких распространенных задач как построение списков штатов и стран, формирование запросов, а также определение правильности введения номера кредитной карты. Кроме того, существует много пользовательских тегов, выполняющих совершенно иные задачи. Также я нашел теги для кэширования страниц, обработки пакетов SOAP, работы с WAP и много других, о которых разработчики CF возможно даже и не подозревают.

Возможно, лучшим местом для поиска будут своеобразные "порталы", предназначенные для сбора и хранения всевозможных библиотек пользовательских тегов. На этих порталах также публикуются новшества, введенные в технологию пользовательских тегов JSP. Среди сайтов, указанных здесь, могут присутствовать, а могут и не присутствовать хранилища тегов, необходимых именно вам. Кроме того, некоторые пользовательские теги JSP могут быть использованы только на реальных JSP страницах. Но я в своих экспериментах определил, что многие из них прекрасно работают и в среде CFMX.

Итак, можно выделить следующие сайты, где можно найти библиотеки пользовательских тегов:

Несколько библиотек представляют из себя части установившихся наборов средств разработки, содержащих стандартные наборы тегов, часто используемых JSP разработчиками, в том числе содержащие средства ограничения доступа и сохранения сеансовой информации. Эти наборы тегов, подобны Sun JSP Standard Tag Library (JSTL), the jakarta taglib project и Jakarta Struts project. Они предлагают JSP разработчикам средства framework в форме библиотек пользовательских тегов, но они могут быть интересны и пригодны для использования и CF разработчиками.

На самом деле некоторые библиотеки пользовательских тегов JSP легки в понимании, с помощью тегов обеспечивают полноценную работу со страницей, предоставляют удобное средство работы с базами данных, все, что мы обычно строим с помощью CF средств. Поэтому представляется целесообразным обращать внимание на эти разработки и приводить их к виду, пригодному для использования в CF. Тем не менее, будьте осторожны с этой идеей. CFMX - это не "CF как библиотека JSP тегов". Это гораздо большее. Некоторые JSP разработчики могут видеть CFMX как легкую альтернативу их средству разработки, даже применяя множество библиотек пользовательских тегов, возможно способных предоставить более совершенную систему framework.

В итоге, множество библиотек пользовательских тегов предназначены для работы в составе J2EE серверов приложений, таких как JRun, iPlanet, Orion, Gefion и Oracle Java Web серверы. Реально многие теги могли бы быть очень полезны, но они сложны для понимания. Вы не можете представить, что кто-то может думать об обычных для нас вещах гораздо шире, предлагая средства более широкого применения.

Допустим, некоторые из тегов, доступных из свободно распространяемых библиотек пользовательских тегов, предоставляют ненамного более удобный интерфейс по сравнению с обычными специальными тегами, применяемыми в ColdFusion. Но вы не догадываетесь. На самом деле это подобно появлению нового раздела в Developers Exchange. И это гораздо более обширный мир разработчиков, строящих пользовательские теги JSP.

На каждом сайте, указанном в этой статье, вы сможете найти помощь в использовании пользовательских тегов. Иногда документация по использованию пользовательских тегов может объяснять только синтаксис использования, но зачастую для CF программистов этого достаточно. Более того, многие CF разработчики пользовательских тегов, находясь в поисках необходимых библиотек, будут публиковать свои находки, не забывая о документации к их использованию. Вне всякого сомнения, необходим общий портал по хранению библиотек пользовательских тегов. Я начал работать над одним, расположенным по адресу: http://www.systemanage.com/taglibs/.

 

Еще немного слов

С момента, как вы начали обращать внимание на применение пользовательских тегов JSP в CFMX, вы должны обратить внимание на документацию к CFMX релизам (а также на дополнения в новых версиях, новые возможности), которые будут реализованы, когда новый продукт выйдет в свет.

Что касается дальнейшего изучения пользовательских тегов, некоторые книги содержат описание, отталкиваясь от JAVA или JSP технологий. Они могут быть полезны, но в основном только для тех, кто создает JSP теги или использует их в технологии JSP. Я предложу вашему вниманию пару таких. Вне сомнения, существует много других. Возможно, наиболее подходящей книгой по теме будет "Mastering JSP custom Tags and Tag Libraries", автор: James Goodwill. Книга опубликована не так давно.

В других книгах присутствуют главы, а также есть несколько статей и руководств в электронных изданиях. Думаю, самым лучшим местом для поиска информации является http://www.jspinsider.com/tutorials/jsp/taglibraries.view

 

Когда все сказано и сделано

Теперь вы знаете: что такое пользовательские теги JSP, как и для чего вы можете их использовать в среде ColdFusion и где искать библиотеки тегов. Стоит ли интересоваться этими возможностями? Я думаю, да. Не лишним будет упомянуть, что вам не нужно знать ни JAVA, ни JSP технологии, чтобы владеть пользовательскими тегами. Они реально могут предложить удобные, пригодные для множества задач функциональные модули, которые вы можете включить в свои CF или JSP страницы. Есть еще много интересных идей, которые мы можем обсудить, но этой статьи, думается, будет достаточно, чтобы вы смогли начать применять пользовательские теги.


Источник: www.sys-con.com/coldfusion/articlea.cfm?id=435
Перевод: Иван Долинин (div(at)debut.tomsk.ru) для www.cfug.ru

 


Hosted by uCoz