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文件下的所有文件