JSP标签体系及自定义JSP标签

一 . JSP标签体系

JSP标签体系及自定义JSP标签_第1张图片

二 . 标签的执行流程:

JSP标签体系及自定义JSP标签_第2张图片

三.自定义标签;

3.1 自定义标签的主要作用:移除jsp中的java脚本。它属于jsp的技术

3.2、编写一个自定义标签的步骤:(传统标签的定义)
3.3写一个类,直接或间接实现javax.servlet.jsp.tagext.Tag。一般通过继承TagSupport来间接实现Tag接口

3.4、覆盖掉父类中的对应方法
package com.itheima;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class ShowIpTag extends TagSupport {

@Override
public int doStartTag() throws JspException {
ServletRequest request = pageContext.getRequest();
String ip = request.getRemoteAddr();
JspWriter out = pageContext.getOut();
try {
out.write(ip);
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}

}
3.5在WEB-INF下面建立一个扩展名为tld的xml文件,对自定义的标签处理类进行描述
<?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/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>slkdjfdsjfdsfjlks.</description>
<tlib-version>1.0</tlib-version>
<short-name>itheima</short-name>
<uri>http://www.itheima.com/jsp/myjstl</uri>
<tag>
<description>show remote ip</description>
<name>showIp</name>
<tag-class>com.itheima.ShowIpTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
3.6、在jsp中通过taglib指令引入自定义的标签,然后使用

四、简单标签
1、一般需要继承SimpleTagSupport,然后覆盖掉doTag方法即可
2、
a、控制部分内容不输出
<demo1>
abcd
</demo1>

doTag()方法什么都不做。
如果要输出的话:getJspBody().invoke(null)
b、控制标签后面的jsp内容不输出
throw new SkipPageException();
c、控制主体内容重复执行
在doTag方法中循环调用getJspBody().invoke(null)
属性:要有setter方法,同时也要在tld文件中进行描述
d、修改主体内容后再输出
getJspBody().invoke(null) 要吧内容输出到一个有缓冲的流中。
StringWriter
修改后再通过((PageContext)getJspContext).getWrtier()输出

五、tld文件的主要标签和属性
short-name:引用标签的前缀
uri:tld文件要绑定到一个uri的地址。可以立即为帮到一个名称空间上
tag:描述标签
name:标签的名字
tag-class:标签对应的标签处理类的全名
body-content:标签主体内容的类型
empty:没有主体内容
JSP:有主体内容(用于传统标签)
scriptless:有主体内容(用于简单标签)
attribute:描述标签的属性
name:属性名称
required:是否是必须的属性
rtexprvalue:属性的取值是否支持表达式(EL和Java表达式)

你可能感兴趣的:(jsp)