creating custom jsp tag libraries taken from core servlets and javaserver pages from prentice

27
Creating Custom JSP Tag Libraries http://java.sun.com/products/jsp/taglibrari es.html#tutorials Taken from Core Servlets and JavaServer Pages from Prentice Hall and Sun Microsystems Press, http://www.coreservlets.com/. © 2000 Marty Hall; may be freely used or adapted.

Upload: evelyn-taylor

Post on 28-Mar-2015

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

Creating Custom JSP Tag Libraries

http://java.sun.com/products/jsp/taglibraries.html#tutorials

Taken from Core Servlets and JavaServer Pages

from Prentice Hall and Sun Microsystems Press,

http://www.coreservlets.com/.

© 2000 Marty Hall;

may be freely used or adapted.

Page 2: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

JSP & Komponenten

DB

DatenZugriff

AnwendungsLogikDaten

Präsentation

WEB Designer

Java Entwickler

Page 3: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

Beans

<jsp:useBean id="wobs" class="jspcr.beans.weather.Observation">

<jsp:setProperty

name="wobs"

property="airportCode"

value="<%= airportCode %>"/>

</jsp:useBean>

Page 4: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

Custom Tags

<jax:example /> Simple Tag

<jax:debug> Body Tag….</jax:debug>

+ Kompaktere Syntax+ Inhalte bearbeiten

Arbeitsaufwendiger

Aktion starten

Aktion starten

Aktion starten

Inhalt bearbeiten

Page 5: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

Installieren und startenCustomtags benötigen folgende Elemente:

csajsp-taglib.tld Taglib Definition

SimpleExample.jsp JSP

ExampleTag.java Java Klasse

Pfad

Page 6: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

Custom Tags

Ein Tag ist eine Klasse, die

javax.servlet.jsp.tagext.Tag Interface implementiert.

Page 7: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

Hello World Kochrezept

1. File HelloWorldTag.java im ../tag Ordner erstellen

2. import Anweisungen:package com.jax.tagimport javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;

3. Implementierung javax.servlet.jsp.tagext.Tag Interface:public class HelloWorldTag implements Tag {

4. Container Variablen;private PageContext pageContext;private Tag parent;

5. Constructor:public HelloWorldTag(){ super(); }

Page 8: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

6. Diese Methode wird beim Start-Tag ausgeführt:public int doStartTag() throws javax.servlet.jsp.JspTagException { return SKIP_BODY; }

7. Diese Methode wird beim End-Tag ausgeführt:public int doEndTag() throws javax.servlet.jsp.JspTagException {

try{

pageContext.getOut().write("Hello World!"); }catch(java.io.IOException e){

throw new JspTagException("IO Error: " + e.getMessage()); }return EVAL_PAGE; // Den Rest der Seite weiterverarbeiten.}

Hello World Kochrezept

Page 9: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

8. Es braucht noch weitere Methoden:public void release() {}

9. …public void setPageContext(final javax.servlet.jsp.PageContext pageContext) {this.pageContext=pageContext; }

10. …public void setParent(final javax.servlet.jsp.tagext.Tag parent) {this.parent=parent;}

11. Finally, this method has to be implemented:public javax.servlet.jsp.tagext.Tag getParent() {return parent; }

Hello World Kochrezept

Page 10: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

Einfacher (extend TagSupport)

package customtag.tags;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;import java.io.*;

public class ExampleTag extends TagSupport { public int doStartTag() { try { JspWriter out = pageContext.getOut(); out.print("Hello World" + "(Hello World)"); } catch(IOException ioe) { System.out.println("Error in ExampleTag: " + ioe); } return(SKIP_BODY); }}

Page 11: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

pageContext Methoden

getOut

getRequest

getResponse

getServletContext

getSession

JspWriter out = pageContext.getOut();

Page 12: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

SimpleExample.jsp

<HTML><HEAD>

<%@ taglib uri="csajsp-taglib.tld" prefix="jax" %>

<TITLE><jax:example /></TITLE></HEAD>

<BODY><H1><jax:example /></H1><jax:example />

</BODY></HTML>

Page 13: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

taglib.tld (ins gleiche Verzeichnis wie die JSP‘s)

<?xml version="1.0" encoding="ISO-8859-1" ?><!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> <uri></uri> <info> Beispiel Tags für die Vorlesung JAX, http://www.ifi.unibas.ch </info>

<tag> <name>example</name> <tagclass>customtag.tags.ExampleTag</tagclass> <info>Simplest example: inserts one line of output</info> <bodycontent>empty</bodycontent> // JSP Inhalt wird als JSP interpretiert </tag>

</taglib>

Page 14: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

SimplePrimeTag.javapackage customtag.tags;

import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;import java.io.*;import java.math.*;import customtag.Primes;

public class SimplePrimeTag extends TagSupport { protected int len = 50;

public int doStartTag() { try { JspWriter out = pageContext.getOut(); BigInteger prime = Primes.nextPrime(Primes.random(len)); out.print(prime); } catch(IOException ioe) { System.out.println("Error generating prime: " + ioe); } return(SKIP_BODY); }}

Page 15: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

PrimeTag.java

package customtag.tags;

import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;import java.io.*;import java.math.*;import customtag.tags.*;

public class PrimeTag extends SimplePrimeTag { public void setLength(String length) { try { len = Integer.parseInt(length); } catch(NumberFormatException nfe) { len = 50; } }}

Page 16: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

taglib

<tag> <name>simplePrime</name> <tagclass>customtag.tags.SimplePrimeTag</tagclass> <info>Outputs a random 50-digit prime.</info> <bodycontent>empty</bodycontent> </tag>

<tag> <name>prime</name> <tagclass>customtag.tags.PrimeTag</tagclass> <info>Outputs a random N-digit prime.</info> <bodycontent>empty</bodycontent> <attribute> <name>length</name> <required>false</required> </attribute> </tag>

Page 17: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

HeadingTag.jsp Ipackage customtag.tags;

import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;import java.io.*;

public class HeadingTag extends TagSupport { private String bgColor; // The one required attribute private String color = null; private String align="CENTER"; private String fontSize="36"; private String fontList="Arial, Helvetica, sans-serif"; private String border="0"; private String width=null;

public void setBgColor(String bgColor) { this.bgColor = bgColor; }

public void setColor(String color) { this.color = color; }

Page 18: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

HeadingTag.jsp II public int doStartTag() { try { JspWriter out = pageContext.getOut(); out.print("<TABLE BORDER=" + border + " BGCOLOR=\"" + bgColor + "\"" + " ALIGN=\"" + align + "\""); if (width != null) { out.print(" WIDTH=\"" + width + "\""); } out.print("><TR><TH>"); out.print("<SPAN STYLE=\"" + "font-size: " + fontSize + "px; " + "font-family: " + fontList + "; "); if (color != null) { out.println("color: " + color + ";"); } out.print("\"> "); // End of <SPAN ...> } catch(IOException ioe) { System.out.println("Error in HeadingTag: " + ioe); } return(EVAL_BODY_INCLUDE); // Include tag body }

Page 19: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

HeadingTag.jsp III

public int doEndTag() { try { JspWriter out = pageContext.getOut(); out.print("</SPAN></TABLE>"); } catch(IOException ioe) { System.out.println("Error in HeadingTag: " + ioe); } return(EVAL_PAGE); // Continue with rest of JSP page }}

Page 20: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

HeadingExample.jsp<HTML><HEAD><TITLE>Some Tag-Generated Headings</TITLE></HEAD><BODY><%@ taglib uri="csajsp-taglib.tld" prefix="jax" %><jax:heading bgColor="#C0C0C0">Default Heading</jax:heading><P><jax:heading bgColor="BLACK" color="WHITE">White on Black Heading</jax:heading><P><jax:heading bgColor="#EF8429" fontSize="60" border="5">Large Bordered Heading</jax:heading><P><jax:heading bgColor="CYAN" width="100%">Heading with Full-Width Background</jax:heading><P><jax:heading bgColor="CYAN" fontSize="60" fontList="Brush Script MT, Times, serif">Heading with Non-Standard Font</jax:heading><P></BODY></HTML>

Page 21: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

Debug.jsp<HTML><HEAD><TITLE>Using the Debug Tag</TITLE></HEAD>

<BODY><H1>Using the Debug Tag</H1>

<%@ taglib uri="csajsp-taglib.tld" prefix="jax" %>

Top of regular page. Blah, blah, blah. Yadda, yadda, yadda.<P>

<jax:debug><B>Debug:</B><UL> <LI>Current time: <%= new java.util.Date() %> <LI>Requesting hostname: <%= request.getRemoteHost() %> <LI>Session ID: <%= session.getId() %></UL></jax:debug>

<P>Bottom of regular page. Blah, blah, blah. Yadda, yadda, yadda.

</BODY></HTML>

Page 22: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

DebugTag.java

package customtag.tags;

import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;import java.io.*;import javax.servlet.*;

public class DebugTag extends TagSupport { public int doStartTag() { ServletRequest request = pageContext.getRequest(); String debugFlag = request.getParameter("debug"); if ((debugFlag != null) && (!debugFlag.equalsIgnoreCase("false"))) { return(EVAL_BODY_INCLUDE); } else { return(SKIP_BODY); } }}

Page 23: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

FilterTag.java

package customtag.tags;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;import java.io.*;import customtag.*;

public class FilterTag extends BodyTagSupport { public int doAfterBody() { BodyContent body = getBodyContent(); String filteredBody = ServletUtilities.filter(body.getString()); try { JspWriter out = body.getEnclosingWriter(); out.print(filteredBody); } catch(IOException ioe) { System.out.println("Error in FilterTag: " + ioe); } return(SKIP_BODY); }}

Page 24: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

FilterExample.jsp

<HTML><HEAD><TITLE>HTML Logical Character Styles</TITLE>

<BODY><H1>HTML Logical Character Styles</H1>Physical character styles (B, I, etc.) are rendered consistentlyin different browsers. Logical character styles, however,may be rendered differently by different browsers.Here's how your browser(<%= request.getHeader("User-Agent") %>)renders the HTML 4.0 logical character styles:<P>

<%@ taglib uri="csajsp-taglib.tld" prefix="jax" %>

<TABLE BORDER=1 ALIGN="CENTER"><TR CLASS="COLORED"><TH>Example<TH>Result<TR>

Page 25: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

FilterExample.jsp<TD><PRE><jax:filter><EM>Some emphasized text.</EM><BR><STRONG>Some strongly emphasized text.</STRONG><BR><CODE>Some code.</CODE><BR><SAMP>Some sample text.</SAMP><BR><KBD>Some keyboard text.</KBD><BR><DFN>A term being defined.</DFN><BR><VAR>A variable.</VAR><BR><CITE>A citation or reference.</CITE></jax:filter></PRE>

<TD><EM>Some emphasized text.</EM><BR><STRONG>Some strongly emphasized text.</STRONG><BR><CODE>Some code.</CODE><BR><SAMP>Some sample text.</SAMP><BR><KBD>Some keyboard text.</KBD><BR><DFN>A term being defined.</DFN><BR><VAR>A variable.</VAR><BR><CITE>A citation or reference.</CITE>

</TABLE></BODY></HTML>

Page 26: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

Taglibs

Page 27: Creating Custom JSP Tag Libraries  Taken from Core Servlets and JavaServer Pages from Prentice

Praktikum

Frohe Festtage

1. Bean Übung beenden

2. Beispiele Customtags durchspielen

3. Eine Taglib von Apache austesten

http://jakarta.apache.org/taglibs/index.html