当前位置: 技术问答>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查询数据,如果允许增加的话,在没有得到查询结果的时候增加一个空白的
下面显示了一个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.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。