标签:
自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。
JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标记。
首先你可以继承SimpleTagSupport类并重写的doTag()方法来开发一个最简单的自定义标签。
这里要注意的是这里的Selvlet类不能是裸体类,也就是必须要在包里面,不然后面配置文件不生效
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
import java.io.StringWriter;
public class MyServlet extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
JspWriter out = this.getJspContext().getOut();//获得当前页面的输出流
out.println("Hello World!");//输出Hello World!
}
}
接下来在WEB-INF目录下写一个标签库,以tld后缀名结尾,这里写mytag.tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0"
>
<tlib-version>2.0</tlib-version>
<!--指定前缀名,可以在jsp声明中更改-->
<short-name>ex</short-name>
<tag>
<!--指定标签名称-->
<name>Hello</name>
<!--指定那个Servlet执行这个标签解释-->
<tag-class>com.mytag.MyServlet</tag-class>
<!--设置标签体为空-->
<body-content>empty</body-content>
</tag>
</taglib>
接下来就是测试用的jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--这里prefix是标签前缀名 uri是标签库地址--%>
<%@ taglib prefix="ex" uri="/WEB-INF/myTag.tld"%>
<html>
<head>
<title>测试</title>
</head>
<body>
<%--使用自定义标签--%>
<ex:Hello/>
</body>
</html>
这样页面就会输出Hello World!了
访问标签体,这样的话就需要修改以上三个文件了
Selvlet中要有对标签体获取的代码
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
import java.io.StringWriter;
public class MyServlet extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
StringWriter sw = new StringWriter();//字符串输出流,包装一个字符串
getJspBody().invoke(sw);//把标签体内容放入sw流里面
getJspContext().getOut().println(sw);//输出到页面上
}
}
接着mytag.tld中要设置标签体不为空
<?xml version="1.0" encoding="UTF-8"?>
<taglib
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0"
>
<tlib-version>2.0</tlib-version>
<!--指定前缀名,可以在jsp声明中更改-->
<short-name>ex</short-name>
<tag>
<!--指定标签名称-->
<name>Hello</name>
<!--指定那个Servlet执行这个标签解释-->
<tag-class>com.mytag.MyServlet</tag-class>
<!--设置标签体为空-->
<body-content>scriptless</body-content>
</tag>
</taglib>
最后是测试用的jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--这里prefix是标签前缀名 uri是标签库地址--%>
<%@ taglib prefix="ex" uri="/WEB-INF/myTag.tld"%>
<html>
<head>
<title>hahah</title>
</head>
<body>
<%--使用自定义标签--%>
<ex:Hello>hahahhahahahhah</ex:Hello>
</body>
</html>
页面上就会输出hahahhahahahhah
另外还有自定义标签属性,不经常使用,这里就不在详细说了
标签:
原文地址:http://blog.csdn.net/u012706811/article/details/50668020