绠€浠嬶細聽
聽聽 缁濆ぇ閮ㄥ垎 Java 棰嗗煙鐨?MVC 妗嗘灦锛屼緥濡?Struts銆丼pring聽聽聽 MVC銆丣SF 绛夛紝涓昏鐢變袱閮ㄥ垎缁勬垚锛氭帶鍒跺櫒缁勪歡鍜岃鍥劇粍浠躲€傚叾涓鍥劇粍浠朵富瑕佺敱澶ч噺鍔熻兘涓闆瘜鐨勬爣绛懼簱鍏呭綋銆傚浜庡ぇ閮ㄥ垎寮€鍙戣€呰€岃█锛屽彲鑳介€氬父鍙嬌鐢ㄨ繖浜涙鏋舵彁渚涚殑鏍囩锛屽緢灏戣嚜宸卞紑鍙戞爣绛撅紱浣嗗鏋滃紑鍙戣€呮帉鎻¢拡瀵圭壒瀹氬簲鐢ㄥ紑鍙戣嚜瀹氫箟鏍囩锛屽垯鍙互澶уぇ绠€鍖?Web 搴旂敤鐨勮〃鐜闆眰寮€鍙戯紝鑰?JSP 2 瑙勮寖鎻愪緵鐨劼?impleTagSupport 涓哄紑鍙戣嚜瀹氫箟鏍囩鎻愪緵浜嗗緢濂界殑鏀寔銆?
鑷畾涔夋爣绛懼簱骞朵笉鏄?JSP 2 鎵嶅嚭鐜扮殑锛孞SP 1.1 鐗堜腑宸茬粡澧炲姞浜嗚嚜瀹氫箟鏍囩搴撹鑼冿紝鑷畾涔夋爣绛懼簱鏄竴绉嶉潪甯鎬紭绉€鐨勮〃鐜闆眰缁勪歡鎶€鏈€傞€氳繃浣跨敤鑷畾涔夋爣绛懼簱锛屽彲浠ュ湪绠€鍗曠殑鏍囩涓皝瑁呭鏉傜殑鍔熻兘銆?
涓轟粈涔堣浣跨敤鑷畾涔夋爣绛懼憿锛熶富瑕佹槸涓轟簡鍙栦唬涓戦檵鐨?JSP 鑴氭湰銆傚湪 HTML 椤甸潰涓彃鍏?JSP 鑴氭湰鏈夊涓嬪嚑涓潖澶勶細
JSP 鑴氭湰闈炲父涓戦檵锛岄毦浠ラ槄璇彙€? JSP 鑴氭湰鍜?HTML 浠g爜娣鋒潅锛岀淮鎶ゆ垚鏈珮銆? HTML 椤甸潰涓祵鍏?JSP 鑴氭湰锛屽鑷寸編宸ヤ漢鍛橀毦浠ュ弬涓庡紑鍙戙€? 聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽
鍑轟簬浠ヤ笂涓夌偣鐨勮€冭檻锛屾垜浠渶瑕佷竴绉嶅彲鍦ㄩ〉闈腑浣跨敤鐨勬爣绛撅紝杩欑鏍囩鍏鋒湁鍜?HTML 鏍囩绫諱技鐨勮娉曪紝浣嗙敱鍙互瀹屾垚 JSP 鑴氭湰鐨勫姛鑳解€斺€旇繖绉嶆爣绛懼氨鏄?JSP 鑷畾涔夋爣绛俱€?
鍦?JSP1.1 瑙勮寖涓紑鍙戣嚜瀹氫箟鏍囩搴撴瘮杈冨鏉傦紝JSP 2 瑙勮寖绠€鍖栦簡鏍囩搴撶殑寮€鍙戯紝鍦?JSP 2 涓紑鍙戞爣绛懼簱鍙渶濡備笅鍑犱釜姝ラ锛?
寮€鍙戣嚜瀹氫箟鏍囩澶勭悊绫夥紱 寤虹珛涓€涓?*.tld 鏂囦歡锛屾瘡涓?*.tld 鏂囦歡瀵瑰簲涓€涓爣绛懼簱锛屾瘡涓爣绛懼簱瀵瑰簲澶氫釜鏍囩锛? 鍦?JSP 鏂囦歡涓嬌鐢ㄨ嚜瀹氫箟鏍囩銆? 寮€鍙戣嚜瀹氫箟鏍囩绫? 鏍囩搴撳拰瀹為檯寮€鍙?/h2>
鏍囩搴撴槸闈炲父閲嶈鐨勬妧鏈紝閫氬父鏉ヨ锛屽垵瀛﹁€呫€佹櫘閫氬紑鍙戜漢鍛樿嚜宸卞紑鍙戞爣绛懼簱鐨勬満浼氬緢灏戯紝浣嗗鏋滃笇鏈涙垚涓洪珮绾х▼搴忓憳锛屾垨鑰呭笇鏈涘紑鍙戦€氱敤妗嗘灦锛屽氨闇€瑕佸ぇ閲忓紑鍙戣嚜瀹氫箟鏍囩浜嗐€傛墍鏈夌殑 MVC 妗嗘灦锛屽 Struts 2銆丼pringMVC銆丣SF 绛夐兘鎻愪緵浜嗕赴瀵岀殑鑷畾涔夋爣绛俱€?
褰撴垜浠湪 JSP 椤甸潰浣跨敤涓€涓畝鍗曠殑鏍囩鏃訛紝搴曞眰瀹為檯涓婄敱鏍囩澶勭悊绫繪彁渚涙敮鎸侊紝浠庤€屽彲浠ヤ嬌鐢ㄧ畝鍗曠殑鏍囩鏉ュ皝瑁呭鏉傜殑鍔熻兘锛屼粠鑰屼嬌鍥㈤槦鏇村ソ鍦闆崗浣滃紑鍙戯紙鑳借缇庡伐浜哄憳鏇村ソ鍦闆弬涓?JSP 椤甸潰鐨勫紑鍙戯級銆?
鏃╂湡 JSP 鑷畾涔夋爣绛劇被寮€鍙戣繃绋嬬暐寰鏉備竴浜涳紝浣?JSP 2 宸茬粡绠€鍖栦簡杩欎釜杩囩▼锛屽畠鍙鑷畾涔夋爣绛劇被閮藉繀椤葷戶鎵誇竴涓埗绫夥細javax.servlet.jsp.tagext.SimpleTagSupport锛岄櫎姝や箣澶栵紝JSP 鑷畾涔夋爣绛劇被杩樻湁濡備笅瑕佹眰銆?
濡傛灉鏍囩绫誨寘鍚睘鎬э紝姣忎釜灞炴€ч兘鏈夊搴旂殑 getter 鍜?setter 鏂規硶銆? 閲嶅啓 doTag() 鏂規硶锛岃繖涓柟娉曡礋璐g敓鎴愰〉闈㈠唴瀹廣€? 涓嬮潰寮€鍙戜竴涓渶绠€鍗曠殑鑷畾涔夋爣绛撅紝璇ユ爣绛捐礋璐e湪椤甸潰涓婅緭鍑?HelloWorld銆? // 鏍囩澶勭悊绫夥紝缁ф壙 SimpleTagSupport 鐖剁被
public class HelloWorldTag extends SimpleTagSupport
{
// 閲嶅啓 doTag 鏂規硶锛岃鏂規硶鍦ㄦ爣绛劇粨鏉熺敓鎴愰〉闈㈠唴瀹? public void doTag()throws JspException,
IOException
{
// 鑾峰彇椤甸潰杈撳嚭娴侊紝骞惰緭鍑哄瓧绗︿覆
getJspContext().getOut().write("Hello World");
}
}
涓婇潰杩欎釜鏍囩澶勭悊绫婚潪甯哥畝鍗曪紝瀹冪戶鎵誇簡 SimpleTagSupport 鐖剁被锛屽苟閲嶅啓 doTag() 鏂規硶锛岃€?doTag() 鏂規硶鍒欒礋璐h緭鍑洪〉闈㈠唴瀹廣€傝鏍囩娌℃湁灞炴€э紝鍥犳鏃犻』鎻愪緵 setter 鍜?getter 鏂規硶銆?
寤虹珛 TLD 鏂囦歡
TLD 鏄?Tag Library Definition 鐨勭緝鍐欙紝鍗蟲爣绛懼簱瀹氫箟锛屾枃浠剁殑鍚庣紑鏄?tld锛屾瘡涓?TLD 鏂囦歡瀵瑰簲涓€涓爣绛懼簱锛屼竴涓爣绛懼簱涓彲鍖呭惈澶氫釜鏍囩锛孴LD 鏂囦歡涔熺О涓烘爣绛懼簱瀹氫箟鏂囦歡銆?
鏍囩搴撳畾涔夋枃浠剁殑鏍瑰厓绱犳槸 taglib锛屽畠鍙互鍖呭惈澶氫釜 tag 瀛愬厓绱狅紝姣忎釜 tag 瀛愬厓绱犻兘瀹氫箟涓€涓爣绛俱€傞€氬父鎴戜滑鍙互鍒?Web 瀹瑰櫒涓嬪鍒朵竴涓爣绛懼簱瀹氫箟鏂囦歡锛屽苟鍦ㄦ鍩虹涓婅繘琛屼慨鏀瑰嵆鍙€備緥濡?Tomcat6.0锛屽湪 webapps\examples\WEB-INF\jsp2 璺緞涓嬪寘鍚簡涓€涓?jsp2-example-taglib.tld 鏂囦歡锛岃繖灏辨槸绀鴻寖鐢ㄧ殑鏍囩搴撳畾涔夋枃浠躲€?
灏嗚鏂囦歡澶嶅埗鍒?Web 搴旂敤鐨?WEB-INF/ 璺緞锛屾垨 WEB-INF 鐨勪換鎰忓瓙璺緞涓嬶紝骞跺璇ユ枃浠惰繘琛岀畝鍗曚慨鏀癸紝淇敼鍚庣殑 mytaglib.tld 鏂囦歡浠g爜濡備笅锛?
<?xml version="1.0" encoding="GBK"?>
<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 web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>mytaglib</short-name>
<!-- 瀹氫箟璇ユ爣绛懼簱鐨刄RI -->
<uri>http://www.crazyit.org/mytaglib</uri>
<!-- 瀹氫箟绗竴涓爣绛?-->
<tag>
<!-- 瀹氫箟鏍囩鍚?-->
<name>helloWorld</name>
<!-- 瀹氫箟鏍囩澶勭悊绫?-->
<tag-class>lee.HelloWorldTag</tag-class>
<!-- 瀹氫箟鏍囩浣撲負绌?-->
<body-content>empty</body-content>
</tag>
</taglib>
涓婇潰鏍囩搴撳畾涔夋枃浠朵篃鏄竴涓爣鍑嗙殑 XML 鏂囦歡锛岃 XML 鏂囦歡鐨勬牴鍏冪礌鏄?taglib 鍏冪礌锛屽洜姝ゆ垜浠瘡娆$紪鍐欐爣绛懼簱瀹氫箟鏂囦歡閮界洿鎺ユ坊鍔犺鍏冪礌鍗沖彲銆?
taglib 涓嬫湁涓変釜瀛愬厓绱狅細
tlib-version锛氭寚瀹氳鏍囩搴撳疄鐜扮殑鐗堟湰锛岃繖鏄竴涓綔涓烘爣璇嗙殑鍐呴儴鐗堟湰鍙鳳紝瀵圭▼搴忔病鏈夊お澶х殑浣滅敤銆? short-name锛氳鏍囩搴撶殑榛樿鐭悕锛岃鍚嶇О閫氬父涔熸病鏈夊お澶х殑鐢ㄥ銆? uri锛氳繖涓睘鎬ч潪甯擱噸瑕侊紝瀹冩寚瀹氳鏍囩搴撶殑 URI锛岀浉褰撲簬鎸囧畾璇ユ爣绛懼簱鐨勫敮涓€鏍囪瘑銆傚涓婄矖浣撳瓧浠g爜鎵€绀猴紝JSP 椤甸潰涓嬌鐢ㄦ爣绛懼簱鏃跺氨鏄牴鎹 URI 灞炴€ф潵瀹氫綅鏍囩搴撶殑銆? 闄ゆ涔嬪锛宼aglib 鍏冪礌涓嬪彲浠ュ寘鍚涓?tag 鍏冪礌锛屾瘡涓?tag 鍏冪礌瀹氫箟涓€涓爣绛撅紝tag 鍏冪礌涓嬭嚦灏戝簲鍖呭惈濡備笅涓変釜瀛愬厓绱狅細 name锛氳鏍囩搴撶殑鍚嶇О锛岃繖涓睘鎬у緢閲嶈锛孞SP 椤甸潰涓氨鏄牴鎹鍚嶇О鏉ヤ嬌鐢ㄦ鏍囩鐨勩€? tag-class锛氭寚瀹氭爣绛劇殑澶勭悊绫夥紝姣嬪焊缃枒锛岃繖涓睘鎬ч潪甯擱噸瑕侊紝鎸囧畾浜嗘爣绛劇敱鍝釜 Java 绫繪潵澶勭悊銆? body-content锛氳繖涓睘鎬т篃寰堥噸瑕侊紝瀹冩寚瀹氭爣绛句綋鍐呭銆傝鍏冪礌鐨勫€煎彲浠ユ槸濡備笅鍑犱釜锛? tagdependent锛氭寚瀹氭爣绛懼鐞嗙被鑷繁璐熻矗澶勭悊鏍囩浣撱€? empty锛氭寚瀹氳鏍囩鍙兘浣滅敤绌烘爣绛句嬌鐢ㄣ€? scriptless锛氭寚瀹氳鏍囩鐨勬爣绛句綋鍙互鏄潤鎬?HTML 鍏冪礌锛岃〃杈懼紡璇█锛屼絾涓嶅厑璁稿嚭鐜?JSP 鑴氭湰銆? JSP锛氭寚瀹氳鏍囩鐨勬爣绛句綋鍙互浣跨敤 JSP 鑴氭湰銆? 瀹為檯涓婄敱浜?JSP 2 瑙勮寖涓嶅啀鎺ㄨ崘浣跨敤 JSP 鑴氭湰锛屾墍浠?JSP 2 鑷畾涔夋爣绛劇殑鏍囩浣撲腑涓嶈兘鍖呭惈 JSP 鑴氭湰銆傛墍浠ュ疄闄呬笂 body-content 鍏冪礌鐨勫€間笉鍙互鏄?JSP銆?
瀹氫箟浜嗕笂闈㈢殑鏍囩搴撳畾涔夋枃浠跺悗锛屽皢鏍囩搴撴枃浠舵斁鍦?Web 搴旂敤鐨?WEB-INF 璺緞锛屾垨浠繪剰瀛愯礬寰勪笅锛孞ava Web 瑙勮寖浼氳嚜鍔ㄥ姞杞借鏂囦歡锛屽垯璇ユ枃浠跺畾涔夌殑鏍囩搴撲篃灏嗙敓鏁?
浣跨敤鏍囩搴?
鍦?JSP 椤甸潰涓‘瀹氭寚瀹氭爣绛鵑渶瑕?2 鐐癸細
鏍囩搴?URI锛氱‘瀹氫嬌鐢ㄥ摢涓爣绛懼簱銆? 鏍囩鍚嶏細纭畾浣跨敤鍝釜鏍囩銆? 浣跨敤鏍囩搴撳垎鎴愪互涓嬩袱涓楠わ細 瀵煎叆鏍囩搴擄細浣跨敤 taglib 缂栬瘧鎸囦護瀵煎叆鏍囩搴擄紝灏辨槸灏嗘爣绛懼簱鍜屾寚瀹氬墠缂€鍏寵仈璧鋒潵銆? 浣跨敤鏍囩锛氬湪 JSP 椤甸潰涓嬌鐢ㄨ嚜瀹氫箟鏍囩銆? taglib 鐨勮娉曟牸寮忓涓嬶細 <%@ taglib uri="tagliburi" prefix="tagPrefix" %>
鍏朵腑 uri 灞炴€х‘瀹氭爣绛懼簱鐨?URI锛岃繖涓?URI 鍙互纭畾涓€涓爣绛懼簱銆傝€?prefix 灞炴€ф寚瀹氭爣绛懼簱鍓嶇紑锛屽嵆鎵€鏈変嬌鐢ㄨ鍓嶇紑鐨勬爣绛懼皢鐢辨鏍囩搴撳鐞嗐€?
浣跨敤鏍囩鐨勮娉曟牸寮忓涓嬶細
<tagPrefix:tagName tagAttribute=鈥漷agValue鈥?鈥?>
<tagBody/>
</tagPrefix:tagName>
濡傛灉璇ユ爣绛炬病鏈夋爣绛句綋锛屽垯鍙互浣跨敤濡備笅璇硶鏍煎紡锛? <tagPrefix:tagName tagAttribute=鈥漷agValue鈥?鈥?/>
涓婇潰浣跨敤鏍囩鐨勮娉曢噷閮藉寘鍚簡璁劇疆灞炴€у€鹼紝鍓嶉潰鎴戜滑浠嬬粛鐨?HelloWorldTag 鏍囩娌℃湁浠諱綍灞炴€э紝鎵€浠ヤ嬌鐢ㄨ鏍囩鍙渶鐢?<mytag:helloWorld/> 鍗沖彲銆傚叾涓?mytag 鏄?taglib 鎸囦護涓烘爣绛懼簱鎸囧畾鐨勫墠缂€锛岃€?helloWorld 鏄爣绛懼悕銆?
涓嬮潰鏄嬌鐢?helloWorld 鏍囩鐨?JSP 椤甸潰浠g爜锛?
<%@ page contentType="text/html; charset=GBK"%>
<!-- 瀵煎叆鏍囩搴擄紝鎸囧畾mytag鍓嶇紑鐨勬爣绛撅紝
鐢県ttp://www.crazyit.org/mytaglib鐨勬爣绛懼簱澶勭悊 -->
<%@ taglib uri="http://www.crazyit.org/mytaglib" prefix="mytag"%>
<html>
<head>
<title>鑷畾涔夋爣绛劇ず鑼?lt;/title>
</head>
<body bgcolor="#ffffc0">
<h2>涓嬮潰鏄劇ず鐨勬槸鑷畾涔夋爣绛句腑鐨勫唴瀹?lt;/h2>
<!-- 浣跨敤鏍囩 锛屽叾涓璵ytag鏄爣绛懼墠缂€锛屾牴鎹畉aglib鐨勭紪璇戞寚浠わ紝
mytag鍓嶇紑灏嗙敱http://www.crazyit.org/mytaglib鐨勬爣绛懼簱澶勭悊 -->
<mytag:helloWorld/><BR>
</body>
</html>
涓婇潰椤甸潰涓涓€琛岀矖浣撳瓧浠g爜鎸囧畾浜?http://www.crazyit.org/mytaglib 鏍囩搴撶殑鍓嶇紑涓?mytag锛岀浜岃绮椾綋瀛椾唬鐮佽〃鏄庝嬌鐢?mytag 鍓嶇紑瀵瑰簲鏍囩搴撻噷鐨?helloWorld 鏍囩銆傛祻瑙堣椤甸潰灏嗙湅鍒闆鍥?1 鎵€绀烘晥鏋滐細
鍥?1. 绠€鍗曟爣绛?
利用 SimpleTagSupport 開發自定義标簽 甯﹀睘鎬х殑鏍囩
鍓嶉潰鐨勭畝鍗曟爣绛炬棦娌℃湁灞炴€э紝涔熸病鏈夋爣绛句綋锛岀敤娉曘€佸姛鑳介兘姣旇緝绠€鍗曘€傚疄闄呬笂杩樻湁濡備笅涓ょ甯哥敤鐨勬爣绛撅細
甯﹀睘鎬х殑鏍囩銆? 甯︽爣绛句綋鐨勬爣绛俱€? 姝e鍓嶉潰浠嬬粛鐨勶紝甯﹀睘鎬ф爣绛懼繀椤諱負姣忎釜灞炴€ф彁渚涘搴旂殑 setter 鍜?getter 鏂規硶銆傚甫灞炴€ф爣绛劇殑閰嶇疆鏂規硶涓庣畝鍗曟爣绛句篃鐣ユ湁宸埆锛屼笅闈粙缁嶄竴涓甫灞炴€ф爣绛劇殑绀轟緥锛? public class QueryTag extends SimpleTagSupport
{
//鏍囩鐨勫睘鎬? private String driver;
private String url;
private String user;
private String pass;
private String sql;
//鎵ц鏁版嵁搴撹闂殑瀵矽薄
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;
private ResultSetMetaData rsmd = null;
//鏍囩灞炴€river鐨剆etter鏂規硶
public void setDriver(String driver) {
this.driver = driver;
}
//鏍囩灞炴€rl鐨剆etter鏂規硶
public void setUrl(String url) {
this.url = url;
}
//鏍囩灞炴€ser鐨剆etter鏂規硶
public void setUser(String user) {
this.user = user;
}
//鏍囩灞炴€ass鐨剆etter鏂規硶
public void setPass(String pass) {
this.pass = pass;
}
//鏍囩灞炴€river鐨刧etter鏂規硶
public String getDriver() {
return (this.driver);
}
//鏍囩灞炴€rl鐨刧etter鏂規硶
public String getUrl() {
return (this.url);
}
//鏍囩灞炴€ser鐨刧etter鏂規硶
public String getUser() {
return (this.user);
}
//鏍囩灞炴€ass鐨刧etter鏂規硶
public String getPass() {
return (this.pass);
}
//鏍囩灞炴€ql鐨刧etter鏂規硶
public String getSql() {
return (this.sql);
}
//鏍囩灞炴€ql鐨剆etter鏂規硶
public void setSql(String sql) {
this.sql = sql;
}
public void doTag()throws JspException,
IOException
{
try
{
//娉ㄥ唽椹卞姩
Class.forName(driver);
//鑾峰彇鏁版嵁搴撹繛鎺? conn = DriverManager.getConnection(url,user,pass);
//鍒涘緩Statement瀵矽薄
stmt = conn.createStatement();
//鎵ц鏌ヨ
rs = stmt.executeQuery(sql);
rsmd = rs.getMetaData();
//鑾峰彇鍒楁暟鐩? int columnCount = rsmd.getColumnCount();
//鑾峰彇椤甸潰杈撳嚭娴? Writer out = getJspContext().getOut();
//鍦ㄩ〉闈㈣緭鍑鴻〃鏍? out.write("<table bgColor='9999cc' width='400'>");
//閬嶅巻缁撴灉闆? while (rs.next())
{
out.write("<tr>");
//閫愬垪杈撳嚭鏌ヨ鍒扮殑鏁版嵁
for (int i = 1 ; i <= columnCount ; i++ )
{
out.write("<td>");
out.write(rs.getString(i));
out.write("</td>");
}
out.write("</tr>");
}
}
catch(ClassNotFoundException cnfe)
{
cnfe.printStackTrace();
throw new JspException("鑷畾涔夋爣绛鵑敊璇? + cnfe.getMessage());
}
catch (SQLException ex)
{
ex.printStackTrace();
throw new JspException("鑷畾涔夋爣绛鵑敊璇? + ex.getMessage());
}
finally
{
//鍏抽棴缁撴灉闆? try
{
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
catch (SQLException sqle)
{
sqle.printStackTrace();
}
}
}
}
涓婇潰杩欎釜鏍囩绋嶅井澶嶆潅涓€鐐癸紝瀹冨寘鍚簡 5 涓睘鎬э紝濡傜▼搴忎腑绮椾綋瀛椾唬鐮佹墍绀猴紝鍒欑▼搴忛渶瑕佷負杩?5 涓睘鎬ф彁渚?setter 鍜?getter 鏂規硶銆?
璇ユ爣绛捐緭鍑虹殑鍐呭渚濈劧鐢?doTag() 鏂規硶鍐沖畾锛岃鏂規硶浼氭牴鎹?SQL 璇彞鏌ヨ鏁版嵁搴擄紝骞跺皢鏌ヨ缁撴灉鏄劇ず鍦ㄥ綋鍓嶉〉闈腑銆?
瀵逛簬鏈夊睘鎬х殑鏍囩锛岄渶瑕佷負 tag 鍏冪礌澧炲姞 attribute 瀛愬厓绱狅紝姣忎釜 attribute 瀛愬厓绱犲畾涔変竴涓睘鎬э紝attribue 瀛愬厓绱犻€氬父杩橀渶瑕佹寚瀹氬涓嬪嚑涓瓙鍏冪礌锛?
name锛氳缃睘鎬у悕锛屽瓙鍏冪礌鐨勫€兼槸瀛楃涓插唴瀹廣€? required锛氳缃灞炴€ф槸鍚︿負涓嶉渶灞炴€э紝璇ュ瓙鍏冪礌鐨勫€兼槸 true 鎴?false銆? fragment锛氳缃灞炴€ф槸鍚︽敮鎸?JSP 鑴氭湰銆佽〃杈懼紡绛夊姩鎬佸唴瀹癸紝瀛愬厓绱犵殑鍊兼槸 true 鎴?false銆? 涓轟簡閰嶇疆涓婇潰鐨?QueryTag 鏍囩锛屾垜浠渶瑕佸湪 mytaglib.tld 鏂囦歡涓鍔犲涓嬮厤缃墖娈碉細 <!-- 瀹氫箟绗簩涓爣绛?-->
<tag>
<!-- 瀹氫箟鏍囩鍚?-->
<name>query</name>
<!-- 瀹氫箟鏍囩澶勭悊绫?-->
<tag-class>lee.QueryTag</tag-class>
<!-- 瀹氫箟鏍囩浣撲負绌?-->
<body-content>empty</body-content>
<!-- 閰嶇疆鏍囩灞炴€?driver -->
<attribute>
<name>driver</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<!-- 閰嶇疆鏍囩灞炴€?url -->
<attribute>
<name>url</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<!-- 閰嶇疆鏍囩灞炴€?user -->
<attribute>
<name>user</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<!-- 閰嶇疆鏍囩灞炴€?pass -->
<attribute>
<name>pass</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<!-- 閰嶇疆鏍囩灞炴€?sql -->
<attribute>
<name>sql</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
</tag>
涓婇潰 5 琛岀矖浣撳瓧浠g爜鍒嗗埆涓鴻鏍囩閰嶇疆浜?driver銆乽rl銆乽ser銆乸ass 鍜?sql 绛?5 涓睘鎬э紝骞舵寚瀹氳繖 5 涓睘鎬ч兘鏄繀濉睘鎬с€佽€屼笖灞炴€у€兼敮鎸佸姩鎬佸唴瀹廣€?
閰嶇疆瀹屾瘯鍚庯紝灏卞彲鍦ㄩ〉闈腑浣跨敤鏍囩锛屽厛瀵煎叆鏍囩搴擄紝鐒跺悗浣跨敤鏍囩銆備嬌鐢ㄦ爣绛劇殑 JSP 椤甸潰鐗囨濡備笅锛?
<!-- 瀵煎叆鏍囩搴擄紝鎸囧畾mytag鍓嶇紑鐨勬爣绛撅紝
鐢県ttp://www.crazyit.org/mytaglib鐨勬爣绛懼簱澶勭悊 -->
<%@ taglib uri="http://www.crazyit.org/mytaglib" prefix="mytag"%>
...
<!-- 鍏朵粬HTML鍐呭 -->
<!-- 浣跨敤鏍囩 锛屽叾涓璵ytag鏄爣绛懼墠缂€锛屾牴鎹畉aglib鐨勭紪璇戞寚浠わ紝
mytag鍓嶇紑灏嗙敱http://www.crazyit.org/mytaglib鐨勬爣绛懼簱澶勭悊 -->
<mytag:query
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javaee"
user="root"
pass="32147"
sql="select * from newsinf"/>
鍦ㄦ祻瑙堝櫒涓祻瑙堣椤甸潰锛屾晥鏋滃鍥?2 鎵€绀恒€?
鍥?2. 浣跨敤甯﹀睘鎬х殑鏍囩鎵ц鏌ヨ
利用 SimpleTagSupport 開發自定義标簽 鍥?2 涓湅鍒頒粠鏁版嵁搴撻噷鏌ヨ鍒?2 鏉¤褰曪紝褰撶劧杩欎篃闇€瑕佸簳灞?javaee 鏁版嵁搴撻噷鍖呭惈 newsinf 鏁版嵁琛紝涓旇鏁版嵁琛ㄩ噷鍖呭惈杩欎袱鏉¤褰曟墠琛屻€?
鍦?JSP 椤甸潰涓彧闇€瑕佷嬌鐢ㄧ畝鍗曠殑鏍囩锛屽嵆鍙畬鎴愨€滃鏉傗€濈殑鍔熻兘锛氭墽琛屾暟鎹簱鏌ヨ锛屽苟灏嗘煡璇㈢粨鏋滃湪椤甸潰涓婁互琛ㄦ牸褰㈠紡鏄劇ず銆傝繖涔熸鏄嚜瀹氫箟鏍囩搴撶殑鐩殑鈥斺€斾互绠€鍗曠殑鏍囩锛岄殣钘忓鏉傜殑閫昏緫銆?
褰撶劧锛屽苟涓嶆帹鑽愬湪鏍囩澶勭悊绫諱腑璁塊棶鏁版嵁搴擄紝鍥犱負鏍囩搴撴槸琛ㄧ幇灞傜粍浠訛紝瀹冧笉搴旇鍖呭惈浠諱綍涓氬姟閫昏緫瀹炵幇浠g爜锛屾洿涓嶅簲璇ユ墽琛屾暟鎹簱璁塊棶锛屽畠鍙簲璇ヨ礋璐f樉绀洪€昏緫
甯︽爣绛句綋鐨勬爣绛?
甯︽爣绛句綋鐨勬爣绛撅紝鍙互鍦ㄦ爣绛懼唴宓屽叆鍏朵粬鍐呭锛堝寘鎷潤鎬佺殑 HTML 鍐呭鍜屽姩鎬佺殑 JSP 鍐呭锛夛紝閫氬父鐢ㄤ簬瀹屾垚涓€浜涢€昏緫杩愮畻锛屼緥濡傚垽鏂拰寰幆绛夈€備笅闈互涓€涓凱浠e櫒鏍囩涓虹ず渚嬶紝浠嬬粛甯︽爣绛句綋鏍囩鐨勫紑鍙戣繃绋嬨€?
涓€鏍峰厛瀹氫箟涓€涓爣绛懼鐞嗙被锛岃鏍囩澶勭悊绫葷殑浠g爜濡備笅锛?
public class IteratorTag extends SimpleTagSupport
{
//鏍囩灞炴€э紝鐢ㄤ簬鎸囧畾闇€瑕佽杩唬鐨勯泦鍚? private String collection;
//鏍囩灞炴€э紝鎸囧畾杩唬闆嗗悎鍏冪礌锛屼負闆嗗悎鍏冪礌鎸囧畾鐨勫悕绉? private String item;
//collection灞炴€х殑setter鍜実etter鏂規硶
public void setCollection(String collection)
{
this.collection = collection;
}
public String getCollection()
{
return this.collection;
}
//item灞炴€х殑setter鍜実etter鏂規硶
public void setItem(String item)
{
this.item = item;
}
public String getItem()
{
return this.item;
}
//鏍囩鐨勫鐞嗘柟娉曪紝绠€鍗曟爣绛懼鐞嗙被鍙渶瑕侀噸鍐檇oTag鏂規硶
public void doTag() throws JspException, IOException
{
//浠巔age scope涓幏鍙栧睘鎬у悕涓篶ollection鐨勯泦鍚? Collection itemList = (Collection)getJspContext().
getAttribute(collection);
//閬嶅巻闆嗗悎
for (Object s : itemList)
{
//灏嗛泦鍚堢殑鍏冪礌璁劇疆鍒皃age 鑼冨洿
getJspContext().setAttribute(item, s );
//杈撳嚭鏍囩浣? getJspBody().invoke(null);
}
}
}
涓婇潰鏍囩澶勭悊绫諱笌鍓嶉潰澶勭悊绫誨苟娌℃湁澶ぇ鐨勪笉鍚岋紝璇ュ鐞嗙被鍖呭惈 2 涓睘鎬э紝骞朵負杩欎袱涓睘鎬ф彁渚涗簡 setter 鍜?getter 鏂規硶銆傛爣绛懼鐞嗙被鐨?doTag 鏂規硶棣栧厛浠?page 鑼冨洿鍐呰幏鍙栦簡鎸囧畾鍚嶇О鐨?Collection 瀵矽薄锛岀劧鍚庨亶鍘?Collection 瀵矽薄鐨勫厓绱狅紝姣忔閬嶅巻閮借皟鐢ㄤ簡 getJspBody() 鏂規硶锛屽绋嬪簭涓矖浣撳瓧浠g爜鎵€绀猴紝璇ユ柟娉曡繑鍥炶鏍囩鎵€鍖呭惈鐨勬爣绛句綋锛欽spFragment 瀵矽薄锛屾墽琛岃瀵矽薄鐨?invoke() 鏂規硶锛屽嵆鍙緭鍑烘爣绛句綋鍐呭銆傝鏍囩鐨勪綔鐢ㄦ槸锛氶亶鍘嗘寚瀹氶泦鍚堬紝姣忛亶鍘嗕竴涓泦鍚堝厓绱狅紝鍗寵緭鍑烘爣绛句綋涓€娆°€?
鍥犱負璇ユ爣绛劇殑鏍囩浣撲笉涓虹┖锛岄厤缃鏍囩鏃舵寚瀹?body-content 涓?scriptless锛岃鏍囩鐨勯厤缃唬鐮佺墖娈靛涓嬩唬鐮佹墍绀猴細
<!-- 瀹氫箟绗笁涓爣绛?-->
<tag>
<!-- 瀹氫箟鏍囩鍚?-->
<name>iterator</name>
<!-- 瀹氫箟鏍囩澶勭悊绫?-->
<tag-class>lee.IteratorTag</tag-class>
<!-- 瀹氫箟鏍囩浣撴敮鎸丣SP鑴氭湰 -->
<body-content>scriptless</body-content>
<!-- 閰嶇疆鏍囩灞炴€?collection -->
<attribute>
<name>collection</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<!-- 閰嶇疆鏍囩灞炴€?item -->
<attribute>
<name>item</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
</tag>
涓婇潰閰嶇疆鐗囨涓矖浣撳瓧浠g爜鎸囧畾璇ユ爣绛劇殑鏍囩浣撳彲浠ユ槸闈欐€?HTML 鍐呭锛屼篃鍙互鏄〃杈懼紡璇█銆?
涓轟簡娴嬭瘯鍦?JSP 椤甸潰涓嬌鐢ㄨ鏍囩鐨勬晥鏋滐紝鎴戜滑棣栧厛鎶婁竴涓?List 瀵矽薄璁劇疆鎴?page 鑼冨洿鐨勫睘鎬э紝鐒跺悗浣跨敤璇ユ爣绛炬潵杩唬杈撳嚭 List 闆嗗悎鐨勫叏閮ㄥ厓绱犮€?
JSP 椤甸潰浠g爜濡備笅锛?
<%@ page import="java.util.*"%>
<%@ page contentType="text/html; charset=GBK"%>
<!-- 瀵煎叆鏍囩搴擄紝鎸囧畾mytag鍓嶇紑鐨勬爣绛撅紝
鐢県ttp://www.crazyit.org/mytaglib鐨勬爣绛懼簱澶勭悊 -->
<%@ taglib uri="http://www.crazyit.org/mytaglib" prefix="mytag"%>
<html>
<head>
<title>甯︽爣绛句綋鐨勬爣绛?杩唬鍣ㄦ爣绛?lt;/title>
</head>
<body>
<h2>甯︽爣绛句綋鐨勬爣绛?杩唬鍣ㄦ爣绛?lt;/h2>
<hr>
<%
//鍒涘緩涓€涓狶ist瀵矽薄
List<String> a = new ArrayList<String>();
a.add("hello");
a.add("world");
a.add("java");
//灏哃ist瀵矽薄鏀懼叆page鑼冨洿鍐? pageContext.setAttribute("a" , a);
%>
<table bgcolor="aaaadd" width="300">
<!-- 浣跨敤杩唬鍣ㄦ爣绛撅紝瀵筧闆嗗悎杩涜杩唬 -->
<mytag:iterator collection="a" item="item">
<tr>
<td></td>
<tr>
</mytag:iterator>
</table>
</body>
</html>
涓婇潰椤甸潰浠g爜涓矖浣撳瓧浠g爜鍗沖彲瀹炵幇閫氳繃 iterator 鏍囩鏉ラ亶鍘嗘寚瀹氶泦鍚堬紝娴忚璇ラ〉闈㈠嵆鐪嬪埌濡傚浘 3 鎵€绀虹晫闈細
鍥?3. 甯︽爣绛句綋鐨勬爣绛?
利用 SimpleTagSupport 開發自定義标簽 鍥?3 鏄劇ず浜嗕嬌鐢?iterator 鏍囩閬嶅巻闆嗗悎鍏冪礌鐨勬晥鏋滐紝浠?iteratorTag.jsp 椤甸潰鐨勪唬鐮佹潵鐪嬶紝浣跨敤 iterator 鏍囩閬嶅巻闆嗗悎鍏冪礌姣斾嬌鐢?JSP 鑴氭湰閬嶅巻闆嗗悎鍏冪礌瑕佷紭闆呭緱澶氾紝杩欏氨鏄嚜瀹氫箟鏍囩鐨勯瓍鍔涖€?
瀹為檯涓?JSTL 鏍囩搴撴彁渚涗簡涓€濂楀姛鑳介潪甯稿己澶ф爣绛撅紝渚嬪鏅€氱殑杈撳嚭鏍囩锛屽儚鎴戜滑鍒氬垰浠嬬粛鐨勮凱浠e櫒鏍囩锛岃繕鏈夌敤浜庡垎鏀垽鏂殑鏍囩绛夌瓑锛孞STL锛圝SP 鏍囧噯鏍囩搴擄級閮芥湁闈炲父瀹屽杽鐨勫疄鐜般€傞櫎姝や箣澶栵紝Apache 涓嬭繕鏈変竴濂?DisplayTags 鐨勬爣绛懼簱瀹炵幇锛屽仛寰椾篃闈炲父涓嶉敊
鍏充簬浣滆€?
鏉庡垰锛屼粠浜?Java EE 搴旂敤寮€鍙戣繎 10 骞淬€傛浘浠?LITEON 鍏徃鐨?J2EE 鎶€鏈富绠★紝璐熻矗璇ュ叕鍙哥殑浼佷笟淇℃伅鍖栧鈎鍙扮殑鏋舵瀯璁捐銆傛浘浠誨箍宸炵數淇°€佸箍涓滈緳娉夌鎶€绛夊叕鍙哥殑鎶€鏈煿璁暀甯堛€傜柉鐙?Java 鑱旂洘锛坔ttp://www.crazyit.org锛夌珯闀褲€傜柉鐙?Java 瀹炶钀ュ垱濮嬩漢锛岀柉鐙?Java 浣撶郴鍥句功浣滆€咃紝鏇句換涓滄柟鏍囧噯骞垮窞涓績杞歡鏁欏鎬葷洃锛屾浘鍏間換骞誇笢鎶€鏈笀鑼冨闄㈣绠楁満绉戝绯葷殑鍏艱亴鍓暀鎺堛€傚浗鍐呯煡鍚岻T鎶€鏈綔瀹訛紝宸插嚭鐗堛€婄柉鐙?Java 璁蹭箟銆嬨€併€婅交閲忕駭 Java EE 浼佷笟搴旂敤瀹炴垬銆嬨€併€婄柉鐙?Ajax 璁蹭箟銆嬨€併€奡truts 2.1 鏉冨▉鎸囧崡銆嬨€併€奟uby On Rails 鏁忔嵎寮€鍙戞渶浣沖疄璺點€嬬瓑钁椾綔銆?