1
package tag;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
public class ViewIPTag implements Tag{
private PageContext pageContext ;
/**
* WEB容器执行完自定义标签的标签体后,就会接着去执行自定义标签的结束标记,此时,WEB容器会去调用标签处理器的doEndTag方法。
*/
@Override
public int doEndTag() throws JspException {
System.out.println(this.getClass().toString()+"标签初始化");
return 0;
}
/**
* 调用了setPageContext方法和setParent方法之后,WEB容器执行到自定义标签的开始标记时,就会调用标签处理器的doStartTag方法。
*/
@Override
public int doStartTag() throws JspException {
System.out.println(this.getClass().toString()+":执行doStartTag");
HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
JspWriter out= pageContext.getOut();
String str = req.getRemoteAddr()+"";
try {
out.write(new String(str.getBytes(),"utf-8"));
} catch (IOException e) {
e.printStackTrace();
}
return 0;
}
@Override
public Tag getParent() {
// TODO Auto-generated method stub
return null;
}
/**
* 通常WEB容器执行完自定义标签后,标签处理器会驻留在内存中,为其它请求服务器,直至停止web应用时,web容器才会调用release方法。
*/
@Override
public void release() {
System.out.println(this.getClass().toString()+":执行release()");
}
/**
* JSP引擎实例化标签处理器后,将调用setPageContext方法将JSP页面的pageContext对象传递给标签处理器,标签处理器以后可以通过这个pageContext对象与JSP页面进行通信。
*/
@Override
public void setPageContext(PageContext pageContext) {
// TODO Auto-generated method stub
System.out.println(this.getClass().toString()+":setPageContext"+pageContext.toString());
this.pageContext = pageContext;
}
/**
* setPageContext方法执行完后,WEB容器接着调用的setParent方法将当前标签的父标签传递给当前标签处理器,如果当前标签没有父标签,则传递给setParent方法的参数值为null。
*/
@Override
public void setParent(Tag arg0) {
// TODO Auto-generated method stub
}
}
2
<?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/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<!-- description用来添加对taglib(标签库)的描述 -->
<description>孤傲苍狼开发的自定义标签库</description>
<!--taglib(标签库)的版本号 -->
<tlib-version>1.0</tlib-version>
<short-name>MyTagLibrary</short-name>
<!--
为自定义标签库设置一个uri,uri以/开头,/后面的内容随便写,如这里的/my ,
在Jsp页面中引用标签库时,需要通过uri找到标签库
在Jsp页面中就要这样引入标签库:<%@taglib uri="/my" prefix="my"%>
-->
<uri>/my</uri>
<!--一个taglib(标签库)中包含多个自定义标签,每一个自定义标签使用一个tag标记来描述 -->
<!-- 一个tag标记对应一个自定义标签 -->
<tag>
<description>这个标签的作用是用来输出客户端的IP地址</description>
<!--
为标签处理器类配一个标签名,在Jsp页面中使用标签时是通过标签名来找到要调用的标签处理器类的
通过viewIP就能找到对应的tag.ViewIPTag类
-->
<name>viewIP</name>
<!-- 标签对应的处理器类-->
<tag-class>tag.ViewIPTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
3