Java/JSP/Tag

Материал из Java эксперт
Перейти к: навигация, поиск

Содержание

A custom tag: empty

   <source lang="java">
 

<taglib>

 <taglib-uri>/jexp</taglib-uri>
 <taglib-location>/WEB-INF/jexp.tld</taglib-location>

</taglib> // create File:jexp.tld in the /WEB-INF/ <!DOCTYPE taglib

 PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
  "http://java.sun.ru/dtd/web-jsptaglibrary_1_2.dtd">
   

<taglib xmlns="http://java.sun.ru/JSP/TagLibraryDescriptor">

 <tlib-version>1.0</tlib-version>
 <jsp-version>1.2</jsp-version>
 <short-name>jexp Simple Tags</short-name>


 <tag>
   <name>tagLifecycle</name>
   <tag-class>com.jexp.TagLifecycle</tag-class>
   <body-content>empty</body-content>
   <attribute>
     <name>attr1</name>
   </attribute>
   <attribute>
     <name>attr2</name>
   </attribute>
 </tag>

</taglib> //compile the following code into WEB-INF\classes\com\jexp package com.jexp; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.Tag; import javax.servlet.jsp.tagext.TagSupport; /* This tag handler outputs information about when different methods

  are called.
*/

public class Lifecycle extends TagSupport {

 // Constructor
 public Lifecycle()
 {
   System.out.println("constructor called");
 }
 // Methods inherited from TagSupport
 public void setPageContext(PageContext p)
 {
   super.setPageContext(p);
   System.out.println("setPageContext() called");
 }
 
 public void setParent(Tag t)
 {
   super.setParent(t);
   System.out.println("setParent() called");
 }
 public void release()
 {
   System.out.println("release() called");
 }
 
 // Code to implement the "attr1" attribute
 private String attr1;
 public String getAttr1()
 {
   return attr1;
 }
 public void setAttr1(String s)
 {
   System.out.println("setAttr1() called with value " + s);
   attr1 = s;
 }
 // Code to implement the "attr2" attribute
 private String attr2;
 public String getAttr2()
 {
   return attr2;
 }
 public void setAttr2(String s)
 {
   System.out.println("setAttr2() called with value " + s);
   attr2 = s;
 }
 public int doStartTag() throws JspException
 {
   System.out.println("doStartTag() called");
   return SKIP_BODY;
 }
 public int doEndTag() throws JspException
 {
   System.out.println("doEndTag() called");
   return super.doEndTag();
 }

}

// start comcat and load the following jsp page in browser <%@ taglib uri="/jexp" prefix="jexp" %> <html>

 <head>
   <title>A custom tag: empty</title>
 </head>
 <body>
   <jexp:tagLifecycle attr1="Rob" attr2="G" />
   <jexp:tagLifecycle attr1="Joe" attr2="S" />
   Check your Tomcat console window for the output
 </body>

</html>


      </source>
   
  
 
  



A custom tag: empty with attributes

   <source lang="java">

///

<taglib>

 <taglib-uri>/jexp</taglib-uri>
 <taglib-location>/WEB-INF/jexp.tld</taglib-location>

</taglib> // create File:jexp.tld in the /WEB-INF/ <!DOCTYPE taglib

 PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
  "http://java.sun.ru/dtd/web-jsptaglibrary_1_2.dtd">
   

<taglib xmlns="http://java.sun.ru/JSP/TagLibraryDescriptor">

 <tlib-version>1.0</tlib-version>
 <jsp-version>1.2</jsp-version>
 <short-name>jexp Simple Tags</short-name>
 
 <tag>
   <name>emptyTagWithAttrs</name>
   <tag-class>com.jexp.EmptyTagWithAttrs</tag-class>
   <body-content>empty</body-content>
   <attribute>
     <name>howMany</name>
   </attribute>
 </tag>

</taglib> //compile the following code into WEB-INF\classes\com\jexp package com.jexp; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; /* This tag handler generates the random numbers. The "howMany" attribute

  specifies how many numbers to generate and display.
*/

public class EmptyTagWithAttrs extends TagSupport {

 // Code to implement the "howMany" attribute
 private int howMany;
 public int getHowMany()
 {
   return howMany;
 }
 public void setHowMany(int i)
 {
   howMany = i;
 }
 
 public int doStartTag() throws JspException
 {
   try 
   {
     JspWriter out = pageContext.getOut();
     for ( int i=0; i<this.howMany; i++ )
     {
       int nextNumber = (int) (Math.random() * 10);
out.println("
  • " + nextNumber + "
  • ");
         } // end of for ()
       }
       catch (IOException e) 
       {
         System.out.println("Error in EmptyTagWithAttrs.doStartTag()");
         e.printStackTrace();
         throw new JspException(e); // throw the error to the error page (if set)
       } // end of try-catch
       return SKIP_BODY;
     }
    

    }

    // start comcat and load the following jsp page in browser <%@ taglib uri="/jexp" prefix="jexp" %> <html>

     <head>
       <title>A custom tag: empty with attributes</title>
     </head>
     <body>
       This page uses a custom tag that has no body content, but takes
       an attribute called "howMany" that specifies how many random
       numbers to generate. Here is its output:
    
      <java2:emptyTagWithAttrs howMany="5" />
     </body>
    

    </html>


          </source>
       
      
     
      
    



    A custom tag: iteration

       <source lang="java">
     
    

    <taglib>

     <taglib-uri>/jexp</taglib-uri>
     <taglib-location>/WEB-INF/jexp.tld</taglib-location>
    

    </taglib> // create File:jexp.tld in the /WEB-INF/ <!DOCTYPE taglib

     PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
      "http://java.sun.ru/dtd/web-jsptaglibrary_1_2.dtd">
       
    

    <taglib xmlns="http://java.sun.ru/JSP/TagLibraryDescriptor">

     <tlib-version>1.0</tlib-version>
     <jsp-version>1.2</jsp-version>
     <short-name>jexp Simple Tags</short-name>
    


     <tag>
       <name>iterationTag</name>
       <tag-class>com.jexp.IterationTag</tag-class>
       <body-content>JSP</body-content>
       <attribute>
         <name>howMany</name>
       </attribute>
     </tag>
    

    </taglib> //compile the following code into WEB-INF\classes\com\jexp package com.jexp; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; /* This tag iterates a number of times, as specified by

      its "howMany" attribute.
    */
    

    public class IterationTag extends TagSupport {

     // Code to implement the "howMany" attribute
     private int howMany;
     public int getHowMany()
     {
       return howMany;
     }
     public void setHowMany(int i)
     {
       howMany = i;
     }
     
     public int doStartTag() throws JspException
     {
       return EVAL_BODY_INCLUDE;
     }
     private int countIterations = 0;
     public int doAfterBody() throws JspException
     {
       int retValue = (countIterations >= (howMany - 1)) ? SKIP_BODY
                                                         : EVAL_BODY_AGAIN;
     
       try 
       {
         JspWriter out = pageContext.getOut();
         if ( countIterations < howMany) 
         {
           int nextNumber = (int) (Math.random() * 10);
           out.println(nextNumber + "
    "); } } catch (IOException e) { System.out.println("Error in IterateTag.doAfterBody()"); e.printStackTrace(); throw new JspException(e); // throw the error to the error page (if set) } // end of try-catch countIterations++; return retValue; } // end of doAfterBody()

    } // end of class IterationTag

    // start comcat and load the following jsp page in browser <%@ taglib uri="/jexp" prefix="java2" %> <html>

     <head>
       <title>A custom tag: iteration</title>
     </head>
     <body>
       output: <p />
       <jexp:iterationTag howMany="5">
         Here is a random number:
       </jexp:iterationTag>
     </body>
    

    </html>

          </source>
       
      
     
      
    



    A custom tag: scripting variable

       <source lang="java">
    


    <taglib>

     <taglib-uri>/jexp</taglib-uri>
     <taglib-location>/WEB-INF/jexp.tld</taglib-location>
    

    </taglib> // create File:jexp.tld in the /WEB-INF/ <!DOCTYPE taglib

     PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
      "http://java.sun.ru/dtd/web-jsptaglibrary_1_2.dtd">
       
    

    <taglib xmlns="http://java.sun.ru/JSP/TagLibraryDescriptor">

     <tlib-version>1.0</tlib-version>
     <jsp-version>1.2</jsp-version>
     <short-name>jexp Simple Tags</short-name>
     
    
     
     <tag>
       <name>defineObjects</name>
       <tag-class>com.conygre.jspdevhandbook.chapter9.EmptyTagWithAttrsExport</tag-class>
       <tei-class>com.conygre.jspdevhandbook.chapter9.EmptyTagExtraInfo</tei-class>
       <body-content>empty</body-content>
       
       
       <attribute>
         <name>howMany</name>
       </attribute>
       <attribute>
         <name>name</name>
       </attribute>
     </tag>
    

    </taglib> //compile the following code into WEB-INF\classes\com\jexp package com.jexp; import javax.servlet.jsp.tagext.TagData; import javax.servlet.jsp.tagext.TagExtraInfo; import javax.servlet.jsp.tagext.VariableInfo; public class EmptyTagExtraInfo extends TagExtraInfo {

     public VariableInfo[] getVariableInfo(TagData tagData)
     {
       String exportedArrayName = (String) tagData.getAttribute("name");
       VariableInfo exportedArrayInfo = new VariableInfo(exportedArrayName,
                                                         "int []",
                                                         true,
                                                         VariableInfo.AT_END);
       return new VariableInfo[] {exportedArrayInfo};
     }
    

    } package com.jexp; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; /* This tag handler generates the random numbers. The "howMany" attribute

      specifies how many number to generate and display. The generated array
      of integers is exported with nested visibility, through an array named
      byte the "name" attribute.
    */
    

    public class EmptyTagWithAttrsExport extends BodyTagSupport {

     // Code to implement the "howMany" attribute
     private int howMany;
     public int getHowMany()
     {
       return howMany;
     }
     public void setHowMany(int i)
     {
       howMany = i;
     }
     // Code to implement the "name" attribute
     private String exportedArrayName;
     public String getName()
     {
       return exportedArrayName;
     }
     public void setName(String s)
     {
       exportedArrayName = s;
     }
     
     public int doStartTag() throws JspException
     {
       int[] outputArray = new int[howMany];
       System.out.println("Generating " + howMany + " numbers");
       for ( int i=0; i<howMany; i++ )
       {
         outputArray[i] = (int) (Math.random() * 10);
       } // end of for ()
       pageContext.setAttribute(exportedArrayName, outputArray);
       return SKIP_BODY;
     }
     /*  public int doEndTag() throws JspException
     {
       return super.doEndTag();
     }*/
    

    }

    // start comcat and load the following jsp page in browser <%@ taglib uri="/jexp" prefix="jexp" %> <%@ taglib uri="http://java.sun.ru/jstl/core" prefix="c" %> <html>

     <head>
       <title>A custom tag: scripting variable</title>
     </head>
     <body>
       output:
       <jexp:defineObjects howMany="5" name="numbers" />
    
      <c:forEach items="${numbers}" var="currentNumber">
    • <c:out value="${currentNumber}" />
    •      </c:forEach>
      
     </body>
    

    </html>


          </source>
       
      
     
      
    



    A custom tag that has neither attributes nor body content.

       <source lang="java">
    

    /// Empty Tag

    <taglib>

     <taglib-uri>/jexp</taglib-uri>
     <taglib-location>/WEB-INF/jexp.tld</taglib-location>
    

    </taglib> // create File:jexp.tld in the /WEB-INF/ <!DOCTYPE taglib

     PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
      "http://java.sun.ru/dtd/web-jsptaglibrary_1_2.dtd">
       
    

    <taglib xmlns="http://java.sun.ru/JSP/TagLibraryDescriptor">

     <tlib-version>1.0</tlib-version>
     <jsp-version>1.2</jsp-version>
     <short-name>jexp Simple Tags</short-name>
     
     <tag>
       <name>emptyTag</name>
       <tag-class>com.jexp.EmptyTag</tag-class>
       <body-content>empty</body-content>
     </tag>
    

    </taglib> //compile the following code into WEB-INF\classes\com\jexp package com.jexp; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; public class EmptyTag extends TagSupport {

     public int doStartTag() throws JspException
     {
       try 
       {
         pageContext.getOut().print("in EmptyTag.doStartTag()");
       }
       catch (IOException e) 
       {
         System.out.println("Error in EmptyTag.doStartTag()");
         e.printStackTrace();
         throw new JspException(e); // throw the error to the error page (if set)
       } // end of try-catch
       return SKIP_BODY;
     }
    

    }

    // start comcat and load the following jsp page in browser

    <%@ taglib uri="/jexp" prefix="jexp" %> <html>

     <head>
       <title>A custom tag: empty</title>
     </head>
     <body>
       This page uses a custom tag that has neither attributes nor body content.
       Here is its output:
    

    <jexp:emptyTag />

     </body>
    

    </html>


          </source>
       
      
     
      
    



    Create your own tag: a custom tag body

       <source lang="java">
    

    ///

    <taglib>

     <taglib-uri>/jexp</taglib-uri>
     <taglib-location>/WEB-INF/jexp.tld</taglib-location>
    

    </taglib>

    // create File:jexp.tld in the /WEB-INF/ <!DOCTYPE taglib

     PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
      "http://java.sun.ru/dtd/web-jsptaglibrary_1_2.dtd">
       
    

    <taglib xmlns="http://java.sun.ru/JSP/TagLibraryDescriptor">

     <tlib-version>1.0</tlib-version>
     <jsp-version>1.2</jsp-version>
     <short-name>jexp Simple Tags</short-name>
     
     <tag>
       <name>bodyContentTag</name>
       <tag-class>com.jexp.BodyContentTag</tag-class>
       <body-content>JSP</body-content>
       <attribute>
         <name>howMany</name>
       </attribute>
     </tag>
    

    </taglib>

    //compile the following code into WEB-INF\classes\com\jexp package com.jexp; import java.io.IOException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.BodyContent; import javax.servlet.jsp.tagext.BodyTagSupport; public class BodyContentTag extends BodyTagSupport {

     private int iterations, howMany;
     public void setHowMany(int i)
     {
       this.howMany = i;
     }
     public void setBodyContent(BodyContent bc)
     {
       super.setBodyContent(bc);
       System.out.println("BodyContent = "" + bc.getString() + """);
     }
     
     public int doAfterBody()
     {
       try 
       {    
         BodyContent bodyContent = super.getBodyContent();
         String      bodyString  = bodyContent.getString();
         JspWriter   out         = bodyContent.getEnclosingWriter();
         if ( iterations % 2 == 0 ) 
           out.print(bodyString.toLowerCase());
         else
           out.print(bodyString.toUpperCase());
         iterations++;
         bodyContent.clear(); // empty buffer for next evaluation
       }
       catch (IOException e) 
       {
         System.out.println("Error in BodyContentTag.doAfterBody()" + e.getMessage());
         e.printStackTrace();
       } // end of catch
       int retValue = SKIP_BODY;
       
       if ( iterations < howMany ) 
         retValue = EVAL_BODY_AGAIN;
       
       return retValue;
     }
    

    } // start comcat and load the bodyContent.jsp in browser <%@ taglib uri="/jexp" prefix="jexp" %> <html>

     <head>
       <title>A custom tag: body content</title>
     </head>
     <body>
       This page uses a custom tag manipulates its body content.
       Here is its output:
    
      <jexp:bodyContentTag howMany="3">
    1. jexp.ru
    2.      </jexp:bodyContentTag>
      
     </body>
    

    </html>


          </source>
       
      
     
      
    



    JSP classic tags

    JSP Directives: HTML tag

       <source lang="java">
    

    /* Beginning JavaServer Pages Vivek Chopra, Jon Eaves, Rupert Jones, Sing Li, John T. Bell ISBN: 0-7645-7485-X

    • /


          </source>
       
      
     
      
    



    JSP Simple Tags

       <source lang="java">
    

    ///

    <taglib>

     <taglib-uri>/jexp</taglib-uri>
     <taglib-location>/WEB-INF/jexp.tld</taglib-location>
    

    </taglib> // create File:jexp.tld in the /WEB-INF/ <!DOCTYPE taglib

     PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
      "http://java.sun.ru/dtd/web-jsptaglibrary_1_2.dtd">
       
    

    <taglib xmlns="http://java.sun.ru/JSP/TagLibraryDescriptor">

     <tlib-version>1.0</tlib-version>
     <jsp-version>1.2</jsp-version>
     <short-name>jexp Simple Tags</short-name>
    


     <function>
       <name>ReverseString</name>
       <function-class>com.jexp.ELFunctions</function-class>
       <function-signature>String reverse(String)</function-signature>
     </function>
     
    

    </taglib> //compile the following code into WEB-INF\classes\com\jexp package com.jexp; public class ELFunctions {

     public static String reverse(String param)
     {
       return new StringBuffer(param).reverse().toString();
     }
    

    }

    // start comcat and load the following jsp page in browser <%@ taglib uri="/jexp" prefix="jexp" %> <html>

     <head>
       <title>An Expression Language Tag</title>
     </head>
     <body>
       output:
    

    ${jexp:ReverseString("Hello World from www.jexp.ru!")}

     </body>
    

    </html>


          </source>
       
      
     
      
    



    JSP tag: advanced tags

    JSP Tag Libraries and JSTL

       <source lang="java">
    

    /* Beginning JavaServer Pages Vivek Chopra, Jon Eaves, Rupert Jones, Sing Li, John T. Bell ISBN: 0-7645-7485-X

    • /


          </source>
       
      
     
      
    



    Logo Tag

       <source lang="java">
    

    package com.jexp;

    ///Custom tag import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.BodyTagSupport; import javax.servlet.jsp.tagext.TryCatchFinally; /**

    * This tag generates a thumbnail image using HTML img tag, next to text
    * message. The user specifies the content of the message and the Heading level
    * (i.e.,
    
    *

    - *

    ) */ public class LogoTag extends BodyTagSupport implements TryCatchFinally { private String heading = null; private String image = null; //stamp.gif, 42 x 54 private String width = null; private String height = null; public int doStartTag() throws JspException { //this method assumes that attribute properties have been set. try { int h = new Integer(heading).intValue(); if (!(h > 0 && h < 7)) throw new JspException( "The "heading" attribute value must between 1 and 6 inclusive."); } catch (Exception e) { throw new JspException(e.getMessage()); } return EVAL_BODY_BUFFERED; } public int doEndTag() throws JspException { JspWriter out = pageContext.getOut(); String imgDir = ((HttpServletRequest) pageContext.getRequest()) .getContextPath() + "/images/"; String message = getBodyContent().getString().trim(); try { out.println(new StringBuffer("<img src=\"").append(imgDir).append( image).append("\" width=\"").append(width).append( "\" height=\"").append(height).append("\" align=\"left\">") .append("<H").append(heading).append(">").append(message) .append("</H").append(heading).append(">").toString()); } catch (java.io.IOException io) { } return EVAL_PAGE; } public void doCatch(Throwable t) { try { pageContext.getOut().println(t.getMessage() + "
    "); } catch (java.io.IOException io) { } } public void doFinally() { //do nothing here, since we don"t have any resources open //like database connections } public void setHeading(String level) { this.heading = level; } public void setImage(String name) { this.image = name; } public void setWidth(String width) { this.width = width; } public void setHeight(String height) { this.height = height; } public void release() { heading = null; image = null; width = null; height = null; } } // package com.jexp; import java.io.IOException; import javax.servlet.jsp.JspContext; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.SimpleTagSupport; /** * This tag generates a thumbnail image using HTML img tag, next to text * message. The user specifies the content of the message and the Heading level * (i.e., * <H1>- * <H2>) */ public class SimpleLogoTag extends SimpleTagSupport { private String heading = null; private String image = null; private String width = null; private String height = null; public void doTag() throws JspException, IOException { JspContext jspContext = getJspContext(); //this method assumes that attribute properties have been set. try { int h = new Integer(heading).intValue(); if (!(h > 0 && h < 7)) throw new JspException( "The "heading" attribute value must between 1 and 6 inclusive."); } catch (Exception e) { throw new JspException(e.getMessage()); } JspWriter out = jspContext.getOut(); String imgDir = (String) jspContext.findAttribute("imgDir"); if (imgDir == null || "".equals(imgDir)) throw new JspException( "No attribute provided specifying the application"s image directory."); out.println(new StringBuffer("<img src=\"").append(imgDir) .append(image).append("\" width=\"").append(width).append( "\" height=\"").append(height).append( "\" align=\"left\">").append("<H").append(heading) .append(">").toString()); getJspBody().invoke(null); out.println(new StringBuffer("</H").append(heading).append(">") .toString()); } public void setHeading(String level) { this.heading = level; } public void setImage(String name) { this.image = name; } public void setWidth(String width) { this.width = width; } public void setHeight(String height) { this.height = height; } } //logo.tag <%@ tag body-content="scriptless" description="Writes the HTML code for inserting a logo." %> <%@ taglib prefix="c" uri="http://java.sun.ru/jsp/jstl/core" %> <%@ attribute name="heading" required="true" rtexprvalue= "true" description="The heading level for the logo."%> <%@ attribute name="image" required="true" rtexprvalue= "true" description="The image name for the logo."%> <%@ attribute name="width" required="true" rtexprvalue= "true" description="The image width for the logo."%> <%@ attribute name="height" required="true" rtexprvalue= "true" description="The image height for the logo."%> <img src="${imgDir}${image}" width= "${width}" height="${height}" align="left"> <H${heading}> <jsp:doBody/></H${heading}> //logoTest.jsp <%@ taglib uri="jexp.ru.tags" prefix="cbck" %> <html> <head><title></title></head> <body> <% session.setAttribute("imgDir",(request.getContextPath() + "/images/")) %> <cbck:logo heading="2" image="stamp.gif" width="42" height="54">Thanks for visiting</cbck:logo> Here"s all the other stuff this page contains... </body> </html> //myTag.tld <taglib xmlns="http://java.sun.ru/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/j2ee http://java.sun.ru/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>cbck</short-name> <uri>jexp.ru.tags</uri> <description>Cookbook custom tags</description> <listener> <listener-class>com.jexp.ReqListener</listener-class> </listener> <tag> <name>logo</name> <tag-class>com.jexp.LogoTag</tag-class> <body-content>scriptless</body-content> <description>This tag writes a logo inside the JSP.</description> <attribute> <name>heading</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <description>The heading level for the logo; 1 through 6.</description> </attribute> <attribute> <name>image</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <description>The image name for the logo.</description> </attribute> <attribute> <name>width</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <description>The image width for the logo.</description> </attribute> <attribute> <name>height</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <description>The image height for the logo.</description> </attribute> </tag> </taglib> </source>

    Tag lifecycle with Attribute

       <source lang="java">
    


    <taglib>

     <taglib-uri>/jexp</taglib-uri>
     <taglib-location>/WEB-INF/jexp.tld</taglib-location>
    

    </taglib> // create File:jexp.tld in the /WEB-INF/ <!DOCTYPE taglib

     PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
      "http://java.sun.ru/dtd/web-jsptaglibrary_1_2.dtd">
       
    

    <taglib xmlns="http://java.sun.ru/JSP/TagLibraryDescriptor">

     <tlib-version>1.0</tlib-version>
     <jsp-version>1.2</jsp-version>
     <short-name>jexp Simple Tags</short-name>
    


     <tag>
       <name>tagLifecycle</name>
       <tag-class>com.jexp.TagLifecycle</tag-class>
       <body-content>empty</body-content>
       <attribute>
         <name>attr1</name>
       </attribute>
       <attribute>
         <name>attr2</name>
       </attribute>
     </tag>
    

    </taglib> //compile the following code into WEB-INF\classes\com\jexp package com.jexp; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.Tag; import javax.servlet.jsp.tagext.TagSupport; /* This tag handler outputs information about when different methods

      are called in the Tag interface.
    */
    

    public class TagLifecycle extends TagSupport {

     // Constructor
     public TagLifecycle()
     {
       System.out.println("TagLifecycle constructor called");
     }
     // Methods inherited from TagSupport
     public void setPageContext(PageContext p)
     {
       super.setPageContext(p);
       System.out.println("setPageContext() called (" + p + ")");
     }
     
     public void setParent(Tag t)
     {
       super.setParent(t);
       System.out.println("setParent() called (" + t + ")");
     }
     public Tag getParent()
     {
       System.out.println("getParent() called");
       return super.getParent();
     }
     
     public void release()
     {
       System.out.println("release() called");
     }
     
     // Code to implement the "attr1" attribute
     private String attr1;
     public String getAttr1()
     {
       return attr1;
     }
     public void setAttr1(String s)
     {
       System.out.println("setAttr1() called with value " + s);
       attr1 = s;
     }
     // Code to implement the "attr2" attribute
     private String attr2;
     public String getAttr2()
     {
       return attr2;
     }
     public void setAttr2(String s)
     {
       System.out.println("setAttr2() called with value " + s);
       attr2 = s;
     }
     public int doStartTag() throws JspException
     {
       System.out.println("doStartTag() called");
       return SKIP_BODY;
     }
     public int doEndTag() throws JspException
     {
       System.out.println("doEndTag() called");
       return super.doEndTag();
     }
    

    }

    // start comcat and load the following jsp page in browser <%@ taglib uri="/jexp" prefix="jexp" %> <html>

     <head>
       <title>The lifecycle of the Tag interface</title>
     </head>
     <body>
       <jexp:tagLifecycle attr1="Joe" attr2="Greenhough" />
       <jexp:tagLifecycle attr1="Rob" attr2="Greenhough" />
       Check the Tomcat console for the output
     </body>
    

    </html>


          </source>
       
      
     
      
    



    Write your own tag

       <source lang="java">
    

    // Sample tld file <!DOCTYPE taglib

     PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
      "http://java.sun.ru/dtd/web-jsptaglibrary_1_2.dtd">
       
    

    <taglib xmlns="http://java.sun.ru/JSP/TagLibraryDescriptor">

     <tlib-version>1.0</tlib-version>
     <jsp-version>1.2</jsp-version>
     <short-name>Mark"s Simple Tags</short-name>
     <tag>
       <name>HelloWorldTag</name>
       <tag-class>test.HelloWorldTag</tag-class>
       <body-content>empty</body-content>
     </tag>
    

    </taglib> // Sample JSP file <%@ taglib uri="webapp/META-INF/simple.tld" prefix="hw" %> <html>

     <body>
       <hw:HelloWorldTag />
     </body>
    

    </html> // Sample Java file package test; import javax.servlet.http.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; import java.util.*; public class HelloWorldTag extends TagSupport {

       public int doStartTag() throws JspException
       {
           try
           {
               JspWriter out = pageContext.getOut();
               HttpServletResponse response = (HttpServletResponse)pageContext.getResponse();
               out.write("Hello world!");
           }
           catch(Exception e)
           {   
               throw new JspException(e.getMessage());
           }
           return EVAL_PAGE;
       }
    

    }


          </source>
       
      
     
      
    



    Your own simple JSP tag

       <source lang="java">
    

    //jexpYourOwnJSPTag.war // add to web.xml

       <taglib>
           <taglib-uri>http://java.sun.ru/jstl/jexp</taglib-uri>
           <taglib-location>/WEB-INF/jexp.tld</taglib-location>
       </taglib>
    

    // create new jexp.tld file in WEB-INF directory //File:jexp.tld <!DOCTYPE taglib

     PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
      "http://java.sun.ru/dtd/web-jsptaglibrary_1_2.dtd">
       
    

    <taglib xmlns="http://java.sun.ru/JSP/TagLibraryDescriptor">

     <tlib-version>1.0</tlib-version>
     <jsp-version>1.2</jsp-version>
     <short-name>jexp Simple Tags</short-name>
     <tag>
       <name>HelloWorldTag</name>
       <tag-class>com.jexp.HelloWorldTag</tag-class>
       <body-content>empty</body-content>
     </tag>
    

    </taglib> // create HelloWorldTag.java under WEB-INF\classes\com\jexp\ // include jsp-api.jar into your CLASSPATH // and compile it package com.jexp; import javax.servlet.http.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; import java.util.*; public class HelloWorldTag extends TagSupport {

       public int doStartTag() throws JspException
       {
           try
           {
               JspWriter out = pageContext.getOut();
               HttpServletResponse response = (HttpServletResponse)pageContext.getResponse();
               out.write("Hello world from www.jexp.ru!");
           }
           catch(Exception e)
           {   
               throw new JspException(e.getMessage());
           }
           return EVAL_PAGE;
       }
    

    }

    // create JSP file: HelloWorldTag.jsp <%@ taglib uri="WEB-INF/jexp.tld" prefix="hw" %>

    <html>

     <body>
       <hw:HelloWorldTag />
     </body>
    

    </html> // start tomcat and load the JSP file in the browser


          </source>