The ability to define own tag libraries permits Java developers to boil down complex server-side behaviors into simple and easy-to-use elements that content developers can easily incorporate into their JSP pages.

In order to use custom JSP tags, you need to define three separate components: the tag handler class that defines the tag's behavior, the tag library descriptor file that maps the XML element names to the tag implementations, and the JSP file that uses the tag library.

The sample below shows example of custom JSP tag implementation:

////////////// here is very simple JSP tag that just inserts a string 
////////////// into the output

package test;

public class ExampleTag extends TagSupport {

  public int doStartTag() {
    try {
      JspWriter out = pageContext.getOut();
      out.print("Custom tag example " + getClass().getName());
    catch (IOException ioe) {
      System.out.println("Error in ExampleTag: " + ioe);
    }
    return (SKIP_BODY);
  }
}

////////////// here is a tag library descriptor (test.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>csajsp</shortname>
  <urn></urn>
  <info>A sample tags library</info>

  <tag>
    <name>example</name>
    <tagclass>test.ExampleTag</tagclass>
    <info>Simplest example: inserts one line of output</info>
    <bodycontent>EMPTY</bodycontent>
  </tag>

  <!-- Other tags defined later... -->

</taglib>

////////////// here is a page using our custom JSP tag :

<%@page language="java"%>

<%@ taglib uri="test.tld" prefix="test" %>

<html>
  <head>
          <title><test:example /></title>
  </head>
  <body>
    <test:example />
  </body>
</html>