浣犳椂甯歌瀹㈡埛鎶辨↗SP欏甸潰鍝嶅簲閫熷害寰堟參鍚楋紵浣犳兂榪囧綋瀹㈡埛璁塊棶嬈℃暟鍓у鏃訛紝浣犵殑WEB搴旂敤鑳芥壙鍙楁棩鐩婂鍔犵殑璁塊棶閲忓悧錛?
鏈枃璁茶堪浜嗚皟鏁碕SP鍜宻ervlet鐨勪竴浜涢潪甯稿疄鐢ㄧ殑鏂規硶錛屽畠鍙嬌浣犵殑servlet鍜孞SP欏甸潰鍝嶅簲鏇村揩錛屾墿灞曟ф洿寮恒傝屼笖鍦ㄧ敤鎴鋒暟澧炲姞鐨勬儏鍐典笅錛岀郴緇熻礋杞戒細鍛堢幇鍑哄鉤婊戜笂闀跨殑瓚嬪娍銆傚湪鏈枃涓紝鎴戝皢閫氳繃涓浜涘疄闄呬緥瀛愬拰閰嶇疆鏂規硶浣垮緱浣犵殑搴旂敤紼嬪簭鐨勬ц兘鏈夊嚭浜烘剰鏂欑殑鎻愬崌銆傚叾涓紝鏌愪簺璋冧紭鎶鏈槸鍦ㄤ綘鐨勭紪紼嬪伐浣滀腑瀹炵幇鐨勩傝屽彟涓浜涙妧鏈槸涓庡簲鐢ㄦ湇鍔″櫒鐨勯厤緗浉鍏崇殑銆傚湪鏈枃涓紝鎴戜滑灝嗚緇嗗湴鎻忚堪鎬庢牱閫氳繃璋冩暣servlet鍜孞SP欏甸潰錛屾潵鎻愰珮浣犵殑搴旂敤紼嬪簭鐨勬諱綋鎬ц兘銆傚湪闃呰鏈枃涔嬪墠錛屽亣璁句綘鏈夊熀鏈殑servlet鍜孞SP鐨勭煡璇嗐?
鏂規硶涓錛氬湪servlet鐨刬nit()鏂規硶涓紦瀛樻暟鎹?/strong>
褰撳簲鐢ㄦ湇鍔″櫒鍒濆鍖杝ervlet瀹炰緥涔嬪悗錛屼負瀹㈡埛绔姹傛彁渚涙湇鍔′箣鍓嶏紝瀹冧細璋冪敤榪欎釜servlet鐨刬nit()鏂規硶銆傚湪涓涓猻ervlet鐨勭敓鍛藉懆鏈熶腑錛宨nit()鏂規硶鍙細琚皟鐢ㄤ竴嬈°傞氳繃鍦╥nit()鏂規硶涓紦瀛樹竴浜涢潤鎬佺殑鏁版嵁鎴栧畬鎴愪竴浜涘彧闇瑕佹墽琛屼竴嬈$殑銆佽楁椂鐨勬搷浣滐紝灝卞彲澶уぇ鍦版彁楂樼郴緇熸ц兘銆?
渚嬪錛岄氳繃鍦╥nit()鏂規硶涓緩绔嬩竴涓狫DBC榪炴帴姹犳槸涓涓渶浣充緥瀛愶紝鍋囪鎴戜滑鏄敤jdbc2.0鐨凞ataSource鎺ュ彛鏉ュ彇寰楁暟鎹簱榪炴帴錛屽湪閫氬父鐨勬儏鍐典笅錛屾垜浠渶瑕侀氳繃JNDI鏉ュ彇寰楀叿浣撶殑鏁版嵁婧愩傛垜浠彲浠ユ兂璞″湪涓涓叿浣撶殑搴旂敤涓紝濡傛灉姣忔SQL璇鋒眰閮借鎵ц涓嬈NDI鏌ヨ鐨勮瘽錛岄偅緋葷粺鎬ц兘灝嗕細鎬ュ墽涓嬮檷銆傝В鍐蟲柟娉曟槸濡備笅浠g爜錛屽畠閫氳繃緙撳瓨DataSource錛屼嬌寰椾笅涓嬈QL璋冪敤鏃朵粛鐒跺彲浠ョ戶緇埄鐢ㄥ畠錛?
|
鏂規硶 2:紱佹servlet鍜孞SP 鑷姩閲嶈澆(auto-reloading)
Servlet/JSP鎻愪緵浜嗕竴涓疄鐢ㄧ殑鎶鏈紝鍗寵嚜鍔ㄩ噸杞芥妧鏈紝瀹冧負寮鍙戜漢鍛樻彁渚涗簡涓涓ソ鐨勫紑鍙戠幆澧冿紝褰撲綘鏀瑰彉servlet鍜孞SP欏甸潰鍚庤屼笉蹇呴噸鍚簲鐢ㄦ湇鍔″櫒銆傜劧鑰岋紝榪欑鎶鏈湪浜у搧榪愯闃舵瀵圭郴緇熺殑璧勬簮鏄竴涓瀬澶х殑鎹熻楋紝鍥犱負瀹冧細緇橨SP寮曟搸鐨勭被瑁呰澆鍣?classloader)甯︽潵鏋佸ぇ鐨勮礋鎷呫傚洜姝ゅ叧闂嚜鍔ㄩ噸杞藉姛鑳藉緋葷粺鎬ц兘鐨勬彁鍗囨槸涓涓瀬澶х殑甯姪銆?
鏂規硶 3: 涓嶈婊ョ敤HttpSession
鍦ㄥ緢澶氬簲鐢ㄤ腑錛屾垜浠殑紼嬪簭闇瑕佷繚鎸佸鎴風鐨勭姸鎬侊紝浠ヤ究欏甸潰涔嬮棿鍙互鐩鎬簰鑱旂郴銆備絾涓嶅垢鐨勬槸鐢變簬HTTP鍏鋒湁澶╃敓鏃犵姸鎬佹э紝浠庤屾棤娉曚繚瀛樺鎴風鐨勭姸鎬併傚洜姝や竴鑸殑搴旂敤鏈嶅姟鍣ㄩ兘鎻愪緵浜唖ession鏉ヤ繚瀛樺鎴風殑鐘舵併傚湪JSP搴旂敤鏈嶅姟鍣ㄤ腑錛屾槸閫氳繃HttpSession瀵瑰儚鏉ュ疄鐜皊ession鐨勫姛鑳界殑錛屼絾鍦ㄦ柟渚跨殑鍚屾椂錛屽畠涔熺粰緋葷粺甯︽潵浜嗕笉灝忕殑璐熸媴銆傚洜涓烘瘡褰撲綘鑾峰緱鎴栨洿鏂皊ession鏃訛紝緋葷粺鑰呰瀵瑰畠榪涜璐規椂鐨勫簭鍒楀寲鎿嶄綔銆備綘鍙互閫氳繃瀵笻ttpSession鐨勪互涓嬪嚑縐嶅鐞嗘柟寮忔潵鎻愬崌緋葷粺鐨勬ц兘錛?
濡傛灉娌℃湁蹇呰錛屽氨搴旇鍏抽棴JSP欏甸潰涓HttpSession鐨勭己鐪佽緗細 濡傛灉浣犳病鏈夋槑紜寚瀹氱殑璇濓紝姣忎釜JSP欏甸潰閮戒細緙虹渷鍦板垱寤轟竴涓狧ttpSession銆傚鏋滀綘鐨凧SP涓笉闇瑕佷嬌鐢╯ession鐨勮瘽錛岄偅鍙互閫氳繃濡備笅鐨凧SP欏甸潰鎸囩ず絎︽潵紱佹瀹冿細 錛?@ page session="false"%錛?
涓嶈鍦℉ttpSession涓瓨鏀懼ぇ鐨勬暟鎹鍍忥細濡傛灉浣犲湪HttpSession涓瓨鏀懼ぇ鐨勬暟鎹鍍忕殑璇濓紝姣忓綋瀵瑰畠榪涜璇誨啓鏃訛紝搴旂敤鏈嶅姟鍣ㄩ兘灝嗗鍏惰繘琛屽簭鍒楀寲錛屼粠鑰屽鍔犱簡緋葷粺鐨勯澶栬礋鎷呫備綘鍦℉ttpSession涓瓨鏀劇殑鏁版嵁瀵瑰儚瓚婂ぇ錛岄偅緋葷粺鐨勬ц兘灝變笅闄嶅緱瓚婂揩銆?
褰撲綘涓嶉渶瑕丠ttpSession鏃訛紝灝藉揩鍦伴噴鏀懼畠錛氬綋浣犱笉鍐嶉渶瑕乻ession鏃訛紝浣犲彲浠ラ氳繃璋冪敤HttpSession.invalidate()鏂規硶鏉ラ噴鏀懼畠銆?
鏂規硶 4: 灝嗛〉闈㈣緭鍑鴻繘琛屽帇緙?/strong>
鍘嬬緝鏄В鍐蟲暟鎹啑浣欑殑涓涓ソ鐨勬柟娉曪紝鐗瑰埆鏄湪緗戠粶甯﹀涓嶅鍙戣揪鐨勪粖澶┿傛湁鐨勬祻瑙堝櫒鏀寔gzip(GNU zip)榪涜鏉ュHTML鏂囦歡榪涜鍘嬬緝錛岃繖縐嶆柟娉曞彲浠ユ垙鍓фу湴鍑忓皯HTML鏂囦歡鐨勪笅杞芥椂闂淬傚洜姝わ紝濡傛灉浣犲皢servlet鎴朖SP欏甸潰鐢熸垚鐨凥TML欏甸潰榪涜鍘嬬緝鐨勮瘽錛岄偅鐢ㄦ埛灝變細瑙夊緱欏甸潰嫻忚閫熷害浼氶潪甯稿揩銆備絾涓嶅垢鐨勬槸錛屼笉鏄墍鏈夌殑嫻忚鍣ㄩ兘鏀寔gzip鍘嬬緝錛屼絾浣犲彲浠ラ氳繃鍦ㄤ綘鐨勭▼搴忎腑媯鏌ュ鎴風殑嫻忚鍣ㄦ槸鍚︽敮鎸佸畠銆備笅闈㈠氨鏄叧浜庤繖縐嶆柟娉曞疄鐜扮殑涓涓唬鐮佺墖孌碉細
|
鏂規硶 5: 浣跨敤綰跨▼姹?/strong>
搴旂敤鏈嶅姟鍣ㄧ己鐪佸湴涓烘瘡涓笉鍚岀殑瀹㈡埛绔姹傚垱寤轟竴涓嚎紼嬭繘琛屽鐞嗭紝騫朵負瀹冧滑鍒嗘淳service()鏂規硶錛屽綋service()鏂規硶璋冪敤瀹屾垚鍚庯紝涓庝箣鐩稿簲鐨勭嚎紼嬩篃闅忎箣鎾ゆ秷銆傜敱浜庡垱寤哄拰鎾ゆ秷綰跨▼浼氳楄垂涓瀹氱殑緋葷粺璧勬簮錛岃繖縐嶇己鐪佹ā寮忛檷浣庝簡緋葷粺鐨勬ц兘銆備絾鎵騫哥殑鏄垜浠彲浠ラ氳繃鍒涘緩涓涓嚎紼嬫睜鏉ユ敼鍙樿繖縐嶇姸鍐點傚彟澶栵紝鎴戜滑榪樿涓鴻繖涓嚎紼嬫睜璁劇疆涓涓渶灝忕嚎紼嬫暟鍜屼竴涓渶澶х嚎紼嬫暟銆傚湪搴旂敤鏈嶅姟鍣ㄥ惎鍔ㄦ椂錛屽畠浼氬垱寤烘暟閲忕瓑浜庢渶灝忕嚎紼嬫暟鐨勪竴涓嚎紼嬫睜錛屽綋瀹㈡埛鏈夎姹傛椂錛岀浉搴斿湴浠庢睜浠庡彇鍑轟竴涓嚎紼嬫潵榪涜澶勭悊錛屽綋澶勭悊瀹屾垚鍚庯紝鍐嶅皢綰跨▼閲嶆柊鏀懼叆鍒版睜涓傚鏋滄睜涓殑綰跨▼涓嶅鍦拌瘽錛岀郴緇熶細鑷姩鍦板鍔犳睜涓嚎紼嬬殑鏁伴噺錛屼絾鎬婚噺涓嶈兘瓚呰繃鏈澶х嚎紼嬫暟銆傞氳繃浣跨敤綰跨▼姹狅紝褰撳鎴風璇鋒眰鎬ュ墽澧炲姞鏃訛紝緋葷粺鐨勮礋杞藉氨浼氬憟鐜扮殑騫蟲粦鐨勪笂鍗囨洸綰匡紝浠庤屾彁楂樼殑緋葷粺鐨勫彲浼哥緝鎬с?
鏂規硶 6: 閫夋嫨姝g‘鐨勯〉闈㈠寘鍚満鍒?/strong>
鍦↗SP涓湁涓ょ鏂規硶鍙互鐢ㄦ潵鍖呭惈鍙︿竴涓〉闈?銆佷嬌鐢╥nclude鎸囩ず絎?錛?@ includee file=”test.jsp” %錛?銆?銆佷嬌鐢╦sp鎸囩ず絎?錛渏sp:includee page=”test.jsp” flush=”true”/錛?銆傚湪瀹為檯涓垜鍙戠幇錛屽鏋滀嬌鐢ㄧ涓縐嶆柟娉曠殑璇濓紝鍙互浣垮緱緋葷粺鎬ц兘鏇撮珮銆?
鏂規硶 7:姝g‘鍦扮‘瀹歫avabean鐨勭敓鍛藉懆鏈?/strong>
JSP鐨勪竴涓己澶х殑鍦版柟灝辨槸瀵筳avabean鐨勬敮鎸併傞氳繃鍦↗SP欏甸潰涓嬌鐢紲jsp:useBean錛炴爣絳撅紝鍙互灝唈avabean鐩存帴鎻掑叆鍒頒竴涓狫SP欏甸潰涓傚畠鐨勪嬌鐢ㄦ柟娉曞涓嬶細 錛渏sp:useBean id="name" scope="page|request|session|application" class= "package.className" type="typeName"錛烇紲/jsp:useBean錛?
鍏朵腑scope灞炴ф寚鍑轟簡榪欎釜bean鐨勭敓鍛藉懆鏈熴傜己鐪佺殑鐢熷懡鍛ㄦ湡涓簆age銆傚鏋滀綘娌℃湁姝g‘鍦伴夋嫨bean鐨勭敓鍛藉懆鏈熺殑璇濓紝瀹冨皢褰卞搷緋葷粺鐨勬ц兘銆?
涓句緥鏉ヨ錛屽鏋滀綘鍙兂鍦ㄤ竴嬈¤姹備腑浣跨敤鏌愪釜bean錛屼絾浣犲嵈灝嗚繖涓猙ean鐨勭敓鍛藉懆鏈熻緗垚浜唖ession錛岄偅褰撹繖嬈¤姹傜粨鏉熷悗錛岃繖涓猙ean灝嗕粛鐒朵繚鐣欏湪鍐呭瓨涓紝闄ら潪session瓚呮椂鎴栫敤鎴峰叧闂祻瑙堝櫒銆傝繖鏍蜂細鑰楄垂涓瀹氱殑鍐呭瓨錛屽茍鏃犺皳鐨勫鍔犱簡JVM鍨冨溇鏀墮泦鍣ㄧ殑宸ヤ綔閲忋傚洜姝や負bean璁劇疆姝g‘鐨勭敓鍛藉懆鏈燂紝騫跺湪bean鐨勪嬌鍛界粨鏉熷悗灝藉揩鍦版竻鐞嗗畠浠紝浼氫嬌鐢ㄧ郴緇熸ц兘鏈変竴涓彁楂樸?
鍏跺畠涓浜涙湁鐢ㄧ殑鏂規硶 銆銆? 鍦ㄥ瓧絎︿覆榪炴帴鎿嶄綔涓敖閲忎笉浣跨敤“錛?#8221;鎿嶄綔絎︼細鍦╦ava緙栫▼涓紝鎴戜滑甯稿父浣跨敤“錛?#8221;鎿嶄綔絎︽潵灝嗗嚑涓瓧絎︿覆榪炴帴璧鋒潵錛屼絾浣犳垨璁鎬粠鏉ユ病鏈夋兂鍒拌繃瀹冨眳鐒朵細瀵圭郴緇熸ц兘閫犳垚褰卞搷鍚э紵鐢變簬瀛楃涓叉槸甯擱噺錛屽洜姝VM浼氫駭鐢熶竴浜涗復鏃剁殑瀵瑰儚銆備綘浣跨敤鐨?#8220;錛?#8221;瓚婂錛岀敓鎴愮殑涓存椂瀵瑰儚灝辮秺澶氾紝榪欐牱涔熶細緇欑郴緇熸ц兘甯︽潵涓浜涘獎鍝嶃傝В鍐崇殑鏂規硶鏄敤StringBuffer瀵瑰儚鏉ヤ唬鏇?#8220;錛?#8221;鎿嶄綔絎︺?
閬垮厤浣跨敤System.out.println()鏂規硶錛氱敱浜嶴ystem.out.println()鏄竴縐嶅悓姝ヨ皟鐢紝鍗沖湪璋冪敤瀹冩椂錛岀鐩業/O鎿嶄綔蹇呴』絳夊緟瀹冪殑瀹屾垚錛屽洜姝ゆ垜浠灝介噺閬垮厤瀵瑰畠鐨勮皟鐢ㄣ備絾鎴戜滑鍦ㄨ皟璇曠▼搴忔椂瀹冨張鏄竴涓繀涓嶅彲灝戠殑鏂逛究宸ュ叿錛屼負浜嗚В鍐寵繖涓煕鐩撅紝鎴戝緩璁綘鏈濂戒嬌鐢↙og4j宸ュ叿(http://Jakarta.apache.org ; )錛屽畠鏃㈠彲浠ユ柟渚胯皟璇曪紝鑰屼笉浼氫駭鐢烻ystem.out.println()榪欐牱鐨勬柟娉曘?
ServletOutputStream 涓?PrintWriter鐨勬潈琛?浣跨敤PrintWriter鍙兘浼氬甫鏉ヤ竴浜涘皬鐨勫紑閿錛屽洜涓哄畠灝嗘墍鏈夌殑鍘熷杈撳嚭閮借漿鎹負瀛楃嫻佹潵杈撳嚭錛屽洜姝ゅ鏋滀嬌鐢ㄥ畠鏉ヤ綔涓洪〉闈㈣緭鍑虹殑璇濓紝緋葷粺瑕佽礋鎷呬竴涓漿鎹㈣繃紼嬨傝屼嬌鐢⊿ervletOutputStream浣滀負欏甸潰杈撳嚭鐨勮瘽灝變笉瀛樺湪涓涓棶棰橈紝浣嗗畠鏄互浜岃繘鍒惰繘琛岃緭鍑虹殑銆傚洜姝ゅ湪瀹為檯搴旂敤涓鏉冭 涓よ呯殑鍒╁紛銆?
鎬葷粨
鏈枃鐨勭洰鐨勬槸閫氳繃瀵箂ervlet鍜孞SP鐨勪竴浜涜皟浼樻妧鏈潵鏋佸ぇ鍦版彁楂樹綘鐨勫簲鐢ㄧ▼搴忕殑鎬ц兘錛屽茍鍥犳鎻愬崌鏁翠釜J2EE搴旂敤鐨勬ц兘銆傞氳繃榪欎簺璋冧紭鎶鏈紝浣犲彲浠ュ彂鐜板叾瀹炲茍涓嶆槸鏌愮鎶鏈鉤鍙幫紙姣斿J2EE鍜?NET涔嬩簤錛夊喅瀹氫簡浣犵殑搴旂敤紼嬪簭鐨勬ц兘錛岄噸瑕佹槸浣犺瀵硅繖縐嶅鉤鍙版湁涓涓緝涓烘繁鍏ョ殑浜嗚В錛岃繖鏍蜂綘鎵嶈兘浠庢牴鏈笂瀵硅嚜宸辯殑搴旂敤紼嬪簭鍋氫竴涓紭鍖栵紒
Java鎻愪緵浜嗕袱綾諱富瑕佺殑寮傚父:runtime exception鍜宑hecked exception銆傛墍鏈夌殑checked exception鏄粠java.lang.Exception綾昏鐢熷嚭鏉ョ殑錛岃宺untime exception鍒欐槸浠?span class="hilite1">java.lang.RuntimeException鎴?span class="hilite1">java.lang.Error綾昏鐢熷嚭鏉ョ殑銆?
銆銆瀹冧滑鐨勪笉鍚屼箣澶勮〃鐜板湪涓ゆ柟闈?鏈哄埗涓婂拰閫昏緫涓娿?br />
涓銆佹満鍒朵笂
銆銆瀹冧滑鍦ㄦ満鍒朵笂鐨勪笉鍚岃〃鐜板湪涓ょ偣:1.濡備綍瀹氫箟鏂規硶;2. 濡備綍澶勭悊鎶涘嚭鐨勫紓甯搞傝鐪嬩笅闈heckedException鐨勫畾涔?
public class CheckedException extends Exception
{
銆public CheckedException() {}
銆public CheckedException( String message )
銆{
銆銆super( message );
銆}
}
銆銆浠ュ強涓涓嬌鐢╡xception鐨勪緥瀛?
public class ExceptionalClass
{
銆public void method1()
銆銆throws CheckedException
銆銆{
銆銆銆// ... throw new CheckedException( “...鍑洪敊浜?#8220; );
銆銆}
銆public void method2( String arg )
銆銆{
銆銆銆if( arg == null )
銆銆銆{
銆銆銆銆throw new NullPointerException( “method2鐨勫弬鏁癮rg鏄痭ull!” );
銆銆銆}
銆銆}
銆public void method3() throws CheckedException
銆銆{
銆銆銆method1();
銆銆}
}
銆銆浣犲彲鑳藉凡緇忔敞鎰忓埌浜嗭紝涓や釜鏂規硶method1()鍜宮ethod2()閮戒細鎶涘嚭exception錛屽彲鏄彧鏈塵ethod1()鍋氫簡澹版槑銆傚彟澶栵紝method3()鏈韓騫朵笉浼氭姏鍑篹xception錛屽彲鏄畠鍗村0鏄庝細鎶涘嚭CheckedException銆傚湪鍚戜綘瑙i噴涔嬪墠錛岃鎴戜滑鍏堟潵鐪嬬湅榪欎釜綾葷殑main()鏂規硶:
public static void main( String[] args )
{
銆ExceptionalClass example = new ExceptionalClass();
銆try
銆{
銆銆example.method1();
銆銆example.method3();
銆}
銆catch( CheckedException ex ) { } example.method2( null );
}
銆銆鍦╩ain()鏂規硶涓紝濡傛灉瑕佽皟鐢╩ethod1()錛屼綘蹇呴』鎶婅繖涓皟鐢ㄦ斁鍦╰ry/catch紼嬪簭鍧楀綋涓紝鍥犱負瀹冧細鎶涘嚭Checked exception銆?br />
銆銆鐩告瘮涔嬩笅錛屽綋浣犺皟鐢╩ethod2()鏃訛紝鍒欎笉闇瑕佹妸瀹冩斁鍦╰ry/catch紼嬪簭鍧楀綋涓紝鍥犱負瀹冧細鎶涘嚭鐨別xception涓嶆槸checked exception錛岃屾槸runtime exception銆備細鎶涘嚭runtime exception鐨勬柟娉曞湪瀹氫箟鏃朵笉蹇呭0鏄庡畠浼氭姏鍑篹xception銆?br />
銆銆鐜板湪錛岃鎴戜滑鍐嶆潵鐪嬬湅method3()銆傚畠璋冪敤浜唌ethod1()鍗存病鏈夋妸榪欎釜璋冪敤鏀懼湪try/catch紼嬪簭鍧楀綋涓傚畠鏄氳繃澹版槑瀹冧細鎶涘嚭method1()浼氭姏鍑虹殑exception鏉ラ伩鍏嶈繖鏍峰仛鐨勩傚畠娌℃湁鎹曡幏榪欎釜exception錛岃屾槸鎶婂畠浼犻掍笅鍘匯傚疄闄呬笂main()鏂規硶涔熷彲浠ヨ繖鏍峰仛錛岄氳繃澹版槑瀹冧細鎶涘嚭Checked exception鏉ラ伩鍏嶄嬌鐢╰ry/catch紼嬪簭鍧?褰撶劧鎴戜滑鍙嶅榪欑鍋氭硶)銆?br />
銆銆灝忕粨涓涓?
銆銆* Runtime exceptions:
銆銆鍦ㄥ畾涔夋柟娉曟椂涓嶉渶瑕佸0鏄庝細鎶涘嚭runtime exception;
銆銆鍦ㄨ皟鐢ㄨ繖涓柟娉曟椂涓嶉渶瑕佹崟鑾瘋繖涓猺untime exception;
銆銆runtime exception鏄粠java.lang.RuntimeException鎴?span class="hilite1">java.lang.Error綾昏鐢熷嚭鏉ョ殑銆?br />
銆銆* Checked exceptions:
銆銆瀹氫箟鏂規硶鏃跺繀欏誨0鏄庢墍鏈夊彲鑳戒細鎶涘嚭鐨刢hecked exception;
銆銆鍦ㄨ皟鐢ㄨ繖涓柟娉曟椂錛屽繀欏繪崟鑾峰畠鐨刢hecked exception錛屼笉鐒跺氨寰楁妸瀹冪殑exception浼犻掍笅鍘?
銆銆checked exception鏄粠java.lang.Exception綾昏鐢熷嚭鏉ョ殑銆?/p>
浜屻侀昏緫涓?br />
銆銆浠庨昏緫鐨勮搴︽潵璇達紝checked exceptions鍜宺untime exception鏄湁涓嶅悓鐨勪嬌鐢ㄧ洰鐨勭殑銆俢hecked exception鐢ㄦ潵鎸囩ず涓縐嶈皟鐢ㄦ柟鑳藉鐩存帴澶勭悊鐨勫紓甯告儏鍐點傝宺untime exception鍒欑敤鏉ユ寚紺轟竴縐嶈皟鐢ㄦ柟鏈韓鏃犳硶澶勭悊鎴栨仮澶嶇殑紼嬪簭閿欒銆?br />
銆銆checked exception榪嬌浣犳崟鑾峰畠騫跺鐞嗚繖縐嶅紓甯告儏鍐點備互java.net.URL綾葷殑鏋勫緩鍣?constructor)涓轟緥錛屽畠鐨勬瘡涓涓瀯寤哄櫒閮戒細鎶涘嚭MalformedURLException銆侻alformedURLException灝辨槸涓縐峜hecked exception銆傝鎯充竴涓嬶紝浣犳湁涓涓畝鍗曠殑紼嬪簭錛岀敤鏉ユ彁紺虹敤鎴瘋緭鍏ヤ竴涓猆RL錛岀劧鍚庨氳繃榪欎釜URL鍘諱笅杞戒竴涓綉欏點傚鏋滅敤鎴瘋緭鍏ョ殑URL鏈夐敊璇紝鏋勫緩鍣ㄥ氨浼氭姏鍑轟竴涓猠xception銆傛棦鐒惰繖涓猠xception鏄痗hecked exception錛屼綘鐨勭▼搴忓氨鍙互鎹曡幏瀹冨茍姝g‘澶勭悊:姣斿璇存彁紺虹敤鎴烽噸鏂拌緭鍏ャ?br />
銆銆鍐嶇湅涓嬮潰榪欎釜渚嬪瓙:
public void method()
{
銆int [] numbers = { 1, 2, 3 };
銆int sum = numbers[0] numbers[3];
}
銆銆鍦ㄨ繍琛屾柟娉昺ethod()鏃朵細閬囧埌ArrayIndexOutOfBoundsException(鍥犱負鏁扮粍numbers鐨勬垚鍛樻槸浠?鍒?)銆傚浜庤繖涓紓甯革紝璋冪敤鏂規棤娉曞鐞?綰犳銆傝繖涓柟娉昺ethod()鍜屼笂闈㈢殑method2()涓鏍鳳紝閮芥槸runtime exception鐨勬儏褰€備笂闈㈡垜宸茬粡鎻愬埌錛宺untime exception鐢ㄦ潵鎸囩ず涓縐嶈皟鐢ㄦ柟鏈韓鏃犳硶澶勭悊/鎭㈠鐨勭▼搴忛敊璇傝岀▼搴忛敊璇氬父鏄棤娉曞湪榪愯榪囩▼涓鐞嗙殑錛屽繀欏繪敼姝g▼搴忎唬鐮併?br />
銆銆鎬昏岃█涔嬶紝鍦ㄧ▼搴忕殑榪愯榪囩▼涓竴涓猚hecked exception琚姏鍑虹殑鏃跺欙紝鍙湁鑳藉閫傚綋澶勭悊榪欎釜寮傚父鐨勮皟鐢ㄦ柟鎵嶅簲璇ョ敤try/catch鏉ユ崟鑾峰畠銆傝屽浜巖untime exception錛屽垯涓嶅簲褰撳湪紼嬪簭涓崟鑾峰畠銆傚鏋滀綘瑕佹崟鑾峰畠鐨勮瘽錛屼綘灝變細鍐掕繖鏍蜂竴涓闄?紼嬪簭浠g爜鐨勯敊璇?bug)琚帺鐩栧湪榪愯褰撲腑鏃犳硶琚療瑙夈傚洜涓哄湪紼嬪簭嫻嬭瘯榪囩▼涓紝緋葷粺鎵撳嵃鍑烘潵鐨勮皟鐢ㄥ爢鏍堣礬寰?StackTrace)寰寰浣夸綘鏇村揩鎵懼埌騫朵慨鏀逛唬鐮佷腑鐨勯敊璇傛湁浜涚▼搴忓憳寤鴻鎹曡幏runtime exception騫剁邯褰曞湪log涓紝鎴戝弽瀵硅繖鏍峰仛銆傝繖鏍峰仛鐨勫潖澶勬槸浣犲繀欏婚氳繃嫻忚log鏉ユ壘鍑洪棶棰橈紝鑰岀敤鏉ユ祴璇曠▼搴忕殑嫻嬭瘯緋葷粺(姣斿Unit Test)鍗存棤娉曠洿鎺ユ崟鑾烽棶棰樺茍鎶ュ憡鍑烘潵銆?br />
銆銆鍦ㄧ▼搴忎腑鎹曡幏runtime exception榪樹細甯︽潵鏇村鐨勯棶棰?瑕佹崟鑾峰摢浜況untime exception?浠涔堟椂鍊欐崟鑾?runtime exception鏄笉闇瑕佸0鏄庣殑錛屼綘鎬庢牱鐭ラ亾鏈夋病鏈塺untime exception瑕佹崟鑾?浣犳兂鐪嬪埌鍦ㄧ▼搴忎腑姣忎竴嬈¤皟鐢ㄦ柟娉曟椂錛岄兘浣跨敤try/catch紼嬪簭鍧楀悧?
褰撶敤java -jar yourJarExe.jar鏉ヨ繍琛屼竴涓粡榪囨墦鍖呯殑搴旂敤紼嬪簭鐨勬椂鍊欙紝浣犱細鍙戠幇濡備綍璁劇疆-classpath鍙傛暟搴旂敤紼嬪簭閮芥壘涓嶅埌鐩稿簲鐨勭涓夋柟綾伙紝鎶lassNotFound閿欒銆傚疄闄呬笂榪欐槸鐢變簬褰撲嬌鐢?jar鍙傛暟榪愯鐨勬椂鍊欙紝java VM浼氬睆钄芥墍鏈夌殑澶栭儴classpath,鑰屽彧浠ユ湰韜珁ourJarExe.jar鐨勫唴閮╟lass浣滀負綾葷殑瀵繪壘鑼冨洿銆?/p>
**瑙e喅鏂規**
涓 BootStrap class鎵╁睍鏂規
Java 鍛戒護琛屾彁渚涗簡濡備綍鎵╁睍bootStrap 綰у埆class鐨勭畝鍗曟柟娉?
-Xbootclasspath: 瀹屽叏鍙栦唬鍩烘湰鏍稿績鐨凧ava class 鎼滅儲璺緞.
涓嶅父鐢?鍚﹀垯瑕侀噸鏂板啓鎵鏈塉ava 鏍稿績class
-Xbootclasspath/a: 鍚庣紑鍦ㄦ牳蹇僣lass鎼滅儲璺緞鍚庨潰.甯哥敤!!
-Xbootclasspath/p: 鍓嶇紑鍦ㄦ牳蹇僣lass鎼滅儲璺緞鍓嶉潰.涓嶅父鐢?閬垮厤
寮曡搗涓嶅繀瑕佺殑鍐茬獊.
璇硶濡備笅:
(鍒嗛殧絎︿笌classpath鍙傛暟綾諱技錛寀nix浣跨敤:鍙?windows浣跨敤;鍙鳳紝榪欓噷浠nix涓轟緥)
java -Xbootclasspath/a:/usrhome/thirdlib.jar: -jar yourJarExe.jar
浜?extend class 鎵╁睍鏂規
Java exten class 瀛樻斁鍦▄Java_home}\jre\lib\ext鐩綍涓?褰撹皟鐢↗ava鏃?瀵規墿灞昪lass璺緞鐨勬悳绱㈡槸鑷姩鐨?鎬諱細鎼滅儲鐨?榪欐牱,瑙e喅鐨勬柟妗堝氨寰堢畝鍗曚簡,灝嗘墍鏈夎浣跨敤鐨勭涓夋柟鐨刯ar鍖呴兘澶嶅埗鍒癳xt 鐩綍涓?
涓?User class鎵╁睍鏂規
褰撲嬌鐢?jar鎵ц鍙墽琛孞ar鍖呮椂,JVM灝咼ar鍖呮墍鍦ㄧ洰褰曡緗負codebase鐩綍,鎵鏈夌殑class鎼滅儲閮藉湪榪欎釜鐩綍涓嬪紑濮?鎵浠ュ鏋滀嬌鐢ㄤ簡鍏朵粬絎笁鏂圭殑jar鍖?涓涓瘮杈冨彲浠ユ帴鍙楃殑鍙厤緗柟妗?灝辨槸鍒╃敤jar鍖呯殑Manifest鎵╁睍鏈哄埗.
姝ラ濡備笅:
1.灝嗛渶瑕佺殑絎笁鏂圭殑jar鍖?澶嶅埗鍦ㄥ悓鍙墽琛宩ar鎵鍦ㄧ殑鐩綍鎴栨煇涓瓙鐩綍涓? 姣斿:jar 鍖呭湪 /usrhome/yourJarExe.jar 閭d箞浣犲彲浠ユ妸鎵鏈塲ar鍖呭鍒跺埌/usrhome鐩綍涓嬫垨/usrhome/lib 絳夌被浼肩殑瀛愮洰褰曚笅.
2.淇敼Manifest 鏂囦歡
鍦∕anifest.mf鏂囦歡閲屽姞鍏ュ涓嬭
Class-Path:classes12.jar lib/thirdlib.jar
Class-Path 鏄彲鎵цjar鍖呰繍琛屼緷璧栫殑鍏抽敭璇?璇︾粏鍐呭鍙互鍙傝?nbsp;http://java.sun.com/docs/books/tutorial/deployment/jar/downman.html 銆傝娉ㄦ剰鐨勬槸 Class-Path 鍙槸浣滀負浣犳湰鍦版満鍣ㄧ殑CLASSPATH鐜鍙橀噺鐨勪竴涓緝鍐欙紝涔熷氨鏄鐢ㄨ繖涓墠緙琛ㄧず鍦ㄤ綘鐨刯ar鍖呮墽琛屾満鍣ㄤ笂鎵鏈夌殑CLASSPATH鐩綍涓嬪鎵劇浉搴旂殑絎笁鏂圭被/綾誨簱銆備綘騫朵笉鑳介氳繃 Class-Path 鏉ュ姞杞戒綅浜庝綘鏈韓鐨刯ar鍖呴噷闈紙鎴栬呯綉緇滀笂錛夌殑jar鏂囦歡銆傚洜涓轟粠鐞嗚涓婃潵璁詫紝浣犵殑jar鍙戝竷鍖呬笉搴旇鍐嶅幓鍖呭惈鍏朵粬鐨勭涓夋柟綾誨簱錛堣屽簲璇ラ氳繃浣跨敤璇存槑鏉ユ彁閱掔敤鎴峰幓鑾峰彇鐩稿簲鐨勬敮鎸佺被搴擄級銆傚鏋滅敱浜庣壒孌婇渶瑕佸繀欏繪妸鍏朵粬鐨勭涓夋柟綾誨簱錛坖ar, zip, class絳夛級鐩存帴鎵撳寘鍦ㄤ綘鑷繁鐨刯ar鍖呴噷闈竴璧峰彂甯冿紝浣犲氨蹇呴』閫氳繃瀹炵幇鑷畾涔夌殑ClassLoader鏉ユ寜鐓ц嚜宸辯殑鎰忓浘鍔犺澆榪欎簺絎笁鏂圭被搴撱?/p>
Java鐨勫畨鍏ㄦ満鍒墮殢涓嶅悓鐨凧DK鐗堟湰鏈変笉鍚岀殑鍙樺寲,浼氬獎鍝嶅緢澶氭牳蹇僀LASS,姣斿Thread,鎵浠ュ緢澶氬ぇ鍨嬪晢涓氳蔣浠?瑕佹眰JDK鐨勭増鏈緢涓ユ牸.閮ㄥ垎鍘熷洜涔熷湪姝?榪欎篃瑕佹眰鍦ㄥ彂甯冭嚜宸辯紪鍐欑殑搴旂敤鏃跺?涓嶇澶у皬,閮借璇存槑寮鍙戝拰嫻嬭瘯鐨凧DK鐗堟湰. ---------------------------------------------------------------------------------------------- 闄?鑳屾櫙鐭ヨ瘑 鑷狫DK 1.2浠ュ悗,JVM閲囩敤浜嗗鎵?delegate)妯″紡鏉ヨ澆鍏lass錛庨噰鐢ㄨ繖縐嶈璁$殑鍘熷洜鍙互鍙傝?a target="_blank">http://java.sun.com/docs/books/tutorial/ext/basics/load.html 褰掔撼鏉ヨ:鏄熀浜嶫VM sandbox(娌欑洅)瀹夎妯″瀷涓婃彁渚涘簲鐢ㄥ眰鐨勫彲瀹氬埗鐨勫畨鍏ㄦ満鍒? 1. Bootstrap classes 灞炰簬Java 騫沖彴鏍稿績鐨刢lass,姣斿java.lang.String絳?鍙妑t.jar絳夐噸瑕佺殑鏍稿績綰у埆鐨刢lass.榪欐槸鐢盝VM Bootstrap class loader鏉ヨ澆鍏ョ殑.涓鑸槸鏀劇疆鍦▄java_home}\jre\lib鐩綍涓?/p>
2. Extension classes 鍩轟簬Java鎵╁睍鏈哄埗,鐢ㄦ潵鎵╁睍Java鏍稿績鍔熻兘妯″潡.姣斿Java涓插彛閫氳妯″潡comm.jar.涓鑸斁緗湪{Java_home}\jre\lib\ext鐩綍涓?/p>
3. User classes 寮鍙戜漢鍛樻垨鍏朵粬絎笁鏂瑰紑鍙戠殑Java紼嬪簭鍖?閫氳繃鍛戒護琛岀殑-classpath鎴?cp,鎴栬呴氳繃璁劇疆CLASSPATH鐜鍙橀噺鏉ュ紩鐢?JVM閫氳繃鏀劇疆鍦▄java_home}\lib\tools.jar鏉ュ鎵懼拰璋冪敤鐢ㄦ埛綰х殑class.甯哥敤鐨刯avac涔熸槸閫氳繃璋冪敤tools.jar鏉ュ鎵劇敤鎴鋒寚瀹氱殑璺緞鏉ョ紪璇慗ava婧愮▼搴?榪欐牱灝卞紩鍑轟簡User class璺緞鎼滅儲鐨勯『搴忔垨浼樺厛綰у埆鐨勯棶棰? 3.1 緙虹渷鍊?璋冪敤Java鎴杍avawa鐨勫綋鍓嶈礬寰?.),鏄紑鍙戠殑class鎵瀛樺湪鐨勫綋鍓嶇洰褰?br />
3.2 CLASSPATH鐜鍙橀噺璁劇疆鐨勮礬寰?濡傛灉璁劇疆浜咰LASSPATH,鍒機LASSPATH鐨勫間細瑕嗙洊緙虹渷鍊?br />
3.3 鎵цJava鐨勫懡浠よ-classpath鎴?cp鐨勫?濡傛灉鍒跺畾浜嗚繖涓や釜鍛戒護琛屽弬鏁頒箣涓,瀹冪殑鍊間細瑕嗙洊鐜鍙橀噺CLASSPATH鐨勫?br />
3.4 -jar 閫夐」:濡傛灉閫氳繃java -jar 鏉ヨ繍琛屼竴涓彲鎵ц鐨刯ar鍖?榪欏綋鍓峧ar鍖呬細瑕嗙洊涓婇潰鎵鏈夌殑鍊?鎹㈠彞璇濊,-jar 鍚庨潰鎵璺熺殑jar鍖呯殑浼樺厛綰у埆鏈楂?濡傛灉鎸囧畾浜?jar閫夐」,鎵鏈夌幆澧冨彉閲忓拰鍛戒護琛屽埗瀹氱殑鎼滅儲璺緞閮藉皢琚拷鐣?JVM APPClassloader灝嗗彧浼氫互jar鍖呬負鎼滅儲鑼冨洿.
浠ヤ笂涓夌鏂規硶鎺ㄨ崘絎竴縐?/strong>錛屾墿灞曟уソ錛屾搷浣滆搗鏉ヤ篃鏈鏂逛究.
鍙﹀緙栧啓鑷繁鐨凜lassLoader,鏉ュ姩鎬佽澆鍏lass,鏄洿鍔犲鏉傚拰楂樼駭鎶鏈?闄愪簬綃囧箙,涓嶈禈榪?鏈夊叴瓚d簡瑙e彲浠ュ幓google涓涓媍ustom classloader錛屾垨鑰呭弬鑰冩垜鐨勫彟涓綃囨棩蹇楋細璁ヽlasspath鍙傛暟璧板紑銆?/p>
鏈枃鎵榪版柟娉曟祴璇曞熀浜巎2sdk 1.4.2_04-b05
Java铏氭嫙鏈?JVM)瀵繪壘Class鐨勯『搴?/p>
鏈夊叧鍙墽琛宩ar鏈夎澶氱浉鍏崇殑瀹夊叏鏂歸潰鐨勬弿榪?鍙互鍙傝?a target="_blank">http://java.sun.com/docs/books/tutorial/jar/ 鏉ュ叏闈簡瑙?