当前位置:  技术问答>java相关

谁有taglib的例子呀?一个什么条件都能涉及到的一个例子,高分!

    来源: 互联网  发布时间:2017-04-13

    本文导语:  问题如上,告诉俺,送高分! | 1.1  使用定制标签――JSP文件 下面显示了一个JSP页面,这个页面,使用了最简单的定制标签,这个标签,没有任何属性,也没有主体。只是一个简单的记数...

问题如上,告诉俺,送高分!

|
1.1  使用定制标签――JSP文件

下面显示了一个JSP页面,这个页面,使用了最简单的定制标签,这个标签,没有任何属性,也没有主体。只是一个简单的记数器,用于计算访问JSP页面的次数。
 

下面,给出了,这个JSP的源代码

test.jsp






A Count tag



This page has been accessed  times.



taglib指令定义了标签库及其标记的URI,这个URI指向一个标记描述信息,TLD,就是counter.tld的扩展。
Taglib指令还需要用prefix属性来指定用来访问该库标记的前缀。

这里的TLD位于WEB-INF/tlds中,其实,它可以直接放在WEB-INF中,这里只是建议。

1.2 定义定制标记――――TLD

TLD是定义一个标记库及其标记的XML文档,下面是本例子所使用的一个TLD文件。

文件的目录

WEB-INF/tlds/conuter.tld






    1.0
    1.1
    Tag library
    this is test tag library!

    
        counter
        tags.CounterTag
        empty
    



解释:第一行是一个XML文档,第二行表示文档的类型是taglib,并提供了文档类型定义(DTD,Document Type Definition)的URL,该DTD定义了taglib文档的结构,Servlet容器使用这个DTD来验证该taglib文档。

可以使用定义标签库,上面的例子,标签库的版本为1.0,只有符号JSP1.1或者更高版本的JSP,才能使用标记库。

用于定义标签,它具有两个重要的元素,标记的和,指定实现标记功能的java类,这些类的类型通常叫做标记处理程序。

1.3 实现定制标记――――标记处理程序

标记处理程序通过javax.servlet.jsp.tagext实现Tag接口。Tag接口定义了6种方法,我们一般只用以下几种吧

doStartTag()
doEndTag()
release()

下面的程序,按照上面的顺序依次调用Tag方法,标记的开始和结束部分,调用doStartTag和doEndTag方法,这两个方法,都返回integer常量,这个方法,在Tag接口中定义的。调用doEndTag方法结束后,servlet容器调用release方法,把标记处理程序保持的资源都释放掉。

WEB-INF/classes/tags/CounterTag.java

package tags;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.http.HttpServletRequest;

public class CounterTag extends TagSupport {
private int count = 0;
private File file = null;
public int doStartTag() throws JspException {
try
{
checkFile();
readCount();
pageContext.getOut().print(++count);
}
catch (java.io.IOException ex)
{
                  throw new JspException(ex.getMessage());
                }
                return SKIP_BODY;
        }
        public int doEndTag() throws JspException {
          saveCount();
          return EVAL_PAGE;
        }
        private void checkFile() throws JspException,IOException {
          if (file == null) {
            file = new File(getCounterFilename());
            count = 0;
          }
          if (!file.exists()) {
            file.createNewFile();
            saveCount();
          }
        }
        private String getCounterFilename() {
          HttpServletRequest req = (HttpServletRequest)pageContext.getRequest();
          String servletPath = req.getServletPath();
          String realPath = pageContext.getServletContext().getRealPath(servletPath);

          return realPath + ".Counter";
        }
        private void saveCount() throws JspException {
          try {
            FileWriter writer = new FileWriter(file);
            writer.write(count);
            writer.close();
          }
          catch (Exception ex) {
            throw new JspException(ex.getMessage());
          }
        }
        private void readCount() throws JspException {
          try {
            FileReader reader = new FileReader(file);
            count = reader.read();
            reader.close();
          }
          catch (Exception ex) {
            throw new JspException(ex.getMessage());
          }
        }
}

关于,这个例子,我就不多讲了,因为这个例子,涉及到java的内部类,所以就不多说,有兴趣的话,可以察看文档。

1.4    在WEB-INF/web.xml中指定TLD

我们打开,WEB-INF文件,里面有个web.xml文件,使用文本打开,在里面,添加上,以下的资料,









        counters
        /WEB-INF/tlds/counter.tld




上面斜体字,就是我们要添加的,可以按照不通情况作相应的改变。

1.5 和

下面讲讲和的元素

相关的元素
元素             类型                      说明
tlibversion          1                        标记库的版本
jspversion          ?                      标记库依赖的JSP规范版本,默认是JSP1.1
shortname          1                       由JSP页面编辑工具用来标识库的简称
uri                ?                      唯一标识库的URI
info               ?                      描述如何使用标记库
tag                +                      标记库中包含的标记

上面的,1表示只有一种,为必选项,?表示为只有一种,为可选项,+为一种或多种

相关的元素
元素             类型                      说明
name              1                  标记前缀后出现的名字,如 0)
        {
            copartnerTable.goFirst();
            setLoopVariable();
            copartnerTable.goNext();
            return EVAL_BODY_BUFFERED;
        } else if ((createNew != null)&&(createNew.equals("yes")))
        {
            pageContext.setAttribute("copartnerCopartnerID", keyCopartnerID);
            pageContext.setAttribute("copartnerName", "");
            pageContext.setAttribute("copartnerAddr", "");
            pageContext.setAttribute("copartnerTele", "");
            pageContext.setAttribute("copartnerZip", "");
            pageContext.setAttribute("copartnerConnector", "");
            pageContext.setAttribute("copartnerSort", keySort);
            pageContext.setAttribute("copartnerRating", "");
            pageContext.setAttribute("copartnerIfContinue", "");
            pageContext.setAttribute("copartnerExplain", "");
            return EVAL_BODY_BUFFERED;
        }

        return SKIP_BODY;
    }

    public int doAfterBody() throws JspTagException 
    {
        BodyContent bodyContent = getBodyContent();
        if (bodyContent != null)
        {
            output.append(bodyContent.getString());
            try
            {
                bodyContent.clear();
            }        
            catch (IOException ex)
            {
               throw new JspTagException("Fatal IO Error");
            }
        } 

        if (copartnerTable.isBof() != true)
        {
            setLoopVariable();
            copartnerTable.goNext();
            return EVAL_BODY_BUFFERED;
        }  
        return SKIP_BODY;
    }

    public int doEndTag() throws JspTagException 
    {
        BodyContent bodyContent = getBodyContent();
        if (bodyContent != null)
        {
            try  
            {
                bodyContent.getEnclosingWriter().write(output.toString());
            }
            catch (IOException ex)
            {
                throw new JspTagException("Fatal IO Error");
            }
        }
        return EVAL_PAGE;
    }

    private void setLoopVariable()
    {
        pageContext.setAttribute("copartnerCopartnerID", copartnerTable.getCopartnerID());
        pageContext.setAttribute("copartnerName", copartnerTable.getCopartnerName());
        pageContext.setAttribute("copartnerAddr", copartnerTable.getAddr());
        pageContext.setAttribute("copartnerTele", copartnerTable.getTele());
        pageContext.setAttribute("copartnerZip", copartnerTable.getZip());
        pageContext.setAttribute("copartnerConnector", copartnerTable.getConnector());
        pageContext.setAttribute("copartnerSort", copartnerTable.getSort());
        pageContext.setAttribute("copartnerRating", copartnerTable.getRating());
        pageContext.setAttribute("copartnerIfContinue", copartnerTable.getIfContinue());
        pageContext.setAttribute("copartnerExplain", copartnerTable.getExplain());
    }
}


*********************************tag file end ***********************************

*********************************jsp file start***********************************


  
    
    
    
    
    
    
    
    
    
  


*********************************jsp file end***********************************
根据给出的keySort和keyCopartnerID查询数据,如果允许增加的话,在没有得到查询结果的时候增加一个空白的

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • taglib重定向问题:请问taglib的Class类中可以重定向到某个页面吗?怎么写呢?
  • 如何用taglib
  • JSP中的Taglib的作用和在JSP中使用Bean的作用有何不同?
  • 日志标签库 SLF4J Taglib
  • JSP 标签库集合 Taglibs
  • JSON标签库 JSON-taglib
  • JSP常见的三个编译指令page、include、taglib
  • 简单问题,怎么在Taglib中实现重定向。
  • JSP加密标签库 JCE taglib
  • Secure JSP Taglibs
  • 个位大侠,能介绍一点jsp + taglib的东西吗?推荐点书籍文档也行!
  • 关于Jsp 的 TagLib 问题
  • 初级问题,请问jakarta-taglibs中中文怎么解决?
  • 求救:关于Taglib的参数问题?在线等待回复、给分!
  • JSP分页标签库 Pager-taglib
  • 关于JSP,XML,XSLT的一个问题:Element type "taglib" must be declared.
  • JSP指令元素(page指令/include指令/taglib指令)复习整理
  • (SOS 在线等待,马上给分)请看看定制JSP TagLib的问题,为什么说设有setter
  • JSP自定义标签Taglib实现过程重点总结


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3