自定义JSP标签需要继承TagSupport类    然后在里面重写doEndTag()方法,框架大概如下: import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; public class PageTag extends TagSupport{    private static final long serialVersionUID = 8028854417096217249L;    private final Logger logger = Logger.getLogger(PageTag.class);    protected String id;    /**     * 当前页     */    protected int pageNum = 1;    /**     * 每页大小     */    protected int pageSize = 10;    /**     * 总条数     */    protected int totalObject;    /**     * 总页数     */    protected int totalPageNum;        private int multiLineShow = 1;    /**     * 是否双排展示     */    private boolean doubleShow = false;    /**     * 是否是采用 LI布局     */    private boolean liShow = false;    /**     * 是否为弹出层显示     */    protected boolean dialogShow = false;    private Collection
 items;    public int doEndTag() throws JspException    {        genPageInfo();        return TagSupport.SKIP_BODY;    }    protected void genPageInfo()    {        ServletContext servletContext = pageContext.getServletContext();        Configuration configuration = new Configuration();        configuration.setDefaultEncoding("GBK");        configuration.setServletContextForTemplateLoading(servletContext, "/");        try        {            Template template = configuration.getTemplate(getTemplatePath());            Writer out = pageContext.getOut();            getPageInfo();            Map
 rootMap = getResultMap();            template.process(rootMap, out);        }        catch (Exception e)        {            logger.error("生成分页标签错误" + e, e);        }    }    protected Map
 genRootMap()    {        Map
 rootMap = new HashMap
();        rootMap.put("multiLineShow", multiLineShow);        rootMap.put("liShow", liShow);        return rootMap;    }        public void getPageInfo()    {        HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();        if (isAjaxPage())        {            Page page = (Page)request.getAttribute("page");            totalObject = page.getTotalObject();            pageNum = page.getPageNum();            pageSize = (Integer)request.getAttribute("pageSize");        }        else        {            totalObject = ((null == items) ? 0 : items.size());        }        if (isDoubleShow())        {            multiLineShow = 2;        }        totalPageNum = (totalObject - 1) / pageSize + 1;    }    private Map
 getResultMap()    {        Map
 rootMap = genRootMap();        rootMap.put("pageNum", pageNum);        rootMap.put("pageSize", pageSize);        rootMap.put("totalObject", totalObject);        rootMap.put("totalPageNum", totalPageNum);        rootMap.put("dialogShow", dialogShow);        rootMap.put("id", id);        HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();        rootMap.put("contextPath", request.getContextPath());        return rootMap;    }    protected String getTemplatePath()    {        return "/jsp/common/page.ftl";    }   set、get方法}然后创建Tag Library的描述文件,在xx.tld tld文件里定义标签,接着在web.xml文件里面加入
元素,最后在jsp里就可引用了
pageTag.tld文件
1.0
1.2
p
\/tags\/page.tld
ajaxPage
com.hao.common.
id
true
java.lang.String
异步加载DIV的id
true
onChangePageFunc
true
java.lang.String
true
url
true
java.lang.String
true
dialogShow
false
java.lang.Boolean
true
page
com.hao.common.g
empty
使用说明: items action里面查询的 结果集  需要将这1个参数传给page.jsp  pageSize 可选项 isLiShow 是否是采用的 li布局 isDoubleShow:是否为双排展示 isMultiLineShow:多排展示
]]>
id
false
java.lang.String
true
pageSize
false
java.lang.Integer
true
items
true
java.util.Collection
true
liShow
java.lang.Boolean
false
doubleShow
java.lang.Boolean
false
dialogShow
false
java.lang.Boolean
true
multiLineShow
false
java.lang.Integer
true
public class extends PageTag{      private static final long serialVersionUID = -2926149990721737658L;     /**     * ajax调用的url     */    private String url;    /**     * 点击调页是调用的方法     */    private String onChangePageFunc;    protected String getTemplatePath()    {        return "/jsp/common/.ftl";    }    protected Map
 genRootMap()    {          Map
 rootMap = new HashMap
();           rootMap.put("url", url);         rootMap.put("onChangePageFunc", onChangePageFunc);          return rootMap;    }    get/set()……    }        web.xml文件
       
           
\/tags\/page.tld
           
\/WEB-INF\/pageTag.tld
       
  jsp页面引用  <%@ taglib uri="/tags/page.tld" prefix="p"%>