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

一 . JSP标签体系

二 . 标签的执行流程:

三.自定义标签;

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表达式)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值