JSP自定義標簽示例
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文件下的所有文件