Co se naučíme?
Vytvářet vlastní JSP tagy a používat je ve vlastních aplikacích. Tenhle návod ale nelze brát jako všeobjemný návod, jak vytvářet jakékoli tagy, projdeme jenom základní vlastnosti. Těm z vás, kterým to nestačí, doporučuji ještě java.sun.com.
Co bychom už měli umět?
- Používat JSP alespoň na základní úrovni.
- Být zvyklí na svůj JSP/servlet kontejner (například tomcat, který budeme používat my).
- Chápat základy Javy. Pokud však chcete JSP custom tagy pouze používat, nemusíte ani to.
Příklad
Dejme tomu, že jsme e-magazín o programování pro web. Na našich stránkách budeme často zobrazovat úryvky HTML a jiných tagovacích jazyků. Ale v HTML nemůžeme zobrazovat znaky < a >, musíme je nahradit znaky < a >. Také bychom chtěli tagy zvýraznit nějakou barvou. Normálné bychom museli každý úryvek kódu upravovat ručně, což je pomalé a často přitom něco přehlédneme. Vytvoříme si tedy JSP tag, který to všechno udělá za nás (všechny příklady na této stránce byly upraveny právě tímto tagem).
Špinavá práce v javabeanu
Úryvek kódu javabeanu, který provádí tuto práci.
public String format(String doc, String tagcolor) { int length = doc.length(); StringBuffer doc_buffer = new StringBuffer(); String buff; for(int i=0; i<length; i++) { buff = String.valueOf(doc.charAt(i)); if(buff.equals("<")) { buff = "<font color=\""+tagcolor+"\"><"; } else if(buff.equals(">")) { buff = "></font>"; } else if(buff.equals("&")) { buff = "&"; } doc_buffer.append(buff); } return doc_buffer.toString(); }
Metoda nejdříve natáhne dokument(doc) a barvu, kterou mají mít zobrazované tagy (tagcolor). Vytvoří si StringBuffer, do kterého zapisuje výsledek. Poté projde celý dokument znak po znaku a případně znak nahradí HTML kódem, výsledek vrátí jako String.
Napojení javabeanu na tag
Tato metoda v třídě FormatTag zajišťuje volání javabeanu při použití tagu na stránce.
public int doEndTag() throws JspTagException { try { FormatBean format = new FormatBean(); String doc = getBodyContent().getString(); pageContext.getOut().write(format.format(doc, color)); } catch (IOException e) { throw new JspTagException("hoops - chyba FormatTag "+e.toString()); } return EVAL_PAGE; }
Nejdříve iniciujeme FormatBean. Získáme text z těla tagu a jako výsledek vypíšeme upravený text z metody format();
Popis tagu
Tag library descriptor je XML dokument popisující tagy, má koncovku tld.
<?xml version="1.0" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>Format</shortname> <tag> <name>Format</name> <tagclass>FormatTag</tagclass> <attribute> <name>color</name> </attribute> </tag> </taglib>
Začlenění tagu do kontejneru
Abyste mohli používat tento tag, musíte ho zahrnout do konfiguračního souboru web.xml.
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd"> <web-app> <taglib> <taglib-uri>Format</taglib-uri> <taglib-location>/WEB-INF/FormatTag.tld</taglib-location> </taglib> </web-app>
Taglib-uri je jméno knihovny a musí být unikatní pro celou web aplikaci.
Použití tagu v JSP stránce
V každé stránce, kde chcete použít tag, musíte nadefinovat hlavičku:
<%@taglib uri="Format" prefix="format"%>
Vlastní použití vidíte tady, atribut color je volitelný.
<format:Format color="#6a89fc"> <table> <tr><td>policko</td></tr> </table> </format:Format>
Všechny části příkladu najdete zazipovány tady.
Závěr
Vlastní tagy jsou určitě cestou budoucnosti, která se velice rychle stává součastností (PHP zamysli se :-). Řeší věčný problém mezi programátory a grafiky. Kdokoli, nic netušící o Javě, může rychle a bez větších problémů používat už hotové knihovny. A programátorům nehrozí, že grafik smaže ; a aplikace se zhroutí.
Existuje také projekt TagLibs, kde najdete tagy skoro na všechno.