自定义标签库
自定义标签库入门

代码
MyTag1.java
public class MyTag1 implements SimpleTag { private PageContext pageContext; private JspFragment body; /** * 所有的setXxx()方法都会在doTag()方法之前被tomcat调用! * 所以在doTag()方法中就可以使用tomcat传递过来的对象了。 */ @Override public void doTag() throws JspException, IOException { pageContext.getOut().print("hell cmlx!"); } @Override public JspTag getParent() { return null; } @Override public void setJspBody(JspFragment body) { this.body = body; } @Override public void setJspContext(JspContext context) { this.pageContext = (PageContext) context; } @Override public void setParent(JspTag arg0) { }
MyTag2.java
public class MyTag2 extends SimpleTagSupport { /** * SimpleTagSupport它实现了SimpleTag接口 * 它已经把所有的tomcat传递过来的数据保存起来了!而且还提供了get方法子类调用! */ @Override public void doTag() throws JspException, IOException { this.getJspContext().getOut().print("Hello CMLX!!!"); } }
cmlx.tld
<?xml version="1.0" encoding="UTF-8"?> <!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>jsp-version</jsp-version> <short-name>short-name</short-name> <tag> <name>myTag1</name> <tag-class>cn.cmlx.tag.MyTag1</tag-class> <body-content>body-content</body-content> </tag> <tag> <name>myTag2</name> <tag-class>cn.cmlx.tag.MyTag2</tag-class> <body-content>body-content</body-content> </tag> </taglib>
tag.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="cm" uri="/WEB-INF/tlds/cmlx.tld" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1><cm:myTag1/></h1>
<h2><cm:myTag2></cm:myTag2></h2>
</body>
</html>
自定义标签进阶

MyTag3.java
public class MyTag3 extends SimpleTagSupport{ @Override public void doTag() throws JspException, IOException { Writer out = this.getJspContext().getOut();//获取当前jsp页面的输出流 out.write("*************</br>"); this.getJspBody().invoke(out);//执行标签体的内容,把结果写在指定的流中,即页面上。 out.write("</br>*************"); } }
cmlx.tld
<tag>
<name>myTag3</name>
<tag-class>cn.cmlx.tag.MyTag3</tag-class>
<body-content>scriptless</body-content>
</tag>
tag.jsp
<body>
<h1><cm:myTag1/></h1>
<h2><cm:myTag2></cm:myTag2></h2>
<hr>
<%
request.setAttribute("cmlx", "cmlx");
%>
<cm:myTag3>${cmlx}</cm:myTag3>
<cm:myTag3>我愛你!</cm:myTag3>
</body>
不在执行本标签下面内容的标签

MyTag4.java
public class MyTag4 extends SimpleTagSupport{ @Override public void doTag() throws JspException, IOException { this.getJspContext().getOut().print("只能看到我其他的看不见!"); throw new SkipPageException();//抛出这个异常后,本标签后面的内容,将看不到! } }
cmlx.tld
<tag>
<name>myTag4</name>
<tag-class>cn.cmlx.tag.MyTag4</tag-class>
<body-content>body-content</body-content>
</tag>
tag.jsp
<body>
<h1><cm:myTag1/></h1>
<cm:myTag4></cm:myTag4>
<h1>看得见我吗?</h1>
<h2><cm:myTag2/></h2>
<hr>
<%
request.setAttribute("cmlx", "cmlx");
%>
<cm:myTag3>${cmlx }</cm:myTag3>
<cm:myTag3>我愛你!</cm:myTag3>
</body>
运行结果

标签属性





浙公网安备 33010602011771号