一、自定义标签的过程:
1、创建标签的处理类,这个类实现Tag接口,用来定义标签的行为(Tag Handle Class)
2、建立tld文件,对标签处理类进行描述(文件tld放在WEB-INF下)
3、在jsp文件中使用自定义的标签,一定要加taglib指令元素;
-----------------------------------------------------
二、自定义标签的作用:主要用于移除jsp页面中的java代码
-----------------------------------------------------
三、Tag中方法的含义:
1、doEndTag:当执行到标签结束的时候调用这个方法;
2、getParent:获取父标签;
3、release:释放标签
4、setPageContext:设置PageContext
-----------------------------------------------------
四、快速入门:获取本机的IP地址
1、新建一个jsp;
|————————————————————————
<body> |
| 您的IP地址是: |
| <% |
| String ip=request.getRemoteAddr(); |
| out.println(ip); |---------------------原始的写法
| %> |
|</body> |
| |
————————————————————————|
用自定义标签写:
<body>
您的IP地址是:<hbsi:viewIP/>-----viewIP自己定义的
</body>
2、新建一个类;
public class ViewIPTag extends TagSupport{
//重写doStartTag方法
public int doStartTag() throws JspException {
//
HttpServletRequest request=(HttpServletRequest)
this.pageContext.getRequest();
JspWriter out=this.pageContext.getOut();
String ip=request.getRemoteAddr();
try {
out.println(ip);
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}
}
3、新建一个tld文件(放在WEB-INF下)
<?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">
<description>A tag library exercising SimpleTag handlers.</description>
<tlib-version>1.0</tlib-version>
<short-name>hbsi</short-name>
<uri>http://www.hbsi.com</uri>
<tag>
<name>viewIP</name>
<tag-class>com.hbsi.web.tag.ViewIPTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
4、必须在jsp中加上taglib指令:
<%@ taglib uri="http://www.hbsi.com" prefix="hbsi"%>
-------------------------------------------------------------------
五、方法中返回语句的意思:
SKIP_BODY:忽略标签体,跳过标签体;
EVAL_BODY_INCLUDE:执行标签体;
SKIP_PAGE:跳过剩下的jsp内容。
--------------------------------------------------------------------
六、方法:
1、doAfterBody:反复执行标签体中的内容。
在doEndTag中重写(标签后的所有内容都没有)
------------------------------------------------
七、实例:
1、控制jsp页面某一部分内容是否执行
package com.hbsi.web.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class MyTagDemo2 extends TagSupport {
public int doStartTag() throws JspException {
return this.EVAL_BODY_INCLUDE;//获取标签体的内容(执行标签体)
//return this.SKIP_BODY;//忽略标签体
}
}
<body>
<hbsi:demo2>
This is my JSP page. <br>
</hbsi:demo2>
</body>
<tag>
<name>demo2</name>
<tag-class>com.hbsi.web.tag.MyTagDemo2</tag-class>
<body-content>JSP</body-content>
</tag>
----------------------------------------------
2、控制整个jsp页面是否执行
package com.hbsi.web.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class MyTagDemo3 extends TagSupport {
@Override
public int doEndTag() throws JspException {
return this.SKIP_PAGE;//后面的页面不显示
}
}
<body>
<hbsi:demo3/>
This is my JSP page. <br>
</body>
<tag>
<name>demo3</name>
<tag-class>com.hbsi.web.tag.MyTagDemo3</tag-class>
<body-content>JSP</body-content>
</tag>
---------------------------------------------------
3、控制jsp页面内容重复执行
package com.hbsi.web.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
//控制jsp页面内容重复执行
public class MyTagDemo4 extends TagSupport{
int items=1;
public int doAfterBody() throws JspException {
items++;
if(items>5){
return this.SKIP_BODY;
}else{
return this.EVAL_BODY_AGAIN;
}
}
public int doStartTag() throws JspException {
return this.EVAL_BODY_INCLUDE;
}
}
<body>
<hbsi:demo4>
This is my JSP page. <br>
</hbsi:demo4>
</body>
<tag>
<name>demo4</name>
<tag-class>com.hbsi.web.tag.MyTagDemo4</tag-class>
<body-content>JSP</body-content>
</tag>
----------------------------------------------------
4、修改jsp页面内容输出
package com.hbsi.web.tag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class MyTagDemo5 extends BodyTagSupport {
@Override
public int doEndTag() throws JspException {
BodyContent bc= this.getBodyContent();
String b=bc.getString().toUpperCase();
JspWriter out=this.pageContext.getOut();
try {
out.print(b);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return this.EVAL_PAGE;
}
}
<body>
<hbsi:demo5>
aaaaaaaaa <br>
</hbsi:demo5>
</body>
<tag>
<name>demo5</name>
<tag-class>com.hbsi.web.tag.MyTagDemo5</tag-class>
<body-content>JSP</body-content>
</tag>
----------------------------------------------------------------------------------------
八、
1、自定义jsp标签的执行过程
2、TagSupport类的生命周期
3、