目录
一、标签语言的
二、自定义标签的开发乃使用步骤
三、标签生命周期
四、实践
一、标签语言的特点
1、标签语言的形式
<开始标签 属性="属性值">标签体结束标签>
2、标签语言分类
1、空标签 如:br、hr
2、Ui标签 如;input、table
3、控制标签 如:if、foreach
4、数据标签 如:out标签
二、自定义标签的开发乃使用步骤
1、步骤
2、Ui标签 如;input、table
3、控制标签 如:if、foreach
4、数据标签 如:out标签
二、自定义标签的开发乃使用步骤
1、步骤
4、数据标签 如:out标签
二、自定义标签的开发乃使用步骤
1、步骤
1、步骤
①建立标签库描述文件(tld)
注意:tld文件必须保存到WEB-INF目录或其子目录
标签库中的标签与tld中的tag元素有关,也就是跟tag元素对应的助手类有关
②、建立助手类(必须继承BodyTagSupport)
③、jsp页面通过taglib指令导入标签库
2、案例
将C:if换成z:if
建立标签库文件tlb
name改成z
在上面框中的URI路径可以改成自己想要输入的路径
如图所示:
三、标签生命周期
生命周期图:
jsp生命周期一共有三条路线:
1、如果将dostarttag的返回值改为skip_body,那么doafterbody就不会调用执行(路线1)
2、如果将dostarttag的返回值改为EVAL_BODY_INCLUDE,那么doafterbody就会执行,就相当于调用默认(路线2)
3、如果将doafterbody的返回值改为eval_body_again,那么就会一直调用doafterbody,会进入循环(路线3)
注:在有标签体的情况下,默认会调用助手类的doStartTag、doAfterbody、doendtag方法
四、实践
自定义if、set、out标签
创建tld文件
tld代码展示(if、set、out):
JSTL 1.1 core library
JSTL core
1.1
z
http://jsp.zwcedu.cn
Provides core validation features for JSTL tags.
org.apache.taglibs.standard.tlv.JstlCoreTLV
demo1
com.zwc.tag.DemoTag1
JSP
if
com.zwc.tag.IfTag
JSP
test
true
true
set
com.zwc.tag.SetTag
JSP
var
true
false
value
true
true
out
com.zwc.tag.OutTag
JSP
value
true
true
if助手类:
package com.zwc.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class IfTag extends BodyTagSupport{
private boolean test;
public boolean isTest() {
return test;
}
public void setTest(boolean test) {
this.test = test;
}
@Override
public int doStartTag() throws JspException {
// 如果满足条件就打印标签体-->dostarttag的返回值eval_body_include
// 如果不满足条件,就不输出标签体->dostarttag的返回值skip_body
return test ? EVAL_BODY_INCLUDE : SKIP_BODY;
}
}
创建tld文件
tld代码展示(if、set、out):
JSTL 1.1 core library
JSTL core
1.1
z
http://jsp.zwcedu.cn
Provides core validation features for JSTL tags.
org.apache.taglibs.standard.tlv.JstlCoreTLV
demo1
com.zwc.tag.DemoTag1
JSP
if
com.zwc.tag.IfTag
JSP
test
true
true
set
com.zwc.tag.SetTag
JSP
var
true
false
value
true
true
out
com.zwc.tag.OutTag
JSP
value
true
true
if助手类:
package com.zwc.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class IfTag extends BodyTagSupport{
private boolean test;
public boolean isTest() {
return test;
}
public void setTest(boolean test) {
this.test = test;
}
@Override
public int doStartTag() throws JspException {
// 如果满足条件就打印标签体-->dostarttag的返回值eval_body_include
// 如果不满足条件,就不输出标签体->dostarttag的返回值skip_body
return test ? EVAL_BODY_INCLUDE : SKIP_BODY;
}
}
JSTL 1.1 core library JSTL core 1.1 z http://jsp.zwcedu.cn Provides core validation features for JSTL tags. org.apache.taglibs.standard.tlv.JstlCoreTLV demo1 com.zwc.tag.DemoTag1 JSP if com.zwc.tag.IfTag JSP test true true set com.zwc.tag.SetTag JSP var true false value true true out com.zwc.tag.OutTag JSP value true true
if助手类:
package com.zwc.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class IfTag extends BodyTagSupport{
private boolean test;
public boolean isTest() {
return test;
}
public void setTest(boolean test) {
this.test = test;
}
@Override
public int doStartTag() throws JspException {
// 如果满足条件就打印标签体-->dostarttag的返回值eval_body_include
// 如果不满足条件,就不输出标签体->dostarttag的返回值skip_body
return test ? EVAL_BODY_INCLUDE : SKIP_BODY;
}
}
set助手类:
package com.zwc.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class SetTag extends BodyTagSupport{
private String var;
private Object value;
public String getVar() {
return var;
}
public void setVar(String var) {
this.var = var;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
@Override
public int doStartTag() throws JspException {
// 要存储数据,以键值对的形式存储,分析得来该标签有2个属性
pageContext.setAttribute(var, value);
return super.doStartTag();
}
}
out助手类:
package com.zwc.tag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class OutTag extends BodyTagSupport{
private Object value;
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
@Override
public int doStartTag() throws JspException {
JspWriter out = pageContext.getOut();
try {
out.print(value);
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}
}
jsp界面输出;
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="z" uri="http://jsp.zwcedu.cn" %>
Insert title here
xx
true
false


