閫氳繃浣跨敤jsp鐨勮嚜瀹氫箟鏍囩锛屽彲浠ュ湪绠€鍗曠殑鏍囩涓皝瑁呭鏉傜殑鍔熻兘锛屽彲浠ョ敤浠ュ彇浠sp鑴氭湰銆?
寮€鍙慾sp2鑷畾涔夋爣绛劇殑姝ラ濡備笅锛?
- 瀹氫箟鏍囩澶勭悊绫夥紱
- 瀹氫箟
*.tld
鏂囦歡锛?
- 鍦╦sp椤甸潰涓嬌鐢ㄨ嚜瀹氫箟鏍囩銆?
绠€鍗曟爣绛懼畾涔?/h2>
璇村埌鏍囩锛屽彲浠ヨ仈鎯沖埌鏍囩鐨勫睘鎬у拰鏍囩浣撱€備負浜嗛噸鐐瑰睍绀鴻嚜瀹氫箟鏍囩鐨勭紪鍐欙紝鎴戜滑鍏堝畾涔変竴涓渶绠€鍗曠殑鏍囩锛屽嵆鏃犲睘鎬ф棤鏍囩浣撶殑鏍囩銆傝繖涓畝鍗曟爣绛懼皢鏄劇ず褰撳墠鐨勬棩鏈熷拰鏃堕棿銆?
瀹氫箟鏍囩澶勭悊绫?/h3>
灏卞儚涓€寮€濮嬫墍璇寸殑閭f牱锛屾垜浠渶瑕佸厛瀹氫箟鏍囩澶勭悊绫夥紝杩欎釜绫婚渶瑕佺戶鎵胯嚜
javax.servlet.jsp.tagext.SimpleTagSupport
锛屽苟閲嶅啓 doTag
鏂規硶锛? // DateTimeTag.java
public class DateTimeTag extends SimpleTagSupport {
private static final SimpleDateFormat sdf=
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public void doTag() throws JspException, IOException {
super.doTag();
getJspContext().getOut().write(sdf.format(new Date()));
}
}
DateTimeTag绫誨緢绠€鍗曪紝瀹冪戶鎵胯嚜SimpleTagSupport锛屽苟閲嶅啓浜?code>doTag鏂規硶銆?code>doTag鏂規硶涓幏鍙栦簡jsp椤甸潰涓婁笅鏂囩殑杈撳嚭娴佹潵杈撳嚭褰撳墠鐨勬棩鏈熷拰鏃堕棿銆? 瀹氫箟TLD鏂囦歡
鎺ョ潃锛屾垜浠渶瑕佸畾涔?code>*.tld鏂囦歡銆俆LD鏄?code>Tag Library Definition鐨勭緝鍐欙紝鍗蟲爣绛懼簱瀹氫箟銆傛瘡涓猅LD鏂囦歡瀵瑰簲涓€涓爣绛懼簱锛屾爣绛懼簱涓彲浠ュ畾涔夊涓爣绛俱€俆LD鏂囦歡闇€瑕佹斁鍦?code>WEB-INF鐩綍鎴栧叾浠繪剰瀛愮洰褰曚笅锛岃繖閲屾垜浠皢鍏舵斁鍦?code>WEB-INF/jsp2鐩綍涓嬨€?
涓嬮潰鎴戜滑鍦╡clipse涓垱寤轟竴涓猅LD鏂囦歡銆傚厛鍦?code>WEB-INF鐩綍涓嬪垱寤?code>jsp2鐩綍锛屽啀鍙沖嚮
jsp2
鐩綍閫夋嫨 New
- Other
- XML
- XML File
锛岃緭鍏ユ枃浠跺悕锛堟垜浠緭鍏ytaglib.tld锛夛紝 Next
锛岄€夋嫨 Creat XML file from a DTD file
锛?code>Next锛岄€夋嫨 Select XML Catalog entry
锛屽湪鍑虹幇鐨刋ML鏂囨湰閫夋嫨涓嬫媺妗嗕腑閫夋嫨 -//Sun Microsystems,Inc.//DTD JSP Tag Library 1.2//EN
锛?code>Next锛?code>Finish銆?
鍦ㄦ柊鍒涘緩鐨凾LD鏂囦歡涓彲浠ョ湅鍒幫紝瀹冪殑鏍瑰厓绱犳槸
taglib
锛岄噷闈㈠彲浠ュ寘鍚涓?code>tag瀛愬厓绱狅紝鎴戜滑灏辨槸閫氳繃 tag
鍏冪礌鏉ュ畾涔夋爣绛劇殑銆備笅闈㈡垜浠湪 mytaglib.tld
鏂囦歡涓畾涔夌涓€涓爣绛撅細 <!-- mytaglib.tld -->
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd" >
<taglib>
<tlib-version>tlib-version</tlib-version>
<jsp-version>jsp-version</jsp-version>
<short-name>short-name</short-name>
<uri>http://zzw.com/mytaglib</uri>
<tag>
<name>datetime</name>
<tag-class>com.zzw.DateTimeTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
鍦?code>taglib鍏冪礌涓湁涓€涓?code>uri鍏冪礌锛岃繖涓厓绱犳寚瀹氭爣绛懼簱鐨刄RI锛屾垜浠湪浣跨敤鏍囩搴撴椂灏變緷璧栦簬姝ゅ厓绱犮€傚湪 tag
鍏冪礌涓紝 name
鍏冪礌鎸囧畾鏍囩鐨勫悕瀛楋紝鎴戜滑鍦ㄤ嬌鐢ㄦ爣绛炬椂闇€瑕佹寚瀹氭爣绛懼悕锛?code>tag-class鍏冪礌鎸囧畾鏍囩鐨勫鐞嗙被锛?code>body-content鍏冪礌鍜屾爣绛句綋鏈夊叧锛屽畠鍙互鏄笅闈㈠嚑涓€鹼細
- empty锛氳〃绀烘病鏈夋爣绛句綋锛?
- JSP锛氳〃绀烘爣绛句綋鍙互鍖呭惈JSP浠g爜锛?
- scriptless锛氳〃绀烘爣绛句綋鍙互鍖呭惈EL琛ㄨ揪寮忓拰JSP鍔ㄤ綔鍏冪礌锛屼絾涓嶈兘鍖呭惈JSP鐨勮剼鏈厓绱狅紱
- tagdependent锛氳〃绀烘爣绛句綋浜ょ敱鏍囩鏈韓鍘昏В鏋愬鐞嗭紝鍗沖湪鏍囩浣撲腑鎵€鍐欑殑浠諱綍浠g爜閮戒細鍘熷皝涓嶅姩鍦頒紶缁欐爣绛懼鐞嗗櫒锛?
- dynamic-attributes锛氭寚瀹氳鏍囩鏄惁鏀寔鍔ㄦ€佸睘鎬э紝鍙湁褰撳畾涔夊姩鎬佸睘鎬ф爣绛炬椂鎵嶉渶瑕佹寚瀹氳鍊鹼紝鍏充簬鍔ㄦ€佸睘鎬ф爣绛懼皢鍦ㄥ悗闈粙缁嶃€?
杩欓噷鎴戜滑鍙渶瑕佹寚瀹?code>body-content>鍏冪礌鍊間負
empty
鍗沖彲銆? 鍦╦sp椤甸潰涓嬌鐢ㄨ嚜瀹氫箟鏍囩
鎺ヤ笅鏉ユ垜浠氨鍙互鍦╦sp椤甸潰涓嬌鐢ㄨ嚜瀹氫箟鏍囩浜嗭細<!-- mytag.jsp -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://zzw.com/mytaglib" prefix="mytag"%>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>鑷畾涔夋爣绛?lt;/title>
</head>
<body>
褰撳墠鏃堕棿<mytag:datetime/><hr>
</body>
</html>
鍙互鐪嬪埌锛岃浣跨敤鑷畾涔夋爣绛撅紝闇€瑕佸厛瀵煎叆鑷畾涔夋爣绛懼簱锛岃繖鍙互鍊熷姪jsp缂栬瘧鎸囦護 taglib
瀹屾垚銆傚湪 taglib
涓渶瑕佹寚瀹氳嚜瀹氫箟鏍囩搴撶殑URI鍜屾爣绛懼簱鍓嶇紑锛孶RI鍗沖湪TLD鏂囦歡涓殑 taglib
鍏冪礌鐨勫瓙鍏冪礌 uri
锛屽墠缂€鎸囧畾鍦ㄦ鏍囩搴撲腑瀹氫箟鐨勬墍鏈夋爣绛劇殑鍓嶇紑銆?
浣跨敤鑷畾涔夋爣绛劇殑璇硶鏍煎紡涓猴細
<prefix:tagname attribute="expression" ...>
<tag-body>
</prefix:tagname>
鐢變簬 datetime
鏍囩娌℃湁灞炴€э紝涔熶笉闇€瑕佹爣绛句綋锛屾垜浠彲浠ョ畝鍗曞啓鎴?code><mytag:datetime/>锛屽墠缂€ mytag
琛ㄧず姝ゆ爣绛懼睘浜嶶RI涓?code>"http://zzw.com/mytaglib"鐨勬爣绛懼簱銆?
杩愯鏁堟灉濡備笅锛?

甯﹀睘鎬х殑鏍囩
涓婇潰鎴戜滑浠嬬粛鐨勭畝鍗曟爣绛炬病鏈変換浣曞睘鎬э紝浣嗛€氬父鎯呭喌涓嬪ぇ澶氭暟鏍囩閮芥湁涓€涓垨澶氫釜灞炴€э紝鐜闆湪鎴戜滑灏變粙缁嶅甫灞炴€ф爣绛劇殑寮€鍙戙€?
鍩烘湰姝ラ鍜屼箣鍓嶄竴鏍鳳紝鎴戜滑鍏堢紪鍐欐爣绛懼鐞嗙被锛?
// EmailTag.java
public class EmailTag extends SimpleTagSupport {
private String from;
private String to;
private Date date;
private String message;
private static final SimpleDateFormat sdf=
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public String getFrom() { return from; }
public String getTo() { return to; }
public Date getDate() { return date; }
public String getMessage() { return message; }
public void setFrom(String f) { from=f; }
public void setTo(String t) { to=t; }
public void setDate(Date d) { date=d; }
public void setMessage(String m) { message=m; }
public void doTag() throws JspException, IOException {
super.doTag();
JspWriter out=getJspContext().getOut();
out.write("<div style=\"padding:10px;border:1px solid;border-color:#ff7f00;color:#ff7f00\">");
out.write("<b>FROM</b>: "+from+"<br>");
out.write("<b>TO</b>  : "+to+"<br>");
out.write("<b>DATE</b>: "+sdf.format(date)+"<br>");
out.write("<p>"+message+"</p>");
out.write("</div>");
}
}
EmailTag绫誨拰DatetimeTag绫葷殑涓嶅悓涔嬪鍦ㄤ簬锛屽畠澶氫簡鍑犱釜鈥滃睘鎬р€濓紝鑰屼笖杩欎簺鈥滃睘鎬р€濋兘鏈夊搴旂殑get鍜宻et鏂規硶銆傚疄闄呬笂jsp椤甸潰姝f槸閫氳繃get/set鏂規硶鏉ヨ幏鍙?璁劇疆鏍囩鐨勫睘鎬х殑銆?
鎴戜滑鍦?code>mytaglib.tld鏂囦歡涓坊鍔犺繖涓柊鏍囩锛?
<!-- mytaglib.tld -->
<tag>
<name>email</name>
<tag-class>com.zzw.EmailTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>from</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
</attribute>
<attribute>
<name>to</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
</attribute>
<attribute>
<name>date</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.util.Date</type>
</attribute>
<attribute>
<name>message</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
</attribute>
</tag>
鍙互鐪嬪埌锛岃繖涓柊鐨?code>tag鍏冪礌澶氫簡鍑犱釜 attribute
瀛愬厓绱狅紝鎴戜滑姝f槸閫氳繃 attribute
鍏冪礌鏉ヨ缃爣绛劇殑灞炴€х殑銆?code>attribute鍏冪礌鍙堟湁濡備笅鍑犱釜瀛愬厓绱狅細
- name锛氭寚瀹氬睘鎬у悕锛?
- required锛氭寚瀹氭灞炴€ф槸鍚︽槸蹇呰鐨勶紱
- rtexprvalue锛氬叏绉版槸
Run-time Expression Value
锛屽畠琛ㄧず鏄惁鍙互浣跨敤JSP琛ㄨ揪寮忥紱
- type锛氭寚瀹氭灞炴€х殑绫誨瀷銆?
鐜闆湪鎴戜滑灏卞彲浠ヤ嬌鐢ㄨ繖涓柊鏍囩浜嗭細
<!-- mytag.jsp -->
鍙戦€侀偖浠?lt;mytag:email date="<%=new Date()%>" message="hello, client" to="client" from="server"/>
娉ㄦ剰锛岀敱浜庢垜浠箣鍓嶅凡缁忛€氳繃 taglib
鎸囦護瀵煎叆浜嗘爣绛懼簱锛屽洜姝ゆ墠鑳界洿鎺ヤ嬌鐢ㄦ鏍囩锛涘惁鍒欓渶瑕佸厛瀵煎叆鏍囩搴撱€?
杩愯涓€涓嬶紝鍙戠幇鍑虹幇浜嗕竴涓紓甯革細
jsp-version
鍦ㄨ漿鎹㈡垚 double
绫誨瀷鏃跺彂鐢熻漿鎹㈤敊璇€傛鏌ユ垜浠殑浠g爜锛屽彂鐜闆彧鏈夊湪 mytaglib.tld
鏂囦歡鐨?code>taglib鍏冪礌涓嚭鐜頒簡 jsp-version
锛? <jsp-version>jsp-version</jsp-version>
鎶?code>jsp-version淇敼涓?code>2.0锛屽啀娆¤繍琛屾椂鍙互姝e父鏄劇ず锛? jsp-version
鍚庤繕鏄笉鑳芥甯歌繍琛岋紝鍙互灏?code>%TOMCAT_HOME%\webapps\examples\WEB-INF\jsp2鐩綍涓嬬殑浠繪剰TLD鏂囦歡涓殑 taglib
鍏冪礌鎷瘋礉鍒拌嚜宸辯殑TLD鏂囦歡涓紝濡傛灉浣跨敤eclipse鍒欎細鎶LD鏂囦歡鏈夎娉曢敊璇紝涓嶈繃涓嶇敤绠″畠锛岀収鏍峰彲浠ユ垚鍔熻繍琛屻€? 甯︽爣绛句綋鐨勬爣绛?/h2>
鏈変簺鏍囩闄や簡鍏鋒湁灞炴€у锛岃繕鏈夋爣绛句綋锛屾垜浠篃鍙互寮€鍙戝叿鏈夋爣绛句綋鐨勬爣绛俱€?
鎴戜滑瀹氫箟涓€涓凱浠e櫒鏍囩锛屽畠浼氫緷娆¤緭鍑哄鍣ㄤ腑鐨勫厓绱犮€傝繕鏄厛瀹氫箟鏍囩澶勭悊绫夥細
// IteratorTag.java
public class IteratorTag extends SimpleTagSupport {
private String collection;
private String item;
public String getCollection() { return collection; }
public String getItem() { return item; }
public void setCollection(String c) { collection=c; }
public void setItem(String i) { item=i; }
public void doTag() throws JspException, IOException {
super.doTag();
// 浠庡綋鍓峧sp椤甸潰涓婁笅鏂囪幏鍙栧睘鎬? Collection<?> items=(Collection<?>) getJspContext().getAttribute(collection);
for(Object i : items) {
// 缁欏綋鍓峧sp椤甸潰涓婁笅鏂囪缃睘鎬? getJspContext().setAttribute(item, i);
// 杈撳嚭鏍囩浣? getJspBody().invoke(null);
}
}
}
鍦?code>doTag鏂規硶涓湁涓€鍙?code>getIspBody().invoke(null);锛屽畠璐熻矗杈撳嚭鏍囩浣撱€傞€氬父鏍囩浣撴槸涓€绯誨垪EL琛ㄨ揪寮忔垨jsp鍔ㄤ綔鎸囦護锛屾垜浠笉鎵撶畻鍦ㄨ繖閲岃缁嗕粙缁岴L琛ㄨ揪寮忥紝鏈夊叧EL琛ㄨ揪寮忕殑鍐呭鍙互鍙傝€冭繖涓ょ瘒鏂囩珷锛氥€奅L琛ㄨ揪寮忥紙璇﹁В锛夈€嬪拰銆奅L琛ㄨ揪寮忕畝浠嬨€嬨€?
鐒跺悗鍦═LD鏂囦歡涓畾涔夋爣绛撅細
<!-- mytaglib.tld -->
<tag>
<name>iterator</name>
<tag-class>com.zzw.IteratorTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>collection</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
</attribute>
<attribute>
<name>item</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
</attribute>
</tag>
娉ㄦ剰杩欓噷鐨?code>body-content鍏冪礌鍊間負 scriptless
锛岃〃绀烘爣绛句綋鍙互鍖呭惈EL琛ㄨ揪寮忓拰JSP鍔ㄤ綔鍏冪礌锛屼絾涓嶈兘鍖呭惈JSP鐨勮剼鏈厓绱犮€?
鏈€鍚庡湪jsp椤甸潰涓嬌鐢ㄦ鏍囩锛?
<!-- mytag.jsp -->
<%
ArrayList<String> list=new ArrayList<String>();
for(int i=; i<; i++)
list.add("item "+i);
pageContext.setAttribute("list", list);
%>
杩唬鍣?lt;br><mytag:iterator item="item" collection="list">
${pageScope.item}<br>
</mytag:iterator>
鎴戜滑鍏堢敤jsp鑴氭湰灏嗗鍣ㄥ璞℃坊鍔犲埌page浣滅敤鍩熶腑锛孖teratorTag绫繪墠鑳藉彇寰楁瀹瑰櫒瀵矽薄锛岀劧鍚庡湪 doTag
鏂規硶涓張灏嗘瀹瑰櫒瀵矽薄涓殑鍏冪礌娣誨姞鍒皃age浣滅敤鍩熶腑锛岀劧鍚庢爣绛句綋 ${pageScope.item}
锛堣繖鏄竴涓狤L琛ㄨ揪寮忥級璐熻矗鍙栧緱鍏冪礌瀵矽薄寮曠敤锛屾渶鍚?code>getJspBody().invoke(null);璇彞杈撳嚭姝ゅ厓绱犲璞°€?
缁撴灉濡備笅锛?
灞炴€т負椤甸潰鐗囨鐨勬爣绛?/h2>
涔嬪墠鎴戜滑宸茬粡浠嬬粛浜嗗甫灞炴€ф爣绛劇殑寮€鍙戯紝鍏跺疄鏍囩鐨勫睘鎬т篃鍙互鏄竴涓〉闈㈢墖娈點€傝繖绉嶆爣绛劇殑澶勭悊绫諱腑蹇呴』鏈変竴涓被鍨嬩負
javax.servlet.jsp.tagext.JspFragment
鐨勫睘鎬э紝鎴戜滑灏嗕竴寮€濮嬬殑datetime鏍囩浣滀負鐗囨鏉ヨ繘琛屽甫灞炴€ф爣绛劇殑寮€鍙戙€?
瀹氫箟鏍囩澶勭悊绫夥細
// FragmentTag.java
public class FragmentTag extends SimpleTagSupport {
private JspFragment fragment;
public JspFragment getFragment() { return fragment; }
public void setFragment(JspFragment f) { fragment=f; }
public void doTag() throws JspException, IOException {
super.doTag();
JspWriter out=getJspContext().getOut();
out.println("<div style=\"padding:10px;border:1px solid;border-color:#000000\">");
fragment.invoke(null);
out.println("</div>");
}
}
FragmentTag绫諱篃閬靛驚甯﹀睘鎬ф爣绛懼鐞嗙被鐨勭紪鍐欒鑼冿紝鍙笉杩囧畠鐨勨€滃睘鎬р€濈被鍨嬩負 JspFragment
銆傚湪 doTag
鏂規硶涓?code>fragment.invoke(null);璇彞璐熻矗杈撳嚭鍖呭惈鐨勯〉闈㈢墖娈點€?
鐒跺悗鍦═LD鏂囦歡涓畾涔夋鏍囩锛?
<!-- mytaglib.tld -->
<tag>
<name>fragment</name>
<tag-class>com.zzw.FragmentTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>fragment</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<fragment>true</fragment>
</attribute>
</tag>
娉ㄦ剰鍒幫紝 attribute
鍏冪礌涓浜嗕竴鏉″瓙鍏冪礌 fragment
锛屽鏋滀嬌鐢╡clipse鍒欎細鎶ラ敊锛屾垜浠緷鐒朵笉鐢ㄧ瀹冦€傚鏋滀笉璁劇疆 fragment
鍏冪礌鎴栬缃?code>fragment鍏冪礌涓?code>false锛屽垯杩愯鏃朵細鍙戠敓寮傚父锛? <!-- mytag.jsp -->
椤甸潰鐗囨<mytag:fragment>
<jsp:attribute name="fragment">
<mytag:datetime/>
</jsp:attribute>
</mytag:fragment>
鎴戜滑鍦ㄦ爣绛句綋涓嬌鐢?code>jsp:attribute鍔ㄤ綔鎸囧畾浜唂ragment鏍囩鐨勫睘鎬э紝娉ㄦ剰鍦═LD鏂囦歡涓璮ragment鏍囩鐨?code>body-content鍏冪礌鍊間負 empty
銆?
杩愯缁撴灉濡備笅锛?
鍔ㄦ€佸睘鎬ф爣绛?/h2>
鏈夋椂锛屾垜浠笉鑳界‘瀹氭爣绛炬湁澶氬皯涓睘鎬ф垨鑰呮垜浠笉鐭ラ亾灞炴€х殑鍚嶅瓧锛岃繖绉嶆儏鍐典笅鍙互浣跨敤鍔ㄦ€佸睘鎬ф爣绛俱€傚姩鎬佸睘鎬ф爣绛劇殑澶勭悊绫誨繀椤誨疄鐜?code>javax.servlet.jsp.tagext.DynamicAttributes鎺ュ彛锛屽苟閲嶅啓
setDynamicAttribute
鏂規硶銆?
鎴戜滑瀹氫箟涓€涓畝鍗曠殑鍔ㄦ€佸睘鎬ф爣绛撅紝骞跺湪jsp椤甸潰涓樉绀烘鏍囩鐨勫睘鎬с€?
鏍囩澶勭悊绫夥細
// DynamicTag.java
public class DynamicTag extends SimpleTagSupport implements DynamicAttributes {
private HashMap<String, Object> attrs=new HashMap<String, Object>();
public void doTag() throws JspException, IOException {
super.doTag();
if(attrs!=null && !attrs.isEmpty()) {
JspWriter out=getJspContext().getOut();
out.println("<ol>");
Set<String> keys=attrs.keySet();
Iterator<String> iter=keys.iterator();
while(iter.hasNext()) {
String key=iter.next();
out.println("<li>"+key+"="+attrs.get(key)+"</li>");
}
out.println("</ol>");
}
}
@Override
public void setDynamicAttribute(String uri, String localName, Object value) throws JspException {
attrs.put(localName, value);
}
}
鍙互鐪嬪埌锛屾垜浠€氳繃 setDynamicAttribute
鏂規硶鏉ュ姩鎬佹坊鍔犳爣绛劇殑灞炴€с€?
鍦═LD鏂囦歡涓畾涔夋鏍囩锛?
<!-- mytaglib.tld -->
<tag>
<name>dynamic</name>
<tag-class>com.zzw.DynamicTag</tag-class>
<body-content>empty</body-content>
<dynamic-attributes>true</dynamic-attributes>
</tag>
姝ゆ爣绛懼浜嗕竴涓?code>dynamic-attributes鍏冪礌锛屽畠鎸囧畾姝ゆ爣绛炬槸鍚︽槸鍔ㄦ€佸睘鎬ф爣绛俱€傚悓鏍風殑锛屽湪eclipse涓缃鍏冪礌浼氭姤閿欙紝浣嗘垜浠悓鏍峰拷鐣ュ畠銆傚鏋滀笉璁劇疆姝ゅ厓绱犳垨璁劇疆姝ゅ厓绱犲€間負 false
锛屽垯鍦ㄨ繍琛屾椂浼氬彂鐢熷紓甯革細 <!-- mytag.jsp -->
鍔ㄦ€佸睘鎬?lt;mytag:dynamic user="zzw" password="******" action="signin"/>
杩愯缁撴灉濡備笅锛? Tag File
Tag File鏄嚜瀹氫箟鏍囩鐨勭畝鍖栫敤娉曪紝浣跨敤Tag File鏃犻渶瀹氫箟鏍囩澶勭悊绫誨拰TLD鏂囦歡锛屼絾浠嶇劧鍙互鍦╦sp椤甸潰涓嬌鐢ㄨ嚜瀹氫箟鏍囩銆備笅闈㈡垜浠垱寤轟竴涓猅ag File锛屽疄鐜闆鍥劇殑杩唬銆?鍒涘緩Tag File
Tag File鐨勫懡鍚嶅繀椤諱互.tag
缁撳熬锛屾枃浠跺悕灏辨槸姝ゆ爣绛劇殑鏍囩鍚嶃€傝鏂囦歡闇€瑕佹斁鍦╳eb搴旂敤鐨勬煇涓洰褰曚笅锛岄€氬父鏀懼湪 WEB-INF/tags
鐩綍涓紝杩欎釜璺緞鐩稿綋浜庢爣绛懼簱鐨刄RI锛屽湪jsp椤甸潰鐨?code>taglib鎸囦護涓敤 tagdir
灞炴€ф寚瀹氥€?
鍦╡clipse涓紝鍏堝湪
WEB-INF
鐩綍涓嬪垱寤?code>tags鐩綍锛屽啀鍙沖嚮 tags
鐩綍閫夋嫨 New
- Other
- Web
- JSP Tag
锛岃緭鍏ユ枃浠跺悕锛堟垜浠緭鍏terator.tag锛夛紝鍦ㄥ嚭鐜扮殑妯℃澘閫夋嫨妗嗕腑閫夋嫨 New Tag File
锛?code>Finish銆? <!-- iterator.tag -->
<%@ tag language='java' pageEncoding='GBK' body-content="scriptless"%>
<%@ tag import="java.util.*" %>
<%@ attribute name="bgcolor" required="true"%>
<%@ attribute name="cellcolor" required="true"%>
<%@ attribute name="collection" required="true" type="java.util.HashMap"%>
<%@ variable name-given="end" variable-class="java.util.Date" scope="AT_END"%>
<%
Set<?> keys=collection.keySet();
Iterator<?> iter=keys.iterator();
%>
寮€濮嬭凱浠?amp;nbsp;<%=new Date()%><br>
<jsp:doBody/>
<table bgcolor="${bgcolor}" border="1">
<%
while(iter.hasNext()) {
String key=(String) iter.next();
%>
<tr bgcolor="${cellcolor}">
<td><%=key%></td>
<td><%=collection.get(key)%></td>
</tr>
<%}%>
</table>
<%
jspContext.setAttribute("end", new Date());
%>
Tag File鐨勮娉曞拰jsp寰堢浉浼鹼紝瀹冨叿鏈変互涓嬬紪璇戞寚浠わ細
- taglib锛氫綔鐢ㄧ被浼間簬jsp椤甸潰涓殑taglib鎸囦護锛岀敤浜庡鍏ュ叾浠栨爣绛懼簱锛?
- include锛氫綔鐢ㄧ被浼間簬jsp椤甸潰涓殑include鎸囦護锛岀敤浜庡寘鍚叾浠杍sp椤甸潰鎴栭潤鎬侀〉闈紱
- tag锛氫綔鐢ㄧ被浼間簬jsp椤甸潰涓殑page鎸囦護锛岀敤浜庤缃瑷€銆佺紪鐮佺瓑锛?
- attribute锛氱敤浜庤缃爣绛懼睘鎬э紝瀵瑰簲浜嶵LD鏂囦歡涓?code>tag鍏冪礌鐨?code>attribute瀛愬厓绱狅紱
- variable锛氱敤浜庤缃爣绛懼彉閲忥紝杩欎簺鍙橀噺灏嗕紶缁檍sp椤甸潰浣跨敤銆?
鍦═ag File涓篃鍙互浣跨敤jsp鍔ㄤ綔鎸囦護鍜岀紪鍐欓潤鎬佹枃鏈紝鎴戜滑浣跨敤浜?code>jsp:doBody鍔ㄤ綔鎸囦護鏉ヨ緭鍑烘爣绛句綋銆?
鍦═ag File涓繕鍙互瀹氫箟鍙橀噺渚沯sp椤甸潰浣跨敤锛屾鍔熻兘鍙€熷姪
variable
鎸囦護瀹屾垚銆?code>variable鎸囦護鏈夊涓嬪睘鎬э細
- name-given锛氭寚瀹氬彉閲忓悕锛?
- variable-class锛氭寚瀹氬彉閲忕被鍨嬶紝榛樿鏄?code>java.lang.String锛?
- scope锛氭寚瀹氬彉閲忕殑浣滅敤鍩燂紝鏈夊涓?涓€鹼細
-
AT_BEGIN
锛氬湪鏍囩寮€濮嬩嬌鐢ㄥ悗鐨勪換浣曞湴鏂歸兘鍙互浣跨敤姝ゅ彉閲忥紱
-
NESTED
锛氬彧鑳藉湪鏍囩浣撲腑浣跨敤姝ゅ彉閲忥紱
-
AT_END
:鍙兘鍦ㄦ爣绛劇粨鏉熷悗浣跨敤姝ゅ彉閲忋€?
涓嬮潰鍦╦sp椤甸潰涓嬌鐢ㄦtag锛?
<!-- mytag.jsp -->
<%@ taglib tagdir="/WEB-INF/tags" prefix="tags"%>
<%
HashMap<String, Object> map=new HashMap<String, Object>();
map.put("name", "寮犱笁");
map.put("old", );
map.put("sex", "male");
map.put("date", new Date());
%>
TAG杩唬鍣?lt;br>
<tags:iterator bgcolor="#7f00ff" cellcolor="#ffff00" collection="<%=map%>">
閿€煎涓猴細
</tags:iterator>
缁撴潫杩唬 <%=end%>
鍦?code>mytag.jsp鏂囦歡涓紝浣跨敤 taglib
鎸囦護瀵煎叆浜員ag File锛?code>tagdir灞炴€ф寚瀹氫簡Tag File鐨勮礬寰勶紝 prefix
鍜屽鍏ヨ嚜瀹氫箟鏍囩搴撴椂鍏鋒湁鐩稿悓鐨勬剰涔夈€傚彟澶栧湪浣跨敤tag鏃訛紝prefix鍚庤窡鐫€鐨勬槸Tag File鐨勫悕瀛椼€?
杩愯鏁堟灉濡備笅锛?
Tag File鐨勫疄璐?/h3>
灏卞鍚宩sp鐨勫疄璐ㄦ槸Servlet涓€鏍鳳紝Tag File鐨勫疄璐ㄥ氨鏄爣绛懼鐞嗙被锛屽畠鏈€鍚庝細琚鐞嗘垚涓€涓?code>xxx_tag.java鏂囦歡锛屽苟琚紪璇戞垚涓€涓?code>xxx_tag.class鏂囦歡銆?
%ECLIPSE_WORKSPACE%\.metadata\.plugins\org.eclipse.wst.server.core\tmpX\work\Catalina\localhost\<PROJECT-NAME>\org\apache\jsp\tag\web
鐩綍涓嬪彲浠ユ壘鍒拌嫢骞?code>xxx_tag.java鍜岀浉搴旂殑CLASS鏂囦歡銆傛煡鐪嬩笂杩癟ag File瀵瑰簲鐨?code>iterator_tag.java鏂囦歡锛? // iterator_tag.java
public final class iterator_tag
extends javax.servlet.jsp.tagext.SimpleTagSupport
implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports {
// jsp椤甸潰涓婁笅鏂? private javax.servlet.jsp.JspContext jspContext;
// 鍦═ag File涓畾涔夌殑灞炴€? private java.lang.String bgcolor;
private java.lang.String cellcolor;
private java.util.HashMap collection;
// bgcolor銆乧ellcolor鍜宑ollection鐨刧et/set鏂規硶绫諱技
public java.lang.String getBgcolor() {
return this.bgcolor;
}
public void setBgcolor(java.lang.String bgcolor) {
this.bgcolor = bgcolor;
jspContext.setAttribute("bgcolor", bgcolor);
}
// 鍦═ag File涓殑jsp鑴氭湰閮戒細鍦╠oTag()鏂規硶涓杞崲涓洪潤鎬佹枃鏈緭鍑? public void doTag() throws javax.servlet.jsp.JspException, java.io.IOException {
javax.servlet.jsp.PageContext _jspx_page_context = (javax.servlet.jsp.PageContext)jspContext;
javax.servlet.http.HttpServletRequest request = (javax.servlet.http.HttpServletRequest) _jspx_page_context.getRequest();
javax.servlet.http.HttpServletResponse response = (javax.servlet.http.HttpServletResponse) _jspx_page_context.getResponse();
javax.servlet.http.HttpSession session = _jspx_page_context.getSession();
javax.servlet.ServletContext application = _jspx_page_context.getServletContext();
javax.servlet.ServletConfig config = _jspx_page_context.getServletConfig();
javax.servlet.jsp.JspWriter out = jspContext.getOut();
// ...
try {
// 鍜屽甫鏍囩浣撴爣绛句竴鏍鳳紝閮芥槸鍦╠oTag()鏂規硶涓皟鐢╣etJspBody().invoke(null);
_jspx_sout = null;
if (getJspBody() != null)
getJspBody().invoke(_jspx_sout);
// ...
} catch( java.lang.Throwable t ) {
// ...
} finally {
// ...
}
}
}
鎴戜滑鍦╥terator_tag绫諱腑鎵懼埌浜嗕笁涓暟鎹垚鍛?code>bgcolor銆?code>cellcolor鍜?code>collection锛屽畠浠兘鏈塯et/set鏂規硶銆傚疄闄呬笂杩欎笁涓暟鎹垚鍛樺氨鏄垜浠湪Tag File涓畾涔夌殑灞炴€э紝鍙鎴戜滑鍦═ag File涓畾涔夌殑灞炴€ч兘浼氭垚涓虹浉搴旀爣绛懼鐞嗙被鐨勬暟鎹垚鍛樸€?
鎴戜滑杩樺彂鐜幫紝鍜宩sp杞崲鎴怱ervlet涓€鏍鳳紝鍦?code>doTag鏂規硶涓篃瀹氫箟浜嗕竴绯誨垪鍐呯疆瀵矽薄锛屽畠浠拰tag绫葷殑鏁版嵁鎴愬憳
jspContext
閮借兘鍦═ag File涓洿鎺ヤ嬌鐢細 瀵矽薄 | 绫誨瀷 | 琛ㄧず |
---|---|---|
jspContext | javax.servlet.jsp.JspContext | jsp椤甸潰鐨勪笂涓嬫枃 |
request | javax.servlet.http.HttpServletRequest | 涓€娆″鎴風璇鋒眰 |
response | javax.servlet.http.HttpServletResponse | 涓€娆℃湇鍔″櫒鍝嶅簲 |
session | javax.servlet.http.HttpSession | 涓€娆′細璇?/td> |
application | javax.servlet.ServletContext | 鏁翠釜web搴旂敤 |
config | javax.servlet.ServletConfig | 搴旂敤閰嶇疆 |
out | javax.servlet.jsp.JspWriter | 杈撳嚭娴?/td> |
鍏充簬杩欏嚑涓璞$殑浣跨敤鍙互鍙傝€冩垜鐨勫彟涓€绡囨枃绔狅細銆奐avaEE jsp鐨勫唴缃璞″強鍏跺湪Servlet涓殑琛ㄧず銆嬨€?
婧愪唬鐮?/h2>
涓婅堪鎵€鏈変唬鐮佸凡缁忎笂浼犲埌github锛?
https://github.com/jzyhywxz/WebDemo.git