1 / 25

JSP – taguri definite de utilizator

C ustom tag : <prefixTag:numeTag [ atribute ] > corpTag </prefixTag:numeTag> sau <prefixTag:numeTag [ atribute ] /> Functionalitatea asigurata de un bean ce conţine metode de tratare : inceput de tag , atribute, corp tag , sfarsit de tag

bonner
Download Presentation

JSP – taguri definite de utilizator

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Custom tag: • <prefixTag:numeTag [ atribute ] > corpTag </prefixTag:numeTag> sau • <prefixTag:numeTag [ atribute ] /> • Functionalitatea asigurata de un bean ce conţine metode de tratare: • inceput de tag, atribute, corp tag,sfarsit de tag • Structura de date asociata tagului presupune informaţii în patru locuri: • In fişierul (fişierele) JSP se declară noul prefixTag şi numeTagprin <%@ taglib • In descriptorul aplicaţiei$CONTEXT/WEB-INF/web.xmlse specifica, numeTag şi fisierul .tldasociat • In $CONTEXT/WEB-INF/intr-un fisier .tld se descrie formal tagul, incluzand numeTag si locul beanului asociat. • In $CONTEXT/WEB-INF/classes/se afla beanul (.class) care descrie funcţionalităţile tagului • Exemplu: marcarea unei “semnaturi” a serverului JSP: • <prim:Semnat/> sau <prim:Semnat></prim:Semnat> JSP – taguri definite de utilizator F. Boian, JSP

  2. <%@ taglib uri="numeTag" prefix="prefixTag" %> Stringul prefixTag este folosită doar în pagina JSP, pentru a identifica tagurile utilizator. Stringul numeTag este folosit pentru identificarea descrierii formale a tagului. Exemplu: Customtag 1: pagina jsp <html><head><title>Utilizare taguri definite</title></head> <body> <%@ taglib uri="/Semnat" prefix=“utile" %> <table border="4"><tr><td><utile:Semnat/></td> <td><utile:Semnat></utile:Semnat> </td></tr></table></html> F. Boian, JSP

  3. În fişierul web.xml trebuie declarate noile tag-uri. Pentru declarare se foloseste <taglib>, in care se specifica daua taguri: <taglib-uri> ce contine numele din <%@ taglib uri=“ … prefixat de / . <taglib-location> unde se specifica locatia fisierului descriptor .tld asociat. Declararea se face după descrierile <servlet>, daca acestea exista. Exemplu: Customtag 2: web.xml <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <taglib> <taglib-uri>/Semnat</taglib-uri> <taglib-location>/WEB-INF/utiletaglib.tld</taglib-location> </taglib> </web-app> F. Boian, JSP

  4. Descrierea formală a unui tag utilizator se face într-un fişier de tip .tld, numit bibliotecă de tag--uri (taglib). In el sunt descrise unul sau mai multe tag-uri. • Principalele informaţii despre un tag sunt specificate în <tag> si sunt: • numele tag-ului (<name>); • pachetul şi clasa Java care descrie funcţionalităţile tag-ului (<tag-class>); • atributele care pot să apară în tag (<attribute>/<name>), obligatoriu sau nu (<required>true sau false). • Tipul continutului corpului: empty, JSP, tagdependent, scriptless • Exemplu: Customtag 3: fisierul .tld <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <tag> <name>Semnat</name> <tag-class>tag.Semnatura</tag-class> <bodycontent>empty</bodycontent> </tag> </taglib> F. Boian, JSP

  5. Exemplu (revenim cu detalii): Customtag 4: beanul java package tag; import java.net.*; import java.io.*; import java.util.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class Semnaturaextends SimpleTagSupport { public Semnatura() { super(); } public void doTag() throws JspException, IOException { try { JspWriter out = this.getJspContext().getOut(); out.println((InetAddress.getLocalHost()).getCanonicalHostName()+ " "+new Date()); } catch(Exception e) { e.printStackTrace(); } } } F. Boian, JSP

  6. <project name="war-task" default="create-war" basedir="."> <echo message="Initializeaza proprietatile" /> <property file="build.properties" /> <property name="build" value="./build" /> <property name="dist" value="./dist" /> <path id="servlet.classpath"> <fileset dir="${tomcat.dir}/common/lib"> <include name="*.jar" /> </fileset> </path> <target name="prepare"> <echo message="Sterge vechile ${build} si ${dist}" /> <delete dir="${build}" /> <mkdir dir="${build}" /> <delete dir="${dist}" /> <mkdir dir="${dist}" /> </target> <target name="compile" depends="prepare" description="Compileaza servlet-ul"> <javac srcdir="${src}" destdir="${build}" includes="**/*.java"> <classpath refid="servlet.classpath" /> </javac> </target> Customtag: fisierul de creeare build.xml F. Boian, JSP

  7. Customtag 5: fisierul de creeare build.xml <target name="create-war" description="creates o arhiva de aplicatie web" depends="compile"> <copy file="${meta}/web.xml" todir="tmp/WEB-INF" /> <copy file="${meta}/utiletaglib.tld" todir="tmp/WEB-INF" /> <copy todir="tmp/WEB-INF/classes"> <fileset dir="${build}" /> </copy> <copy todir="tmp"> <fileset dir="${web}" /> </copy> <jar destfile="${dist}/${nume.arhiva}.war" basedir="tmp" /> <delete dir="${tomcat.dir}/webapps/${nume.arhiva}"/><!-- numai pentru localhost--> <delete dir="${tomcat.dir}/work/Catalina/localhost/${nume.arhiva}"/><!-- numai pentru localhost--> <copy file="${dist}/${nume.arhiva}.war" todir="${tomcat.dir}/webapps"/> </target> </project> F. Boian, JSP

  8. Customtag: relatii F. Boian, JSP

  9. Customtag, efectul: F. Boian, JSP

  10. API pentru implementare customtag: 5 interfete, 2 clase, 6 constante • EVAL_PAGE – continua evaluarea paginii dupa doEndTag • SKIP_PAGE – sare restul paginii dupa doEndTag • EVAL_BODY_BUFFERED – creeaza un buffer cu BodyContent dupa doStartTag • EVAL_BODY_INCLUDE – evalueaza body in streamul out existent • EVAL_BODY_AGAIN – reevalueaza body dupa doAfterBody • SKIP_BODY – sare evaluarea body F. Boian, JSP

  11. API customtag: BodyTag - BodyTagSupport SimpleTag – SimpleTagSupport, F. Boian, JSP

  12. <html><head><title>Utilizare taguri definite</title></head><body> <%@ taglib uri="/Power" prefix="pow" %> <table border="4"><tr><td><pow:Power numar="5" exponent="3"/>Face SKIP_BODY si nu calculeaza ca este tag vid!</td> <td><pow:Power numar="7" exponent="2">Are corp si calculeaza: </pow:Power></td></tr></table></html> Exemplul 2, putere: ex2.jsp si web.xml <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <taglib> <taglib-uri>/Power</taglib-uri> <taglib-location>/WEB-INF/tagpow.tld</taglib-location> </taglib> </web-app> F. Boian, JSP

  13. Exemplul 2, putere: tagpow.tld <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name/> <tag> <name>Power</name> <tag-class>tag.Putere</tag-class> <bodycontent>JSP</bodycontent> <!-- Cu empty nu merge IterationTag, cu tagdependent intra in ciclu infinit-->\ <attribute> <name>numar</name> <required>true</required> </attribute> <attribute> <name>exponent</name> <required>true</required> </attribute> </tag> </taglib> F. Boian, JSP

  14. package tag; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class Putere implements IterationTag { PageContext pageContext; private int numar, exponent, i=0, r=1; public void setNumar(int numar) { System.out.println("setNumar"+numar); this.numar = numar; } public void setExponent(int exponent) { System.out.println("setExponent"+exponent); this.exponent = exponent; } public int doStartTag() { System.out.println("doStartTag"); return EVAL_BODY_INCLUDE; } Exemplul 2, putere: Putere.java F. Boian, JSP

  15. public int doAfterBody() { i++; r *= numar; System.out.println("doAfterBody"+i); if (i== exponent) return SKIP_BODY; else return EVAL_BODY_AGAIN; } public int doEndTag() throws JspException { System.out.println("doEndTag"); try { JspWriter out = this.pageContext.getOut(); out.println(numar+"^"+exponent+"="+r); } catch (Exception e){ e.printStackTrace(); } return EVAL_PAGE; } public void setParent(Tag t) {} public Tag getParent() { return null;} public void setPageContext(PageContext p) {pageContext =p;} public void release() {} } Exemplul 2, putere: Putere.java F. Boian, JSP

  16. In consola Tomcat: INFO: Deploying web application archive ex2.war setNumar5 setExponent3 doStartTag doEndTag setNumar7 setExponent2 doStartTag doAfterBody1 doAfterBody2 doEndTag Exemplul 2,Efectul: F. Boian, JSP

  17. <html><head><title>Utilizare taguri definite</title></head><body> <%@ taglib prefix="utile" uri="/WEB-INF/utiletaglib.tld" %> <% java.util.Random r = new java.util.Random(); %> <b><i>Semnatura cu tag vid:</i></b> <utile:Semnat/> <table border="4"> <tr> <td> <h6>Liniile in ordinea sosirii (implicit)</h6> <ol type="1" start="1"> <utile:Ordonat>Prima linie Doua numere generate automat <% for (int i=0; i<2; i++) { %> <%=r.nextInt() %> <% } %> Penultima linie In sfarsit, ultima linie</utile:Ordonat> </ol> </td> <td> <h6>Liniile ordonate alfabetic</h6> <ol type="1" start="1"> <utile:Ordonat tip="linii">Prima linie Doua numere generate automat <% for (int i=0; i<2; i++) { %> <%=r.nextInt() %> <% } %> Penultima linie In sfarsit, ultima linie</utile:Ordonat> </ol> </td> </tr> Exemplul 3, body: jsp(1) F. Boian, JSP

  18. Exemplul 3: jsp(2) <tr> <td> <h6>Cuvintele ordonate alfabetic</h6> <ol type="1" start="1"> <utile:Ordonat tip="cuvinte">Prima linie Doua numere generate automat <% for (int i=0; i<2; i++) { %> <%=r.nextInt() %> <% } %> Penultima linie In sfarsit, ultima linie</utile:Ordonat> </ol> </td> <td> <h6>Liniile nu se afiseaza</h6> <ol type="1" start="1"> <utile:Ordonat tip="alandala">Prima linie Doua numere generate automat <% for (int i=0; i<2; i++) { %> <%=r.nextInt() %> <% } %> Penultima linie In sfarsit, ultima linie</utile:Ordonat> </ol> </td> </tr></table> <b><i>Semnatura cu tag nevid:</i></b> <utile:Semnat></utile:Semnat> </body></html> F. Boian, JSP

  19. Exemplul 3: web.xml <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <taglib> <taglib-uri>/Semnat</taglib-uri> <taglib-location>/WEB-INF/utiletaglib.tld</taglib-location> </taglib> <taglib> <taglib-uri>/Ordonat</taglib-uri> <taglib-location>/WEB-INF/utiletaglib.tld</taglib-location> </taglib> </web-app> F. Boian, JSP

  20. <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name/> <tag> <name>Semnat</name> <tag-class>tag.Semnatura</tag-class> <bodycontent>Empty</bodycontent> </tag> <tag> <name>Ordonat</name> <tag-class>tag.OrdonareDeStringuri</tag-class> <bodycontent>JSP</bodycontent> <attribute> <name>tip</name> <required>false</required> </attribute> </tag></taglib> Exemplul 3: utiletaglib.tld F. Boian, JSP

  21. Exemplul 3: OrdonareDeStringuri.java (1) package tag; import java.net.*; import java.util.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class OrdonareDeStringuri extends BodyTagSupport { private String tip = "fifo"; public OrdonareDeStringuri() { } public void setTip(String tip) { this.tip = tip; }//OrdonareDeStringuri.setTip public int doStartTag() throws JspException { return EVAL_BODY_BUFFERED; }//OrdonareDeStringuri.doStartTag public void release() { tip = null; super.release(); }//OrdonareDeStringuri.release F. Boian, JSP

  22. Exemplul 3: OrdonareDeStringuri.java (2) public int doAfterBody() throws JspException { StringTokenizer st = null; int i, j, n; String t; String[] ts; BodyContent bc = getBodyContent(); JspWriter out = getPreviousOut(); try { if (tip.equalsIgnoreCase("cuvinte")) st = new StringTokenizer(bc.getString(),"\n\r\t "); else if ((tip.equalsIgnoreCase("linii"))|| (tip.equalsIgnoreCase("fifo"))) st = new StringTokenizer(bc.getString(),"\n\r"); else st = new StringTokenizer("EROARE: atributul <b>tip=\""+tip+"\"</b> este incorect!", "\n"); F. Boian, JSP

  23. Exemplul 3: OrdonareDeStringuri.java (3) n = st.countTokens(); ts = new String[n]; for (i=0; i<n; i++) ts[i] = (st.nextToken()).trim(); if (!tip.equalsIgnoreCase("fifo")) for(i=0; i<n-1; i++) for (j=i+1; j<n; j++) if (ts[i].compareTo(ts[j]) > 0) { t = ts[i]; ts[i] = ts[j]; ts[j] = t; }//if, for, for for (i=0; i<n; i++) if (ts[i].length() > 0) out.println("<li> "+ts[i]+" </li>"); }//try catch(Exception e) { e.printStackTrace(); }//catch return SKIP_BODY; }//OrdonareDeStringuri.doAfterBody }//OrdonareDeStringuri F. Boian, JSP

  24. Exemplul 3: Efectul: F. Boian, JSP

  25. F. Boian, JSP

More Related