Jsp传统标签库的开发,指的是Jsp2.0以前的标签库开发所用到的方式,Jsp2.0已经更改了开发方式,我将在后续的博文中更新。
1.Jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--引用标签库 --%>
<%@taglib uri="http://localhost:8080/myTag" prefix="myTag" %>
<!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>
//3、控制页面内容是否显示 start<br />
<myTag:cPage/>
OK 页面已显示<br />
//3、控制页面内容是否显示 end<br />
<br />
<br />
<br />
<%-- 1、自定义标签替代JSP页面的Java代码
您好!您的IP为:
<%
String ip = request.getRemoteAddr();
out.print(ip);
%>
--%>
//1、自定义标签替代JSP页面的Java代码 [start]<br />
您好!您的IP为:<myTag:viewIP/><br />
//1、自定义标签替代JSP页面的Java代码 [end]<br />
<br />
<br />
<br />
//2、控制标签内包含的内容是否执行[start]<br />
<myTag:cBody>
看我有没有显示<br />
</myTag:cBody>
//2、控制标签内包含的内容是否执行[end]<br />
<br />
<br />
<br />
//4、用于循环显示标签内容[start]<br />
<myTag:forContent>
循环输出5次<br />
</myTag:forContent>
//4、用于循环显示标签内容[end]<br />
<br />
<br />
<br />
//5、操作标签内容[start]<br />
<myTag:opContent>
操作标签内容
</myTag:opContent><br />
//5、操作循环显示标签内容[end]<br />
</body>
</html>
2、5个相应的标签处理类
①自定义标签替代JSP页面的Java代码
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;
/**
* 自定义标签替代JSP页面的Java代码
* @author Hoo
*
*/
public class MyTag1 extends TagSupport
{
/**
*serialVersionUID
*/
private static final long serialVersionUID = 1L;
@Override
public int doStartTag() throws JspException
{
//通过pageContext获取request、out对象
String ip = this.pageContext.getRequest().getRemoteAddr();
try
{
this.pageContext.getOut().println(ip);
}
catch (IOException e)
{
e.printStackTrace();
throw new RuntimeException();
}
return Tag.EVAL_BODY_INCLUDE;
}
}
②自定义标签--用于控制标签内包含的内容是否执行
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;
/**
* 自定义标签--用于控制标签内包含的内容是否执行
* @author Hoo
*
*/
public class MyTag2 extends TagSupport
{
/**
*serialVersionUID
*/
private static final long serialVersionUID = 1L;
@Override
public int doStartTag() throws JspException
{
/*
* 如果返回EVAL_BODY_INCLUDE 则执行标签体内的内容,
* 如果返回SKIP_BODY则不执行
*/
return Tag.EVAL_BODY_INCLUDE;
}
}
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;
/**
* 自定义标签--用于控制是否显示JSP页面内容
* @author Hoo
*
*/
public class MyTag3 extends TagSupport
{
/**
*serialVersionUID
*/
private static final long serialVersionUID = 1L;
@Override
public int doEndTag() throws JspException
{
/*
* 如果返回EVAL_PAGE 则执行页面内的内容,
* 如果返回SKIP_PAGE则不执行
*/
return Tag.EVAL_PAGE;
}
}
④自定义标签--用于循环显示标签内容
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.IterationTag;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;
/**
* 自定义标签--用于循环显示标签内容
* @author Hoo
*
*/
public class MyTag4 extends TagSupport
{
/**
*serialVersionUID
*/
private static final long serialVersionUID = 1L;
int num = 0;
@Override
public int doStartTag() throws JspException
{
num = 5;
return Tag.EVAL_BODY_INCLUDE;
}
@Override
public int doAfterBody() throws JspException
{
num--;
if(num > 0)
{
return IterationTag.EVAL_BODY_AGAIN;
}
else
{
return IterationTag.SKIP_BODY;
}
}
}
⑤自定义标签--用于操作标签内容
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTag;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**
* 自定义标签--用于操作标签内容
* @author Hoo
*
*/
public class MyTag5 extends BodyTagSupport
{
/**
*serialVersionUID
*/
private static final long serialVersionUID = 1L;
@Override
public int doStartTag() throws JspException
{
//此处返回 EVAL_BODY_BUFFERED 【重要】
return BodyTag.EVAL_BODY_BUFFERED;
}
@Override
public int doEndTag() throws JspException
{
//得到标签内容
BodyContent bc = this.getBodyContent();
String content = bc.getString();
try
{
this.pageContext.getOut().println(content + "@YES!");
}
catch (IOException e)
{
e.printStackTrace();
throw new RuntimeException();
}
return BodyTag.EVAL_PAGE;
}
}
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>myTag</short-name>
<uri>http://localhost:8080/myTag</uri>
<tag>
<name>viewIP</name>
<tag-class>com.xuhu.web.tag.MyTag1</tag-class>
<description>利用标签替换JSP页面的Java代码</description>
<body-content>empty</body-content>
</tag>
<tag>
<name>cBody</name>
<tag-class>com.xuhu.web.tag.MyTag2</tag-class>
<description>控制标签内包含的内容是否执行</description>
<body-content>JSP</body-content>
</tag>
<tag>
<name>cPage</name>
<tag-class>com.xuhu.web.tag.MyTag3</tag-class>
<description>控制是否显示JSP页面内容</description>
<body-content>empty</body-content>
</tag>
<tag>
<name>forContent</name>
<tag-class>com.xuhu.web.tag.MyTag4</tag-class>
<description>循环输出标签内容</description>
<body-content>JSP</body-content>
</tag>
<tag>
<name>opContent</name>
<tag-class>com.xuhu.web.tag.MyTag5</tag-class>
<description>操作标签内容</description>
<body-content>JSP</body-content>
</tag>
</taglib>