JSP自定义标签示例

jopen 10年前

1.自定义标签库要编写一个类实现Tag接口,实现它的方法

通常我们只需要继承Tag的实现类TagSupport,重写它的doStart()方法即可

import java.io.IOException;    import javax.servlet.http.HttpServletRequest;  import javax.servlet.jsp.JspException;  import javax.servlet.jsp.JspWriter;  import javax.servlet.jsp.tagext.TagSupport;    /**   * TagSupport内部会通过setPageContext(PageContext pageContext)传入相应的pageContext   * 有了pageContext我们就可以操作当前应用的所有对象   *   */  public class ViewIPTag extends TagSupport {     private static final long serialVersionUID = 6754089233531337844L;     @Override   public int doStartTag() throws JspException {    HttpServletRequest request = (HttpServletRequest) this.pageContext.getRequest();    JspWriter out = this.pageContext.getOut();        String ip = request.getRemoteAddr();    try {     out.print(ip);    } catch (IOException e) {     throw new RuntimeException(e);    }        return super.doStartTag();   }  }

2.编写tld文件(其实本质是一个xml文件,只是后缀名为tld),此文件要放在WEB-INF/下,
可从$tomat/webapps/examples/WEB-INF/jsp2下找到tld文件

<?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">   <tlib-version>1.0</tlib-version>   <short-name>boco</short-name><!--prefix-->   <uri>http://www.boco.com/lhp</uri><!--uri-->   <tag>    <name>viewIP</name><!--tagName-->    <tag-class>com.boco.lhp.ViewIPTag</tag-class>    <body-content>empty</body-content>   </tag>  </taglib>

<body-content>有4个属性:JSP/empty/scriptless/tagdependent;意思是,在使用标记时,标记中可包含的内容。JSP表示标记中可包 含java代码;empty表示标记中不可包含任何内容,必须为空;scriptless表示标记中不能包含java代码,可包含EL、JSP动作代 码;tagdependent表示标记包含的内容由标记决定

3.jsp中的应用,要通过<%taglib uri="uri" prefix="prefix" />引入,并通过<prefix:tagName />

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  <%@taglib uri="http://www.boco.com/lhp" prefix="boco" %>  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  <html>    <head>      <title>viewIp</title>    </head>     <boco:viewIP/>    <body>    </body>  </html>

标记库文件打包成jar文件的方法:
创建一个临时文件夹temp,把需要打包的标记库类的class文件(在tomcat中webapps文件夹下对应项目的web-inf目录下) 放入temp文件夹中(注意要带上完整的package),并在temp下创建META-INF文件夹用以存放编辑好的tld文件,    之后通过cmd在temp目录下  运行【jar -cvf jarName.jar *】即可,jarName是自定义的jar文件名,*表示temp文件下的所有文件