锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲色最新高清av网站,亚洲av无码有乱码在线观看,亚洲线精品一区二区三区影音先锋http://m.tkk7.com/wvpon/archive/2007/08/06/134681.html瀹堟湜鑰?/dc:creator>瀹堟湜鑰?/author>Mon, 06 Aug 2007 05:17:00 GMThttp://m.tkk7.com/wvpon/archive/2007/08/06/134681.htmlhttp://m.tkk7.com/wvpon/comments/134681.htmlhttp://m.tkk7.com/wvpon/archive/2007/08/06/134681.html#Feedback1http://m.tkk7.com/wvpon/comments/commentRss/134681.htmlhttp://m.tkk7.com/wvpon/services/trackbacks/134681.htmlhttp://www.blogjava.cn/
   姝g‘浼橀泤鐨勮В鍐崇敤鎴烽鍑洪棶棰?br>                                           ------JSP鍜孲truts瑙e喅鏂規(guī)

鎽樿

鍦ㄤ竴涓湁瀵嗙爜淇濇姢鐨刉eb搴旂敤褰撲腑錛屾紜Ε鍠勭殑澶勭悊鐢ㄦ埛閫鍑鴻繃紼嬪茍涓嶄粎浠呭彧闇瑕佽皟鐢℉ttpSession瀵硅薄鐨刬nvalidate()鏂規(guī)硶錛屽洜涓虹幇鍦ㄥぇ閮ㄥ垎嫻忚鍣ㄤ笂閮芥湁鍚庨(Back)鍜屽墠榪?Forward)鎸夐挳錛屽厑璁哥敤鎴峰悗閫鎴栧墠榪涘埌涓涓〉闈€傚湪鐢ㄦ埛閫鍑轟竴涓猈eb搴旂敤涔嬪悗錛屽鏋滄寜浜嗗悗閫鎸夐挳錛屾祻瑙堝櫒鎶婄紦瀛樹腑鐨勯〉闈㈠憟鐜扮粰鐢ㄦ埛錛岃繖浼?xì)鋴社敤鎴蜂骇鐢熺枒鎯戝Q屼粬浠細(xì)寮濮嬫媴蹇冧粬浠殑涓漢鏁版嵁鏄惁瀹夊叏銆?br>
瀹為檯涓婏紝璁稿Web搴旂敤浼?xì)寮瑰囖Z竴涓〉闈紝璀﹀憡鐢ㄦ埛閫鍑烘椂鍏抽棴鏁翠釜嫻忚鍣紝浠ユ鏉ラ樆姝㈢敤鎴風(fēng)偣鍑誨悗閫鎸夐挳銆傝繕鏈変竴浜涗嬌鐢↗avaScript錛屼絾鍦ㄦ煇浜涘鎴風(fēng)嫻忚鍣ㄤ腑榪欏嵈涓嶄竴瀹氳搗浣滅敤銆傝繖浜涜В鍐蟲柟妗堝ぇ澶氭暟瀹炵幇閮藉緢絎ㄦ嫏錛屼笖涓嶈兘淇濊瘉鍦ㄤ換浣曟儏鍐典笅閮?00%鏈夋晥錛屽悓鏃訛紝瀹冭繕瑕佹眰鐢ㄦ埛鏈変竴瀹氱殑鎿嶄綔緇忛獙銆?br>
榪欑瘒鏂囩珷浠ョ畝鍗曠殑紼嬪簭紺轟緥闃愯堪浜嗘紜В鍐崇敤鎴烽鍑洪棶棰樼殑鏂規(guī)銆備綔鑰匥evin Le棣栧厛鎻忚堪浜嗕竴涓悊鎯崇殑瀵嗙爜淇濇姢Web搴旂敤錛岀劧鍚庝互紺轟緥紼嬪簭瑙i噴闂濡備綍浜х敓騫惰璁鴻В鍐抽棶棰樼殑鏂規(guī)銆傛枃绔犺櫧鐒舵槸閽堝JSP榪涜璁ㄨ闃愯堪錛屼絾浣滆呮墍闃愯堪鐨勬蹇靛緢瀹規(guī)槗鐞嗚В鑰屼笖鑳藉涓哄叾浠朩eb鎶鏈墍閲囩敤銆傛渶鍚庢渶鍚庯紝浣滆匥evin Le鐢↗akarta Struts鏇翠負(fù)浼橀泤鍦拌В鍐崇敤鎴烽鍑洪棶棰樸傛枃涓寘鍚獼SP鍜孲truts鐨勭ず渚嬬▼搴?(3,700 words; September 27, 2004)




澶ч儴鍒哤eb搴旂敤涓嶄細(xì)鍖呭惈鍍忛摱琛岃處鎴鋒垨淇$敤鍗¤祫鏂欓偅鏍鋒満瀵嗙殑淇℃伅錛屼絾鏄竴鏃︽秹鍙?qiáng)鍒版晱鎰熸暟鎹Q屽氨闇瑕佹垜浠彁渚涙煇浜涘瘑鐮佷繚鎶ゆ満鍒躲備緥濡傦紝鍦ㄤ竴涓伐鍘傚綋涓紝宸ヤ漢蹇呴』閫氳繃Web搴旂敤紼嬪簭璁塊棶浠栦滑鐨勬椂闂村畨鎺掋佽繘鍏ヤ粬浠殑鍩硅璇劇▼浠ュ強(qiáng)鏌ョ湅浠栦滑鐨勮柂閲戠瓑絳夈傛鏃跺簲鐢⊿SL(Secure Socket Layer)灝辨湁浜涘ぇ鏉愬皬鐢ㄤ簡(SSL欏甸潰涓嶄細(xì)鍦ㄧ紦瀛樹腑淇濆瓨錛屽叧浜嶴SL鐨勮璁哄凡緇忚秴鍑烘湰鏂囩殑鑼冨洿)銆備絾鏄繖浜涘簲鐢ㄥ張紜疄闇瑕佹煇縐嶅瘑鐮佷繚鎶ゆ帾鏂斤紝鍚﹀垯錛屽伐浜猴紙鍦ㄨ繖縐嶆儏鍐典笅錛屼篃灝辨槸Web搴旂敤鐨勪嬌鐢ㄨ咃級灝卞彲浠ュ彂鐜板伐鍘備腑鎵鏈夊憳宸ョ殑縐佷漢鏈哄瘑淇℃伅銆?br>
綾諱技涓婇潰鐨勬儏鍐佃繕鍖呮嫭浣嶄簬鍏叡鍥句功棣嗐佸尰闄€?font color=#000000>緗戝惂
絳夊叕鍏卞満鎵鐨勮綆楁満銆傚湪榪欎簺鍦版柟錛岃澶氱敤鎴峰叡鍚屼嬌鐢ㄥ嚑鍙拌綆楁満錛屾鏃朵繚鎶ょ敤鎴風(fēng)殑涓漢鏁版嵁灝辨樉寰楄嚦鍏抽噸瑕併?/font> 鍚屾椂搴旂敤紼嬪簭鐨勮壇濂借璁′笌瀹炵幇瀵圭敤鎴蜂笓涓氱煡璇嗕互鍙?qiáng)鐩稿厸_煿璁姹傚皯涔嬪張灝戙?

璁╂垜浠潵鐪嬩竴涓嬬幇瀹炰笘鐣屼腑涓涓畬緹庣殑Web搴旂敤鏄庢牱宸ヤ綔鐨勶細(xì)
1. 鐢ㄦ埛鍦ㄦ祻瑙堝櫒涓緭鍏RL錛岃闂竴涓〉闈€?br>2. Web搴旂敤鏄劇ず涓涓櫥闄嗛〉闈紝瑕佹眰鐢ㄦ埛杈撳叆鏈夋晥鐨勯獙璇佷俊鎭?br>3. 鐢ㄦ埛杈撳叆鐢ㄦ埛鍚嶅拰瀵嗙爜銆?br>4. 鍋囪鐢ㄦ埛鎻愪緵鐨勯獙璇佷俊鎭槸姝g‘鐨勶紝緇忚繃浜嗛獙璇佽繃紼嬶紝W(xué)eb搴旂敤鍏佽鐢ㄦ埛嫻忚浠栨湁鏉冭闂殑鍖哄煙銆?br>5. 閫鍑烘椂錛岀敤鎴風(fēng)偣鍑婚〉闈㈢殑閫鍑烘寜閽紝W(xué)eb搴旂敤鏄劇ず紜欏甸潰錛岃闂敤鎴鋒槸鍚︾湡鐨勯渶瑕侀鍑恒備竴鏃︾敤鎴風(fēng)偣鍑葷‘瀹氭寜閽紝Session緇撴潫錛學(xué)eb搴旂敤閲嶆柊瀹氫綅鍒扮櫥闄嗛〉闈€傜敤鎴風(fēng)幇鍦ㄥ彲浠ユ斁蹇冪殑紱誨紑鑰屼笉鐢ㄦ媴蹇冧粬鐨勪俊鎭細(xì)琚硠闇層?br>6. 鍙︿竴涓敤鎴峰潗鍒頒簡鍚屼竴鍙扮數(shù)鑴戝墠銆備粬鐐瑰嚮鍚庨鎸夐挳錛學(xué)eb搴旂敤涓嶅簲璇ユ樉紺轟笂涓涓敤鎴瘋闂繃鐨勪換浣曚竴涓〉闈€?br>浜嬪疄涓婏紝W(xué)eb搴旂敤灝嗕竴鐩村仠鐣欏湪鐧婚檰欏甸潰涓婏紝闄ら潪絎簩涓敤鎴鋒彁渚涙紜殑楠岃瘉淇℃伅錛屼箣鍚庢墠鍙互璁塊棶浠栨湁鏉冮檺鐨勫尯鍩熴?br>
閫氳繃紺轟緥紼嬪簭錛屾枃绔犲悜鎮(zhèn)ㄩ槓榪頒簡濡備綍鍦ㄤ竴涓猈eb搴旂敤涓疄鐜頒笂闈㈢殑鍔熻兘銆?br>



涓. JSP samples

涓轟簡鏇翠負(fù)鏈夋晥鍦板悜鎮(zhèn)ㄨ鏄庤繖涓В鍐蟲柟妗堬紝鏈枃灝嗕粠灞曠ず涓涓猈eb搴旂敤logoutSampleJSP1涓鍒扮殑闂寮濮嬨傝繖涓ず渚嬩唬琛ㄤ簡璁稿娌℃湁姝g‘瑙e喅閫鍑鴻繃紼嬬殑Web搴旂敤銆俵ogoutSampleJSP1鍖呭惈涓涓婮SP欏甸潰錛歭ogin.jsp,  home.jsp,  secure1.jsp,  secure2.jsp,  logout.jsp,  loginAction.jsp, 鍜?logoutAction.jsp銆傚叾涓〉闈ome.jsp,  secure1.jsp,  secure2.jsp, 鍜?logout.jsp鏄笉鍏佽鏈粡璁よ瘉鐨勭敤鎴瘋闂殑錛屼篃灝辨槸璇達(dá)紝榪欎簺欏甸潰鍖呭惈浜嗛噸瑕佷俊鎭紝鍦ㄧ敤鎴風(fēng)櫥闄嗕箣鍓嶆垨鑰呴鍑轟箣鍚庨兘涓嶅簲璇ユ樉紺哄湪嫻忚鍣ㄤ腑銆俵ogin.jsp欏甸潰鍖呭惈浜嗙敤浜庣敤鎴瘋緭鍏ョ敤鎴峰悕鍜屽瘑鐮佺殑form銆俵ogout.jsp欏甸潰鍖呭惈浜嗚姹傜敤鎴風(fēng)‘璁ゆ槸鍚﹂鍑虹殑form銆俵oginAction.jsp鍜宭ogoutAction.jsp浣滀負(fù)鎺у埗鍣ㄥ垎鍒寘鍚簡鐧婚檰鍜岄鍑哄姩浣滅殑浠g爜銆?br>
絎簩涓猈eb紺轟緥搴旂敤logoutSampleJSP2灞曠ず浜嗗浣曠籂姝gず渚媗ogoutSampleJSP1涓殑闂銆備絾鏄浜屼釜紺轟緥logoutSampleJSP2鑷韓涔熸槸鏈夐棶棰樼殑銆傚湪鐗瑰畾鎯呭喌涓嬶紝閫鍑洪棶棰樹緷鐒跺瓨鍦ㄣ?br>
絎笁涓猈eb紺轟緥搴旂敤logoutSampleJSP3瀵筶ogoutSampleJSP2榪涜浜嗘敼榪涳紝姣旇緝濡ュ杽鍦拌В鍐充簡閫鍑洪棶棰樸?br>
鏈鍚庝竴涓猈eb紺轟緥logoutSampleStruts灞曠ず浜?font size=3>Jakarta
Struts濡備綍浼橀泤鍦拌В鍐抽鍑洪棶棰樸?br>
娉ㄦ剰錛氭湰鏂囨墍闄勭ず渚嬪湪鏈鏂扮増鏈殑Microsoft Internet Explorer (IE), Netscape Navigator, Mozilla, FireFox鍜孉vant嫻忚鍣ㄤ笂嫻嬭瘯閫氳繃銆?br>


浜? Login action

Brian Pontarelli鐨勭粡鍏告枃绔?銆奐2EE Security: Container Versus Custom銆?璁ㄨ浜嗕笉鍚岀殑J2EE璁よ瘉鏂規(guī)硶銆傛枃绔犲悓鏃舵寚鍑猴紝HTTP鍗忚鍜屽熀浜巉orm鐨勮璇佹柟娉曞茍涓嶈兘鎻愪緵澶勭悊鐢ㄦ埛閫鍑洪棶棰樼殑鏈哄埗銆傚洜姝わ紝瑙e喅鏂規(guī)硶渚挎槸寮曞叆鐢ㄦ埛鑷畾涔夌殑瀹夊叏瀹炵幇鏈哄埗錛岃繖灝辨彁渚涗簡鏇村ぇ鐨勭伒媧繪с?br>
鍦ㄧ敤鎴瘋嚜瀹氫箟鐨勮璇佹柟娉曚腑錛屾櫘閬嶉噰鐢ㄧ殑鏂規(guī)硶鏄粠鐢ㄦ埛鎻愪氦鐨刦orm涓幏寰楃敤鎴瘋緭鍏ョ殑璁よ瘉淇℃伅錛岀劧鍚庡埌璇稿LDAP (lightweight directory access protocol)鎴栧叧緋繪暟鎹簱(relational database management system, RDBMS)鐨勫畨鍏ㄥ煙涓繘琛岃璇併傚鏋滅敤鎴鋒彁渚涚殑璁よ瘉淇℃伅鏄湁鏁堢殑錛岀櫥闄嗗姩浣滃湪HttpSession瀵硅薄涓繚瀛樻煇涓璞°侶ttpSession瀛樺湪鐫淇濆瓨鐨勫璞″垯琛ㄧず鐢ㄦ埛宸茬粡鐧婚檰鍒癢eb搴旂敤褰撲腑銆備負(fù)浜嗘柟渚胯搗瑙侊紝鏈枃鎵闄勭殑紺轟緥鍙湪HttpSession涓繚瀛樹竴涓敤鎴峰悕浠ヨ〃鏄庣敤鎴峰凡緇忕櫥闄嗐傛竻鍗?鏄粠loginAction.jsp欏甸潰涓妭閫夌殑涓孌典唬鐮佷互姝よ瑙g櫥闄嗗姩浣滐細(xì)




Listing 1
//...

//initialize RequestDispatcher object; set forward to home page by default
RequestDispatcher rd = request.getRequestDispatcher(
"home.jsp" );

//Prepare connection and statement

rs = stmt.executeQuery(
"select password from USER where userName = '" + userName + "'" );
if (rs.next()) {
//Query only returns 1 record in the result set;
//Only 1
password per userName which is also the primary key
    if (rs.getString(
"password" ).equals(password)) { //If valid password

        session.setAttribute(
"User" , userName); //Saves username string in the session object
    }
    else {
//Password does not match, i.e., invalid user password
        request.setAttribute(
"Error" , "Invalid password." );

        rd = request.getRequestDispatcher(
"login.jsp"
);
    }
}
//No record in the result set, i.e., invalid username

    else {

        request.setAttribute(
"Error" , "Invalid user name." );
        rd = request.getRequestDispatcher(
"login.jsp"
);
    }
}

//As a controller, loginAction.jsp finally either forwards to "login.jsp" or "home.jsp"

rd.forward(request, response);
//...
				



鏈枃褰撲腑鎵闄刉eb搴旂敤紺轟緥鍧囦互鍏崇郴鍨嬫暟鎹簱浣滀負(fù)瀹夊叏鍩燂紝浣嗘湰闂墍璁茶堪鐨勫唴瀹瑰悓鏍烽傜敤浜庡叾浠栦換浣曠被鍨嬬殑瀹夊叏鍩熴?br>


涓? Logout action

閫鍑哄姩浣滃寘鍚垹闄ょ敤鎴峰悕浠ュ強(qiáng)璋冪敤鐢ㄦ埛鐨凥ttpSession瀵硅薄鐨刬nvalidate()鏂規(guī)硶銆傛竻鍗?鏄粠loginoutAction.jsp涓妭閫夌殑涓孌典唬鐮侊紝浠ユ璇存槑閫鍑哄姩浣滐細(xì)



Listing 2
//...

session.removeAttribute(
"User" );
session.invalidate();
//...

						



鍥? 闃繪鏈粡璁よ瘉璁塊棶鍙椾繚鎶ょ殑JSP欏甸潰

浠庢彁浜ょ殑form涓幏鍙栫敤鎴鋒彁浜ょ殑璁よ瘉淇℃伅騫剁粡榪囬獙璇佸悗錛岀櫥闄嗗姩浣滀粎浠呭湪HttpSession瀵硅薄涓啓鍏ヤ竴涓敤鎴峰悕銆傞鍑哄姩浣滃垯鍒氬ソ鐩稿弽錛屽畠浠嶩ttpSession涓垹闄ょ敤鎴峰悕騫惰皟鐢℉ttpSession瀵硅薄鐨刬nvalidate()鏂規(guī)硶銆備負(fù)浜嗕嬌鐧婚檰鍜岄鍑哄姩浣滅湡姝e彂鎸ヤ綔鐢紝鎵鏈夊彈淇濇姢鐨凧SP欏甸潰蹇呴』棣栧厛楠岃瘉HttpSession涓寘鍚殑鐢ㄦ埛鍚嶏紝浠ヤ究紜鐢ㄦ埛褰撳墠鏄惁宸茬粡鐧婚檰銆傚鏋淗ttpSession涓寘鍚簡鐢ㄦ埛鍚嶏紝灝辮鏄庣敤鎴峰凡緇忕櫥闄嗭紝W(xué)eb搴旂敤浼?xì)灏嗗墿浣欑殑JSP欏典腑鐨勫姩鎬佸唴瀹瑰彂閫佺粰嫻忚鍣ㄣ傚惁鍒欙紝JSP欏靛皢璺寵漿鍒扮櫥闄嗛〉闈紝login.jsp銆傞〉闈ome.jsp,  secure1.jsp,  secure2.jsp鍜?logout.jsp鍧囧寘鍚竻鍗?涓殑浠g爜孌碉細(xì)


Listing 3
//...
String userName = (String) session.getAttribute(
"User" );
if (null == userName) {
    request.setAttribute(
"Error" , "Session has ended. Please login."
);
    RequestDispatcher rd = request.getRequestDispatcher(
"login.jsp"
);
    rd.forward(request, response);
}
//...

//Allow the rest of the dynamic content in this JSP to be served to the browser
//...
						



鍦ㄨ繖涓唬鐮佹涓紝紼嬪簭浠嶩ttpSession涓?font color=#000000>媯绱?/font>username瀛楃涓層傚鏋渦sername瀛楃涓蹭負(fù)絀猴紝W(xué)eb搴旂敤鍒欒嚜鍔ㄤ腑姝㈡墽琛屽綋鍓嶉〉闈㈠茍璺寵漿鍒扮櫥闄嗛〉錛屽悓鏃剁粰鍑洪敊璇俊鎭?#8220;Session has ended. Please log in.”錛涘鏋滀笉涓虹┖錛學(xué)eb搴旂敤緇х畫鎵ц錛屾妸鍓╀綑鐨勯〉闈㈡彁渚涚粰鐢ㄦ埛錛屼粠鑰屼嬌JSP欏甸潰鐨勫姩鎬佸唴瀹規(guī)垚涓烘湇鍔″璞°?br>


浜?榪愯logoutSampleJSP1

榪愯logoutSampleJSP1灝嗕細(xì)鍑虹幇濡備笅鍑犵鎯呭艦錛?br>
• 濡傛灉鐢ㄦ埛娌℃湁鐧婚檰錛學(xué)eb搴旂敤灝嗕細(xì)姝g‘涓鍙椾繚鎶ら〉闈ome.jsp,  secure1.jsp,  secure2.jsp鍜宭ogout.jsp涓姩鎬佸唴瀹圭殑鎵ц銆備篃灝辨槸璇達(dá)紝鍋囧鐢ㄦ埛騫舵病鏈夌櫥闄嗭紝浣嗘槸鍦ㄦ祻瑙堝櫒鍦板潃鏍忎腑鐩存帴鏁插叆鍙椾繚鎶SP欏電殑鍦板潃璇曞浘璁塊棶錛學(xué)eb搴旂敤灝嗚嚜鍔ㄨ煩杞埌鐧婚檰欏甸潰錛屽悓鏃舵樉紺洪敊璇俊鎭?#8220;Session has ended.Please log in.”

• 鍚屾牱鐨勶紝褰撲竴涓敤鎴峰凡緇忛鍑猴紝W(xué)eb搴旂敤灝嗕細(xì)姝g‘涓鍙椾繚鎶ら〉闈ome.jsp,  secure1.jsp,  secure2.jsp鍜宭ogout.jsp涓姩鎬佸唴瀹圭殑鎵ц銆備篃灝辨槸璇達(dá)紝鐢ㄦ埛閫鍑轟互鍚庯紝濡傛灉鍦ㄦ祻瑙堝櫒鍦板潃鏍忎腑鐩存帴鏁插叆鍙椾繚鎶SP欏電殑鍦板潃璇曞浘璁塊棶錛學(xué)eb搴旂敤灝嗚嚜鍔ㄨ煩杞埌鐧婚檰欏甸潰錛屽悓鏃舵樉紺洪敊璇俊鎭?#8220;Session has ended.Please log in.”

• 鐢ㄦ埛閫鍑轟互鍚庯紝濡傛灉鐐瑰嚮嫻忚鍣ㄤ笂鐨勫悗閫鎸夐挳榪斿洖鍒板厛鍓嶇殑欏甸潰錛學(xué)eb搴旂敤灝嗕笉鑳芥紜繚鎶ゅ彈淇濇姢鐨凧SP欏甸潰鈥斺斿湪Session閿姣佸悗錛堢敤鎴烽鍑猴級鍙椾繚鎶ょ殑JSP欏典細(xì)閲嶆柊鏄劇ず鍦ㄦ祻瑙堝櫒涓傜劧鑰岋紝鐐瑰嚮璇ラ〉闈笂鐨勪換浣曢摼鎺ワ紝W(xué)eb搴旂敤閮戒細(xì)璺寵漿鍒扮櫥闄嗛〉闈紝鍚屾椂鏄劇ず閿欒淇℃伅“Session has ended.Please log in.”



鍏? 闃繪嫻忚鍣ㄧ紦瀛?/font>
 
涓婅堪闂鐨勬牴婧愬氨鍦ㄤ簬鐜頒唬澶ч儴鍒嗘祻瑙堝櫒閮芥湁涓涓悗閫鎸夐挳銆傚綋鐐瑰嚮鍚庨鎸夐挳鏃訛紝榛樿鎯呭喌涓嬫祻瑙堝櫒涓嶄細(xì)浠嶹eb鏈嶅姟鍣ㄤ笂閲嶆柊鑾峰彇欏甸潰錛岃屾槸綆鍗曠殑浠庢祻瑙堝櫒緙撳瓨涓噸鏂拌澆鍏ラ〉闈€傝繖涓棶棰樺茍涓嶄粎闄愪簬鍩轟簬Java(JSP/servlets/Struts) 鐨刉eb搴旂敤褰撲腑錛屽湪鍩轟簬PHP (Hypertext Preprocessor)銆丄SP銆?Active Server Pages)銆佸拰.NET鐨刉eb搴旂敤涓篃鍚屾牱瀛樺湪銆?br>
鍦ㄧ敤鎴風(fēng)偣鍑誨悗閫鎸夐挳涔嬪悗錛屾祻瑙堝櫒鍒癢eb鏈嶅姟鍣紙涓鑸潵璇達(dá)級鎴栬呭簲鐢ㄦ湇鍔″櫒錛堝湪java鐨勬儏鍐典笅錛夊啀浠庢湇鍔″櫒鍒版祻瑙堝櫒榪欐牱閫氬父鎰忎箟涓婄殑HTTP鍥炶礬騫舵病鏈夊緩绔嬨備粎浠呭彧鏄敤鎴鳳紝嫻忚鍣ㄥ拰緙撳瓨涔嬮棿榪涜浜嗕氦浜掋傛墍浠ュ嵆浣垮彈淇濇姢鐨凧SP欏甸潰錛屼緥濡俬ome.jsp,  secure1.jsp,  secure2.jsp鍜宭ogout.jsp鍖呭惈浜嗘竻鍗?涓婄殑浠g爜錛屽綋鐐瑰嚮鍚庨鎸夐挳鏃訛紝榪欎簺浠g爜涔熸案榪滀笉浼?xì)鎵ц鐨勩?br>
緙撳瓨鐨勫ソ鍧忥紝鐪熸槸浠佽呰浠佹櫤鑰呰鏅恒傜紦瀛樹簨瀹炰笂鐨勭‘鎻愪緵浜嗕竴浜涗究鍒╋紝浣嗚繖浜涗究鍒╅氬父鍙瓨鍦ㄤ簬闈欐佺殑HTML欏甸潰鎴栧熀浜庡浘褰㈡垨褰卞儚鐨勯〉闈€傝屽彟涓鏂歸潰錛學(xué)eb搴旂敤閫氬父鏄潰鍚戞暟鎹殑銆傜敱浜嶹eb搴旂敤涓殑鏁版嵁棰戠箒鍙樻洿錛屾墍浠ヤ笌涓轟簡鑺傜渷鏃墮棿浠庣紦瀛樹腑璇誨彇騫舵樉紺鴻繃鏈熺殑鏁版嵁鐩告瘮錛屾彁渚涙渶鏂扮殑鏁版嵁鏄懼緱灝や負(fù)閲嶈錛?br>
騫歌繍鐨勬槸錛孒TTP澶翠俊鎭?#8220;Expires”鍜?#8220;Cache-Control”涓哄簲鐢ㄧ▼搴忔湇鍔″櫒鎻愪緵浜嗕竴涓帶鍒舵祻瑙堝櫒鍜屼唬鐞嗘湇鍔″櫒涓婄紦瀛樼殑鏈哄埗銆侶TTP澶翠俊鎭疎xpires鍛婅瘔浠g悊鏈嶅姟鍣ㄥ畠鐨勭紦瀛橀〉闈綍鏃跺皢榪囨湡銆侶TTP1.1瑙勮寖涓柊瀹氫箟鐨勫ご淇℃伅Cache-Control鍦╓eb搴旂敤褰撲腑鍙互閫氱煡嫻忚鍣ㄤ笉緙撳瓨浠諱綍欏甸潰銆傚綋鐐瑰嚮鍚庨鎸夐挳鏃訛紝嫻忚鍣ㄥ彂閫丠ttp璇鋒眰閬撳簲鐢ㄦ湇鍔″櫒浠ヤ究鑾峰彇璇ラ〉闈㈢殑鏈鏂版嫹璐濄傚涓嬫槸浣跨敤Cache-Control鐨勫熀鏈柟娉曪細(xì)

• no-cache:寮哄埗緙撳瓨浠庢湇鍔″櫒涓婅幏鍙栬欏甸潰鐨勬渶鏂版嫹璐?br>• no-store: 鍦ㄤ換浣曟儏鍐典笅緙撳瓨涓嶄繚瀛樿欏甸潰

HTTP1.0瑙勮寖涓殑Pragma:no-cache絳夊悓浜嶩TTP1.1瑙勮寖涓殑Cache-Control:no-cache錛屽悓鏍峰彲浠ュ寘鍚湪澶翠俊鎭腑銆?

閫氳繃浣跨敤HTTP澶翠俊鎭殑cache鎺у埗錛岀浜屼釜紺轟緥搴旂敤logoutSampleJSP2瑙e喅浜唋ogoutSampleJSP1鐨勯棶棰樸俵ogoutSampleJSP2涓巐ogoutSampleJSP1涓嶅悓琛ㄧ幇鍦ㄥ涓嬩唬鐮佹涓紝榪欎竴浠g爜孌靛姞鍏ヨ繘鎵鏈夊彈淇濇姢鐨勯〉闈腑錛?br>



//...
response.setHeader(
"Cache-Control" , "no-cache" ); //Forces caches to obtain a new copy of the page from the origin server
response.setHeader(
"Cache-Control" , "no-store" ); //Directs caches not to store the page under any circumstance
response.setDateHeader(
"Expires" , 0); //Causes the proxy cache to see the page as "stale"
response.setHeader(
"Pragma" , "no-cache" ); //HTTP 1.0 backward compatibility
String userName = (String) session.getAttribute(
"User" );
if (null == userName) {
    request.setAttribute(
"Error" , "Session has ended. Please login."
);
    RequestDispatcher rd = request.getRequestDispatcher(
"login.jsp"
);
    rd.forward(request, response);
}
//...

						



閫氳繃璁劇疆澶翠俊鎭拰媯鏌ttpSession瀵硅薄涓殑鐢ㄦ埛鍚嶆潵紜繚嫻忚鍣ㄤ笉浼?xì)缂撳瓨JSP欏甸潰銆傚悓鏃訛紝濡傛灉鐢ㄦ埛鏈櫥闄嗭紝JSP欏甸潰鐨勫姩鎬佸唴瀹逛笉浼?xì)鍙戦佸埌嫻忚鍣紝鍙栬屼唬涔嬬殑灝嗘槸鐧婚檰欏甸潰login.jsp銆?br>


涓? 榪愯logoutSampleJSP2

榪愯W(xué)eb紺轟緥搴旂敤logoutSampleJSP2鍚庡皢浼?xì)鐪嬪埌濡備笅缁撴灉锛?xì)

• 褰撶敤鎴烽鍑哄悗璇曞浘鐐瑰嚮鍚庨鎸夐挳錛屾祻瑙堝櫒涓嶄細(xì)閲嶆柊鏄劇ず鍙椾繚鎶ょ殑欏甸潰錛屽畠鍙細(xì)鏄劇ず鐧婚檰欏祃ogin.jsp鍚屾椂緇欏嚭鎻愮ず淇℃伅Session has ended. Please log in.

• 鐒惰岋紝褰撴寜浜嗗悗閫鎸夐挳榪斿洖鐨勯〉鏄鐞嗙敤鎴鋒彁浜ゆ暟鎹殑欏甸潰鏃訛紝IE鍜孉vant嫻忚鍣ㄥ皢寮瑰嚭濡備笅淇℃伅鎻愮ず錛?br>
           璀﹀憡錛氶〉闈㈠凡榪囨湡
           The page you requested was created using information you submitted in a form. This page is no longer available. As a security precaution, Internet Explorer does not automatically  resubmit your information for you.

Mozilla鍜孎ireFox嫻忚鍣ㄥ皢浼?xì)鏄窘C轟竴涓璇濇錛屾彁紺轟俊鎭涓嬶細(xì)

            The page you are trying to view contains POSTDATA that has expired from cache. If you  resend the data, any action from the form carried out (such as a search or online purchase) will be repeated. To resend the data, click OK. Otherwise, click Cancel.

鍦↖E鍜孉vant嫻忚鍣ㄤ腑閫夋嫨鍒鋒柊鎴栬呭湪Mozilla鍜孎ireFox嫻忚鍣ㄤ腑閫夋嫨閲嶆柊鍙戦佹暟鎹悗錛屽墠涓涓狫SP欏甸潰灝嗛噸鏂版樉紺哄湪嫻忚鍣ㄤ腑銆傛樉鐒剁殑錛岃繖鐥呬笉鏄垜浠墍鎯崇湅鍒扮殑鍥犱負(fù)瀹冭繚鑳屼簡logout鍔ㄤ綔鐨勭洰鐨勩傚彂鐢熻繖涓鐜拌薄鏃訛紝寰堝彲鑳芥槸涓涓伓鎰忕敤鎴峰湪灝濊瘯鑾峰彇鍏朵粬鐢ㄦ埛鐨勬暟鎹傜劧鑰岋紝榪欎釜闂浠呬粎鍑虹幇鍦ㄧ偣鍑誨悗閫鎸夐挳鍚庯紝嫻忚鍣ㄨ繑鍥炲埌涓涓鐞哖OST璇鋒眰鐨勯〉闈€?br>


鍏? 璁板綍鏈鍚庣櫥闄嗘椂闂?

涓婅堪闂鐨勫彂鐢熸槸鍥犱負(fù)嫻忚鍣ㄩ噸鏂版彁浜や簡鍏剁紦瀛樹腑鐨勬暟鎹傝繖鏈枃鐨勪緥瀛愪腑錛屾暟鎹寘鍚簡鐢ㄦ埛鍚嶅拰瀵嗙爜銆傚敖綆E嫻忚鍣ㄧ粰鍑轟簡瀹夊叏璀﹀憡淇℃伅錛屼絾浜嬪疄涓婃祻瑙堝櫒姝ゆ椂璧峰埌浜嗚礋闈綔鐢ㄣ?br>
涓轟簡瑙e喅logoutSampleJSP2涓嚭鐜扮殑闂錛宭ogoutSampleJSP3鐨刲ogin.jsp闄や簡鍖呭惈username鍜宲assword鐨勪箣澶栵紝榪樺鍔犱簡涓涓О浣渓astLogon鐨勯殣钘忚〃鍗曞煙錛屾琛ㄥ崟鍩熷皢浼?xì)鍔ㄦ佺殑琚垵濮嬪寲涓轟竴涓猯ong鍨嬪箋傝繖涓猯ong鍨嬪兼槸閫氳繃璋冪敤System.currentTimeMillis()鑾峰彇鍒扮殑鑷?970騫?鏈?鏃ヤ互鏉ョ殑姣鏁般傚綋login.jsp涓殑form鎻愪氦鏃訛紝loginAction.jsp棣栧厛灝嗛殣钘忓煙涓殑鍊間笌鐢ㄦ埛鏁版嵁搴撲腑鐨刲astLogon鍊艱繘琛屾瘮杈冦傚彧鏈夊綋lastLogon琛ㄥ崟鍩熶腑鐨勫煎ぇ浜庢暟鎹簱涓殑鍊兼椂Web搴旂敤鎵嶈涓鴻繖鏄釜鏈夋晥鐨勭櫥闄嗐?br>
涓轟簡楠岃瘉鐧婚檰錛屾暟鎹簱涓璴astLogon瀛楁蹇呴』鐢ㄨ〃鍗曚腑鐨刲astLogon鍊艱繘琛屾洿鏂般備笂渚嬩腑錛屽綋嫻忚鍣ㄩ噸澶嶆彁浜ょ紦瀛樹腑鐨勬暟鎹椂錛岃〃鍗曚腑鐨刲astLogon鍊間笉姣旀暟鎹簱涓殑lastLogon鍊煎ぇ錛屽洜姝わ紝loginAction灝嗚煩杞埌l(fā)ogin.jsp欏甸潰錛屽茍鏄劇ず濡備笅閿欒淇℃伅“Session has ended.Please log in.”娓呭崟5鏄痩oginAction涓妭閫夌殑浠g爜孌碉細(xì)




娓呭崟5
//...
RequestDispatcher rd = request.getRequestDispatcher(
"home.jsp" ); //Forward to homepage by default
//...
if (rs.getString(
"password" ).equals(password)) { //If valid password
    long lastLogonDB = rs.getLong(
"lastLogon" );
    if (lastLogonForm > lastLogonDB) {
        session.setAttribute(
"User" , userName); //Saves username string in the session object

        stmt.executeUpdate(
"update USER set lastLogon= " + lastLogonForm + " where userName = '" + userName + "'" );
    }
    else {
        request.setAttribute(
"Error" , "Session has ended. Please login."
);
        rd = request.getRequestDispatcher(
"login.jsp"
); }
    }
else {
//Password does not match, i.e., invalid user password

    request.setAttribute(
"Error" , "Invalid password." );
    rd = request.getRequestDispatcher(
"login.jsp"
);
}
//...

rd.forward(request, response);
//...
						



涓轟簡瀹炵幇涓婅堪鏂規(guī)硶錛屼綘蹇呴』璁板綍姣忎釜鐢ㄦ埛鐨勬渶鍚庣櫥闄嗘椂闂淬傚浜庨噰鐢ㄥ叧緋誨瀷鏁版嵁搴撳畨鍏ㄥ煙鏉ヨ錛岃繖鐐瑰彲浠ュ彲浠ラ氳繃鍦ㄦ煇涓〃涓姞涓妉astLogin瀛楁杞繪澗瀹炵幇銆傝櫧鐒跺LDAP浠ュ強(qiáng)鍏朵粬鐨勫畨鍏ㄥ煙鏉ヨ闇瑕佺◢寰姩涓嬭剳絳嬶紝浣嗘渶鍚庣櫥闄嗘柟娉曞緢鏄劇劧鏄彲浠ュ疄鐜扮殑銆?br>
琛ㄧず鏈鍚庣櫥闄嗘椂闂寸殑鏂規(guī)硶鏈夊緢澶氥傜ず渚媗ogoutSampleJSP3鍒╃敤浜嗚嚜1970騫?鏈?鏃ヤ互鏉ョ殑姣鏁般傝繖涓柟娉曞嵆浣垮湪璁稿浜哄湪涓嶅悓嫻忚鍣ㄤ腑鐢ㄤ竴涓敤鎴瘋處鍙風(fēng)櫥闄嗘椂涔熸槸鍙鐨勩?br>


涔? 榪愯logoutSampleJSP3

榪愯紺轟緥logoutSampleJSP3灝嗗睍紺哄浣曟紜鐞嗛鍑洪棶棰樸備竴鏃︾敤鎴烽鍑猴紝鐐瑰嚮嫻忚鍣ㄤ笂鐨勫悗閫鎸夐挳鍦ㄤ換浣曟儏鍐典笅閮戒笉浼?xì)鍦▼箯瑙堝櫒涓槃·哄彈淇濇姢鐨凧SP欏甸潰銆傝繖涓ず渚嬪睍紺轟簡濡備綍姝g‘澶勭悊閫鍑洪棶棰樿屼笉闇瑕佸鐢ㄦ埛榪涜棰濆鐨勫煿璁?br>
涓轟簡浣夸唬鐮佹洿綆緇冩湁鏁堬紝涓浜涘啑浣欑殑浠g爜鍙互鍓旈櫎銆備竴縐嶉斿緞灝辨槸鎶婃竻鍗?涓殑浠g爜鍐欏埌涓涓崟鐙殑JSP欏典腑錛屽叾浠朖SP欏甸潰鍙互閫氳繃鏍囩
<jsp:include>榪涜浣跨敤 銆?br>


鍗? Struts妗嗘灦涓嬬殑閫鍑哄疄鐜?/font>

涓庣洿鎺ヤ嬌鐢↗SP鎴朖SP/servlets榪涜W(xué)eb搴旂敤寮鍙戠浉姣旓紝鍙︿竴涓洿濂界殑鍙夋柟妗堟槸浣跨敤Struts銆傚浜庝竴涓熀浜嶴truts鐨刉eb搴旂敤鏉ヨ錛屾坊鍔犱竴涓鐞嗛鍑洪棶棰樼殑妗嗘灦鍙互浼橀泤鍦頒笉璐規(guī)皵鍔涚殑瀹炵幇銆傝繖褰掑姛浜嶴truts鏄噰鐢∕VC璁捐妯″紡鐨勶紝鍥犳鍙互灝嗘ā鍨嬪拰瑙嗗浘浠g爜娓呮櫚鐨勫垎紱匯傚彟澶栵紝Java鏄竴涓潰鍚戝璞$殑璇█錛屾敮鎸佺戶鎵匡紝鍙互姣擩SP涓殑鑴氭湰鏇翠負(fù)瀹規(guī)槗鍦板疄鐜頒唬鐮侀噸鐢ㄣ傚浜嶴truts鏉ヨ錛屾竻鍗?涓殑浠g爜鍙互浠嶫SP欏甸潰涓Щ妞嶅埌Action綾葷殑execute()鏂規(guī)硶涓?br>
姝ゅ錛屾垜浠繕鍙互瀹氫箟涓涓戶鎵縎truts Action綾葷殑Action鍩虹被錛屽叾execute()鏂規(guī)硶涓寘鍚簡綾諱技娓呭崟4涓殑浠g爜銆傞氳繃緇ф壙錛屽叾浠朅ction綾誨彲浠ョ戶鎵垮熀鏈被涓殑閫氱敤閫昏緫鏉ヨ緗瓾TTP澶翠俊鎭互鍙?qiáng)妫绱ttpSession瀵硅薄涓殑username瀛楃涓層傝繖涓狝ction鍩虹被鏄竴涓娊璞$被騫跺畾涔変簡涓涓娊璞℃柟娉昬xecuteAction()銆傛墍鏈夌戶鎵胯嚜Action鍩虹被鐨勫瓙綾婚兘蹇呴』瀹炵幇exectuteAction()鏂規(guī)硶鑰屼笉鏄鐩栧畠銆傞氳繃緇ф壙榪欎竴鏈哄埗錛屾墍鏈夌戶鎵胯嚜Action鍩虹被鐨勫瓙綾婚兘涓嶅繀鍐嶆媴蹇冮鍑轟唬鐮佹帴鍙c傦紙plumbing瀹炲湪涓嶇煡閬撴庝箞緲昏瘧浜嗭紝^+^錛岄珮鎵嬪府甯繖鍟婏紒鍘熸枃錛歐ith this inheritance hierarchy in place, all of the base Action's subclasses no longer need to worry about any plumbing logout code.錛夈備粬浠皢鍙寘鍚甯哥殑涓氬姟閫昏緫浠g爜銆傛竻鍗?鏄熀綾葷殑閮ㄥ垎浠g爜錛?br>


娓呭崟6
publicabstractclass BaseAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                                                 HttpServletRequest request, HttpServletResponse response) 
               throws IOException, ServletException {

response.setHeader(
"Cache-Control" , "no-cache" ); //Forces caches to obtain a new copy of the page from the origin server
response.setHeader(
"Cache-Control" , "no-store" ); //Directs caches not to store the page under any circumstance
response.setDateHeader(
"Expires" , 0); //Causes the proxy cache to see the page as "stale"
response.setHeader(
"Pragma" , "no-cache" ); //HTTP 1.0 backward compatibility

if (!this.userIsLoggedIn(request)) {
    ActionErrors errors = new ActionErrors();

    errors.add(
"error" , new ActionError( "logon.sessionEnded" ));
    this.saveErrors(request, errors);

    return mapping.findForward(
"sessionEnded"
);
}

return executeAction(mapping, form, request, response);
}

protectedabstract ActionForward executeAction(ActionMapping mapping,  ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException;

privateboolean userIsLoggedIn(HttpServletRequest request) {
if (request.getSession().getAttribute(
"User"
) == null) {
    return false;
}

return true;
}
}
						



娓呭崟6涓殑浠g爜涓庢竻鍗?涓殑寰堢浉鍍忥紝鍞竴鍖哄埆鏄敤ActionMapping findForward鏇夸唬浜哛equestDispatcher forward銆傛竻鍗?涓紝濡傛灉鍦℉ttpSession涓湭鎵懼埌username瀛楃涓詫紝ActionMapping瀵硅薄灝嗘壘鍒板悕涓簊essionEnded鐨刦orward鍏冪礌騫惰煩杞埌瀵瑰簲鐨刾ath銆傚鏋滄壘鍒頒簡錛屽瓙綾婚氳繃瀹炵幇executeAction()鏂規(guī)硶錛屽皢鎵ц浠栦滑鑷繁鐨勪笟鍔¢昏緫銆傚洜姝わ紝鍦╯truts-web.xml閰嶇疆鏂囦歡涓負(fù)鎵鏈夌戶鎵胯嚜Action鍩虹被鐨勫瓙綾誨0鏄庝釜涓鍚嶄負(fù)sessionEnded鐨刦orward鍏冪礌騫跺皢鍏舵寚鍚憀ogin.jsp鏄嚦鍏抽噸瑕佺殑銆傛竻鍗?浠ecure1 action闃愭槑浜嗚繖鏍蜂竴涓0鏄庯細(xì)


娓呭崟7
<action path=
"/secure1"
type=
"com.kevinhle.logoutSampleStruts.Secure1Action"
scope=
"request" >
<forward name=
"success" path= "/WEB-INF/jsps/secure1.jsp"
/>
<forward name=
"sessionEnded" path= "/login.jsp"
/>
</action>

						



緇ф壙鑷狟aseAction綾葷殑瀛愮被Secure1Action瀹炵幇浜唀xecuteAction()鏂規(guī)硶鑰屼笉鏄鐩栧畠銆係ecure1Action綾諱笉闇瑕佹墽琛屼換浣曢鍑轟唬鐮侊紝濡傛竻鍗?錛?br>


娓呭崟8
publicclass Secure1Action extends BaseAction {
    public ActionForward executeAction(ActionMapping mapping, ActionForm form,
                                                           HttpServletRequest request, HttpServletResponse response)
               throws IOException, ServletException {

               HttpSession session = request.getSession(); 
               return (mapping.findForward(
"success" ));
         }
}
						



涓婇潰鐨勮В鍐蟲柟妗堟槸濡傛鐨勪紭闆呮湁鏁堬紝瀹冧粎浠呭彧闇瑕佸畾涔変竴涓熀綾昏屼笉闇瑕侀澶栫殑浠g爜宸ヤ綔銆傚皢閫氱敤鐨勮涓烘柟娉曞啓鎴愪竴涓戶鎵縎trutsAction鐨勫熀綾繪槸鑰呯殑鎺ㄨ崘鐨勶紝鑰屼笖榪欐槸璁稿Struts欏圭洰鐨勫叡鍚岀粡楠屻?br>



鍗佷竴. 灞闄愭?/font>

涓婅堪瑙e喅鏂規(guī)瀵笿SP鎴栧熀浜嶴truts鐨刉eb搴旂敤閮芥槸闈炲父綆鍗曡屽疄鐢ㄧ殑錛屼絾瀹冭繕鏄湁鏌愪簺灞闄愩傚湪鎴戠湅鏉ワ紝榪欎簺灞闄愬茍涓嶆槸鑷沖叧绱ц鐨勩?br>
•   閫氳繃鍙栨秷涓庢祻瑙堝櫒鍚庨鎸夐挳鏈夊叧鐨勭紦瀛樻満鍒訛紝涓鏃︾敤鎴風(fēng)寮欏甸潰鑰屾病鏈夊鏁版嵁榪涜鎻愪氦錛岄偅涔堥〉闈㈠皢浼?xì)涓㈠け鎵鏈夎緭鍏ョ殑鏁版嵁銆傚嵆浣跨偣鍑?yán)L祻瑙堝櫒鐨勫悗閫鎸夐挳榪斿洖鍒板垰鎵嶇殑欏甸潰涔熸棤嫻庝簬浜嬶紝鍥犱負(fù)嫻忚鍣ㄤ細(xì)浠庢湇鍔″櫒鑾峰彇鏂扮殑絀虹櫧欏甸潰鏄劇ず鍑烘潵銆備竴縐嶅彲鑳界殑鏂規(guī)硶騫朵笉鏄樆姝㈣繖浜汮SP欏甸潰鍖呭惈鏁版嵁鏁版嵁琛ㄦ牸銆傚湪鍩轟簬JSP鐨勮В鍐蟲柟妗堝綋涓紝閭d簺JSP欏甸潰鍙互鍒犻櫎鍦ㄦ竻鍗?涓殑浠g爜銆傚湪鍩轟簬Struts鐨勮В鍐蟲柟妗堝綋涓紝Action綾婚渶瑕佺戶鎵胯嚜Struts鐨凙ction綾昏岄潪BaseAction綾匯?br>
•  涓婇潰璁茶堪鐨勬柟娉曞湪Opera嫻忚鍣ㄤ腑涓嶈兘宸ヤ綔銆備簨瀹炰笂娌℃湁閫傜敤浜嶰pera嫻忚鍣ㄧ殑瑙e喅鏂規(guī)錛屽洜涓篛pera嫻忚鍣ㄤ笌2616 Hypertext Transfer Protocol鈥擧TTP/1.1绱у瘑鐩稿叧銆係ection 13.13 of RFC 2616 states:          
User agents often have history mechanisms, such as "Back" buttons and history lists, which can be used to redisplay an entity retrieved earlier in a session.

History mechanisms and caches are different. In particular history mechanisms SHOULD NOT try to show a semantically transparent view of the current state of a resource. Rather, a history mechanism is meant to show exactly what the user saw at the time when the resource was retrieved.

騫歌繍鐨勬槸錛屼嬌鐢ㄥ井杞殑IE鍜屽熀浜嶮ozilla鐨勬祻瑙堝櫒鐢ㄦ埛澶氫綑Opera嫻忚鍣ㄣ備笂闈㈣榪扮殑瑙e喅鏂規(guī)瀵瑰ぇ澶氭暟鐢ㄦ埛鏉ヨ榪樻槸鏈夊府鍔╃殑銆傚彟澶栵紝鏃犺鏄惁浣跨敤涓婅堪鐨勮В鍐蟲柟妗堬紝Opera嫻忚鍣ㄤ粛鐒跺瓨鍦ㄧ敤鎴烽鍑洪棶棰橈紝灝監(jiān)pera鏉ヨ娌℃湁浠諱綍鏀瑰彉銆傜劧鑰岋紝姝eRFC2616涓墍璇達(dá)紝閫氳繃鍍忎笂闈竴鏍瘋緗ご鏂囦歡鎸囦護(hù)錛屽綋鐢ㄦ埛鐐瑰嚮涓涓摼鎺ユ椂錛孫pera嫻忚鍣ㄤ笉浼?xì)浠幘~撳瓨涓幏鍙栭〉闈€?br>



鍗佷簩. 緇撹

榪欑瘒鏂囩珷璁茶堪浜嗗鐞嗛鍑洪棶棰樼殑瑙e喅鏂規(guī)錛屽敖綆℃柟妗堢畝鍗曠殑浠や漢鎯婅錛屼絾鍦ㄦ墍鏈夋儏鍐典笅閮借兘鏈夋晥鍦板伐浣溿傛棤璁烘槸瀵笿SP榪樻槸Struts錛屾墍瑕佸仛鐨勪笉榪囨槸鍐欎竴孌典笉瓚呰繃50琛岀殑浠g爜浠ュ強(qiáng)涓涓褰曠敤鎴鋒渶鍚庣櫥闄嗘椂闂寸殑鏂規(guī)硶銆傚湪鏈夊瘑鐮佷繚鎶ょ殑Web搴旂敤涓嬌鐢ㄨ繖浜涙柟妗堣兘澶熺‘淇濆湪浠諱綍鎯呭喌涓嬬敤鎴風(fēng)殑縐佷漢鏁版嵁涓嶈嚧娉勯湶錛屽悓鏃訛紝涔熻兘澧炲姞鐢ㄦ埛鐨勭粡楠屻?/font>


]]>
主站蜘蛛池模板: 国产亚洲精久久久久久无码| 久久久久亚洲精品天堂久久久久久| 亚洲视频免费播放| 久久免费美女视频| 久久亚洲成a人片| 国产精品免费一区二区三区四区| 亚洲va无码专区国产乱码| 毛片在线播放免费观看| 亚洲一二成人精品区| 精品熟女少妇a∨免费久久| 亚洲日本中文字幕| 可以免费看黄视频的网站| 亚洲精品国产日韩| 免费大片黄手机在线观看| 国产精品视频全国免费观看 | 成年18网站免费视频网站| 亚洲另类自拍丝袜第五页| 俄罗斯极品美女毛片免费播放| 欧洲乱码伦视频免费国产 | 一进一出60分钟免费视频| 国产亚洲精品资在线| 99热在线观看免费| 亚洲不卡中文字幕| 免费一级做a爰片性色毛片| 久久久久免费视频| 亚洲成在人线电影天堂色| 国产麻豆剧传媒精品国产免费| 国产成人亚洲精品蜜芽影院| 亚洲无线码一区二区三区| 亚洲一区免费在线观看| 黄色网页免费观看| 亚洲日韩区在线电影| 国产成人免费福利网站| 99免费在线视频| 精品丝袜国产自在线拍亚洲| 中文字幕精品无码亚洲字| jjizz全部免费看片| 一道本不卡免费视频| 亚洲一级毛片免费看| 亚洲精品视频免费观看| 亚欧免费视频一区二区三区|