JSP自定义标签:
自定义标签是用户定义的JSP语言元素。
JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。
可以继承SimpleTagSupport类并重写的doTag()方法来开发一个最简单的自定义标签。
接下来,我们想创建一个自定义标签叫作<ex:Hello>,标签格式为:<ex:Hello/>的三个步骤:
1. 创建处理标签的Java类:
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;
public class HelloTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
out.println("Hello Custom Tag!");
}
}
<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>Example TLD</short-name>
<!--定义第一个标签 -->
<tag>
<!-- 定义标签名 -->
<name>Hello</name>
<!-- 定义标签处理类 -->
<tag-class>MyJsp.HelloTag</tag-class>
<!-- 定义标签体为空 -->
<body-content>empty</body-content>
</tag>
</taglib>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="ex" uri="WEB-INF/helloTag.tld"%>
<html>
<head>
<title>自定义tag实例</title>
</head>
<body>
<ex:Hello/>
</body>
</html>
自定义标签属性:
1.创建处理标签的java类
package MyJsp;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
import java.io.StringWriter;
/**
* Created by 1192126986 on 2017/1/25.
*/
public class HelloTag extends SimpleTagSupport {
private String message;
StringWriter sw=new StringWriter();
public void setMessage(String message){
this.message=message;
}
@Override
public void doTag() throws JspException, IOException {
if(message!=null){
//从标签属性中使用信息
JspWriter out=getJspContext().getOut();
out.println(message);
}else{
//从标签体中使用信息
getJspBody().invoke(sw);
JspWriter out=getJspContext().getOut();
out.println(sw.toString());
}
}
}
2.创建标签库:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- 标签库定义 -->
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>Example TLD</short-name>
<!--定义第一个标签 -->
<tag>
<!-- 定义标签名 -->
<name>Hello</name>
<!-- 定义标签处理类 -->
<tag-class>MyJsp.HelloTag</tag-class>
<!-- 定义标签体为空 -->
<body-content>scriptless</body-content>
<!-- 自定义标签属性 -->
<attribute>
<!-- name 属性 描述:定义属性的名称 -->
<name>message</name>
</attribute>
<attribute>
<name>attribute_name</name>
<!-- required 属性 描述:指定属性是否是必须的或是可选的 false为可选的 -->
<required>false</required>
<!-- type属性 描述:指定属性的java类型 默认为String -->
<type>java.lang.Boolean</type>
<!-- fragment 属性 描述:如果声明了该属性,属性值将被视为一个 JspFragment -->
<fragment>false</fragment>
</attribute>
</tag>
</taglib>
3.在JSP文件中使用标签
<%--
Created by IntelliJ IDEA.
User: 1192126986
Date: 2017/1/25
Time: 22:33
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="ex" uri="WEB-INF/helloTag.tld" %>
<html>
<head>
<title>自定义tag实例</title>
</head>
<body>
<ex:Hello message="This is a tag!"/>
</body>
</html>