JSP自定义标签

时间:2023-01-29 13:23:48
JSP自定义标签      需要在WEB-INFO/lib下导入:                     jstl.jar  standard.jar(官网提供下载)
     为了解决jsp页面的丑陋和难以阅读,以及jsp和html页面混乱,美工人员难以开发,因而使用jsp自定义标签库      1、Jsp2开发标签库的步骤:           1.开发自定义标签处理类,           2.建立一个*.tld文件,每个*.tad文件对应一个标签库,一个标签库对应多个标签           3.在jsp页面中使用自定义标签            2、Jsp自定义标签库要求:           1.继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport,如果要动态属性还要实现dynamicAttributes类           2.如果标签类包含属性,每个属性都要提供get和set方法           3.重写doTag()方法,这个方法负责生成页面内容。
     3、建立tld文件           1.可以在Tomcat下的webapps/examples/WEB_INFO/jsp2下的.tld文件复制过来修改。           2.taglib是根元素,有如下三个子元素:                1)tlib-varsion:指定标签库实现的版本                2)short-name:该标签库的默认短名                3)uri:这个属性非常重要,指定标签库的uri相当于唯一标识           3.每个taglib下有多个tag,tag有一下属性                1)name:该标签的名称,很重要,在jsp页面就是通过name来使用标签的。                2)tag-class:指定标签的处理类                3)body-content:指定标签的内容:                     。tagdependent:指定标签处理类自己负责处理标签体。                     。empty:指定该标签只能作为空标签使用                     。scriptless:指定该标签的标签体可以使用静态的html元素、表达式语言、但不能出现jsp脚本。                     。jsp:指定该标签的标签体可以使用jsp脚本,但在jsp2规范中不再推荐使用jsp,所以实际上body-content元素的值                    不能是jsp。                4、使用标签:(参考疯狂J2EE轻量级企业开发)            1.导入标签库 2.使用标签 <%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib uri="www.duriancoder.com" prefix="mytag"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body bgcolor="#ffffc0">    <h2>下面显示的是自定义标签中的内容</h2>    <mytag:helloWorld/><br/></body></html>            3.带属性的标签: //.jsp<durian:query    driver="com.mysql.jdbc.Driver"    url="jdbc:mysql://localhost:3307/webdemo"    username="root"    password="henhaowo5"    sql="select * from user" /><br/>//.tld <tag>        <name>query</name>        <tag-class>com.duriancoder.tag.QueryTag</tag-class>        <body-content>empty</body-content>        <attribute>            <name>driver</name>            <required>true</required>            <fragment>true</fragment>        </attribute>    </tag>//class类继承simpleTagsupport类给属性提供相应的getset方法,实现doTag()方法           4.带标签体的标签: //.jsp<%        List<String> a = new ArrayList<String>();        a.add("My name is");        a.add("Durian");        a.add("Coder");        pageContext.setAttribute("a", a);     %>     <table border="1px" bgolor="#aaaadd" width="300">     <!-- 使用迭代器标签,对a集合进行迭代 -->        <mytag:iterator item="item" collection="a">            <tr>                <td>${pageScope.item}</td>            </tr>        </mytag:iterator>//.tld  <tag>        <name>iterator</name>        <tag-class>com.duriancoder.tag.IteratorTag</tag-class>        <body-content>scriptless</body-content>        <attribute>            <name>collection</name>            <required>true</required>            <fragment>true</fragment>        </attribute>        <attribute>            <name>item</name>            <required>true</required>            <fragment>true</fragment>        </attribute>    </tag>//.classprivate String collection;private String item;@Override    public void doTag() throws JspException, IOException {        Collection itemList = (Collection)getJspContext().getAttribute(collection);        //遍历集合        for (Object s : itemList) {            //将集合的元素设置到page范围内            getJspContext().setAttribute(item, s);            //输出标签体            getJspBody().invoke(null);        }    }           5.动态属性的标签:处理类要继承simpleTagSupport实现dynamicAttributes类       .classpublic class DynaAttributesTag extends SimpleTagSupport implements DynamicAttributes {    private ArrayList<String> keys = new ArrayList<String>();    private ArrayList<Object> values = new ArrayList<Object>();
    @Override    public void doTag() throws JspException, IOException {        JspWriter out = getJspContext().getOut();        //此处只是简单的输出每个属性        out.println("<ol>");        for (int i = 0 ; i < keys.size(); i++) {            String key = keys.get(i);            Object value = values.get(i);            out.println("<li>" + key + "=" + value + "</li>");        }        out.println("</ol>");    }
    @Override    public void setDynamicAttribute(String uri, String localName, Object value)            throws JspException {        //添加属性名、值        keys.add( localName );        values.add( value );    }
}
//.tld <tag>        <name>dynaAttr</name>        <tag-class>com.duriancoder.tag.DynaAttributesTag</tag-class>        <body-content>empty</body-content>        <!-- 指定支持动态属性 -->        <dynamic-attributes>true</dynamic-attributes>    </tag>
//.jsp<h2>下面显示的是自定义标签中的内容</h2>    <h4>指定两个属性</h4>    <mytag:dynaAttr name="durian" url="www.duraincoder.com"/></br>    <h4>指定4个属性</h4>    <mytag:dynaAttr 名字="durian" 价格="30/kg" 产地="CS" />