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

Jsp简单标签库开发

2014-11-20 21:52 288 查看
Jsp简单标签库开发,是指从Jsp2.0开始,使用SimpleTag接口所开发的标签。大大简化了标签开发的工作。

1、Jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--引用标签库 --%>
<%@taglib uri="http://localhost:8080/st" prefix="st" %>

//2、控制Jsp页面是否执行<br />
//写demo时,共用一个标签类冲突,注释了<br />
<%--<st:ctPage/>--%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP简单标签开发</title>
</head>
<body>
<br />
<br />
<br />
//1、控制标签内包含的内容是否执行[start]<br />
//写demo时,共用一个标签类冲突,注释了<br />
<%--<st:viewContent>
看我有没有显示<br />
</st:viewContent>--%>
//1、控制标签内包含的内容是否执行[end]<br />
<br />
<br />
<br />

//3、循环输出标签内容[start]<br />
//写demo时,共用一个标签类冲突,注释了<br />
<%--<st:forContent>
重复输出5次<br />
</st:forContent>--%>
//3、循环输出标签内容[end]<br />
<br />
<br />
<br />

//4、操作标签内容[start]<br />
<st:opContent>
Hello World!
</st:opContent><br />
//3、操作标签内容[end]<br />
<br />
<br />
<br />
</body>
</html>


2、标签实现类

import java.io.IOException;
import java.io.StringWriter;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.SkipPageException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class MySimpleTag extends SimpleTagSupport
{
@Override
public void doTag() throws JspException, IOException
{
//doTag1();
//doTag2();
//doTag3();

//1、获取Jsp标签内容所对应的JspFragment对象
JspFragment jf= this.getJspBody();
//2、实例化一个StringWriter对象,并将标签内容写入到此对象中
StringWriter sw = new StringWriter();
jf.invoke(sw);
//3、将获取的标签内容 编辑后输出到Jsp页面
String content = sw.toString();
this.getJspContext().getOut().write(content + "@Yes!");

}

private void doTag1() throws JspException, IOException
{
/*
* 1、是否执行标签体内容
* 如果不执行标签内容 则将jf.invoke(null)注释即可
*/
JspFragment jf = this.getJspBody();
jf.invoke(null); //null默认写到Jsp页面,也可以写成jf.invoke(this.getJspContext().getOut());
}

private void doTag2() throws SkipPageException
{
/*
* 2、是否执行Jsp页面内容
* 如果不执行Jsp页面 则抛出SkipPageException异常
* 如果不抛出异常则执行Jsp页面内容
*/
//throw new SkipPageException();
}

private void doTag3() throws JspException, IOException
{
/*
* 3、循环输出标签内容
*/
JspFragment jf = this.getJspBody();
for(int i = 0; i < 5; i++)
{
jf.invoke(null);
}
}
}


3、tld文件

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>st</short-name>
<uri>http://localhost:8080/st</uri>

<tag>
<name>viewContent</name>
<tag-class>com.xuhu.web.tag.MySimpleTag</tag-class>
<description>控制标签体是否执行</description>
<!-- 注意此处和传统标签的JSP不同,简单标签需要写成scriptless -->
<body-content>scriptless</body-content>
</tag>

<tag>
<name>ctPage</name>
<tag-class>com.xuhu.web.tag.MySimpleTag</tag-class>
<description>控制Jsp页面是否执行</description>
<!-- 注意此处无标签体 -->
<body-content>empty</body-content>
</tag>

<tag>
<name>forContent</name>
<tag-class>com.xuhu.web.tag.MySimpleTag</tag-class>
<description>循环输出标签内容</description>
<!-- 注意此处和传统标签的JSP不同,简单标签需要写成scriptless -->
<body-content>scriptless</body-content>
</tag>

<tag>
<name>opContent</name>
<tag-class>com.xuhu.web.tag.MySimpleTag</tag-class>
<description>操作标签内容</description>
<!-- 注意此处和传统标签的JSP不同,简单标签需要写成scriptless -->
<body-content>scriptless</body-content>
</tag>

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