1、編寫一個實現tag接口的標簽處理器類
public class ViewIPTag implements Tag {
private PageContext pageContext;
public int doStartTag() throws JspException {
HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
JspWriter out = pageContext.getOut();
String ip = request.getRemoteAddr();
try {
out.write(ip);
} catch (IOException e) {
throw new RuntimeException(e);
}
return 0;
}
public int doEndTag() throws JspException {
return 0;
}
public Tag getParent() {
return null;
}
public void release() {
}
public void setPageContext(PageContext arg0) {
this.pageContext = arg0;
}
public void setParent(Tag arg0) {
}
}
2、在web-inf/目錄下新建tld文件,在tld文件中對標簽處理器進行描述
A tag library exercising SimpleTag handlers.
1.0
SimpleTagLibrary
/itcast
viewIP
cn.itcast.web.tag.ViewIPTag
empty
3、在jsp頁面中導入並使用自定義標簽
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/itcast" prefix="itcast" %>
輸出客戶機的IP
您的IP是:
自定義標簽的擴展功能:
控制jsp頁面某一部分內容是否執行。
1.編寫一個類實現tag接口,控制dostarttag方法的返回值,如果這個方法返回EVAL_BODY_INCLUDE,則執行標簽體,如果返回SKIP_BODY,則不執行標簽體
控制整個jsp頁面是否執行。
2、編寫一個類實現tag接口,控制doendtag方法的返回值,如果這個方法返回EVAL_PAGE,則執行標簽余下的jsp頁面,如果返回SKIP_PAGE,則不執行余下的jsp
控制jsp頁面內容重復執行。
3.編寫一個類實現Iterationtag接口,控制doAfterBody方法的返回值,如果這個方法返回EVAL_BODY_AGAIN, 則web服務器又執行一次標簽體,依次類推,一直執行到doAfterBody方法返回SKIP_BODY,則標簽體才不會重復執行。
修改jsp頁面內容輸出。
4、編寫一個類實現BodyTag接口,控制doStartTag方法,返回EVAL_BODY_BUFFERED,則web服務器會創建BodyContent對象捕獲標簽體,開發人員在doendtag方法體內,得到代表標簽體的bodyContent對象,從而就可以對標簽體進行修改。。。等等操作。
簡單標簽實現頁面邏輯
控制jsp頁面某一部分內容是否執行。
1.在dotag方法裡面不調用jspFrament.invoke方法即可
控制jsp頁面內容重復執行。
1.在dotag方法重復調用jspFrament.invoke方法即可
修改jsp頁面內容輸出
1.在dotag方法調用jspFrament.invoke方法時,讓執行結果寫一個自定義的緩沖中即可,然後開發人員可以取出緩沖的數據修改輸 出
控制整個jsp頁面是否執行。
1.在dotag方法拋SKIPPageException即可,jsp收到這個異常,將忽略標簽余下jsp頁面的執行
生成exe
1、要把工程做成一個可運行的 jar
Main-Class: org.apache.catalina.startup.Bootstrap
2、使用exe4j