The idea behind tag libraries in JSP looks very good on paper. Tag libraries allow you to associate Java code to a series of XML-like tags that are packaged as a library. The user of tag libraries (mainly the JSP developer) will use these tags to develop an application. The more complete the tag libraries are, the need to write Java code directly inside the JSP page or via JavaBeans diminishes. Taglibs provide a reusable framework for J2EE application development, but their key to success is availability. The same way we go to repositories to retrieve a particular DTD or XML Schema, we need a repository of taglibs.
The Jakarta taglib project (www.apache.org) is one such repository of custom tag libraries contributed by various developers. The spectrum of libraries is very broad including taglibs for JNDI, JDBC, and XSL processing. Every library is placed in its own directory. The Java class files making up the library are packaged as a jar file. The Tag Library Descriptor (TLD) file contains the necessary information for deployment and using the taglib. Reviewing the TLD file is a good way to get familiarizes with the library, its components and its purpose. Documentation and example applications using the taglib are packaged as WAR files ready to be deployed to a servlet/JSP container such as Tomcat.
In the latest distribution, there are 19 libraries. Some of them like request, response, and session, cover the basic aspects of servlet/JSP API by wrapping these objects and making them available via the taglib interface. Yet, others provide unique and interesting functionality. For example, the scrape library can be used to extract portions of other web pages. The extracted pieces can then be used inside the current page. Many portal engines are based on this idea. Using tags like <scrape> and <result> and by modifying their attributes, one can create a JSP page that contains content from other pages. Here is a code fragment from the sample application extracting weather information:
<scrp:pageurl="http://weather.noaa.gov/cgi-bin/fmtbltn.pl? file=forecasts/city/mo/columbia.txt" time="11"> <scrp:scrape id="weather1" begin="<PRE>" end="</PRE>" anchors="true"/> <scrp:scrape id="weather2" begin="<PRE>" end="</PRE>" anchors="false"/> <scrp:scrape id="weather3" begin="<PRE>" end="</PRE>" anchors="false" strip="true"/> </scrp:page>The result can be inserted in the page with a single line like this:
Another interesting library is regexp bringing Perl regular expressions to JSP. <regexp> identifies the regular expression and <text> identifies the text string in use. Tags like <existmatch>, <substitute>, <split> and <match> can be used to apply the regular expression to the text string.
The jdbc and jndi libraries provide a gateway to JDBC and JNDI APIs. They encapsulate the most common aspects of these APIs like opening a connection, performing a query/lookup and retrieval of the results. It is conceivable that taglibs for EJB and JMS interactions can be written in a similar manner. To ease integration of XML documents inside a JSP page, you can use the xsl library. It allows you to transform XML documents via XSL to be used by the current application or others.
Taglibs represent distinct software components that can easily be reused. The interface to these reusable components is not JavaBeans or a Java class file, but XML-like tags and attributes. So while under the hood, there are Java classes and code that make up the taglib, the user of the taglib will never see them. The user will merely be putting together tags to make up the application. Of course this model only works when libraries are available for the application function the user is interested in and repositories such as Jakarta taglib are a step in the right direction to host and share the various libraries.
About the Author
Piroz Mohseni is president of Bita Technologies, focusing on business improvement through the effective use of technology. His areas of interest include enterprise Java, XML, and e-commerce applications.
# # #