您的位置:首页 > Web前端 > JavaScript

JSP自定义标签

2017-08-22 20:22 363 查看
标签转化为对被 称为tag handler的对象的操作,即当 servlet执⾏行行时Web container调⽤用那些操作。
JSP标签扩展可以让你创建新的标签并且可以直接插⼊入到 ⼀个JSP⻚页⾯面
继承SimpleTagSupport类并重写的doTag()⽅方法来开发⼀ 个最简单的⾃自定义标签。
我们如何做一个自定义标签呢<EX:run/>
1.首先编写标签的逻辑功能类,即继承SimpleTagSupport类
2.定义标签格式⽂文件TLD
3.使⽤用JSP指令引⼊入TLD⽂文件
4.就可以使⽤用标签了了
One:
public class EXrun extends SimpleTagSupport {

public EXrun(){

}
public void doTag() throws IOException{
JspWriter out = getJspContext().getOut();
out.println("my first jsp tag");
}
}


<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>Example TLD</short-name>
<tag>
<name>run</name><!-- 这里的值就是上面的标签中的run -->
<tag-class>tag.EXrun</tag-class><!-- 表示的是包名加类名 -->
<body-content>empty</body-content><!-- 表示标签的中间不能填写数据 -->
</tag>
</taglib>

后面注意在你的jsp运行文件上配置你的自定义标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="EX" uri ="WEB-INF/EX.tld"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
<EX:run></EX:run>
</body>
</html>
运行结果为my first jsp tag

Two:那么学会了第一步,就会想到如何在标签中加入内容比如说:<EX:bodytag>你好世界</EX:bodytag>
同样的我重新定义了一个类
public class EXBodyTag extends SimpleTagSupport {

public EXBodyTag(){

}
public void doTag(){
StringWriter sw = new StringWriter();
try {
getJspBody().invoke(sw);
getJspContext().getOut().println(sw.toString());
} catch (JspException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}


这边只要在最先创建的tld中增加就好了

<tag>
<name>BodyTag</name>
<tag-class>tag.EXBodyTag</tag-class>
<body-content>scriptless</body-content>
</tag>
这样你就可以在你的jsp中使用<EX:BodyTag>你好</EX:BodyTag>

Three:最后说说标签中的属性吧,其实就是我们在类中设置的变量,和上面的做法一致:such:<EX:AttrTag message="hello world">
public class EXAttrTag extends SimpleTagSupport {

private String message;

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}
public void doTag(){

try {
if(message !=null){
JspWriter out =getJspContext().getOut();
out.println(message);
}else{
StringWriter sw = new StringWriter();
getJspBody().invoke(sw);
getJspContext().getOut().println(sw.toString());
}
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JspException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我在这边做了判断,如果我们没有设置属性的话就显示我们标签中的内容,不然的话不显示

<tag>
<name>AttrTag</name>
<tag-class>tag.EXAttrTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>message</name>
</attribute>
</tag>

同样的在tld中添加,输出的时候<EX:AttrTag message="hello world"></EX:AttrTag>
最后的全部输出:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JSP 自定义标签 web