使用自定义的taglib可以是我们对页面数据的处理放在后台,不仅使用方便,而且影藏了处理逻辑,也更加的安全。

需要使用到servlet.jar

1.在web-inf下建立taglib.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>1.2</jsp-version>
    <short-name>app</short-name>
    <uri>http://com.hh/taglib</uri><!--页面引用的地址-->
    <display-name>My Tags</display-name>
    <tag>
        <name>myTaglib</name>
        <tag-class>com.hh.MyTaglib</tag-class>
        <attribute>
            <name>name</name>
            <required>true</required><!--是否必须输入-->
            <rtexprvalue>true</rtexprvalue><!--当为true时, 表示该自定义标签的该属性的值可以直接指定或者通过动态计算指定为false时表示只能直接指定,如能否直接使用el表达式-->
        </attribute>
        <attribute>
            <name>age</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
</taglib>

2.写jave类进行逻辑处理

package com.hh;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import java.io.IOException;

/**
 * Created by hh on 15-10-30.
 *需要引入servlet.jar
 */
public class MyTaglib  extends TagSupport{
    private String name;//需要对参数写get,set方法
    private int age;
    @Override
    public int doStartTag() throws JspException {
        return super.doStartTag();
    }

    /**
     * EVAL_BODY_INCLUDE:把Body读入存在的输出流中,doStartTag()函数可用
     * EVAL_PAGE:继续处理页面,doEndTag()函数可用
     * SKIP_BODY:忽略对Body的处理,doStartTag()和doAfterBody()函数可用
     * SKIP_PAGE:忽略对余下页面的处理,doEndTag()函数可用
     * EVAL_BODY_TAG:已经废止,由EVAL_BODY_BUFFERED取代
     * EVAL_BODY_BUFFERED:申请缓冲区,由setBodyContent()函数得到的BodyContent对象来处理tag的body,如果类实现了BodyTag,那么doStartTag()可用,否则非法
     * @return
     * @throws JspException
     */
    @Override
    public int doEndTag() throws JspException {
        JspWriter out = pageContext.getOut();
        try {
            out.print("你输入的是:"+name+",年龄是:"+age);
        }catch (IOException e){

        }
        return EVAL_BODY_INCLUDE;
    }

    public String getName() { return name;}

    public void setName(String name) {this.name = name;}

    public int getAge() { return age;}

    public void setAge(int age) { this.age = age;}
}

3.页面调用

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ taglib prefix="myTag" uri="http://com.hh/taglib" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h2>Hello World!</h2>
要显示的信息1:<myTag:myTaglib name="张三"></myTag:myTaglib><br>
要显示的信息2:<myTag:myTaglib name="张三" age="20"></myTag:myTaglib>
</body>
</html>