JSP 涓?AJAX 鐨勮〃鍗曟彁浜や腑鏂囬棶棰樼殑綆鍗曡В鍐蟲柟妗?- GBK 鐗堟湰(寮曠敤)
浣滆? beansoft@126.com 2007.01.03
涓嬭澆鏈枃婧愮爜: ajaxform_gbk.zip 6KB
杞澆璇鋒敞鏄庡師鍒涗綔鑰? 灝婇噸浠栦漢鍔沖姩鎴愭灉.
鏇存柊:
2007-01-03
淇浜?AJAXFormer 涓浜屼釜鍙傛暟 resultDiv 澶勭悊涓嶅綋鐨勯棶棰?
澧炲姞浜嗕粠鏈嶅姟鍣ㄧ榪斿洖鑴氭湰騫跺姞浠ユ墽琛岀殑鍔熻兘;
澧炲姞浜嗚〃鍗曟彁浜ゅ悗緗戠粶鍑洪敊鐨勯敊璇樉紺哄姛鑳?
榪欎簺鏂板姛鑳介兘宸茬粡鏀懼湪紺轟緥欏甸潰涓簡.
嫻嬭瘯閫氳繃: Resin 3.0.18, Tomcat 5.0.30, 5.5.20; 嫻忚鍣? IE 6/Firefox 2.0.
涓婁竴綃囨枃绔?JSP 涓?AJAX 鐨勮〃鍗曟彁浜や腑鏂囬棶棰樼殑綆鍗曡В鍐蟲柟妗?/a> 涓昏鏄拡瀵?UTF-8 鐗堟湰鐨勮繘琛屽鐞嗙殑, 閴翠簬涓浗澶ч檰鍦板尯澶ч儴鍒嗚繕鏄敤 GBK 緙栫爜鍐?JSP, 鍥犳鏈枃灝遍拡瀵?GBK 鐨勫疄璺電粨鏋滆繘琛屼粙緇?
鏈夋湅鍙嬫彁鍒?褰揂JAX閬亣GBK鐨勫按灝?/a> 閲岃褰?AJAX 浣跨敤 GBK 緙栫爜鍚? 琛ㄥ崟鎻愪氦灝嗗嚭鐜頒貢鐮? 濡傚墠鏂囨墍榪? 鍙鍏ㄩ儴閲囩敤 UTF-8 緙栫爜, 鏄病鏈変換浣曢棶棰樼殑. 閭d箞閮界敤 GBK 鍛?
棣栧厛瑕佽鐨勬槸鎴戜滑鐨勬枃绔犺繕鏄竴鏍風(fēng)殑鍘熷垯: 灝藉彲鑳藉皯鐨勬敼鍔ㄥ師鏉ョ殑浠g爜鏉ヨВ鍐充腑鏂囦貢鐮侀棶棰? 鎵浠ユ湰鏂囩殑紺轟緥娌℃湁鐢ㄨ繃婊ゅ櫒絳夋柟娉?
閭d箞浣跨敤 GBK 緙栫爜鍒板簳鏈夋病鏈変貢鐮侀棶棰樺憿?
絎竴涓叧閿偣灝辨槸 AJAX 鐨勮〃鍗曟彁浜や唬鐮佸繀欏繪紜殑鎸夌収 HTTP 瑙勮寖瀹炵幇, 鍗寵淇濇寔鍘熸潵鐨?GET/POST 鏂瑰紡涓嶅彉, 涔熻淇濇寔閲岄潰鐨勫唴瀹瑰拰嫻忚鍣ㄦ彁浜ょ殑鍐呭涓鎽鎬竴鏍? 浠ヤ笅鍐呭鎽樿嚜鎴戠紪鍐欑殑鍐呴儴鍩硅鏁欐潗:
----------------- 寮曠敤寮濮?-----------------
棣栧厛蹇呴』瑕佷粙緇嶄竴涓?HTTP 鍗忚鍜?GET, POST 鐨勫伐浣滄柟寮?
褰撶敤鎴峰湪Web嫻忚鍣ㄥ湴鍧鏍忎腑杈撳叆涓涓甫鏈塰ttp://鍓嶇紑鐨刄RL騫舵寜涓婨nter鍚?鎴栬呭湪Web欏甸潰涓煇涓互http://寮澶寸殑瓚呴摼鎺ヤ笂鍗曞嚮榧犳爣,HTTP浜嬪姟澶勭悊鐨勭涓涓樁孌?-寤虹珛榪炴帴闃舵灝卞紑濮嬩簡.HTTP鐨勯粯璁ょ鍙f槸80.
闅忕潃榪炴帴鐨勫緩绔?HTTP灝辮繘鍏ヤ簡瀹㈡埛鍚戞湇鍔″櫒鍙戦佽姹傜殑闃舵.瀹㈡埛鍚戞湇鍔″櫒鍙戦佺殑璇鋒眰鏄竴涓湁鐗瑰畾鏍煎紡鐨凙SCII娑堟伅,鍏惰娉曡鍒欎負:
6KB
|
< Method > < URL > < HTTP Version > <\n> { <Header>:<Value> <\n>}* <\n> { Entity Body } |
璇鋒眰娑堟伅鐨勯《绔槸璇鋒眰琛?鐢ㄤ簬鎸囧畾鏂規(guī)硶,URL鍜孒TTP鍗忚鐨勭増鏈?璇鋒眰琛岀殑鏈鍚庢槸鍥炶濺鎹㈣.鏂規(guī)硶鏈塆ET,POST,HEAD,PUT,DELETE絳?
鍦ㄨ姹傝涔嬪悗鏄嫢騫蹭釜鎶ュご(Header)琛?姣忎釜鎶ュご琛岄兘鏄敱涓涓姤澶村拰涓涓彇鍊兼瀯鎴愮殑浜屽厓瀵?鎶ュご鍜屽彇鍊間箣闂翠互":"鍒嗛殧;鎶ュご琛岀殑鏈鍚庢槸鍥炶濺鎹㈣. 甯歌鐨勬姤澶存湁Accept(鎸囧畾MIME濯掍綋綾誨瀷),Accept_Charset(鍝嶅簲娑堟伅鐨勭紪鐮佹柟寮?,Accept_Encoding(鍝嶅簲娑堟伅鐨勫瓧絎﹂泦),User_Agent(鐢ㄦ埛鐨勬祻瑙堝櫒淇℃伅)絳?
鍦ㄨ姹傛秷鎭殑鎶ュご琛屼箣鍚庢槸涓涓洖杞︽崲琛?琛ㄦ槑璇鋒眰娑堟伅鐨勬姤澶撮儴鍒嗙粨鏉?鍦ㄨ繖涓猏n涔嬪悗鏄姹傛秷鎭殑娑堟伅瀹炰綋(Entity Body).
Web鏈嶅姟鍣ㄥ湪鏀跺埌瀹㈡埛璇鋒眰騫朵綔鍑哄鐞嗕箣鍚?瑕佸悜瀹㈡埛鍙戦佸簲絳旀秷鎭?涓庤姹傛秷鎭竴鏍?搴旂瓟娑堟伅鐨勮娉曡鍒欎負:
< HTTP Version> <Status Code> [<Message>]<\n> { <Header>:<Value> <\n> } * <\n> { Entity Body } |
搴旂瓟娑堟伅鐨勭涓琛屼負鐘舵佽,鍏朵腑鍖呮嫭浜咹TTP鐗堟湰鍙?鐘舵佺爜鍜屽鐘舵佺爜榪涜綆鐭В閲婄殑娑堟伅;鐘舵佽鐨勬渶鍚庢槸鍥炶濺鎹㈣.鐘舵佺爜鐢?浣嶆暟瀛楃粍鎴?鏈?綾?
- 1XX 淇濈暀
- 2XX 琛ㄧず鎴愬姛
- 3XX 琛ㄧずURL宸茬粡琚Щ璧?
- 4XX 琛ㄧず瀹㈡埛閿欒
- 5XX 琛ㄧず鏈嶅姟鍣ㄩ敊璇?/li>
渚嬪:415,琛ㄧず涓嶆敮鎸佹敼濯掍綋綾誨瀷;503,琛ㄧず鏈嶅姟鍣ㄤ笉鑳借闂?鏈甯歌鐨勬槸200,琛ㄧず鎴愬姛.甯歌鐨勬姤澶存湁:Last_Modified(鏈鍚庝慨鏀規(guī)椂闂?,Content_Type(娑堟伅鍐呭鐨凪IME綾誨瀷),Content_Length(鍐呭闀垮害)絳?
鍦ㄦ姤澶磋涔嬪悗涔熸槸涓涓洖杞︽崲琛?鐢ㄤ互琛ㄧず搴旂瓟娑堟伅鐨勬姤澶撮儴鍒嗙殑緇撴潫,浠ュ強搴旂瓟娑堟伅瀹炰綋鐨勫紑濮?
涓嬮潰鏄竴涓簲絳旀秷鎭殑渚嬪瓙:
HTTP/1.0 200 OK Date: Moday,07-Apr-97 21:13:02 GMT Server:NCSA/1.1 MIME_Version:1.0 Content_Type:text/html Last_Modified:Thu Dec 5 09:28:01 1996 Coentent_Length:3107
<HTML><HEAD><TITLE>...</HTML> |
閭d箞 GET 鍜?POST 鏈変粈涔堝尯鍒? 鍖哄埆灝辨槸涓涓湪 URL 璇鋒眰閲岄潰闄勫甫浜嗚〃鍗曞弬鏁板拰鍊? 涓涓槸鍦?HTTP 璇鋒眰鐨勬秷鎭疄浣撲腑. 鐢ㄤ笅闈㈢殑渚嬪瓙鍙互寰堝鏄撶殑鐪嬪埌鍚屾牱鐨勬暟鎹氳繃GET鍜孭OST鏉ュ彂閫佺殑鍖哄埆, 鍙戦佺殑鏁版嵁鏄?username=寮犱笁 :
銆GET 鏂瑰紡, 嫻忚鍣ㄩ敭鍏?http://localhost?username=寮犱笁
GET /?username=%E5%BC%A0%E4%B8%89 HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322) Host: localhost Connection: Keep-Alive |
POST 鏂瑰紡:
POST / HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Accept-Language: zh-cn Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322) Host: localhost Content-Length: 28 Connection: Keep-Alive
username=%E5%BC%A0%E4%B8%89 |
姣旇緝涓涓嬩笂闈㈢殑涓ゆ鏂囧瓧, 鎮(zhèn)ㄤ細鍙戠幇 GET 鏂瑰紡鎶婅〃鍗曞唴瀹規(guī)斁鍦ㄥ墠闈㈢殑璇鋒眰澶翠腑, 鑰?POST 鍒欐妸榪欎簺鍐呭鏀懼湪璇鋒眰鐨勪富浣撲腑浜? 鍚屾椂 POST 涓妸璇鋒眰鐨?Content-Type 澶磋緗負 application/x-www-form-urlencoded. 鑰屽彂閫佺殑姝f枃閮芥槸涓鏍風(fēng)殑, 鍙互榪欐牱鏉ユ瀯閫犱竴涓〃鍗曟彁浜ゆ鏂?
encodeURIComponent(arg1)=encodeURIComponent(value1)&encodeURIComponent(arg2)=encodeURIComponent(value2)&.....
娉? encodeURIComponent 榪斿洖涓涓寘鍚簡 charstring 鍐呭鐨勬柊鐨?String 瀵硅薄錛圲nicode 鏍煎紡錛夛紝 鎵鏈夌┖鏍箋佹爣鐐廣侀噸闊崇鍙蜂互鍙婂叾浠栭潪 ASCII 瀛楃閮界敤 %xx 緙栫爜浠f浛錛屽叾涓?xx 絳変簬琛ㄧず璇ュ瓧絎︾殑鍗佸叚榪涘埗鏁般?渚嬪錛岀┖鏍艱繑鍥炵殑鏄?"%20" 銆?瀛楃鐨勫煎ぇ浜?255 鐨勭敤 %uxxxx 鏍煎紡瀛樺偍銆傚弬瑙?JavaScript 鐨?encodeURIComponent() 鏂規(guī)硶.
涓嬮潰灝辮璁轟竴涓嬪浣曞湪 JavaScript 涓墽琛屼竴涓?GET 鎴栬?POST 璇鋒眰. 濡傛灉鎮(zhèn)ㄧ敤榪?Java, 閭d箞鎮(zhèn)ㄥ彲鑳界啛鎮(zhèn)変笅鍒楃殑鐢?java.net.URLConnection 綾昏繘琛?POST 鎿嶄綔鐨勪唬鐮?鍙傝?Java Tip 34: POSTing via Java ):
銆
URL url; URLConnection urlConn; DataOutputStream printout; // URL of CGI-Bin or jsp, asp script. url = new URL ("somepage"); // URL connection channel. urlConn = url.openConnection(); // ...... // No caching, we want the real thing. urlConn.setUseCaches (false); // Specify the content type. urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // Send POST output. printout = new DataOutputStream (urlConn.getOutputStream ()); String content = "name=" + URLEncoder.encode ("Buford Early") + "&email=" + URLEncoder.encode ("buford@known-space.com"); printout.writeBytes (content); printout.flush (); printout.close (); |
浠ヤ笂鐨勪唬鐮佸悜 somepage 鍙戦佷簡涓嬈?POST 璇鋒眰, 鏁版嵁涓?name = Buford Early, email = buford@known-space.com.
鐢↗avaScript 鏉ユ墽琛?POST/GET 璇鋒眰鏄悓鏍風(fēng)殑鍘熺悊, 涓嬮潰鐨勪唬鐮佸睍紺轟簡鍒嗗埆鐢?XMLHttpRequest 瀵硅薄鍚?somepage 鐢?GET 鍜?POST 涓ょ鏂瑰紡鍙戦佸拰涓婁緥鐩稿悓鐨勬暟鎹殑鍏蜂綋榪囩▼:
GET 鏂瑰紡
var postContent = "name=" + encodeURIComponent("Buford Early") + "&email=" + encodeURIComponent("buford@known-space.com"); xmlhttp.open("GET", "somepage" + "?" + postContent, true); xmlhttp.send(null); |
POST 鏂瑰紡
var postContent = "name=" + encodeURIComponent("Buford Early") + "&email=" + encodeURIComponent("buford@known-space.com"); xmlhttp.open("POST", "somepage", true); xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlhttp.send(postContent); |
鑷蟲甯屾湜浣犲凡緇忚兘澶熺悊瑙e浣曠敤 JavaScript 涓殑 XMLHttpRequest 瀵硅薄鏉ユ墽琛?GET/POST 鎿嶄綔, 鍓╀笅鐨勫伐浣滃氨鏄?zhèn)ㄥ浣曟潵鏋勯犺繖浜涙彁浜ょ殑鍙傛暟浜? 鏈鍚庢垜緇欏嚭涓涓皢鐜版湁鐨?form 鎻愪氦浠g爜淇敼涓哄紓姝ョ殑 AJAX 鎻愪氦鐨勪唬鐮?娉ㄦ剰鐩墠浣滆呰繕涓嶇煡閬撳浣曡 file 涓婁紶琛ㄥ崟鍩熶篃鑳藉紓姝ヤ笂浼犳枃浠?. 棣栧厛璇風(fēng)湅涓や釜 JavaScript 鍑芥暟:
// form - the form to submit // resultDivId - the division of which to display result text in, in null, then // create an element and add it to the end of the body function ajaxSubmitForm(form, resultDivId) { var elements = form.elements;// Enumeration the form elements var element; var i;
var postContent = "";// Form contents need to submit
for(i=0;i<elements.length;++i) { var element=elements[i];
if(element.type=="text" || element.type=="textarea" || element.type=="hidden") { postContent += encodeURIComponent(element.name) + "=" + encodeURIComponent(element.value) + "&"; } else if(element.type=="select-one"||element.type=="select-multiple") { var options=element.options,j,item; for(j=0;j<options.length;++j){ item=options[j]; if(item.selected) { postContent += encodeURIComponent(element.name) + "=" + encodeURIComponent(item.value) + "&"; } } } else if(element.type=="checkbox"||element.type=="radio") { if(element.checked) { postContent += encodeURIComponent(element.name) + "=" + encodeURIComponent(element.value) + "&"; } } else if(element.type=="file") { if(element.value != "") { postContent += encodeURIComponent(element.name) + "=" + encodeURIComponent(element.value) + "&"; } } else { postContent += encodeURIComponent(element.name) + "=" + encodeURIComponent(element.value) + "&"; } }
alert(postContent);
ajaxSubmit(form.action, form.method, postContent); }
// url - the url to do submit // method - "get" or "post" // postContent - the string with values to be submited // resultDivId - the division of which to display result text in, in null, then // create an element and add it to the end of the body function ajaxSubmit(url, method, postContent, resultDivId) { var loadingDiv = document.getElementById('loading'); // call in new thread to allow ui to update window.setTimeout(function () { loadingDiv.innerText = "Loading...."; loadingDiv.style.display = ""; }, 1);
// code for Mozilla, etc. if (window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest(); } // code for IE else if (window.ActiveXObject) { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }
if(xmlhttp) { xmlhttp.onreadystatechange = function() { // if xmlhttp shows "loaded" if (xmlhttp.readyState==4) { if(resultDivId) { document.getElementByID(resultDivId).innerHTML = xmlhttp.responseText; } else { var result = document.createElement("DIV"); result.style.border="1px solid #363636"; result.innerHTML = xmlhttp.responseText; document.body.appendChild(result); }
loadingDiv.innerHTML = "Submit finnished!"; }
};
if(method.toLowerCase() == "get") { xmlhttp.open("GET", url + "?" + postContent, true); xmlhttp.send(null); } else if(method.toLowerCase() == "post") { xmlhttp.open("POST", url, true); xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlhttp.send(postContent); } } else { loadingDiv.innerHTML = "Can't create XMLHttpRequest object, please check your web browser."; }
}
|
鍑芥暟 ajaxSubmitForm 灝嗚〃鍗曡鎻愪氦鐨勫唴瀹硅繘琛屽皝瑁? 鐒跺悗璋冪敤 ajaxSubmit 鍑芥暟鏉ユ墽琛岀湡姝g殑寮傛鎻愪氦, 琛ㄥ崟鎻愪氦鍚庢墍榪斿洖鐨勭粨鏋滃垯鏄劇ず鍦ㄧ粰瀹氱殑 DIV 瀹瑰櫒涓垨鑰呮病鏈夋寚瀹氬弬鏁版椂鐢?DOM 瀵硅薄鍔ㄦ佺敓鎴愪竴涓?DIV 瀹瑰櫒鏉ユ樉紺虹粨鏋滃茍娣誨姞鍒伴〉闈㈡湯灝? 榪欐牱, 瀵瑰師鏉ョ殑琛ㄥ崟鍙渶瑕佹敼鍔ㄤ竴涓湴鏂瑰氨鍙互灝嗗師鏉ョ殑琛ㄥ崟鎻愪氦鏀逛負寮傛妯″紡, 鍗沖湪 form 鏍囩閲屽姞鍏? onSubmit="ajaxSubmitForm(this);return false;" 鍗沖彲, return false 紜繚琛ㄥ崟涓嶄細琚祻瑙堝櫒鍚屾鎻愪氦. 瀹屾暣鐨勪緥瀛愯鐪?a >榪欓噷.
----------------- 寮曠敤緇撴潫 -----------------
OK, 甯屾湜鑷蟲涓烘鎮(zhèn)ㄥ凡緇忕悊瑙d簡濡備綍鐢?AJAX 鏉ユ紜殑鎵ц GET/POST. 濡傛灉榪欎釜闂鎮(zhèn)ㄨВ鍐充簡, 鍙槸璇村悗鍙扮殑涔辯爜闂灝卞拰浣犵洿鎺ラ氳繃琛ㄥ崟鎻愪氦鍑犱箮娌℃湁鍖哄埆浜? 榪欎釜鏂規(guī)硶鐨勫叿浣撳皝瑁呭凡緇忓湪闄勪歡鐨?ajax_common.js 涓簡.
鑷蟲涔熻璐村嚭鏉ユ垜浠殑 GBK 緙栫爜鐨勫鎴風(fēng)欏甸潰鐨勫唴瀹逛簡:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>AJAX Form Submit Test</title>
<script src='ajax_common.js'></script>
</head>
<body>
鏈〉闈㈢殑緙栫爜鏄腑鏂?<br/>
<meta http-equiv="Content-Type" content="text/html; charset=gbk"><br/>
<b>嫻嬭瘯榪囩殑鏈嶅姟鍣?</b><br/>
Resin 3.0.18<br/>
Tomcat 5.5.20<br/>
Tomcat 5.0.30<br/>
<h3>AJAX Form Submit Test</h3>
Fill the form and then click submit<br>
鎻愪氦鏂瑰紡: POST<br>
<form method="POST" id="form1" name="form1"
action="form_action.jsp"
onSubmit="former.ajaxSubmitForm();return false;">
<p><input type="hidden" name="hidden1" value="hiddenValue">
text:<input type="text" name="textf&1" size="20" value="text鏂囨湰&1">
checkbox:<input type="checkbox" name="checkbox1" value="ON" checked>
radio:<input type="radio" value="V1" checked name="radio1">
select:<select size="1" name="select1">
<option selected value="option1">D1</option>
</select>
<br>
<br>
<input type="submit" name="B1" value="submit">
<input type="reset" name="B2" value="reset">
</p>
</form>
鎻愪氦鏂瑰紡: GET<br>
<form method="GET" id="form2" name="form2"
action="form_action.jsp"
onSubmit="former2.ajaxSubmitForm();return false;">
<p><input type="hidden" name="hidden1" value="hiddenValue">
text:<input type="text" name="text鏂囨湰&2" size="20" value="text鏂囨湰&2">
checkbox:<input type="checkbox" name="checkbox1" value="ON" checked>
radio:<input type="radio" value="V1" checked name="radio1">
select:<select size="1" name="select1">
<option selected value="option1">D1</option>
</select>
<br>
<br>
<input type="submit" name="B1" value="submit">
<input type="reset" name="B2" value="reset">
</p>
</form>
<div id="loading" style="display:none; position:absolute;
border:1px solid orange; height:20px; width:600; left: 93px; top: 112px;
background-color: #FFFFCC; cursor:pointer;" title="Click to hide" onClick="this.style.display='none';"></div>
<div id="resultDiv" style="border:1px solid orange; background-color: #FFFFCC; cursor:pointer;" title="Click to hide" onClick="this.style.display='none';">
Form 1 鐨勬彁浜ょ粨鏋滃皢浼氭樉紺哄湪榪欓噷.
</div>
<script type="text/javascript">
var former = new AjaxFormer($('form1'), 'resultDiv');
var former2 = new AjaxFormer($('form2'));
</script>
</body>
</html>
鍙互鐪嬪埌鎴戜滑鐨勭‘浣跨敤鐨勬槸 GBK 緙栫爜, 嫻忚鍣ㄦ墦寮鐨勬椂鍊欒嚜鍔ㄩ夋嫨鐨勭紪鐮佷篃鏄畝浣撲腑鏂?
閭d箞絎簩涓叧閿偣灝辨槸鏈嶅姟鍣ㄧ鐨勮〃鍗曟暟鎹鍙栦簡.榪欎釜闂璺熷叿浣撶殑鏈嶅姟鍣ㄦ湁寰堝ぇ鍏崇郴. 瀵逛簬 Resin 鏈嶅姟鍣ㄦ潵璇? 闂寰堝皯, 鍩烘湰涓婁笉璁烘槸 POST 鍜?GET, 鍑轟貢鐮佺殑姒傜巼閮芥瘮杈冨皬. 浣嗘槸 Tomcat 灝變笉鏁㈡伃緇翠簡, 榪欏ぇ姒備篃鏄紑婧愪駭鍝佸拰鍟嗕笟浜у搧鐨勫尯鍒? 緙轟箯鍓嶅悗涓鑷存у拰鍏煎鎬? 鍥犱負寮婧愮殑涓嶉渶瑕佹彁渚涙妧鏈敮鎸? Tomcat 鐨?GET/POST 鐨勭紪鐮佸鐞嗘柟寮忎笉鍚岀殑鐗堟湰閮戒笉涓鏍? 灝卞儚 Eclipse/Netbeans 鏂扮増鏈粠鏉ヤ笉闇瑕佸吋瀹硅佺増鏈殑鎻掍歡 API 涓鏍? Hibernate/Struts/Spring 涔熸槸涓鏍? 鎵浠ュ Java 鐨勫緢绱? 褰撶劧, 榪欏氨鏄厤璐?寮婧愮殑浠d環(huán). 璺戦浜? 鍥犳鎴戜滑鐨勬湇鍔″櫒绔唬鐮佸ぇ閮ㄥ垎閮芥槸瀵?Tomcat 鐨勪貢鐮侀棶棰樼殑瑙e喅(POST鐨勬病鏈夐棶棰? 涓昏鏄?GET 鏂規(guī)硶鐨?.
<%@ page contentType="text/html; charset=gbk" pageEncoding="gbk"%>
<html>
<%
//Send some headers to keep the user's browser from caching the response.
response.addHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT" );
response.addHeader("Last-Modified", new java.util.Date().toGMTString());
response.addHeader("Cache-Control", "no-cache, must-revalidate" );
response.addHeader("Pragma", "no-cache" );
// This will emulate a network delay, for 2 sec.
//Thread.currentThread().sleep(2000);
request.setCharacterEncoding("utf-8");
%>
<%!
/**
* 杞崲瀛楃涓茬殑鍐呯爜.
*
* @param input
* 杈撳叆鐨勫瓧絎︿覆
* @param sourceEncoding
* 婧愬瓧絎﹂泦鍚嶇О
* @param targetEncoding
* 鐩爣瀛楃闆嗗悕縐?br>* @return 杞崲緇撴灉, 濡傛灉鏈夐敊璇彂鐢? 鍒欒繑鍥炲師鏉ョ殑鍊?br>*/
public static String changeEncoding(String input, String sourceEncoding,
String targetEncoding) {
if (input == null || input.equals("")) {
return input;
}
try {
byte[] bytes = input.getBytes(sourceEncoding);
return new String(bytes, targetEncoding);
} catch (Exception ex) {
}
return input;
}
/**
* 涓涓被浼間簬 JavaScript 鐨?escape 鍑芥暟鐨勫姛鑳? 紜繚涔辯爜鍙互姝g‘浼犺緭.
*/
public static String escape(String src) {
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6);
for (i = 0; i < src.length(); i++) {
j = src.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j)
|| Character.isUpperCase(j))
tmp.append(j);
else if (j < 256) {
tmp.append("%");
if (j < 16)
tmp.append("0");
tmp.append(Integer.toString(j, 16));
} else {
tmp.append("%u");
tmp.append(Integer.toString(j, 16));
}
}
return tmp.toString();
}
%>
<head>
<title>Test form action page</title>
</head>
<body>
榪欐槸 GBK 緙栫爜鐗堟湰鐨勫悗鍙拌〃鍗曟彁浜ら〉闈?<br/>
<%
boolean isTomcat = application.getServerInfo().toLowerCase().indexOf("tomcat") != -1;
%>
Form submit method:<%=request.getMethod()%><br/>
The form content u send is:<br/>
<%
java.util.Enumeration e = request.getParameterNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = request.getParameter(name);
if(isTomcat && request.getMethod().equalsIgnoreCase("GET")) {
name = changeEncoding(name, "ISO8859-1", "UTF-8");
value = changeEncoding(value, "ISO8859-1", "UTF-8");
}
out.println("<b>" + name + "</b> = " + value + "<br/>");
}
// 緇欏墠鍙拌繑鍥炰竴涓彲浠ユ墽琛岀殑鑴氭湰
//response.addHeader("response_script", changeEncoding("alert('鎻愪氦瀹屾垚');", "ISO8859-1", "UTF-8"));
response.addHeader("response_script", escape("alert('鎻愪氦瀹屾垚');"));
%>
</body>
</html>
booleanisTomcat=application.getServerInfo().toLowerCase().indexOf("tomcat") !=-1; 榪欎竴鍙ヤ富瑕侀拡瀵?Tomcat 榪涜澶勭悊, 濡傛灉鏄?GET 鏂規(guī)硶鐨勮瘽, 灝遍渶瑕佸皢琛ㄥ崟鍙傛暟浠?ISO8859-1 杞崲鍒?UTF-8 (娉ㄦ剰涓嶆槸 GBK, 璨屼技 Tomcat 寰堝枩嬈?UTF-8?). 鍏跺畠鐨勫湴鏂瑰拰鍘熸潵鐨?UTF-8 鐗堟湰鐨勬病鏈夊尯鍒? 褰撶劧濡傛灉鎮(zhèn)ㄧ殑绔欑偣搴旇鐢ㄨ繃婊ゅ櫒鏉ユ洿鏂逛究鐨勮В鍐寵繖涓棶棰?
灝忕粨:
1. 浣跨敤涓鑷寸殑瀛楃闆嗗緢閲嶈, 瑕佷箞鍏ㄦ槸 GBK, 瑕佷箞鍏ㄦ槸 UTF-8, 濡傛灉鏈夋潯浠? 灝卞叏閮ㄧ敤 UTF-8, 閭f牱宸ヤ綔閲忔槸鏈灝忕殑;
2. 鐢?AJAX 鎻愪氦鐨勬椂鍊欎竴瀹氳鎸夌収 HTTP 鐨勮鑼冩潵, 鍋氬埌鍜屾祻瑙堝櫒灝介噺鍏煎, 灝ゅ叾鏄?POST 鐨勬椂鍊欎笉瑕佸啀寰 URL 鍦板潃閲屽姞鍙傛暟浜? 浣犻偅鏍鋒槸榪濊! 鍚庢灉灝辨槸鏈夌殑鏈嶅姟鍣ㄤ細涓嶆惌鐞嗕綘浼犻掔殑榪欎簺鍙傛暟! 榪樻槸濡傛垜鎵璁? 鍙傛暟鎻愪氦涔嬪墠瑕佺敤 encodeURIComponent() 鏉ヨ漿鍖? 榪欎篃鏄負浜嗙鍚堟祻瑙堝櫒鐨勪範(fàn)鎯仛娉?
3. 鍚庡彴濡傛灉璇誨彇鍙傛暟鏈変貢鐮? 灝卞敖閲忓鍦?ISO8859-1, GBK, UTF-8 涓棿澶氳漿鎹㈠嚑嬈¤瘯璇? 鍙互璇曡瘯鍋跺啓鐨勯偅涓?changeEncoding() 鏂規(guī)硶, 鎶婂嚑涓漿鎹㈠悗鐨勮〃鍗曞奸兘鍒楀嚭鏉? 涓瀹氭湁涓涓槸姝g‘鐨? 鎬繪槸鍙互瑙e喅闂鐨? 榪欎釜鏈潵涓嶅簲璇ユ槸鍋朵滑鐨勪換鍔? 浣嗘槸鍐欐湇鍔″櫒鐨勪漢鏄佺編, 灝ゅ叾鏄?Tomcat 浣滆? 鍙啛鎮(zhèn)?ISO8859-1.
4. 閴翠簬 TOMCAT 璇誨彇 POST 鍙傛暟鐨勬椂鍊欏緢灝戝嚭闂, 鍥犳寤鴻AJAX鎻愪氦琛ㄥ崟鐨勬椂鍊欏鐢?POST 鏂規(guī)硶, 灝介噺涓嶇敤 GET.
榪愯鎴睆:

鍏跺畠鐨勪竴浜涜祫鏂欏彲浠ュ弬鑰傿logjava涓婄殑涓綃囧師鍒涙枃绔? [鍘熷垱]struts,ajax涔辯爜瑙e喅鏂規(guī)
嬈㈣繋鍙戣〃寤鴻鍜屾洿濂界殑瑙傜偣. 璋㈣阿! 閲嶇敵鏈枃鏃犳剰浠f浛鎮(zhèn)ㄧ殑 AJAX 妗嗘灦, 涓嶈繃鍦ㄤ綘鎶撶媯鐨勬椂鍊欏彲浠ヨ冭檻鐪嬬湅浠栦滑琛ㄥ崟鎻愪氦鐨勪唬鐮? 鏀規(guī)敼瀹?
鏈漢緲昏瘧鐨?XMLHttpRequest 瀵硅薄浠嬬粛:
The XMLHttpRequest Object Reference XMLHttpRequest 瀵硅薄鍙傝?/h2>
Methods 鏂規(guī)硶
Method 鏂規(guī)硶 |
Description 鎻忚堪 |
abort() |
Cancels the current request 鍙栨秷褰撳墠璇鋒眰 |
getAllResponseHeaders() |
Returns the complete set of http headers as a string 灝嗗畬鏁寸殑 HTTP 澶撮儴鍋氫負涓涓瓧絎︿覆榪斿洖 |
getResponseHeader("headername") |
Returns the value of the specified http header 榪斿洖緇欏畾鐨?HTTP 澶寸殑鍊?/td>
|
open("method","URL",async,"uname","pswd") |
Specifies the method, URL, and other optional attributes of a request
The method parameter can have a value of "GET", "POST", or "PUT" (use "GET" when requesting data and use "POST" when sending data (especially if the length of the data is greater than 512 bytes.
The URL parameter may be either a relative or complete URL.
The async parameter specifies whether the request should be handled asynchronously or not. true means that script processing carries on after the send() method, without waiting for a response. false means that the script waits for a response before continuing script processing 鎸囧畾琛ㄥ崟鎻愪氦鏂規(guī)硶, URL, 浠ュ強璇鋒眰鐨勫彲閫夊睘鎬?br> method 鍙傛暟鍙互鏄?GET", "POST" 鎴栬?"PUT" 榪欎簺鍊間腑涔嬩竴(浣跨敤"GET"鏉ヨ姹傛暟鎹? 鐗瑰埆鐨? 褰撳彂閫佺殑鏁版嵁闀垮害澶т簬512瀛楄妭鏃朵嬌鐢?"POST").
URL 鍙傛暟鍙互涓虹浉瀵圭殑鍜屽畬鏁寸殑 URL.
async 鍙傛暟鎸囧畾璇鋒眰鏄惁涓哄紓姝ユ柟寮忓鐞? true 鎰忓懗鐫璋冪敤 send() 鏂規(guī)硶鍚庤剼鏈戶緇悜涓嬫墽琛? 涓嶉渶瑕佺瓑寰呭搷搴? false 鎰忓懗鐫鑴氭湰灝嗙瓑寰呭搷搴斾箣鍚庢墠鑳界戶緇墽琛?/p>
|
send(content) |
Sends the request 鍙戦佽姹?/td>
|
setRequestHeader("label","value") |
Adds a label/value pair to the http header to be sent 鍦ㄨ鍙戦佺殑 HTTP 澶翠腑娣誨姞 鏍囩/鍙栧?/td>
|
Properties 灞炴?/h3>
Property 灞炴?/th>
| Description 鎻忚堪 |
onreadystatechange |
An event handler for an event that fires at every state change 姣忔鐘舵佹敼鍙樻椂闄ら潪鐨勪簨浠跺鐞嗗櫒 |
readyState |
Returns the state of the object:
0 = uninitialized 1 = loading 2 = loaded 3 = interactive 4 = complete 榪斿洖瀵硅薄鐨勭姸鎬?br> 0 = 鏈垵濮嬪寲 1 = 杞藉叆涓?br>2 = 宸茶澆鍏?br>3 = 浜や簰 4 = 瀹屾垚
|
responseText |
Returns the response as a string 灝嗗搷搴斿仛涓哄瓧絎︿覆榪斿洖 |
responseXML |
Returns the response as XML. This property returns an XML document object, which can be examined and parsed using W3C DOM node tree methods and properties 灝嗗搷搴斿仛涓篨ML榪斿洖. 榪欎釜灞炴ц繑鍥炰竴涓?XML 鏂囨。瀵硅薄, 鍙互鐢?W3C 鐨?DOM 鑺傜偣鏍?wèi)鏂规硶鍜屽睘鎬ц繘琛屾绱㈠垎鏋?/td>
|
status |
Returns the status as a number (e.g. 404 for "Not Found" or 200 for "OK") 灝嗙姸鎬佸仛涓烘暟瀛楄繑鍥?渚嬪 404 涓?Not Found" 鎴栬?200 涓?"OK") |
statusText |
Returns the status as a string (e.g. "Not Found" or "OK") 灝嗙姸鎬佸仛涓哄瓧絎︿覆榪斿洖(渚嬪 "Not Found" 鎴栬?"OK") |
銆

]]>