锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
姒傚康錛?/strong>瀹冨畾涔変簡涓緋誨垪鐨勭畻娉曪紝騫跺皢姣忎竴涓畻娉曞皝瑁呰搗鏉ワ紝鑰屼笖浣垮畠浠繕鍙互鐩鎬簰鏇挎崲銆傜瓥鐣ユā寮忚綆楁硶鐨勫彉鍖栦笉浼氬獎鍝嶅埌浣跨敤綆楁硶鐨勫鎴楓?br />
絳栫暐妯″紡寰堢畝鍗曪紝瀹為檯涓婂氨鏄疧O涓殑澶氭侊紝涓句釜渚嬪瓙錛屾煇鍟嗗満瑕佽繘琛屼績閿錛屽浜庢櫘閫氶【瀹㈡墦88鎶橈紝瀵逛簬閾跺崱瀹㈡埛鍦?8鎶樺熀紜涓婂啀婊?00鍑?60錛屽浜庨噾鍗″鎴峰湪88鎶樺熀紜涓婂啀婊?00鍑?00銆?br />
UML鍥懼涓嬫墍紺猴細
鎺ュ彛DiscountStrategy浠g爜濡備笅錛?br />
public interface DiscountStrategy {
public double discount(double sum);
}
綾籊eneralDiscountStrategy綾諱唬鐮佸涓嬶細
public class GeneralDiscountStrategy implements DiscountStrategy {
@Override
public double discount(double sum) {
return sum * 0.88;
}
}
綾籗ilverDiscountStrategy綾諱唬鐮佸涓嬶細
public class SilverDiscountStrategy implements DiscountStrategy {
@Override
public double discount(double sum) {
sum = sum * 0.88;
int t = (int) sum / 400;
sum = sum - t * 160;
return sum;
}
}
綾籊oldenDiscountStrategy浠g爜濡備笅錛?br />
public class GoldenDiscountStrategy implements DiscountStrategy {
@Override
public double discount(double sum) {
sum = sum * 0.88;
int t = (int) sum / 400;
sum = sum - t * 200;
return sum;
}
}
綾籆ashier浠g爜濡備笅錛?br />
public class Cashier {
private DiscountStrategy discountStrategy = new GeneralDiscountStrategy();
public void getDiscountStrategy(CustomerLevel customerLevel) {
switch (customerLevel) {
case GENERAL:
discountStrategy = new GeneralDiscountStrategy();
break;
case SILVER:
discountStrategy = new SilverDiscountStrategy();
break;
case GOLDEN:
discountStrategy = new GeneralDiscountStrategy();
break;
}
}
public double calculate(double price, int num) {
return discountStrategy.discount(price * num);
}
}
1銆佺洃鎺у鉤鍙板拰紜歡鐨勫仴搴楓傜‖浠跺彲浠ラ氳繃SNMP錛學EB鏈嶅姟鍣ㄥ拰搴旂敤鏈嶅姟鍣ㄥ彲浠ラ氳繃浠栦滑鑷繁鐨勭鐞嗗伐鍏楓傛暟鎹簱涔熸槸涓鏍風瓑銆?br />
2銆侀厤緗簲鐢ㄥ眰闈㈢殑璧勬簮銆傛瘮濡傞厤緗簲鐢ㄥ湪鏌ヨ緇撴灉涓瘡欏墊樉紺虹殑鏁伴噺錛岄厤緗暟鎹簱榪炴帴姹狅紝鎴栬呭閮ㄨ姹傛暟絳夈?br />
3銆佹敹闆嗗簲鐢ㄧ▼搴忕殑緇熻淇℃伅銆傚澶氬皯鎴愬姛璁㈠崟錛屽灝戝け璐ヨ鍗曠瓑銆?br />
4銆佹棩蹇楃駭鍒紝鏀瑰彉鏃ュ織綰у埆銆傚嚭闂鐨勬椂鍊欙紝鍙互閫氳繃鏀瑰彉鏃ュ織綰у埆鏉ユ墦鍗拌皟璇曚俊鎭紝蹇熷畾浣嶉棶棰樸?br />
5銆佺洃瑙嗘湇鍔″櫒鐨勬ц兘銆佽礋杞斤紝閫氳繃email銆乻ms絳夐氱煡鍏抽敭鎬т簨浠訛紝姣斿鏈嶅姟鍣ㄨ礋杞借秴榪囬璁劇殑鐣岄檺銆?br />
瑕佹弧瓚寵繖浜涢渶姹傚線寰鏄潪甯告槀璐靛拰鍥伴毦鐨勶紝綆$悊鍛橀氬父闇瑕侀氳繃涓嶅悓鐨勫伐鍏鋒潵綆$悊涓嶅悓鐨勬湇鍔″拰紜歡銆?nbsp;濡傛灉浣跨敤JMX錛屽垱寤轟竴涓弧瓚充笂闈㈤渶姹傜殑綆$悊緋葷粺灝嗘槸寤変環(huán)銆佹洿鍔犵伒媧匯佹墍闇鏃墮棿鏇寸煭銆?nbsp;
浣跨敤JMX鐨勫ソ澶?br />
1銆侀潪甯稿鏄撲嬌鐢ㄣ傜壒鍒槸瀵逛竴涓狫AVA紼嬪簭鍛橈紝瑕佺悊瑙NMP鏄洶闅劇殑銆傝孞MX瀵逛粬鏉ヨ闈炲父瀹規(guī)槗銆?br />
2銆佸埄鐢ㄧ幇鏈夌殑鎶鏈細鐜版湁鐨勭鐞嗗伐鍏峰彲浠ユ彃鍏MX錛孞MX鎻愪緵浜嗗緢澶氬崗璁紙SNMP銆丠TTP錛夊拰浼犺緭鏂瑰紡錛堝RMI錛夛紝濡傛灉鍘熸湁鐨勫簲鐢ㄥ拰璁懼娌℃湁鎻愪緵綆$悊鑳藉姏錛屽垯鍙互鍒涘緩JMX浠g悊鎻愪緵綆$悊鑳藉姏銆?br />
3銆佹ā鍧楀寲銆備互妯″潡鍖栫殑鏂瑰紡鍒涘緩浣犵殑綆$悊鐜銆?br />
4銆佽鍛娿佷簨浠跺拰緇熻淇℃伅銆?br />
JMX鎻愪緵浜嗕竴濂楅氱煡緋葷粺錛屽厖鍒嗗埄鐢ㄤ簡闈㈠悜瀵硅薄浼樺娍錛岄氱煡鎻愪緵浜嗕笉浠呬粎鏄暟鎹紝鑰屾槸涓涓湁鍒嗗竷寮廕AVA瀵硅薄錛屽皝瑁呬簡鏁版嵁鍜岃涓恒備緥濡傦紝浣犲彂閫佷簡涓涓湇鍔″櫒璐熻澆鐨勯氱煡錛岄噷闈㈣繕鍖呭惈浜嗕竴涓樉紺鴻礋杞介噸瑕佹х殑綰у埆鐨勬満鍒訛紝璇寸櫧浜嗗氨鏄璞¢噷闈㈡湁涓柟娉曪紝鍙互鍒ゅ畾璐熻澆鐨勪弗閲嶇▼搴︺?br />
5銆佸揩閫熺殑鐩戞帶瑙e喅鏂規(guī)銆備笉鍚岀殑寮鍙戜漢鍛樺彧闇瑕佽嚜宸卞紑鍙慚Bean錛岃屼笉闇瑕佽姳寰堝鐨勬椂闂村湪鐩鎬簰鐨勫崗浣滀笂闈紝榪欎簺MBean鍒嗗竷鍦ㄤ笉鍚岀殑涓繪満涓婏紝浣嗗彲浠ラ氳繃涓涓鐞嗗伐鍏峰氨鍙互綆$悊鎵鏈夌殑榪欎簺搴旂敤銆?br />
JMX鐨勪竴浜涙湳璇?br />
1銆佸彲綆$悊璧勬簮錛?font size="2">Manageable resource錛?br />
鍙互鏄換浣曠殑搴旂敤銆佽澶囥佹垨鑰呭叾浠栧瓨鍦ㄧ殑瀹炰綋錛岃兘澶熻java璁塊棶鍜屽寘瑁呫傛槸琚獼MX MBean綆$悊鐨勮祫婧愩?br />
2銆丮Bean錛圡anaged Bean錛?br />
鏄弧瓚蟲煇浜涘懡鍚嶈鍒欏拰緇ф壙JMX 瑙勮寖鐨刯ava綾伙紝涓哄彲綆$悊璧勬簮鐨勭鐞嗗拰璁塊棶鏆撮湶鎺ュ彛銆傞氳繃灞炴у拰琛屼負鏉ユ毚闇叉帴鍙c傛湁榪?綾伙細Standard, Dynamic, and Model MBeans銆?br />
3銆丮Bean Server
綆$悊涓緇凪Bean鐨凧AVA綾匯傛槸JMX 綆$悊鐜鏍稿績銆傛槸MBean鐨勬敞鍐屽櫒銆?br />
4銆丣MX Agent
JMX浠g悊鏄負綆$悊涓緇凪Bean鎻愪緵涓緋誨垪鏈嶅姟鐨刯ava榪涚▼銆傛槸涓涓狹Bean Server鐨勫鍣紝瀹冭繕鎻愪緵浜嗕竴浜涙湁鐢ㄧ殑鏈嶅姟錛氬垱寤篗Bean涔嬮棿鐨勫叧緋伙紝鍔ㄦ佸姞杞界被錛岀畝鍗曠殑鐩戞帶鏈嶅姟錛屽畾鏃跺櫒鏈嶅姟銆侫gent鏈変竴涓崗璁傞厤鍣ㄥ拰榪炴帴鍣ㄩ泦鍚堣兘浣垮閮ㄧ▼搴忚繛鎺ュ埌浠栦滑銆?br />
5銆丳rotocol adapters and connectors
鍗忚閫傞厤鍣ㄥ拰榪炴帴鍣ㄦ槸浣嶄簬JMX Agent鍐呴儴鐨勫璞°傛妸Agent鏆撮湶緇欑鐞嗙▼搴忓拰鍗忚銆備竴涓狝gent鍙互鏈夊緢澶氶傞厤鍣ㄥ拰榪炴帴鍣ㄣ?br />
6銆丮anagement application
榪炴帴鍒癑MX Agent鐨勭敤鎴峰簲鐢ㄧ▼搴忋?br />
7銆丯otification
閫氱煡鏄疢bean鎴栬匨bean server鍙戦佺殑java瀵硅薄錛屼粬浠皝瑁呬簡浜嬩歡銆佽鍛娿佹垨鑰呭叾浠栫殑涓鑸俊鎭傚叾浠栫殑Mbean鎴栬卝ava瀵硅薄鍙互娉ㄥ唽鎴愪負鐩戝惉鍣ㄦ潵鎺ュ彈閫氱煡銆?br />
8銆両nstrumentation錛堣澶囧寲錛?br />
鐢∕Bean鏆撮湶涓涓彲綆$悊璧勬簮鐨勮繃紼嬨?br />
JMX鏋舵瀯
JMX鏋舵瀯涓昏鍒嗕負涓夊眰錛?font size="2">Distributed layer錛?font size="2">Agent layer錛?font size="2">Instrumentation layer錛屽涓嬪浘鎵紺猴細
1銆?/span>Distributed layer錛堝垎甯冨紡灞傦級
灞炰簬JMX鏋舵瀯鐨勬渶澶栧眰錛岃繖灞備富瑕佽礋璐d嬌JMX Agent鑳藉澶栭儴紼嬪簭鍙敤銆?nbsp; 鍙堝垎涓轟袱縐嶏細涓縐嶉氳繃涓嶅悓鐨勫崗璁紙濡係NMP錛孒TTP錛夋潵涓篗Bean鎻愪緵鍙鎬с?/font> 鍙︿竴縐嶆槸鎶夾gent API鏆撮湶緇欏叾浠栫殑鍒嗗竷寮忔妧鏈RMI銆?br />
2銆?font size="2">The agent layer錛堜唬鐞嗗眰錛?br />
瀹冨寘鍚殑鏈涓昏鐨勭粍浠舵槸MBean Server錛屽畠榪樺寘鎷?涓唬鐞嗘湇鍔′嬌綆$悊MBean鏇村姞瀹規(guī)槗錛屽畠浠垎鍒槸錛?nbsp; 瀹氭椂鍣紙timer錛夈佺洃鎺ф湇鍔°佸姩鎬丮Bean鍔犺澆銆佸拰MBean鍏崇郴鏈嶅姟銆侫gent鍙互鍜岃綆$悊鐨勮祫婧愬湪鍚屼竴涓富鏈轟笂錛屼篃鍙互鏄繙紼嬬殑銆?br />
3銆?font size="2">The instrumentation layer
榪欐槸鏈闈犺繎璧勬簮鐨勪竴灞傦紝瀹冨寘鍚簡娉ㄥ唽鍦ˋgent閲岄潰鐨凪Bean銆?br />
4銆?font size="2">Notifications
闄や簡鏋舵瀯涓殑涓夊眰浠ュ錛孞MX鎻愪緵浜嗕竴涓氱煡鏈哄埗錛岀被浼間簬JAVA浜嬩歡妯″瀷銆傞氱煡鏈哄埗鏄鐞嗙郴緇熺殑鏈鍚庡繀欏葷殑緇勪歡銆侫gent鍜孧Bean鍙互浣跨敤閫氱煡鏈哄埗鏉ュ彂閫佽鍛婃垨淇℃伅緇欑鐞嗗簲鐢ㄣ?br />
浠ヤ笂灝辨槸JMX鏋舵瀯鐨勪富瑕佸唴瀹癸紝涓嬩竴綃囨瀯寤轟竴涓狧elloWorld鐨凧MX紼嬪簭銆?br />
Restful WS鐨勭壒鎬э細
1銆?strong>鍙鍧鎬э紙Addressability錛?br />
璧勬簮閫氳繃URI鏉ユ毚闇茬粰鐢ㄦ埛錛屽彲瀵誨潃鎬ф槸鏈鍩烘湰鐨勭壒鎬с傜敱浜庡彲瀵誨潃鎬э紝浣犲彲浠ユ妸URI淇濆瓨鍦ㄤ綘鐨勪功絳鵑噷錛屼綘鍙互鎶婇摼鎺ュ彂緇欏埆浜猴紝鑰屼笉鐢ㄦ妸Html鏂囦歡涓嬭澆涓嬫潵鍙戠粰鍒漢錛屼篃鍙互閫氳繃URI瀵硅祫婧愯繘琛岀紦瀛樸?br />
2銆?strong>鏃犵姸鎬佹э紙Statelessness錛?br />
鏃犵姸鎬佹ф剰鍛崇潃姣忎釜HTTP璇鋒眰鏄畬鍏ㄩ殧紱葷殑銆傛瘡嬈″鎴風鍙戦佽姹傞兘蹇呴』甯︿笂鎵鏈夋湇鍔″櫒绔渶瑕佺殑淇℃伅銆?nbsp;
鏃犵姸鎬佺殑搴旂敤鏇村鏄撳垎甯冨埌鏈夎礋璐e潎琛$殑澶氬彴鏈嶅姟鍣ㄤ笂錛涙棤鐘舵佹т篃鏇村鏄撶紦瀛橈細緙撳瓨宸ュ叿鍙渶瑕佺湅榪欎竴涓姹傦紝鍜屼換浣曞叾浠栬姹傛棤鍏熾?br />
搴旂敤鐘舵佸拰璧勬簮鐘舵侊紙Application State Versus Resource State錛?br />
搴旂敤鐘舵佷綅浜庡鎴風錛岃岃祫婧愮姸鎬佷綅浜庢湇鍔″櫒绔紝瀵逛簬瀹㈡埛绔紝姣忎釜瀹㈡埛绔兘鏈夊悇鑷殑搴旂敤鐘舵侊紝渚嬪錛氬湪google鎼滅儲錛屼綘鍙兘鎼滅儲鏌愪釜鍗曡瘝涓斿綋鍓嶉〉鏄3欏碉紝鎴戝彲鑳芥悳绱㈠彟涓涓崟璇嶄笖鍦ㄧ涓欏碉紝鎵浠ユ瘡涓鎴風閮芥湁涓涓簲鐢ㄧ姸鎬併傚綋瀹㈡埛绔彂璧瘋姹傜殑鏃跺欙紝蹇呴』鍛婅瘔鏈嶅姟鍣ㄤ綘鐨勫簲鐢ㄧ姸鎬侊紝姣斿浣犲綋鍓嶈鐪嬫煇涓崟璇嶆悳绱㈢粨鏋滅殑絎嚑欏碉紝鏈嶅姟鍣ㄧ榪斿洖緇撴灉涓婃湁鍏朵粬閾炬帴錛岃繖浜涢摼鎺ュ鎴風鍙兘浣滀負鏈潵鐨勮姹傘?br />
鑰屽浜庤祫婧愮姸鎬侊紝瀵逛簬姣忎釜瀹㈡埛绔兘鏄浉鍚岀殑錛屽氨鏄湇鍔″櫒涓婄殑璧勬簮銆?nbsp;
3銆佽〃榪版э紙Representations錛?br />
琛ㄨ堪鎬э紝灝辨槸璧勬簮鐨勮〃鐜板艦寮忥紝鐩稿悓鐨勮祫婧愬彲浠ユ湁涓嶅悓鐨勮〃榪版э紝姣斿鍚屼竴涓猙ug鍒楄〃鍙互鐢╔ML鏂囨。琛ㄧず錛屼篃鍙互鐢ㄦ枃鏈柟寮忚〃紺虹瓑絳夈傚浜庡悓涓璧勬簮鐨勪笉鍚岀殑Representation錛屽浣曠煡閬撳鎴風璇鋒眰鍝竴縐嶅憿錛熶綔鑰呭緩璁笉鍚岀殑Representation浣跨敤涓嶅悓鐨刄RI銆?br />
4銆佽繛閫氭э紙Links and Connectedness錛?br />
綆鍗曠偣璇達紝灝辨槸榪斿洖鐨勭粨鏋滀腑鏈夊鍏朵粬璧勬簮鐨勯摼鎺ワ紙URI錛夛紝姣斿google鎼滅儲錛屾悳绱㈢粨鏋滃彲鑳芥湁鍏朵粬欏電殑閾炬帴銆?br />
5銆佺粺涓鐨勬帴鍙o紙The Uniform Interface錛?br />
涔熷氨鏄Restful WS浣跨敤HTTP鐨勫熀鏈柟娉曚綔涓轟粬鐨勬柟娉曠殑琛ㄧず錛屼富瑕佷嬌鐢℉TTP鐨勫洓涓柟娉曪細GET,PUT,DELETE,POST銆侶EAD鍜孫PTIONS鐢ㄧ殑姣旇緝?yōu)畱銆?br />
鍙栧緱鏌愪釜璧勬簮鐨勮〃榪扮殑鏃跺欎嬌鐢℅ET銆?br />
鍒涘緩涓涓柊鐨勮祫婧愮殑鏃跺欙紝PUT鍒頒竴涓柊鐨刄RI錛屾垨鑰匬OST鍒頒竴涓凡緇忓瓨鍦ㄧ殑URI銆?br />
淇敼璧勬簮錛屼嬌鐢≒UT鍒板瓨鍦ㄧ殑URI銆?br />
鍒犻櫎璧勬簮浣跨敤DELETE銆?br />
PUT鍜孭OST閮藉彲浠ュ垱寤烘柊鐨勮祫婧愶紝閭f湁浠涔堝尯鍒憿錛烶OST鍙互鍒涘緩浠庡睘璧勬簮錛屽涓涓獁ebblog紼嬪簭閫氳繃璧勬簮錛?weblogs/myweblog錛夋毚闇叉瘡涓猙log錛岃屾煇涓猙log涓嬮潰鐨勬潯鐩綔涓轟粠灞炶祫婧愪負/weblogs/myweblog/entries/1錛屽綋浣犻渶瑕佸鍔犱竴涓潯鐩殑鏃跺欙紝浣犲彲浠OST鍒扮埗璧勬簮/weblogs/myweblog錛屽悓鏍稰UT涔熷彲浠ュ畬鎴愯繖涓伐浣滐紝鍦ㄨ繖閲孭OST鍜孭UT鐨勫尯鍒槸錛氬綋瀹㈡埛绔彲浠ユ帶鍒舵柊璧勬簮鐨刄RI鐨勬椂鍊欙紝鍒欎嬌鐢≒UT錛屾瘮濡俠log鐨勪笅闈㈢殑鏌愮瘒鏂囩珷浣跨敤鍚嶅瓧鏉ヨ闂紝濡?weblogs/myweblog/entries/restful_ws_1錛堣繖鏍鋒煇涓崥瀹笅闈㈢殑鏂囩珷涓嶈兘閲嶅錛夛紝鍒欏綋浣犲彂琛ㄤ竴綃囨柊鏂囩珷鐨勬椂鍊欙紝鍙互PUT鍒版柊鐨刄RI濡?weblogs/myweblog/entries/restful_ws_2鏉ュ垱寤鴻祫婧愩傝屽鏋滃鎴風涓嶈兘鎺у埗URI鐨勬椂鍊欙紝姣斿blog鏄氳繃鏈嶅姟鍣ㄧ鏌愪釜搴忓垪鍙鋒潵璁塊棶錛屽鎴風鏄棤娉曠煡閬撲笅涓涓簭鍙鋒槸浠涔堬紝榪欐椂鍙兘浣跨敤POST錛岃繖縐峆OST濡傛灉鍒涘緩鎴愬姛錛屽垯榪斿洖201錛屽搷搴斿ご涓殑Location鍙互淇濇姢鏂板垱寤鴻祫婧愮殑URI銆?br />
榪樻湁涓涓尯鍒紝POST瀵規(guī)煇涓瓨鍦ㄧ殑璧勬簮鏇存柊鏃訛紝涓鑸槸榪藉姞錛坅ppend錛夛紝姣斿璇村鏌愪釜鏃ュ織鏂囦歡鍋歅OST錛屽垯鎶婃棩蹇楄拷鍔犲埌鍘熸棩蹇楃殑鍚庨潰銆傚鏋滄槸PUT鍒欒繘琛岀殑鏄浛鎹紝鎵浠UT鏄瓑騫傜殑錛岃孭OST涓嶆槸錛堝悗闈細璁詫級銆?br />
瀹夊叏錛圫afety錛?br />
GET鍜孒EAD鏂規(guī)硶鍙槸鑾峰彇璧勬簮鐨勮〃榪幫紝鎵浠ユ槸瀹夊叏鐨勩傚綋鐒朵篃鍙兘鏈変竴浜涘壇浣滅敤錛屾瘮濡傛湁浜涙湇鍔$浼氳褰旼ET鐨勬鏁扮瓑銆?br />
絳夊箓鎬э紙Idempotence錛?br />
絳夊箓鎬х畝鍗曠偣璇村氨鏄竴嬈¤姹傚拰澶氭璇鋒眰錛岃祫婧愮殑鐘舵佹槸涓鏍楓傛瘮濡侴ET鍜孒EAD錛屼笉璁轟綘璇鋒眰澶氬皯嬈★紝璧勬簮榪樻槸鍦ㄩ偅閲屻傝娉ㄦ剰錛孌ELETE鍜孭UT涔熸槸絳夊箓鐨勶紝浠ヤ負瀵瑰悓涓涓祫婧愬垹闄や竴嬈℃垨鑰呭嬈★紝緇撴灉鏄竴鏍風殑錛屽氨鏄祫婧愯鍒犻櫎浜嗭紝涓嶅瓨鍦ㄤ簡銆備負浠涔堣PUT涔熸槸絳夊箓鐨勶紵褰撲綘PUT涓涓柊璧勬簮鐨勬椂鍊欙紝璧勬簮琚垱寤猴紝鍐嶆PUT榪欎釜URI鐨勬椂鍊欙紝璧勬簮榪樻槸娌″彉銆傚綋浣燩UT涓涓瓨鍦ㄧ殑璧勬簮鏃訛紝鏇存柊浜嗚祫婧愶紝鍐嶆PUT鐨勬椂鍊欙紝榪樻槸鏇存柊鎴愯繖涓牱瀛愩傚湪PUT鏇存柊鐨勬椂鍊欙紝涓嶈兘鍋氱浉瀵圭殑鏇存柊錛堜緷璧栬祫婧愮幇鍦ㄧ殑鐘舵侊級錛屾瘮濡傛瘡嬈″涓涓暟鍔?錛岃繖鏍瘋祫婧愮姸鎬佸氨浼氬彉鍖栥傚簲璇ユ瘡嬈℃洿鏂版垚鏌愪釜鏁幫紝姣斿鎶婃煇涓暟鍙樻垚4錛屽垯鏃犺澶氬皯嬈UT錛屽奸兘鏄?錛岃繖鏍峰氨鏄瓑騫備簡銆?br />
鎴戜滑璁捐Restful WS鐨勬椂鍊欙紝GET錛孒EAD, PUT, DELETE涓瀹氳璁捐鎴愮瓑騫傜殑銆傜敱浜庣綉緇滄槸涓嶅彲闈犵殑錛屽畨鍏ㄦу拰絳夊箓鎬у氨鏄懼緱鐗瑰埆閲嶈銆傚鏋滀竴嬈¤姹傦紝鏈嶅姟鍣ㄦ敹鍒板鐞嗕互鍚庯紝瀹㈡埛绔病鏈夋敹鍒扮浉搴旓紝瀹㈡埛绔細鍐嶆璇鋒眰錛屽鏋滄病鏈夌瓑騫傛т繚闅滐紝灝變細鍙戠敓鎰忔兂涓嶅埌鐨勯棶棰樸?br />
POST鏄笉瀹夊叏涔熶笉絳夊箓鐨勶紝榪樻槸鎷縲eblog鐨勪緥瀛愶紝濡傛灉涓ゆPOST鐩稿悓鐨勫崥鏂囷紝鍒欎細浜х敓涓や釜璧勬簮錛孶RI鍙兘鏄繖鏍?weblogs/myweblog/entries/1鍜?weblogs/myweblog/entries/2錛屽敖綆′粬浠殑鍐呭鏄竴鎽鎬竴鏍風殑銆?br />
1銆佸惎鍔ㄧ被瑁呰澆鍣?br />
涓昏璐熻矗瑁呰澆jdk_home/lib鐩綍涓嬬殑鏍稿績api 鎴?-Xbootclasspath 閫夐」鎸囧畾鐨刯ar鍖呫傚浜庡弻浜插媧劇殑鏈欏跺眰錛岃綾誨叾瀹炴槸鐢盋璇█緙栧啓銆?br />
2銆佹墿灞曠被瑁呰澆鍣?br />
涓昏璐熻矗瑁呰澆jdk_home/lib/ext鐩綍涓嬬殑jar鍖呮垨 -Djava.ext.dirs 鎸囧畾鐩綍涓嬬殑jar鍖?br />
3銆佺郴緇熺被瑁呰澆鍣?br />
涓昏璐熻矗瑁呰澆ClassPath涓嬬殑綾匯?br />
4銆佽嚜瀹氫箟綾昏杞藉櫒
鑷畾涔夌被緇ф壙ClassLoader鎴栧叾瀛愮被銆傚彲浠ヨ繍琛屾椂鍔ㄦ佽杞芥煇浜涚被銆?br />
鍏朵腑錛寀2浠h〃2涓瓧鑺傜殑鏃犵鍙鋒暣鏁般倁4浠h〃4涓瓧鑺傜殑鏃犵鍙鋒暣鏁幫紝鍏朵粬濡?/code>cp_info
銆?/span>
field_info
鏄竴浜涚粨鏋勬暟鎹紝鎺ヤ笅鍘諱細璁層?br />
榪欐瑕佽В鏋愮殑鏄竴涓潪甯哥畝鍗曠殑綾伙細TJ.java錛屼唬鐮佸涓嬶細浣跨敤jdk1.6緙栬瘧錛屼駭鐢熺殑浜岃繘鍒剁被鏂囦歡濡備笅錛?br />
涓嬮潰瀵圭収涓婇潰鐨勬牸寮忕粨鏋勪竴鐐圭偣鐨勮В鏋愩?br />
CA FE BA BE錛氬ご鍥涗釜瀛楄妭鏄瓟鏁幫紝琛ㄧず榪欐槸java class鏂囦歡銆?br />
00 00錛氭鐗堟湰涓?銆?br />
00 32錛氫富鐗堟湰0x32錛岃〃紺簀dk1.6緙栬瘧鐨勩侸dk1.5涓?x31錛宩dk1.4涓?x30銆?br />
00 16錛氬父閲忔睜鐨勫叆鍙o紙entry錛夋暟閲忋傚寘鎷嚜宸辨湰韜紙榪欓噷寰堝鎬級錛屾墍浠ユ帴涓嬫潵鏈?1欏圭殑甯擱噺姹犲叆鍙c?br />
鎴戜細鍦ㄦ瘡涓父閲忔睜欏圭殑鍓嶉潰琛ㄤ笂绱㈠紩銆傚父閲忔睜鐨勭涓涓瓧鑺傝〃紺虹被鍨嬨傚叿浣撶被鍨嬪鐓ц〃濡備笅錛?br />
Constant Type | Value |
---|---|
CONSTANT_Class |
7 |
CONSTANT_Fieldref |
9 |
CONSTANT_Methodref |
10 |
CONSTANT_InterfaceMethodref |
11 |
CONSTANT_String |
8 |
CONSTANT_Integer |
3 |
CONSTANT_Float |
4 |
CONSTANT_Long |
5 |
CONSTANT_Double |
6 |
CONSTANT_NameAndType |
12 |
CONSTANT_Utf8 |
1 |
0A 00 04 00 12錛?span style="color: red">銆?銆?/span>錛岀涓涓瓧鑺備負10錛屾墍浠ユ槸CONSTANT_Methodref錛屽畠鐨勭粨鏋勫涓嬶細
CONSTANT_Methodref_info {
u1 tag;
u2 class_index;
u2 name_and_type_index;
}
鎵浠ワ紝class_index=4錛宯ame_and_type_index=12,榪欎袱涓唬琛ㄥ父閲忔睜絎?欏瑰拰絎?2欏廣?br />
09 00 03 00 13錛?span style="color: red">銆?銆?/span> 榪欐槸涓涓狢ONSTANT_Fieldref錛屼粬鐨勭粨鏋勫拰涓婇潰鐨勭被浼糲lass_index=3錛宯ame_and_type_index=13
07 00 14錛?span style="color: red">銆?銆?/span>榪欎釜鏄疌ONSTANT_Class錛屽畠鐨勭粨鏋勫涓嬶細
CONSTANT_Class_info {
u1 tag;
u2 name_index;
}
name_index涓?0錛屾寚鍚戠殑鏄竴涓猽tf8鐨勫瓧鑺傜爜錛屽嵆TJ錛岃繖涓悗闈細鐪嬪埌銆?br />
07 00 15: 銆?銆?涔熸槸涓涓?/span>CONSTANT_Class錛宯ame_index涓?1錛屽嵆java/lang/Object
01 00 02 66 31: 銆?銆?/span>CONSTANT_Utf8錛岀粨鏋勫涓嬶細
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}
鏈鍚庝袱涓瓧鑺備唬琛ㄥ瓧絎︿覆“f1”鐨剈tf-8瀛楄妭鐮併?br />
01 00 01 49錛氥?銆?/span>瀛楃涓睮
01 00 0D 43 6F 6E 73 74 61 6E 74 56 61 6C 75 65 錛氥?銆?/span>瀛楃涓睠onstantValue
03 00 00 00 02錛氥?銆?/span>CONSTANT_Integer錛屾暣鏁板?
01 00 06 3C 69 6E 69 74 3E錛氥?銆戝瓧絎︿覆<init>
01 00 03 28 29 56錛氥?0銆戝瓧絎︿覆()V
01 00 04 43 6F 64 65錛氥?1銆戝瓧絎︿覆code
01 00 0F 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65錛氥?2銆戝瓧絎︿覆LineNumberTable
01 00 02 6D 31錛氥?3銆戝瓧絎︿覆m1
01 00 04 28 49 29 49 錛氥?4銆戝瓧絎︿覆(I)I錛岃〃紺轟竴涓暣鏁板弬鏁頒笖榪斿洖鏁存暟鐨勬柟娉曘?br />
01 00 02 6D 32 錛氥?5銆戝瓧絎︿覆m2
01 00 0A 53 6F 75 72 63 65 46 69 6C 65 錛氥?6銆戝瓧絎︿覆SourceFile
01 00 07 54 4A 2E 6A 61 76 61錛氥?7銆戝瓧絎︿覆TJ.java
0C 00 09 00 0A錛氥?8銆慍ONSTANT_NameAndType錛岀粨鏋勫涓嬶細
CONSTANT_NameAndType_info {
u1 tag;
u2 name_index;
u2 descriptor_index;
}
name_index=9錛屼唬琛ㄦ柟娉?lt;init>錛宒escriptor_index=10錛?)V錛屼唬琛ㄦ棤鍙備笖榪斿洖void鐨勬柟娉曘?br />
0C 00 05 00 06錛氥?9銆戠粨鏋勫悓涓婏紝name_index=5錛屽嵆f1錛宒escriptor_index=6錛屽嵆鏁存暟銆?br />
01 00 02 54 4A 錛氥?0銆戝瓧絎︿覆TJ
01 00 10 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74錛氥?1銆戝瓧絎︿覆java/lang/Object
鍒版錛屽父閲忔睜緇撴潫銆?br />
00 21錛氱被鐨勬弿榪扮涓簆ublic銆?br />
00 03 錛歵his class涓哄父閲忔睜絎笁涓紝TJ錛屽嵆榪欎釜綾葷殑鍚嶅瓧涓篢J
00 04錛歴uper class涓哄父閲忔睜絎洓涓紝java/lang/Object錛屽嵆瀹冪殑瓚呯被涓簀ava.lang.Object
00 00錛氭帴鍙d釜鏁?銆?br />
00 01錛歠ield鏁伴噺1銆?br />
00 12 00 05 00 06 00 01 00 07 00 00 00 02 00 08錛歠ield鐨勭粨鏋勫涓?br />
field_info {
u2 access_flags;
u2 name_index;
u2 descriptor_index;
u2 attributes_count;
attribute_info attributes[attributes_count];
}
access_flags涓?0 12錛屼唬琛ˋCC_PRIVATE+ ACC_FINAL
name_index錛氬父閲忔睜绱㈠紩涓?鐨勫叆鍙o紝鍗砯1錛屽嵆綾繪垚鍛樼殑鍚嶅瓧涓篺1
descriptor_index錛欼錛屼唬琛╥nteger銆?br />
attributes_count錛?涓?br />
attribute_info錛?br />
attribute_info {
u2 attribute_name_index;
u4 attribute_length;
u1 info[attribute_length];
}
attribute_name_index錛?錛屽嵆ConstantValue錛岀粨鏋勫涓?br />
ConstantValue_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 constantvalue_index;
}
attribute_length錛?
constantvalue_index錛?
----------------------------------------涓嬮潰寮濮嬫柟娉?/span>
00 03錛?涓柟娉曘?br />
method_info {
u2 access_flags;
u2 name_index;
u2 descriptor_index;
u2 attributes_count;
attribute_info attributes[attributes_count];
}
--------------------------------------------絎竴涓柟娉?lt;init>錛岃繖涓槸緙栬瘧鍣ㄤ駭鐢熺殑鐢熸垚瀹炰緥鐨勫垵濮嬪寲鏂規(guī)硶銆?br />
access_flags錛歱ublic
name_index錛?0 09錛?lt;init>
descriptor_index錛?0 0A錛?)V琛ㄧず鏃犲弬鏁幫紝榪斿洖void
attributes_count :00 01,1涓?br />
attribute_name_index 錛?0 0B 錛宑ode
attribute_length錛?8涓?br />
Code_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 max_stack;
u2 max_locals;
u4 code_length;
u1 code[code_length];
u2 exception_table_length;
{ u2 start_pc;
u2 end_pc;
u2 handler_pc;
u2 catch_type;
} exception_table[exception_table_length];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
max_stack: 00 02
max_locals: 00 01
code_length: 00 00 00 0A,10
code: 2A B7 00 01 2A 05 B5 00 02 B1,鎸囦護
exception table length錛?0 00
attributes_count錛?
attribute_name_index錛?0 0C錛孡ineNumberTable
LineNumberTable_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 line_number_table_length;
{ u2 start_pc;
u2 line_number;
} line_number_table[line_number_table_length];
}
attribute_length錛?0
line_number_table_length錛?
start_pc錛?0 00
line_number錛?0 01
tart_pc錛?0 04
line_number錛?0 03
鍒版絎竴涓柟娉曠粨鏉熴?br />
----------------------------------------------------------------------絎簩涓柟娉曞紑濮?br />
access_flags錛?span lang="EN-US">00 01錛?span lang="EN-US">public
name_index錛?0 0D錛宮1
desc_index錛?0 0E錛?I)I錛屾湁涓涓暣鏁板弬鏁幫紝榪斿洖涓涓暣鏁般?br />
00 01錛氫竴涓猘ttr
00 0B錛歝ode
00 00 00 1C錛歛ttr_length:28
Code_atrr:28涓瓧鑺傦紝涓嶅垎鏋愪簡鍜屼笂闈㈢殑鏂規(guī)硶鐩稿悓銆?br />
----------------------------------------------------------------------絎笁涓柟娉?br />
00 02錛歱rivate
00 0F錛歮2
00 0A: ()V錛屾棤鍙傦紝榪斿洖void
00 01錛氫竴涓猘ttr
00 0B錛歝ode
00 00 00 19錛歛ttr_length 25
鎺ヤ笅鍘葷殑25涓瓧鑺傛槸Code_atrr錛屽悓鏍蜂笉鍒嗘瀽浜嗐?br />
------------------------------------------------------------------
00 01錛?涓被鐨刟ttr
00 10錛歋ourceFile
00 00 00 02錛歭en=2
00 11錛?7錛孴J.java