Test.jsp
My JSP 'Test.jsp' starting page This is my JSP page. Date : <%= new java.util.Date().toString() %> File :
为了将这个这个Test.jsp改成自定义标签方法,我们分别使用简单标签和内容标签两种不同的方式实现。1. 简单标签 由于我们需要输出两个内容(日期和文件名),因此我们为标签创建一个参数。具体代码: DemoTag.javapackage com.mycompany; import java.util.Date; import javax.servlet.http.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class DemoTag extends TagSupport { public int doStartTag() throws JspException { try { HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); JspWriter out = pageContext.getOut(); if (parameter.compareToIgnoreCase("filename") == 0) out.print(request.getServletPath()); else out.print(new Date()); } catch (java.io.IOException e) { throw new JspTagException(e.getMessage()); } return SKIP_BODY; } private String parameter = "date"; public void setParameter(String parameter) { this.parameter = parameter; } public String getParameter() { return parameter; } }
接下来,我们创建标签文件 MyTagLib.tld。标签文件其实只是一个XML格式的说明文件,内容也很简单。 MyTagLib.tld1.0 1.2 demo com.mycompany.DemoTag empty parameter false true 在这个标签文件中,我们将我们创建的标签取名 demo,并声明了类型和参数(parameter)。将该文件保存在 /WEB-INF 下面。 当然,我们还需要将我们自定义的标签添加到 web.xml 中,否则还是无法使用。 web.xml /WEB-INF/MyTagLib /WEB-INF/MyTagLib.tld
你可能在别处看到过类似的声明,只是没有外面的 jsp-config,但是我们使用的是DTD 2.4,如果不加,Eclipse 会提示出错。 到此为止,我们的自定义标签算是创建完毕。接下来,我们可以开始改写那个JSP文件来分离代码了。 Test.jsp <%@taglib uri="/WEB-INF/MyTagLib" prefix="mytag"%>
My JSP 'Test.jsp' starting page This is my JSP page. Date : File : 上面这些想必你已经很熟悉,我就不做多说了。2. 内容标签 创建过程和上面大抵相同,只是程序文件和配置内容有些差异。 DemoTag2.javapackage com.mycompany; import java.io.IOException; import java.util.Date; import javax.servlet.http.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class DemoTag2 extends BodyTagSupport { public int doStartTag() throws JspTagException { return EVAL_BODY_BUFFERED; } public int doEndTag() throws JspTagException { String body = this.getBodyContent().getString(); HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); body = body.replace("$date", new Date().toString()); body = body.replace("$filename", request.getServletPath()); try { pageContext.getOut().print(body); } catch (IOException e) { throw new JspTagException(e.getMessage()); } return SKIP_BODY; } }
我们将新的标签 DemoTag2 加入到上面的标签文件中。 MyTagLib.tld1.0 1.2 demo com.mycompany.DemoTag empty parameter false true demo2 com.mycompany.DemoTag2 jsp web.xml 文件无需修改。 看看同时使用两种标签的Test.jsp效果。 Test.jsp <%@taglib uri="/WEB-INF/MyTagLib" prefix="mytag"%>
My JSP 'Test.jsp' starting page This is my JSP page. Date : File : Date: $date File: $filename
Tag 中定义:
SKIP_BODY = 0; // 不处理标签体,直接调用doEndTag() 方法
EVAL_BODY_INCLUDE = 1; // 解析标签体, 但绕过 doInitBody () 和 setBodyContent () 方法
SKIP_PAGE = 5; // 不解析标签后面的JSP 内容
EVAL_PAGE = 6; // 解析标签后, 继续解析标签后面的JSP 内容
阅读(1581) | 评论(1) | 转发(0) |