您的位置:首页 > 编程语言 > Java开发

javaweb jsp自定义标签

2013-02-27 21:02 375 查看
一、自定义标签的作用

1、消除JSP中的java脚本。自定义标签也属于JSP中的一部分技术。

2、javax.servlet.jsp.tagext.Tag接口:标签处理类需要实现的接口

常量:

int EVAL_BODY_INCLUDE:为doStartTag服务,指示还要处理标签的主体内容。

int EVAL_PAGE:为doEndTag服务,指示还要处理结束标签后的其他JSP内容。

int SKIP_BODY:为doStartTag服务,指示忽略标签的主体内容。

int SKIP_PAGE:为doEndTag服务,指示忽略结束标签后的其他JSP内容。

方法:方法都是由容器调用,包括标签处理类也是由容器实例化的。

int doEndTag():遇到结束标签时,容器调用。

int doStartTag():遇到开始标签时,容器调用。

Tag getParent():获取父标签

void release():释放标签占用的资源

void setPageContext(PageContext pc):容器调用。标签处理类实例化后,容器会把PageContext对象传给你。

void setParent(Tag t):设置父标签。容器调用。

二、自定义标签的开发步骤,快速入门,执行原理和过程

1、定义一个类实现javax.servlet.jsp.tagext.Tag接口或者继承TagSupport,该类称为标签处理类

package com.itheima.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.TagSupport;

public class ShowRemoteIpTag extends TagSupport {

public int doStartTag() throws JspException {

String ip = pageContext.getRequest().getRemoteAddr();
try {
pageContext.getOut().write(ip);
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}

}

2、在WEB-INF目录下建立一个扩展名为tld的xml文件。用于对标签处理类进行描述。(参考Tomcat中的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">
<description>dsfds</description>
<tlib-version>1.0</tlib-version>
<short-name>itheima</short-name>
<uri>http://www.itheima.com/jsp/tag</uri>
<tag>
<description>show remote ip</description>
<name>showRemoteIp</name>
<tag-class>com.itheima.tag.ShowRemoteIpTag</tag-class>
<body-content>empty</body-content>
</tag>

</taglib>

3、在web。xml中对tld的实际存放位置和tld中的uri进行匹配。(可选步骤,前提是tld放到了WEB-INF目录或者类路径下)

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" 
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-app_2_5.xsd"> <jsp-config>
<taglib>
<taglib-uri>http://www.itheima.com/jsp/tag</taglib-uri>
<taglib-location>/WEB-INF/itheima.tld</taglib-location>
</taglib>
</jsp-config>

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

</web-app>

4、在JSP中使用

<%@ taglib uri="http://www.itheima.com/jsp/tag" prefix="itheima"%>

三、自定义标签可以完成的功能

1、IterationTag接口。扩展了Tag接口。增加了重复执行主体内容的方法

int doAfterBody():
Tag.SKIP_BODY:忽略主体内容
IterationTag.EVAL_BODY_AGAIN:执行自己again

2、BodyTag接口.扩展了Iteration接口。获取主体内容的方法。

int EVAL_BODY_BUFFERED:

void doInitBody() :容器来调用

void setBodyContent(BodyContent b):b封装了主体内容。容器来调用

四、传统标签详解

五、JSP中自定义标签核心类图

六、简单标签,执行原理和过程

1、javax.servlet.jsp.tagext.SimpleTag

方法:

void doTag():遇到标签容器调用。

JspTag getParent():获取父标签,如果有的话。

void setJspBody(JspFragment jspBody):容器调用,传入标签的主体内容。JspFragment代表主体内容

void setJspContext(JspContext pc):容器调用。标签处理类实例化后,容器会把PageContext对象传给你。

void setParent(JspTag t):设置父标签。容器调用。

七、tld文件主要标签详解

taglib:根元素
short-name:引用时的短名称
uri:绑定的名称空间
tag:用于描述一个标签
name:标签的名称
tag-class:标签对应的处理类。全名
body-content:指示标签的主体内容的类型。
可选值:
empty:没有主体内容。
JSP:有主体内容。服务于传统标签。JSP文件中能出现啥,主体内容就能出现啥。
scriptless:服务于简单标签。主体内容不能出现java脚本或表达式。
tagdependent:把主体内容原封不动的传递给标签处理类。
attribute:用于描述属性
name:属性名称
required:true|false|yes|no。指示该属性是否是必须的。
rtexprvalue:true|false|yes|no。指示属性的取值是否支持表达式(EL或者Java表达式)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: