鏍?wèi)缁撴瀯鍖? | 緇勭粐緙栫爜鍖? |
浜哄憳綆$悊鍖? |
錛?TABLE border="1" width="100%" height="100%"錛?br /> 錛淭R錛?br /> 錛淭D rowspan="2"錛烇紲FONT face="瀹嬩綋"錛烇紲/FONT錛烇紲/TD錛?br /> 錛淭D錛烇紲/TD錛?br /> 錛?TR錛?br /> 錛淭R錛?br /> 錛淭D錛烇紲/TD錛?br /> 錛?TR錛?br /> 錛?TABLE錛?/td> |
錛渄iv id="divTree" style="width:100%; height:100%;background-color:#f5f5f5;border :1px solid Silver;overflow:auto;"錛?br /> 錛?div錛?/td> |
錛渄iv id="divContent" style="height:100%; overflow-y:auto;" width="100%"錛?br /> 錛渢able id="tbList" border="1" width="100%"錛?br /> 錛渢r seqNo="1"錛烇紲td錛?br /> 錛渢able border="1" width="100%"錛?br /> 錛渢r錛?br /> 錛渢d width="5%"錛烇紲input type="checkbox" value="on"錛烇紲/input錛?錛?td錛?br /> 錛渢d width="0%" style="display:none"錛?錛渋nput type="text" size="20"錛烇紲/input錛烇紲/td錛?br /> 錛渢d width="40%"錛烇紲input type="text" size="20"錛烇紲/input錛烇紲/td錛?br /> 錛渢d width="25%"錛?br /> 錛渟elect size="1" name="D1"錛?br /> 錛渙ption value="0"錛炵敺錛?option錛?br /> 錛渙ption selected="true" value="1"錛炲コ錛?option錛?br /> 錛?select錛?br /> 錛?td錛?br /> 錛?tr錛?br /> 錛?table錛? 錛?td錛烇紲/tr錛?br /> 錛?table錛?br /> 錛?div錛? |
涓夈€?鍓嶇欏甸潰鐨勪富瑕佺紪鐮?br />
1. 鏍?wèi)鐨勫疄鐜?br />
鍦╓EB涓婂疄鐜版爲(wèi)緇撴瀯錛屽悓鏍鋒垜浠槸閫氳繃Ajax鏉ュ疄鐜扮殑銆傛爲(wèi)涓婂彲浠ユ樉紺鴻嚜瀹氫箟鐨勫浘鏍囷紝鍙互鎻掑叆銆佸垹闄ゃ€佺粨鐐廣€傚茍涓旂粨鐐瑰彲浠繪剰縐誨姩銆傝繖閲屾垜浠笉閲嶇偣璁叉爲(wèi)鐨勫疄鐜版妧鏈紝鎴戜滑宸茬粡灝佽濂戒簡(jiǎn)錛屼綘鍙鎸夎姹傚幓鏀瑰姩灝辨槸浜?jiǎn)銆?
1) 閿帴鏍?wèi)鍨嬫枃錃g
鍦紲head錛炰笌錛?head錛炰箣闂撮敭鎺ユ垜浠殑涓庢爲(wèi)鏈夊叧鐨勬枃浠? 浠g爜濡備笅錛?br />
錛渓ink rel="STYLESHEET" type="text/css" href="css/dhtmlXTree.css"錛?br /> 錛渟cript src="js/dhtmlXCommon.js"錛烇紲/script錛?br /> 錛渟cript src="js/dhtmlXTree.js"錛烇紲/script錛? |
錛渂ody onload="preLoadImages();doOnLoad();"錛?/td> |
//doOnLoad瀹炵幇瑁呰澆騫舵樉紺烘爲(wèi)銆傝緗爲(wèi)灞炴€х瓑銆?br /> function doOnLoad(){ 銆€OrgTree=new dhtmlXTreeObject(document.getElementById('divTree'),"100%","100%",0); 銆€//dhtmlXTreeObject鏄爲(wèi)瀵硅薄錛岄€氳繃鏂板緩瀵硅薄錛屾寚瀹氭爲(wèi)鏄劇ず鐨凞IV鍙畾涔夋爲(wèi)銆?br /> 銆€OrgTree.setImagePath("imgs/");//璁劇疆鏍?wèi)鐨勫泟囨墍鍦ㄤ綅緗?br /> 銆€OrgTree.setDragHandler();//璁劇疆鏍?wèi)缁撶傄?guī)嫋鍔?br /> 銆€OrgTree.enableDragAndDrop(true) //璁劇疆鏍?wèi)缁撶傄?guī)槸鍚﹀彲鎷栧姩 銆€OrgTree.setDragHandler(myDragHandler); //璁劇疆鏍?wèi)缁撶傄?guī)嫋鍔ㄦ椂鎵€鎵ц鐨勬柟娉?br /> 銆€OrgTree.setOnClickHandler(mySelectHandler); //璁劇疆鏍?wèi)鍗曞嚴(yán)L椂鎵€鎵ц鐨勬柟娉?br /> 銆€//OrgTree.setXMLAutoLoading("Org.jsp");//瑁呰澆鏍?wèi)缁撶傄?guī)暟鎹€傛暟鎹潵婧愬Org.jsp鎵€榪斿洖鐨刋ML鏍煎紡鐨勫瓧絎︿覆錛屾暟鎹槸鍔ㄦ€佽杞斤紝涓斿綋灞曞紑鏃舵墠瑁呰澆銆?br /> 銆€OrgTree.loadXML("root.xml?0");//瑁呰澆鏍?wèi)缁撶傄?guī)暟鎹€傛暟鎹潵婧恟oot.xml鏂囦歡錛屽茍涓斾粠xml鏂囦歡鐨処D鍙蜂負(fù)0澶勮鍙栨暟鎹€?br /> 銆€//OrgTree.loadXML("Org.jsp");//瑁呰澆鏍?wèi)缁撶傄?guī)暟鎹€傛暟鎹潵婧愬Org.jsp鎵€榪斿洖鐨刋ML鏍煎紡鐨勫瓧絎︿覆,騫朵笖鏄竴嬈℃€у叏閮ㄨ杞芥暟鎹€? } //preLoadImages鏂規(guī)硶瀹炵幇鏍?wèi)鎺т欢鐨勫浘鏍囧畾涔?br /> function preLoadImages(){ 銆€var imSrcAr = new Array("line1.gif","line2.gif","line3.gif","line4.gif","minus2.gif","minus3.gif", "minus4.gif","plus2.gif","plus3.gif","plus4.gif","book.gif","books_open.gif","books_close.gif", "magazine_open.gif","magazine_close.gif","tombs.gif","tombs_mag.gif","book_titel.gif") 銆€var imAr = new Array(0); 銆€for(var i=0;i錛渋mSrcAr.length;i++){ imAr[imAr.length] = new Image(); imAr[imAr.length-1].src = "imgs/"+imSrcAr[i] 銆€} } |
聽(tīng)緇勭粐綆$悊鐨勫疄鐜?br />
緇勭粐鍙互澧炲姞銆佸垹闄ゃ€佺紪杈戙€傚悓鏃跺綋閫夋嫨鏍?wèi)缁撶傄?guī)椂搴旇鎶婄粍緇囨樉紺哄嚭鏉ヤ緵緙栬緫錛屾煡鐪嬨€備負(fù)浜?jiǎn)瀹炵幇杩欎簺鍔熻兘锛屼綘鍙鎸夎姹傚幚L敼鍔ㄥ氨鏄簡(jiǎn)銆?br />
1) 鍏ㄥ眬鍙橀噺鐨勫畾涔?br />
璁稿鍦版柟鎴戜滑瑕佺敤鍒頒竴浜涘叕鍏卞彉閲忥紝鎴戜滑鍦紲script錛炰笌錛?script錛炰箣闂村畾涔夊叏灞€鍙橀噺, 浠g爜濡備笅錛?br />
var OrgTree = null; //緇勭粐鏍?wèi)Dom var nextSeq = 0;//浜哄憳綆$悊鐨勯『搴忓彿錛堟祦姘村彿錛?br /> var personDom;//浜哄憳Dom var CurrNodeId;//褰撳墠緇撶偣Id |
2) 鍒濆鍖?br />
褰撻〉闈㈡墦寮€鏃舵垜浠鎺т歡濂介偅閮ㄥ垎璇ユ樉紺猴紝閭i儴鍒嗚闅愯棌銆備笖瀵瑰叏灞€鍙橀噺鐨勮祴鍊肩瓑,緇勭粐綾誨瀷瑁呰澆銆傚湪欏甸潰鐨勬枃妗f墦寮€鏃惰杞借嚜瀹氫箟鏂規(guī)硶init錛堬級(jí), init鏂規(guī)硶瀹炵幇鍒濆鍖栥€?br />
錛渂ody onload="init();"錛?/td> |
init鏂規(guī)硶瀹炵幇濡備笅錛?br />
function init(){ 銆€//瀹氫箟personDom涓轟竴涓猉MLDOM'瀵硅薄 銆€personDom= new ActiveXObject('Microsoft.XMLDOM'); 銆€personDom.async = false; 銆€//瀹氫箟stylesheet涓轟竴涓猉MLDOM'瀵硅薄錛屼笖stylesheet涓簆ersonDom紜畾鏄劇ず椋庢牸 銆€stylesheet = new ActiveXObject('Microsoft.XMLDOM'); 銆€stylesheet.async = false; 銆€stylesheet.load("addOrgPerson.xsl"); //瑁呰澆stylesheet鐨勯鏍煎畾涔夋枃浠?br /> 銆€//瑁呰澆緇勭粐綾誨瀷鏁版嵁 銆€var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 銆€xmlhttp.open("POST","Org.jsp?mode=GetOrgType", false); 銆€xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 銆€xmlhttp.send(); 銆€retXml=xmlhttp.responseText; 銆€// alert(retXml); 銆€//鎶婄粍緇囩被鍨嬫彃鍏ヤ笅鎷夊垪琛ㄦ帶浠朵腑 銆€var OrgDoc = new ActiveXObject('Microsoft.XMLDOM'); 銆€OrgDoc.async = false; 銆€OrgDoc.loadXML(retXml); 銆€var root = OrgDoc.documentElement; 銆€oNodeList = root.childNodes; 銆€txtType.options.length =oNodeList.length; 銆€for (var i=0; i錛渙NodeList.length; i++) 銆€{ Item = oNodeList.item(i); var OrgTypeId=Item.childNodes(0).text; var OrgTypeName=Item.childNodes(1).text; txtType.options[i].value=OrgTypeId; txtType.options[i].text=OrgTypeName; // txtType.options[0]. 銆€} } |
3) 緙栧啓鏍?wèi)鎷栧姩鍙?qiáng)閫夋嫨緇撶偣鐨勬柟娉?br />
// myDragHandler瀹炵幇鏍?wèi)缁撶傄?guī)嫋鍔ㄦ椂閲嶆柊鎸囧畾鐖跺瓙鍏崇郴銆?br /> function myDragHandler(idFrom,idTo){ 銆€var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 銆€xmlhttp.open("POST","Org.jsp?mode=moveOrg&orgId=" + idFrom + "&newparentOrgId=" + idTo, false); 銆€xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 銆€xmlhttp.send(); 銆€retXml=xmlhttp.OrgponseText; 銆€return true; } // mySelectHandler瀹炵幇閫夋嫨鏍?wèi)缁撶偣瀵咕p葷粺鐨勬帶鍒訛紝鍚屾椂鏄劇ず緇勭粐淇℃伅鍙?qiáng)璇ゾl勭粐涓嬬殑浜哄憳銆?br /> function mySelectHandler(id){ 銆€tbOrg.style.display="block"; 銆€divOrgMemo.style.display="none"; 銆€divOrgInfo.style.display="none"; 銆€if(id==1) 銆€{ divOrgMemo.style.display="block"; div1.style.display="none"; div2.style.display="none"; div3.style.display="none"; divContent.style.display="none"; div5.style.display="none"; 銆€} 銆€else 銆€{ divOrgInfo.style.display="block"; div1.style.display="block"; div2.style.display="block"; div3.style.display="block"; divContent.style.display="block"; div5.style.display="block"; 銆€} 銆€CurrNodeId=id; 銆€//瑁呰澆緇勭粐淇℃伅騫舵樉紺哄湪緙栫爜鍜屽悕縐扮殑鏂囨湰鎺т歡涓娿€? 銆€loadOrg(id); 銆€//瑁呰澆鏌愮粍緇囦笅浜哄憳?shù)俊鎭? 銆€var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 銆€xmlhttp.open("POST","Org.jsp?mode=GetPerson&orgId=" + id, false); 銆€xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 銆€xmlhttp.send(); 銆€retXml=xmlhttp.responseText; 銆€personDom.loadXML (retXml); 銆€//緇欎漢鍛樹(shù)俊鎭殑姣忚鍔犱笂搴忓彿 銆€for(var i=0; i錛減ersonDom.documentElement.childNodes.length; i++){ personDom.documentElement.childNodes[i].setAttribute("seqNo", nextSeq); nextSeq++; 銆€} 銆€//浜哄憳?shù)俊鎭槃·哄湪divContent涓婇潰 銆€divContent.innerHTML = personDom.transformNode(stylesheet); }; //瑁呰澆緇勭粐淇℃伅騫舵樉紺哄湪緙栫爜鍜屽悕縐扮殑鏂囨湰鎺т歡涓娿€?br /> function loadOrg(OrgId){ 銆€if(OrgId == null){ OrgId = OrgTree.getSelectedItemId(); 銆€} 銆€if(OrgId == ""){ tbOrg.style.display = "none"; return; 銆€} 銆€var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 銆€xmlhttp.open("POST","Org.jsp?mode=loadOrg&OrgId=" + OrgId, false); 銆€xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 銆€xmlhttp.send(); 銆€retXml=xmlhttp.responseText; 銆€var OrgDoc = new ActiveXObject('Microsoft.XMLDOM'); 銆€OrgDoc.async = false; 銆€OrgDoc.loadXML(retXml); 銆€if(OrgId != 1){ txtCode.value = OrgDoc.selectSingleNode("http://OrgCode").text; txtName.value = OrgDoc.selectSingleNode("http://OrgName").text; 銆€} 銆€tbOrg.style.display = "block"; } |
4) 寤虹珛緇勭粐
緇勭粐寤虹珛涓昏鏄€氳繃璋冪敤XMLHTTP瀵硅薄鏉ュ疄鐜般€傛垜浠富瑕佸浼?xì)濡備綍璋冪敤XMLHTTP銆傜粍緇囧緩绔嬪簲璇ュ湪鍚庡彴瀹炵幇錛屾妸緇勭粐淇℃伅鎻掑叆鏁版嵁搴撲腑銆傝繖閲屾垜浠€氳繃JSP鏉ュ疄鐜般€傛垜浠殑Org.jsp 鏂囦歡涓湁涓猚reateOrg鏂規(guī)硶錛岃鏂規(guī)硶浼犻€掍竴涓埗ID銆?br />
function createOrg(parentOrgId){ 銆€var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 銆€xmlhttp.open("POST","Org.jsp?mode=createOrg&parentOrgId=" + parentOrgId, false); 銆€xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 銆€xmlhttp.send(); 銆€retXml=xmlhttp.responseText; 銆€var orgId = (new Number(retXml)).toString(); 銆€return orgId; } |
5) 鍒犻櫎緇勭粐
緇勭粐鍒犻櫎鍚屾牱鏄皟鐢∣rg.jsp 鏂囦歡涓殑deleteOrg鏂規(guī)硶鏉ュ疄鐜幫紝璇ユ柟娉曚紶閫掓墍鍒犻櫎鐨勭粨鐐笽D銆?br />function deleteOrg(){
銆€var OrgId = OrgTree.getSelectedItemId();
銆€var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
銆€xmlhttp.open("POST","Org.jsp?mode=deleteOrg&OrgId=" + OrgId, false);
銆€xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
銆€xmlhttp.send();
}
6) 緙栬緫緇勭粐
緇勭粐淇敼鏄皟鐢∣rg.jsp 鏂囦歡涓殑modifyOrg鏂規(guī)硶鏉ュ疄鐜幫紝璇ユ柟娉曚紶閫掓墍淇敼鐨勭粨鐐笽D銆傚悓鏃朵慨鏀圭殑鏁版嵁閫氳繃鑷畾涔夌殑XML鏍煎紡鐨勫瓧絎︿覆浼犻€?榪欐椂閫氳繃send瀛楃涓叉潵瀹炵幇銆備慨鏀瑰墠鏁版嵁涓€寰嬭楠岃瘉鍏跺悎娉曟€э紝騫舵彁紺洪敊璇俊鎭€?br />
3. 浜哄憳綆$悊鐨勫疄鐜?br />function modifyOrg(){
銆€if(OrgTree.getSelectedItemId() == ""){
return "N";
銆€}
銆€if(txtCode.value == ""){
alert("璇瘋緭鍏ョ紪鐮侊紒");
return "N";
銆€}
銆€if(txtName.value == ""){
alert("璇瘋緭鍏ュ悕縐幫紒");
return"N";
銆€}
銆€var OrgId = OrgTree.getSelectedItemId();
銆€var OrgKind;
銆€//alert(txtType.options[txtType.selectedIndex].value)
銆€var strModify = "錛?xml version='1.0' encoding='gb2312'?錛? +
銆€"錛渄ata錛? +
銆€"錛淥rgCode錛烇紲![CDATA[" + txtCode.value + "]]錛烇紲/OrgCode錛? +
銆€"錛淥rgName錛烇紲![CDATA[" + txtName.value + "]]錛烇紲/OrgName錛? +
銆€"錛淥rgKind錛烇紲![CDATA[" + txtType.options[txtType.selectedIndex].value+ "]]錛烇紲/OrgKind錛? +
銆€"錛?data錛?;
銆€var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
銆€xmlhttp.open("POST","Org.jsp?mode=modifyOrg&OrgId=" + OrgId, false);
銆€xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
銆€xmlhttp.send(strModify);
銆€OrgTree.setItemText(OrgTree.getSelectedItemId(),txtName.value);
}
浜哄憳鍙互澧炲姞銆佸垹闄ゃ€佺紪杈戙€傚悓鏃跺綋閫夋嫨鏍?wèi)缁撶傄?guī)椂搴旇鎶婁漢鍛樻樉紺哄嚭鏉ヤ緵緙栬緫銆佹煡鐪?.....
1) 澧炲姞浜哄憳
浜哄憳澧炲姞瀹炵幇鐨勫師鐞嗘槸鍦╬ersonDom涓姞鍏ョ粨鐐筽eorsone錛岃緇撶偣鐩稿綋浜庤〃鐨勪竴琛岋紝璁劇疆灞炴€с€傚悓鏃跺湪peorsone涓笉緇у湴鍔犲叆鍏跺畠緇撶偣錛屼唬琛ㄦ暟鎹簱鐨勫瓧孌碉紝涓斿繀欏諱笌XLT鏂囦歡鐨勬爣鍙峰悓鍚嶃€傝繖浜涚粨鐐圭浉褰撹琛岀殑鍒椼€傛渶鍚庡湪琛ㄤ腑鎻掑叆涓€琛岋紝琛屼笂鎻掑叆涓€鍒楋紝騫舵樉紺轟箣銆?br />function addPerson(){
銆€var seqNo = nextSeq;
銆€nextSeq++;
銆€var peorsonNode = personDom.createNode("1", "peorsone","");
銆€peorsonNode.setAttribute("isNew", "Y");
銆€peorsonNode.setAttribute("isDelete", "N");
銆€peorsonNode.setAttribute("seqNo", seqNo);
銆€personDom.documentElement.appendChild(peorsonNode);
銆€var PersonId= personDom.createNode("1", "personId", "");
銆€peorsonNode.appendChild(PersonId);
銆€var personCode= personDom.createNode("1", "personCode", "");
銆€peorsonNode.appendChild(personCode);
銆€var PersonName= personDom.createNode("1", "personName", "");
銆€peorsonNode.appendChild(PersonName);
銆€var Sex= personDom.createNode("1", "sex", "");
銆€peorsonNode.appendChild(Sex);
銆€var tr = tbList.insertRow(tbList.rows.length);
銆€tr.setAttribute("seqNo", seqNo);
銆€var td = tr.insertCell(0);
銆€td.innerHTML = peorsonNode.transformNode(stylesheet);
}
2) 鍒犻櫎浜哄憳
浜哄憳鍒犻櫎鍚屾牱鏄皟鐢∣rg.jsp 鏂囦歡涓殑deletePerson鏂規(guī)硶鏉ュ疄鐜幫紝璇ユ柟娉曚紶閫掓墍鍒犻櫎鐨勪漢鍛業(yè)D銆傚浣曠‘瀹氫漢鍛業(yè)D鏄€氳繃璇誨彇闅愯棌鐨処D錛屽茍鎵弿鏁翠釜琛紝鐪嬮偅浜涜閫変腑銆傝繖閲屾垜浠娉ㄦ剰鏄彁渚涘欏歸€夋嫨鐨勩€?br />function deletePerson(){
銆€for(var i=0; i錛渢bList.rows.length; i++){
var row=tbList.rows[i].cells[0].children[0].rows[0];
if(row.cells[0].children[0].checked)
{
銆€var personId=row.cells[1].children[0].value;
銆€if(personId錛?)
銆€{
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST","Org.jsp?mode=deletePerson&personId=" + personId, false);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send();
銆€}
銆€tbList.deleteRow(i);
銆€i--;
}
銆€}
}
3) 緙栬緫浜哄憳
浜哄憳?shù)慨鏀规垜浠鍒ゅ畾鍝簺琛岃淇敼浜?jiǎn)銆傚垰澧炲姞浣嗘病淇濆瓨鐨勮搴旇鏄柊澧炶€屼笉鏄慨鏀圭殑銆?br />function save(){
銆€if( modifyOrg()=="N")
銆€{
return;
銆€}
銆€for(var i=0; i錛渢bList.rows.length; i++)
銆€{
var row=tbList.rows[i].cells[0].children[0].rows[0];
var personId=row.cells[1].children[0].value;
var seqNo = tbList.rows[i].getAttribute("seqNo");
var staffNode = personDom.selectSingleNode("http://peorsone[@seqNo='" + seqNo + "']");
var personCode=row.cells[2].children[0].value;
var personName=row.cells[3].children[0].value;
var sex=row.cells[4].children[0].value; //alert(staffN;ode );
if(staffNode.getAttribute("isNew") == "Y")
{
銆€createPerson(CurrNodeId,personCode,personName,sex);
}
else
{
銆€var strXML = "錛?xml version='1.0' encoding='gb2312'?錛? +
"錛渄ata錛? +
"錛減ersonCode錛烇紲![CDATA[" + personCode+ "]]錛烇紲/personCode錛? +
"錛減ersonName錛烇紲![CDATA[" + personName + "]]錛烇紲/personName錛? +
"錛渟ex錛烇紲![CDATA[" + sex+ "]]錛烇紲/sex錛? +
"錛減ersonId錛烇紲![CDATA[" + personId+ "]]錛烇紲/personId錛? +
"錛?data錛?;
銆€//alert(strXML );
銆€var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
銆€xmlhttp.open("POST","Org.jsp?mode=modifyPerson", false);
銆€xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
銆€xmlhttp.send(strXML );
}
銆€}
}
鍥涖€?XML涓嶺SL鏂囦歡璁捐
XML鏄鍙墿灞曠殑鏍囪璇█錛屽畠鍏鋒湁寮€鏀劇殑銆佸彲鎵╁睍鐨勩€佸彲鑷弿榪扮殑璇█緇撴瀯錛屽畠宸茬粡鎴愪負(fù)緗戜笂鏁版嵁鍜屾枃妗d紶杈撶殑鏍囧噯銆俋SLT鐨勭洰鐨勬槸灝嗕俊鎭唴瀹逛笌 Web 鏄劇ず鍒嗙錛孒TML 閫氳繃鎸夋娊璞℃蹇碉紙濡傛钀姐€侀噸鐐瑰拰緙栧彿鍒楄〃錛夊畾涔夋樉紺烘潵瀹炵幇璁懼鐙珛鎬с€俋SLT鐢ㄦ潵鍏蜂綋鏄劇ず鎺т歡錛岃緗帶浠墮鏍箋€?br />
Ajax涓昏浣跨敤XML鍜孹SLT榪涜鏁版嵁浜ゆ崲涓庡鐞嗐€?br />
1. 鏍?wèi)淇℃伅鐨刋ML鏂囦歡(瑙乺oot.xml鏂囦歡)
XML鏄爣璁拌璦€錛屽厓绱犲繀欏繪垚瀵瑰嚭鐜般€傛爲(wèi)緇撴瀯涓互tree涓烘牴緇撶偣錛屼互item涓虹粨鐐逛綋錛屽睘鎬ext鎸囧嚭緇撶偣鎵€鏄劇ず鐨勬枃鏈紝id鎸囧嚭鍞竴鐨勬墍鏍囪瘑鍙楓€?br />
錛?xml version='1.0' encoding='gb2312'?錛?br /> 錛渢ree id="0"錛?br /> 錛渋tem child="1" text="緇勭粐" id="1" 錛?br /> 錛?item錛? 錛?tree錛?/td> |
錛?xml version="1.0" encoding="gb2312"?錛?br /> //榪欐槸瀹氫箟xml鏂囦歡鐨勯琛屻€傜敤鏉ユ寚鏄庣増鏈強(qiáng)瀛楃闆?br /> 錛渪sl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" language="JavaScript"錛?br /> //榪欓噷瀹氫箟浜?jiǎn)stylesheet 鍏冪礌銆傚茍鎸囧嚭鍏跺浗闄呭懡鍚嶇殑緇勭粐鍙?qiáng)璇a€銆? 錛渪sl:template match="/"錛?br /> 錛渪sl:apply-templates select="peorsones"/錛?br /> 錛?xsl:template錛?br /> //涓婇潰鏄尮閰嶇殑瑙勫垯銆?/"琛ㄧず浠庢牴緇撳紑濮嬪幓鍖歸厤銆傚尮閰嶅埌涓嬮潰鐨刾eorsones鏍囪銆傝繖鏄鍒欒〃杈懼紡鏈夊叧鐨勫闂€傛垜浠彧瑕佺悊瑙e氨鍙互銆?br /> 錛渪sl:template match="peorsones"錛?br /> //褰撳尮閰嶄笂peorsones鏃舵墍瑕佸仛鐨勪簨鎯呫€?br /> 錛渢able id="tbList" border="1" width="100%"錛?br /> //瀹氫箟涓€涓猧d涓?tbList鐨勮〃鏍箋€傛琛ㄦ牸鏄樉紺哄湪WEB涓婄殑 錛渪sl:for-each select="peorsone"錛?br /> //寰幆鍖歸厤peorsone 錛渢r錛?br /> //瀹氫箟tbList琛ㄦ牸鐨勪竴琛岋紝騫跺湪琛屼笂澧炲姞涓€涓彨seqNo鐨勫睘鎬у悕錛屽€間負(fù)鍖歸厤鍒扮殑seqNo錛堝簭鍙鳳級(jí) 錛渪sl:attribute name="seqNo"錛烇紲xsl:value-of select="@seqNo"/錛烇紲/xsl:attribute錛?br /> 錛渢d錛?br /> //瀹氫箟琛屼笂鐨勪竴鍒楋紝鍒楀張鍘誨尮閰?br /> 錛渪sl:apply-templates select="."/錛?br /> 錛?td錛?br /> 錛?tr錛?br /> 錛?xsl:for-each錛? 錛?table錛?br /> 錛?xsl:template錛?br /> 錛渪sl:template match="peorsone"錛?br /> 錛渢able border="1" width="100%"錛?br /> 錛渢r錛?br /> //瀹氫箟瀹戒負(fù)5%鐨勪竴鍒楋紝鍦ㄨ鍒椾笂鎻掑叆涓€涓猚heckbox鎺т歡 錛渢d width="5%"錛?br /> 錛渋nput type="checkbox" value="on" size="10"錛烇紲/input錛?br /> 錛?td錛?br /> //瀹氫箟涓€涓笉鏄劇ず鐨勫垪錛屽湪璇ュ垪涓婃彃鍏ヤ竴涓猼ext鎺т歡錛宼ext鐨勫€間負(fù)鍖歸厤鍒扮殑personId錛堜漢鍛業(yè)d錛?br /> 錛渢d style="display:none"錛?br /> 錛渋nput type="text" size="25"錛?br /> 錛渪sl:attribute name="value"錛烇紲xsl:value-of select="personId"/錛烇紲/xsl:attribute錛?br /> 錛?input錛? 錛?td錛?br /> 錛渢d width="30%"錛? 錛渋nput type="text" size="20"錛? 錛渪sl:attribute name="value"錛烇紲xsl:value-of select="personCode"/錛烇紲/xsl:attribute錛? 錛?input錛? 錛?td錛? 錛渢d width="40%"錛? 錛渋nput type="text" size="40"錛?br /> 錛渪sl:attributename="value"錛烇紲xsl:value-of select="personName"/錛烇紲/xsl:attribute錛? 錛?input錛?br /> 錛?td錛?br /> //瀹氫箟涓€涓獁idth涓?8%鐨勫垪錛屽湪璇ュ垪涓婃彃鍏ヤ竴涓笅鎷夊垪琛╯elect 鎺т歡錛宻elect鐨勫€煎鏋滃尮閰嶅埌涓?鏃跺垯涓?鐢?錛?鏃跺垯涓?濂? 錛渢d width="28%"錛?br /> 錛渟elect size="1"錛?br /> 錛渙ption value="0"錛?br /> 錛渪sl:if test=".[sex=0]"錛?br /> 錛渪sl:attribute name="selected"錛瀟rue錛?xsl:attribute錛?br /> 錛?xsl:if錛?br /> 鐢?br /> 錛?option錛?br /> 錛渙ption value="1"錛?br /> 錛渪sl:if test=".[sex=1]"錛?br /> 錛渪sl:attribute name="selected"錛瀟rue錛?xsl:attribute錛?br /> 錛?xsl:if錛? 濂籌紲/option錛?br /> 錛?select錛?br /> 錛?td錛?br /> //瀹氫箟涓€鍒楋紝鍦ㄨ鍒椾笂鎻掑叆涓€涓猙utton鎺т歡錛宱nclick 浜嬩歡涓鴻嚜瀹氫箟鐨勬柟娉曪紝璇ユ柟娉曚紶閫掑綋鍓嶅崟鍑葷殑鎸夌航 錛渢d width="*"錛? 錛渂utton onclick="openPersonRolePage(this)" style="width: 36; height: 21"錛炶鑹詫紲/button錛?br /> 錛?td錛?br /> 錛?tr錛?br /> 錛?table錛?br /> 錛?xsl:template錛?br /> 錛?xsl:stylesheet錛?/td> |
浜斻€?鏁版嵁鎺ュ彛鐨勫疄鐜?/strong>錛堣Org.jpg鏂囦歡錛?br />
Org.JSP鏂囦歡鐢ㄦ潵鍦ㄦ湇鍔″櫒涓婅繍琛孞ava鐨勭被涓庡墠鍙皐eb欏典箣闂存灦璧蜂竴搴фˉ銆傚彇鍒頒腑闂翠歡鐨勬帴鍙d綔鐢ㄣ€?br />
榪欓噷鍒嗘瀽閮ㄥ垎浠g爜錛?br />
錛?@ page contentType="text/html; charset=GBK" %錛?br /> 錛?@ page import="java.sql.*" %錛?br /> 錛?@ page import="javax.naming.*" %錛?br /> 錛?@ page import="javax.sql.*" %錛?br /> 錛?@ page import="tool.*" %錛?br /> 錛?@ page import="orgNew.*" %錛?br /> 錛?@ page import="org.w3c.dom.*" %錛?br /> //涓婇潰涓昏鏄紩鐢ㄤ竴浜沯ava綾?br /> 錛? try{ 銆€//request.setCharacterEncoding("GBK"); 銆€Document doc = XmlTool.createDocumentFromRequest(request); 銆€//寤虹珛web闈㈡枃妗h姹傜殑鏂囨。瀵硅薄 銆€Connection conn = ConnTool.getConnectionFromPool(); 銆€//鑾峰彇璇鋒眰鐨勬柟娉曞悕 銆€String mode=request.getParameter("mode"); 銆€//out.println("ccc"); 銆€//濡傛灉鏂規(guī)硶涓病鏈夊叾瀹冨弬鏁板垯璇誨彇緇勭粐鏍?wèi)鏁版?br /> 銆€if(mode == null){ /* int OrgId = Integer.parseInt(request.getParameter("id")); String str = orgManager.getChildOrg(OrgId, conn); out.println(str); */ 銆€String str = orgManager.getTree(conn); 銆€//out.println(str); 銆€out.println(str); }else if(mode.equals("createOrg")){ 銆€//濡傛灉鏄痗reateOrg鏂規(guī)硶鍒欏緩绔嬩竴涓粍緇?br /> 銆€int parentOrgId = Integer.parseInt(request.getParameter("parentOrgId")); 銆€//鍙栧嚭浼犻€掓潵鐨勭涓€涓弬鏁皃arentOrgId 銆€int OrgId = orgManager.createOrg(parentOrgId, conn); 銆€//璋冪敤orgManager 綾葷殑createOrg鏂規(guī)硶鏉ュ緩绔嬩竴涓粍緇?br /> 銆€out.println(OrgId); 銆€//榪斿洖緇撴灉 } conn.close(); } catch(Exception e){ 銆€e.printStackTrace(); } %錛?/td> |
鍏€?鍚庡彴鏁版嵁鐨勫疄鐜?/b>
1. 鏁版嵁緇撴瀯鐨勫畾涔?br />
榪欓噷錛屾垜浠富瑕佹湁涓変釜琛ㄣ€備竴涓槸緇勭粐緇撴瀯琛紝涓€涓槸浜哄憳琛╬erson錛屼竴涓粍緇囦漢鍛樺叧鑱旇〃orgPerson銆傜粍緇囩粨鏋勮〃鏈塐rgCode錛堢粍緇囦唬鐮侊級(jí)銆丱rgName錛堢粍緇囧悕縐幫級(jí)銆乷rgId錛堢粍緇嘔d錛? parentOrgId錛堢埗Id錛夈€備漢鍛樿〃鏈塸ersonCode錛堜漢鍛樹(shù)唬鐮侊級(jí)銆乸ersonName錛堜漢鍛樺悕縐幫級(jí), sex錛堟€у埆錛夈€乸ersonId錛堜漢鍛業(yè)d錛夈€俹rgPerson琛ㄦ湁orgId, personId銆?br />
2. 鏁版嵁搴撶殑榪炴帴
WEB搴旂敤紼嬪簭甯哥敤MySQL浣滃悗鍙版暟鎹簱錛岃繖鏄洜涓篗ySQL綆€鍗曘€侀珮鏁堛€傝繖閲屾垜浠篃鐢∕ySQL浣滀負(fù)鏁版嵁搴撱€侸ava涓敤jdbc榪炴帴鏁版嵁搴撱€備笅闈㈡槸榪炴帴鏁版嵁搴撶殑CODE錛?br />
public static Connection getConnectionFromPool() throws Exception { 銆€Context ctx = new InitialContext(); 銆€DataSource ds = (DataSource) ctx.lookup("java:/erpds"); 銆€return ds.getConnection(); } /** * 鍙栨暟鎹簱閾炬帴瀵硅薄 * @return Connection 鏁版嵁搴撻摼鎺ュ璞?br /> * @throws Exception */ /* public static Connection getDirectConnection() throws Exception { 銆€Class.forName("com.sybase.jdbc2.jdbc.SybDriver"); 銆€String url = "jdbc:sybase:Tds:19.64.13.16:4100/wydb?charset=iso_1"; 銆€String user = "sa"; 銆€String password = "2860008"; 銆€Connection conn = DriverManager.getConnection(url, user, password); 銆€return conn; } */ |
. 涓氬姟閫昏緫灞傜殑瀹炵幇
鍚庡彴寮€鍙戞垜浠敤Java綾繪潵瀹炵幇銆傝繖閲屾垜浠紑鍙戜簡(jiǎn)涓€涓猳rgNew鍖咃紝綾誨悕涓簅rgManager銆傛綾誨皝瑁呬簡(jiǎn)涓庢暟鎹簱鎿嶄綔鏈夊叧鐨勬柟娉曘€傞€氳繃main鍙皟璇曠▼搴忕殑姝g‘鎬с€?br />
榪欓噷緇欏嚭浜?jiǎn)鏂板鍔犱竴涓粍緇囩殑鍏ㄩ儴浠g爜鍜岄€氳繃XML鍙栧緱鏍?wèi)缁撴瀯淇℃伅鐨勪唬鐮佸Q屾爲(wèi)緇撴瀯閫氳繃閫掑綊瀹炵幇銆?br />
package orgNew;// Java綾繪墍鎵撶殑鍖?br /> import tool.*; import java.sql.*; import java.util.*; // 寮曠敤Java綾葷殑 public class orgManager { 銆€public orgManager() { } 銆€public static void main(String[] args) throws Exception { Connection conn = tool.ConnTool.getDirectConnection();// 寮曠敤鏁版嵁璁塊棶綾?br /> conn.setAutoCommit(false); orgManager orgManager1 = new orgManager(); orgManager1.createOrg(0, conn); //嫻嬭瘯寤虹珛緇勭粐鏄惁姝g‘ 銆€} 銆€//寤虹珛涓€涓粍緇?br /> 銆€public static int createOrg(int parentOrgId, Connection conn) throws 銆€Exception { String sql = "insert into Org (OrgName, parentOrgId) values('鏂扮粍緇?, ?)"; PreparedStatement pstat = conn.prepareStatement(sql); pstat.setInt(1, parentOrgId); pstat.executeUpdate(); pstat.close(); Statement stat = conn.createStatement(); String sql2 = "select max(OrgId) from Org"; ResultSet rs = stat.executeQuery(sql2); rs.next(); int OrgId = rs.getInt(1); rs.close(); stat.close(); System.out.println(OrgId); return OrgId; 銆€} } //閫氳繃閫掑綊寰楀埌緇勭粐淇℃伅鐨刋ML鏍煎紡鐨勬暟鎹?br /> public static String getTree(Connection conn) throws Exception { 銆€StringBuffer ret = new StringBuffer();//瀹氫箟鍙紦鍐茬殑瀛楃嫻?br /> 銆€ret.append("錛?xml version='1.0' encoding='gb2312'?錛烇紲tree id='0'錛?);//瀹氫箟XML鏍煎紡鐨勫ご淇℃伅 銆€ret.append(" 錛渋tem child='1' text='緇勭粐' id='1' 錛?);//鎻掑叆緇撶偣浣撱€傛敞鏍?wèi)缁撶偣浠tem涓烘爣璁? 銆€ret.append(getChildTree(1, conn)); 銆€ret.append("錛?item錛?);//緇撶偣浣撶粨鏉熸爣璁?br /> 銆€ret.append("錛?tree錛?);//鏍?wèi)缁撴潫鏍囪?br /> 銆€return ret.toString();//榪斿洖瀛楃嫻?br /> } public static String getChildTree(int OrgId, Connection conn) throws Exception { 銆€StringBuffer ret = new StringBuffer(); 銆€String sql = "select a.OrgId, a.OrgName, a.OrgCode,count(b.parentOrgId) from Org a " + "left join Org b on a.OrgId = b.parentOrgId " + "where a.parentOrgId = ? " + "group by a.OrgId, a.OrgName"; 銆€PreparedStatement pstat = conn.prepareStatement(sql); 銆€pstat.setInt(1, OrgId); 銆€ResultSet rs = pstat.executeQuery(); 銆€while (rs.next()) { int childOrgId = rs.getInt(1); String childOrgName = rs.getString(2); String childOrgCode = rs.getString(3); if (childOrgCode == null) { 銆€childOrgCode = " "; } if (childOrgName == null) { 銆€childOrgName = "鏂扮粍緇?; } int childCount = rs.getInt(3); if (childCount 錛?0) { 銆€childCount = 1; } ret.append("錛渋tem child='" + childCount + "' text='" + childOrgName + "' id='" +childOrgId + "' code='"+childOrgCode+"'錛?); ret.append(getChildTree(childOrgId, conn)); ret.append("錛?item錛?); 銆€} 銆€rs.close(); 銆€pstat.close(); 銆€return ret.toString(); } |
鍏跺畠浠g爜瑙乷rgManager.java鏂囦歡銆?br />
涓冦€?鎬葷粨
鏈枃浠墮€氳繃涓€涓疄渚嬪叏闈粙緇嶄簡(jiǎn)Ajax寮€鍙戠殑鍚勪釜緇嗚妭銆傞€氳繃涓嶫2ee鐨勭粨鍚堟潵瀹炵幇涓夊眰鍒嗗竷寮忓紑鍙戠殑灞傛鍒掑垎錛屽悗鍙頒笌鍓嶇鐨勮皟鐢ㄣ€傛暟鎹殑璇誨彇銆佽闂強(qiáng)灞曠幇銆?
閫氳繃榪欎釜瀹炰緥錛屾垜浠彲瑙侊紝Ajax浣縒EB涓殑鐣岄潰涓庡簲鐢ㄥ垎紱匯€傛暟鎹笌鍛堢幇鍒嗙鐨勫垎紱伙紝鏈夊埄浜庡垎宸ュ悎浣溿€佸噺灝戦潪鎶€鏈漢鍛樺欏甸潰鐨勪慨鏀歸€犳垚鐨刉EB搴旂敤紼嬪簭閿欒銆佹彁楂樻晥鐜囥€佷篃鏇村姞閫傜敤浜庣幇鍦ㄧ殑鍙戝竷緋葷粺銆備篃鍙互鎶婁互鍓嶇殑涓€浜涙湇鍔″櫒璐熸媴鐨勫伐浣滆漿瀚佸埌瀹㈡埛绔紝鍒╀簬瀹㈡埛绔棽緗殑澶勭悊鑳藉姏鏉ュ鐞嗐€?br />
Ajax鏄紶緇焀EB搴旂敤紼嬪簭鐨勪竴涓漿鍙樸€備互鍓嶆槸鏈嶅姟鍣ㄦ瘡嬈$敓鎴怘TML欏甸潰騫惰繑鍥炵粰瀹㈡埛绔紙嫻忚鍣級(jí)銆侫jax鐞嗗康鐨勫嚭鐜幫紝鎻紑浜?jiǎn)鏃犲堜h柊鏇存柊欏甸潰鏃朵唬鐨勫簭騫曪紝騫舵湁浠f浛浼犵粺web寮€鍙戜腑閲囩敤form(琛ㄥ崟)閫掍氦鏂瑰紡鏇存柊web欏甸潰鐨勮秼鍔匡紝鍙互綆楁槸涓€涓噷紼嬬銆?br />
鎬諱箣錛孉jax閫傜敤浜庝氦浜掕緝澶氾紝棰戠箒璇繪暟鎹紝鏁版嵁鍒嗙被鑹ソ鐨刉EB搴旂敤銆?/p>
鍙﹀錛屾垜浠繀欏誨己璋冿紝浣跨敤 EJB 鍜?Web 鏈嶅姟榪涜鍒嗗竷寮忕殑銆佸熀浜庣粍浠剁殑寮€鍙戜嬌寰楁祴璇曞崟涓殑緇勪歡鍙樺緱闈炲父蹇呰銆傚鏋滄病鏈?GUI"闇€瑕佹祴璇曪紝鎮(zhèn)ㄥ氨蹇呴』榪涜浣庣駭錛坙ower-level錛夋祴璇曘€傛渶濂戒互榪欑鏂瑰紡寮€濮嬫祴璇曪紝鐪佸緱褰撴?zhèn)畣鍒嗗竷寮忕殑缁勪欢鎴?Web 鏈嶅姟浣滀負(fù)鎮(zhèn)ㄧ殑搴旂敤紼嬪簭鐨勪竴閮ㄥ垎鏃訛紝鎮(zhèn)ㄤ笉寰椾笉鑺辮垂蹇?jī)鎬濋噸鏂拌繘琛屾祴璇曘€?
鎬諱箣錛岄€氳繃浣跨敤鑷姩鐨勫崟鍏冩祴璇曪紝鑳藉寰堝揩鍦板彂鐜扮郴緇熺殑緙洪櫡錛屽茍涓斾篃鏄撲簬鍙戠幇榪欎簺緙洪櫡錛屼嬌寰楁祴璇曞伐浣滃彉寰楁洿鍔犵郴緇熷寲錛屽洜姝ゆ暣浣撶殑璐ㄩ噺涔熷緱浠ユ彁楂樸€?
3. 鎸夌収瑙勮寖鏉ヨ繘琛屽紑鍙戯紝鑰屼笉鏄寜鐓у簲鐢ㄦ湇鍔″櫒鏉ヨ繘琛屽紑鍙戙€?/strong>
瑕佸皢瑙勮寖鐔熻浜庡績(jī)錛屽鏋滆鑳岀瑙勮寖錛岃緇忚繃鎱庡瘑鐨勮€冭檻鍚庢墠鍙互榪欐牱鍋氥€傝繖鏄洜涓哄綋鎮(zhèn)ㄨ儗紱昏鍒欑殑鏃跺€欙紝鎮(zhèn)ㄦ墍鍋氱殑浜嬫儏寰€寰€騫朵笉鏄?zhèn)ㄥ簲璇ュ仛鐨勪簨鎯呫€?
褰撴?zhèn)ㄨ鑳尲?J2EE 鍙互鍏佽鎮(zhèn)ㄥ仛鐨勪簨鎯呯殑鏃跺€欙紝榪欏緢瀹規(guī)槗璁╀嬌鎮(zhèn)ㄩ伃鍙椾笉騫搞€傛垜浠彂鐜版湁涓€浜涘紑鍙戜漢鍛橀捇鐮斾竴浜?J2EE 鍏佽涔嬪鐨勪笢瑗匡紝浠栦滑璁や負(fù)榪欐牱鍋氬彲浠?紼嶅井"鏀瑰杽J2EE鐨勬€ц兘錛岃€屼粬浠渶緇堝彧浼?xì)鍙戠幇杩欐牱鍋氫細(xì)寮曡捣涓ラ噸鐨勬€ц兘闂錛屾垨鑰呭湪浠ュ悗鐨勭Щ妞嶏紙浠庝竴涓巶鍟嗗埌鍙︿竴涓巶鍟嗭紝鎴栬€呮槸鏇村父瑙佺殑浠庝竴涓増鏈埌鍙︿竴涓増鏈級(jí)涓細(xì)鍑虹幇闂銆傚疄闄呬笂錛岃繖縐嶇Щ妞嶉棶棰樻槸濡傛涓ラ噸錛屼互鑷?[Beaton] 灝嗘鍘熷垯縐頒負(fù)縐繪宸ヤ綔鐨勫熀鏈渶浣?jīng)_疄璺點(diǎn)€偮?br />
鐜板湪鏈夊ソ鍑犱釜鍦版柟濡傛灉涓嶇洿鎺ヤ嬌鐢?J2EE 鎻愪緵鐨勬柟娉曡偗瀹氫細(xì)浜х敓闂銆備竴涓父瑙佺殑渚嬪瓙灝辨槸寮€鍙戜漢鍛橀€氳繃浣跨敤 JAAS 妯″潡鏉ユ浛浠?J2EE 瀹夊叏鎬э紝鑰屼笉鏄嬌鐢ㄥ唴緗殑閬靛驚瑙勮寖鐨勫簲鐢ㄧ▼搴忔湇鍔″櫒鏈哄埗鏉ヨ繘琛岄獙璇佸拰鎺堟潈銆傝娉ㄦ剰涓嶈鑴辯 J2EE 瑙勮寖鎻愪緵鐨勯獙璇佹満鍒訛紝濡傛灉鑴辯浜?jiǎn)姝よ鑼冨Q岃繖灝嗘槸緋葷粺瀛樺湪瀹夊叏婕忔礊浠ュ強(qiáng)鍘傚晢鍏煎鎬ч棶棰樼殑涓昏鍘熷洜銆傜被浼煎湴錛岃浣跨敤 servlet 鍜?EJB 瑙勮寖鎻愪緵鐨勬巿鏉冩満鍒訛紝騫朵笖濡傛灉鎮(zhèn)ㄨ鍋忕榪欎簺瑙勮寖鐨勮瘽錛岃紜繚浣跨敤瑙勮寖瀹氫箟鐨?API錛堜緥濡?getCallerPrincipal()錛変綔涓哄疄鐜扮殑鍩虹銆傞€氳繃榪欑鏂瑰紡錛屾?zhèn)畣鑳藉鍒╃敤鍘傚晢鎻愪緵鐨勫己瀹夊叏鎬у熀紜€璁炬柦錛屽叾涓紝涓氬姟瑕佹眰闇€瑕佹敮鎸佸鏉傜殑鎺堟潈瑙勫垯銆?
鍏朵粬甯歌鐨勯棶棰樺寘鎷嬌鐢ㄤ笉閬靛驚 J2EE 瑙勮寖鐨勬寔涔呮€ф満鍒訛紙榪欎嬌寰椾簨鍔$鐞嗗彉寰楀洶闅撅級(jí)銆佸湪J2EE紼嬪簭涓嬌鐢ㄤ笉閫傚綋鐨凧2SE 鏂規(guī)硶錛堜緥濡傜嚎紼嬫垨 singleton錛夛紝浠ュ強(qiáng)浣跨敤鎮(zhèn)ㄨ嚜宸辯殑鏂規(guī)硶瑙e喅紼嬪簭鍒扮▼搴忥紙program-to-program錛夌殑閫氫俊錛岃€屼笉鏄嬌鐢?J2EE 鍐呭湪鏀寔鐨勬満鍒訛紙渚嬪 JCA銆丣MS 鎴?Web 鏈嶅姟錛夈€傚綋鎮(zhèn)ㄥ皢涓€涓伒寰?J2EE 鐨勬湇鍔″櫒縐繪鍒板叾浠栫殑鏈嶅姟鍣ㄤ笂錛屾垨鑰呯Щ妞嶅埌鐩稿悓鏈嶅姟鍣ㄧ殑鏂扮増鏈笂錛屼笂榪扮殑璁捐閫夋嫨灝嗕細(xì)閫犳垚鏃犳暟鐨勯棶棰樸€傚敮涓€瑕佽儗紱昏鑼冪殑鎯呭喌鏄紝褰撲竴涓棶棰樺湪瑙勮寖鐨勮寖鍥村唴鏃犳硶瑙e喅鐨勬椂鍊欍€備緥濡傦紝瀹夋帓鎵ц瀹氭椂鐨勪笟鍔¢€昏緫鍦?EJB2.1 鍑虹幇涔嬪墠鏄竴涓棶棰橈紝鍦ㄧ被浼艱繖鏍風(fēng)殑鎯呭喌涓嬶紝鎴戜滑寤鴻褰撴湁鍘傚晢鎻愪緵鐨勮В鍐蟲(chóng)柟妗堟椂灝變嬌鐢ㄥ巶鍟嗘彁渚涚殑瑙e喅鏂規(guī)錛堜緥濡?WebSphere Application Server Enterprise 涓殑 Scheduler 宸ュ叿錛夛紝鑰屽湪娌℃湁鍘傚晢鎻愪緵鐨勮В鍐蟲(chóng)柟妗堟椂灝變嬌鐢ㄧ涓夋柟鎻愪緵鐨勫伐鍏楓€傚鏋滀嬌鐢ㄥ巶鍟嗘彁渚涚殑瑙e喅鏂規(guī)錛屽簲鐢ㄧ▼搴忕殑緇存姢浠ュ強(qiáng)灝嗗叾縐繪鍒版柊鐨勮鑼冪増鏈皢鏄巶鍟嗙殑闂錛岃€屼笉鏄?zhèn)ㄧ殑闂銆偮?br />
鏈€鍚庯紝瑕佹敞鎰忎笉瑕佸お鏃╁湴閲囩敤鏂版妧鏈€傚お榪囦簬鐑》閲囩敤榪樻病鏈夐泦鎴愬埌 J2EE 瑙勮寖鐨勫叾浠栭儴鍒嗘垨鑰呰繕娌℃湁闆嗘垚鍒板巶鍟嗙殑浜у搧涓殑鎶€鏈父浼?xì)甯︽潵鐏鹃毦鎬х殑鍚庢灉銆傛敮鎸佹槸鍏抽敭鐨??濡傛灉鎮(zhèn)ㄧ殑鍘傚晢涓嶇洿鎺ユ敮鎸佷竴縐嶇壒瀹氱殑鍦?JSR 涓彁鍑虹殑鎶€鏈紝浣嗘鎶€鏈繕娌℃湁琚?J2EE 鎵€鎺ュ彈錛岄偅涔堟?zhèn)兏嶅簲璇ラ噰鐢ㄦ鎶€鏈€傛瘯绔燂紝鎴戜滑涓殑澶у鏁頒漢浠庝簨瑙e喅涓氬姟闂錛岃€屼笉鏄帹榪涙妧鏈殑鍙戝睍銆?
4. 浠庝竴寮€濮嬪氨璁″垝浣跨敤 J2EE 瀹夊叏鎬с€?/strong>
鍚敤 WebSphere 瀹夊叏鎬с€傝繖浣挎?zhèn)ㄧ?EJB 鍜?URL 鑷沖皯鍙互璁╂墍鏈夋巿鏉冪敤鎴瘋闂€備笉瑕侀棶涓轟粈涔??鐓х潃鍋氬氨鏄簡(jiǎn)銆偮?br />
鍦ㄤ笌鎴戜滑鍚堜綔鐨勫鎴蜂腑錛屼竴寮€濮嬪氨鎵撶畻鍚敤 WebSphere J2EE 瀹夊叏鎬х殑欏懼鏄潪甯稿皯鐨勶紝榪欎竴鐐逛竴鐩磋鎴戜滑鎰熷埌鍚冩儕銆傛嵁鎴戜滑浼拌澶х害鍙湁 50% 鐨勯【瀹竴寮€濮嬪氨鎵撶畻浣跨敤姝ょ壒鎬с€備緥濡傦紝鎴戜滑鏇句笌涓€浜涘ぇ鍨嬬殑閲戣瀺鏈烘瀯錛堥摱琛屻€佷唬鐞嗙瓑絳夛級(jí)鍚堜綔榪囷紝浠栦滑涔熸病鏈夋墦綆楀惎鐢ㄥ畨鍏ㄦ€с€傚垢榪愮殑鏄紝榪欑闂鍦ㄩ儴緗蹭箣鍓嶇殑媯€(gè)鏌ユ椂灝卞緱浠ヨВ鍐?
涓嶄嬌鐢?J2EE 瀹夊叏鎬ф槸鍗遍櫓鐨勪簨鎯呫€傚亣璁炬?zhèn)ㄧ殑搴旂敤绋嬪簭闇€瑕佸畨鍏ㄦ€э紙鍑犱箮鎵€鏈夌殑搴旂敤紼嬪簭閮介渶瑕侊級(jí)錛屾?zhèn)ㄦ暍鎵撹祵鎮(zhèn)ㄧ殑寮€鍙戜漢鍛樿兘澶熸瀯寤哄嚭鑷繁鐨勫畨鍏ㄦ€х郴緇燂紝鑰岃繖涓郴緇熸瘮鎮(zhèn)ㄤ粠 J2EE 鍘傚晢閭i噷涔版潵鐨勬洿濂姐€傝繖鍙笉鏄釜濂界殑璧屾敞錛屼負(fù)鍒嗗竷寮忕殑搴旂敤紼嬪簭鎻愪緵瀹夊叏鎬ф槸寮傚父鍥伴毦鐨勩€備緥濡傦紝鎮(zhèn)ㄩ渶瑕佷嬌鐢ㄧ綉緇滃畨鍏ㄥ姞瀵嗕護(hù)鐗屾帶鍒跺 EJB 鐨勮闂€備互鎴戜滑鐨勭粡楠岀湅鏉ワ紝澶у鏁拌嚜宸辨瀯寤虹殑瀹夊叏鎬х郴緇熸槸涓嶅畨鍏ㄧ殑錛屽茍涓旀湁閲嶅ぇ鐨勭己闄鳳紝榪欎嬌浜у搧緋葷粺鏋佸叾鑴嗗急銆?
涓€浜涗笉浣跨敤 J2EE 瀹夊叏鎬х殑鐞嗙敱鍖呮嫭錛氭媴蹇?jī)鎬ц兘鐨勪笅闄嶏紝鐩鎬俊鍏朵粬鐨勫畨鍏ㄦ€э紙渚嬪 Netegrity SiteMinder錛夊彲浠ュ彇浠?J2EE 瀹夊叏鎬э紝鎴栬€呮槸涓嶇煡閬?WebSphere Application Server 瀹夊叏鐗規(guī)€у強(qiáng)鍔熻兘銆備笉瑕侀櫡鍏ヨ繖浜涢櫡闃變箣涓紝灝ゅ叾鏄紝灝界鍍?Netegrity SiteMinder 榪欐牱鐨勪駭鍝佽兘澶熸彁渚涗紭縐€鐨勫畨鍏ㄧ壒鎬э紝浣嗘槸浠呬粎鍏惰嚜韜笉鍙兘淇濇姢鏁翠釜 J2EE 搴旂敤紼嬪簭銆傝繖浜涗駭鍝佸繀欏諱笌 J2EE 搴旂敤紼嬪簭鏈嶅姟鍣ㄨ仈鍚堣搗鏉ユ墠鍙兘鍏ㄩ潰鍦頒繚鎶ゆ?zhèn)ㄧ殑绯痪l熴€?
鍏朵粬鐨勪竴縐嶅父瑙佺殑涓嶄嬌鐢?J2EE 瀹夊叏鎬х殑鍘熷洜鏄細(xì)鍩轟簬瑙掕壊鐨勬ā鍨嬫病鏈夋彁渚涜凍澶熺殑綺掑害璁塊棶鎺у埗浠ユ弧瓚沖鏉傜殑涓氬姟瑙勫垯銆傚敖綆′簨瀹炴槸榪欐牱鐨勶紝浣嗚繖涔熶笉搴旇鎴愪負(fù)涓嶄嬌鐢?J2EE 瀹夊叏鎬х殑鐞嗙敱銆傜浉鍙嶅湴錛屽簲璇ュ皢 J2EE 楠岃瘉鍙?J2EE 瑙掕壊涓庣壒瀹氱殑鎵╁睍瑙勫垯緇撳悎璧鋒潵銆傚鏋滃鏉傜殑涓氬姟瑙勫垯闇€瑕佸仛鍑哄畨鍏ㄦ€у喅絳栵紝閭e氨緙栧啓鐩稿簲鐨勪唬鐮侊紝鍏跺畨鍏ㄦ€у喅絳栬鍩轟簬鍙互鐩存帴浣跨敤鐨勪互鍙?qiáng)鍙潬鐨?J2EE 楠岃瘉淇℃伅錛堢敤鎴?ID 鍜岃鑹詫級(jí)銆?br />5銆佸垱寤轟綘鎵€鐭ラ亾鐨?br />
鍙嶅鐨勫紑鍙戝伐浣滃皢浣挎?zhèn)ㄨ兘澶熼€愭笎鍦版帉鎻℃墍鏈夌殑 J2EE 妯″潡銆傝浠庡垱寤哄皬鑰岀畝鍗曠殑妯″潡寮€濮嬭€屼笉鏄粠涓€寮€濮嬪氨椹笂娑夊強(qiáng)鍒版墍鏈夌殑妯″潡銆?
鎴戜滑蹇呴』鎵胯 J2EE 鏄簽澶х殑浣撶郴銆傚鏋滀竴涓紑鍙戝皬緇勫彧鏄紑濮嬩嬌鐢?J2EE錛岃繖灝嗗緢闅句竴涓嬪瓙灝辮兘鎺屾彙瀹冦€傚湪 J2EE 涓湁澶鐨勬蹇靛拰 API 闇€瑕佹帉鎻°€傚湪榪欑鎯呭喌涓嬶紝鎴愬姛鎺屾彙 J2EE 鐨勫叧閿槸浠庣畝鍗曠殑姝ラ寮€濮嬪仛璧楓€偮?br />
榪欑鏂規(guī)硶鍙互閫氳繃鍦ㄦ?zhèn)ㄧ殑搴旂敤绋嬪簭涓垱寰彏畯鑰岀畝鍗曠殑妯″潡鏉ュ緱鍒版渶濂界殑瀹炵幇銆傚鏋滀竴涓紑鍙戝皬緇勯€氳繃鍒涘緩涓€涓畝鍗曠殑鍩熸ā鍨嬩互鍙?qiáng)鍚庣鐨勬寔涔呮€ф満鍒訛紙涔熻浣跨敤鐨勬槸 JDBC錛?騫朵笖瀵瑰叾榪涜浜?jiǎn)瀹屾暣鐨剫箣璇曞Q岃繖浼?xì)澧炲嫁Z粬浠殑鑷俊蹇?jī)锛屼簬鏄粬浠細(xì)鋴社敤璇ュ煙妯″瀷鍘绘帉鎻′娇鐢?servlet 鍜?JSP 鐨勫墠绔紑鍙戙€傚鏋滀竴涓紑鍙戠粍鍙戠幇鏈夊繀瑕佷嬌鐢?EJB錛屼粬浠篃浼?xì)绫讳技鍦板紑濮嬪湪瀹瑰櫒綆$悊鐨勬寔涔呮€?EJB 緇勪歡涔嬩笂浣跨敤綆€鍗曠殑浼?xì)璇?Facades錛屾垨鑰呬嬌鐢ㄥ熀浜?JDBC 鐨勬暟鎹闂璞★紙JDBC-based Data Access Objects錛孌AO錛夛紝鑰屼笉鏄煩榪囪繖浜涘幓浣跨敤鏇村姞澶嶆潅鐨勬瀯閫狅紙渚嬪娑堟伅椹卞姩bean鍜孞MS錛夈€?
榪欑鏂規(guī)硶騫朵笉鏄粈涔堟柊鏂規(guī)硶錛屼絾鏄緢灝戞湁寮€鍙戠粍浠ヨ繖縐嶆柟寮忔潵鍩瑰吇浠栦滑鐨勬妧鑳姐€傜浉鍙嶅湴錛屽鏁板紑鍙戠粍鐢變簬灝濊瘯椹笂灝辨瀯寤烘墍鏈夌殑妯″潡錛屽悓鏃舵秹鍙?MVC 涓殑瑙嗗浘灞傘€佹ā鍨嬪眰鍜屾帶鍒跺櫒灞傦紝榪欐牱鍋氱殑緇撴灉鏄粬浠線寰€浼?xì)闄峰叆杩涘害鐨勫帇鍔涗箣涓€備粬浠簲璇ヨ€冭檻涓€浜涙晱鎹鳳紙Agile錛夊紑鍙戞柟娉曪紝渚嬪鏋侀檺緙栫▼錛圶P錛夛紝榪欑寮€鍙戞柟娉曢噰鐢ㄤ竴縐嶅閲忓涔?fàn)鍙?qiáng)寮€鍙戞柟娉曘€傚湪 XP 涓湁涓€縐嶇О涓?ModelFirst 鐨勮繃紼嬶紝榪欎釜榪囩▼娑夊強(qiáng)鍒伴鍏堟瀯寤哄煙妯″瀷浣滀負(fù)涓€縐嶆満鍒舵潵緇勭粐鍜屽疄鐜扮敤鎴峰満鏅€傚熀鏈鏉ワ紝鎮(zhèn)ㄨ鏋勫緩鍩熸ā鍨嬩綔涓烘?zhèn)ㄨ瀹炵幇鐨勭敤鎴峰満鏅殑棣栬閮ㄥ垎锛岀劧鍚庡湪鍩熸ā鍨嬩箣涓婃瀯寰忎竴涓敤鎴風(fēng)晫闈紙UI錛変綔涓虹敤鎴峰満鏅疄鐜扮殑緇撴灉銆傝繖縐嶆柟娉曢潪甯擱€傚悎璁╀竴涓紑鍙戠粍涓€嬈″彧瀛﹀埌涓€縐嶆妧鏈紝鑰屼笉鏄浠栦滑鍚屾椂闈㈠寰堝縐嶆儏鍐碉紙鎴栬€呰浠栦滑璇誨緢澶氫功錛夛紝榪欎細(xì)浠や粬浠穿婧冪殑銆?
榪樻湁錛屽姣忎釜搴旂敤紼嬪簭灞傞噸澶嶇殑寮€鍙戝彲鑳戒細(xì)鍖呭惈涓€浜涢€傚綋鐨勬ā寮忓強(qiáng)鏈€浣?jīng)_疄璺點(diǎn)€傚鏋滄?zhèn)ㄤ粠搴旂敤绋嬪簭鐨勫簳灞傚紑濮嬪簲鐢ㄤ竴浜涙ā寮忓鏁版嵁璁塊棶瀵硅薄鍜屼細(xì)璇?Facades錛屾?zhèn)兏嶅簲璇ュ湪鎮(zhèn)ㄧ殑JSP鍜屽叾浠栬鍥懼璞′腑浣跨敤鍩熼€昏緫銆?
鏈€鍚庯紝褰撴?zhèn)ㄥ紑鍙戜竴浜涚畝鍗曠殑妯″潡鏃訛紝鍦ㄥ紑濮嬬殑鍒濇湡灝卞彲浠ュ鎮(zhèn)ㄧ殑搴旂敤紼嬪簭榪涜鎬ц兘嫻嬭瘯銆傚鏋滅洿鍒板簲鐢ㄧ▼搴忓紑鍙戠殑鍚庢湡鎵嶈繘琛屾€ц兘嫻嬭瘯鐨勮瘽錛岃繖寰€寰€浼?xì)鍑虹幇鐏鹃毦鎬х殑鍚庢灉銆?
6. 褰撲嬌鐢?EJB 緇勪歡鏃訛紝濮嬬粓浣跨敤浼?xì)璇?Facades銆?
鍐充笉瑕佸皢瀹炰綋 bean 鐩存帴鏆撮湶緇欎換浣曠敤鎴風(fēng)被鍨嬨€傚瀹炰綋 bean 鍙彲浠ヤ嬌鐢ㄦ湰鍦?EJB 鎺ュ彛錛圠ocal EJB interfaces錛夈€?
褰撲嬌鐢?EJB 緇勪歡鏃訛紝浣跨敤涓€涓細(xì)璇?Facades 鏄竴涓‘璁ゆ棤鐤戠殑鏈€浣?jīng)_疄璺點(diǎn)€傚疄闄呬笂錛岃繖涓€氱敤鐨勫疄璺佃騫挎硾鍦板簲鐢ㄥ埌浠諱綍鍒嗗竷寮忕殑鎶€鏈腑錛屽寘鎷?CORBA銆丒JB 鍜?DCOM銆備粠鏍規(guī)湰涓婅錛屾?zhèn)ㄧ殑搴旂敤绋嬪簭鐨勫垎甯?浜ゅ弶鍖哄煙"瓚婃槸搴曞眰鍖栵紝瀵瑰皬鍧楃殑鏁版嵁鐢變簬澶氭閲嶅鐨勭綉緇滀腑緇ч€犳垚鐨勬椂闂存秷鑰楀氨瓚婂皯銆傝杈懼埌榪欎釜鐩殑鐨勬柟娉曞氨鏄細(xì)鍒涘緩澶х矑搴︾殑 Facades 瀵硅薄錛岃繖涓璞″寘鍚€昏緫瀛愮郴緇燂紝鍥犺€屽彲浠ラ€氳繃涓€涓柟娉曡皟鐢ㄥ氨鍙互瀹屾垚涓€浜涙湁鐢ㄧ殑涓氬姟鍔熻兘銆傝繖縐嶆柟娉曚笉浣嗚兘澶熼檷浣庣綉緇滃紑閿€錛岃€屼笖鍦?EJB 鍐呴儴閫氳繃涓烘暣涓笟鍔″姛鑳藉垱寤轟竴涓簨鍔$幆澧冧篃鍙互澶уぇ鍦板噺灝戝鏁版嵁搴撶殑璁塊棶嬈℃暟銆?
EJB 鏈湴鎺ュ彛錛堜粠 EJB 2.0 瑙勮寖寮€濮嬩嬌鐢級(jí)涓哄叡瀛樼殑 EJB 鎻愪緵浜?jiǎn)鎬ц兘浼樺寲鏂規(guī)硶銆傛湰鍦版帴鍙e繀欏昏鎮(zhèn)ㄧ殑搴旂敤紼嬪簭鏄懼紡鍦拌繘琛岃闂紝榪欓渶瑕佷唬鐮佺殑鏀瑰彉鍜岄槻姝互鍚庨厤緗?EJB 鏃墮渶瑕佸簲鐢ㄧ▼搴忕殑鏀瑰彉銆傜敱浜庝細(xì)璇?Facades 鍜屽畠鍖呭惈鐨勬暣涓?EJB 瀵逛簬褰兼鏉ヨ閮藉簲璇ユ槸鏈湴鐨勶紝鎴戜滑寤鴻瀵逛細(xì)璇?Facades 鍚庨潰鐨勫疄浣?bean 浣跨敤鏈湴鎺ュ彛銆傜劧鑰岋紝浼?xì)璇?Facades 鏈韓鐨勫疄鐜幫紙鍏稿瀷渚嬪瓙濡傛棤鐘舵€佷細(xì)璇?bean錛夊簲璇ヨ璁′負(fù)榪滅▼鎺ュ彛銆?
涓轟簡(jiǎn)鎬ц兘鐨勪紭鍖栵紝鍙互灝嗕竴涓湰鍦版帴鍙f坊鍔犲埌浼?xì)璇?Facades銆傝繖鏍峰仛鍒╃敤浜?jiǎn)杩欐牱涓€涓簨瀹烇細(xì)鍦ㄥぇ澶氭暟鎯呭喌涓嬶紙鑷沖皯鍦?Web 搴旂敤紼嬪簭涓級(jí)錛屾?zhèn)ㄧ?EJB 瀹㈡埛绔拰 EJB 浼?xì)鍏卞悓瀛樺湪浜庡悓涓€涓?Java 铏氭嫙鏈猴紙JVM錛変腑銆傚彟澶栦竴縐嶆儏鍐碉紝濡傛灉浼?xì)璇?Facades 鍦ㄦ湰鍦拌璋冪敤錛屽彲浠ヤ嬌鐢?J2EE 搴旂敤鏈嶅姟鍣ㄩ厤緗紭鍖栵紙configuration optimizations錛夛紝渚嬪 WebSphere 涓殑"No Local Copies"銆傜劧鑰岋紝鎮(zhèn)ㄥ繀欏繪敞鎰忓埌榪欎簺鍙緵閫夋嫨鐨勬柟妗堜細(xì)灝嗕氦浜掓柟娉曚粠鎸夊€間紶閫掞紙pass-by-value錛夋敼鍙樹(shù)負(fù)鎸夊紩鐢ㄤ紶閫掞紙pass-by-reference錛夈€傝繖鍙兘浼?xì)鍦ㄦ?zhèn)ㄧ殑浠g爜涓駭鐢熷緢寰鐨勯敊璇€傚綋鎮(zhèn)ㄨ鍒╃敤榪欎簺鏂規(guī)鏃訛紝鎮(zhèn)ㄥ簲璇ュ湪涓€寮€濮嬪氨鑰冭檻鍏跺彲琛屾€с€偮?br />
濡傛灉鍦ㄦ?zhèn)ㄧ殑浼?xì)璇?Facades 涓嬌鐢ㄨ繙紼嬫帴鍙o紙鑰屼笉鏄湰鍦版帴鍙o級(jí)錛屾?zhèn)ㄤ篃鍙互灏嗗悓鏍风殑浼?xì)璇?Facades 鍦?J2EE 1.4 涓互鍏煎鐨勬柟寮忎綔涓?Web 鏈嶅姟鏉ラ厤緗€傝繖鏄洜涓?JSR 109錛圝2EE 1.4 涓殑 Web 鏈嶅姟閮ㄧ講閮ㄥ垎錛夎姹備嬌鐢ㄦ棤鐘舵€佷細(xì)璇?bean 鐨勮繙紼嬫帴鍙d綔涓?EJB Web 鏈嶅姟鍜?EJB 瀹炵幇鐨勬帴鍙c€傝繖鏍峰仛鏄€煎緱鐨勶紝鍥犱負(fù)榪欐牱鍋氬彲浠ヤ負(fù)鎮(zhèn)ㄧ殑涓氬姟閫昏緫澧炲姞瀹㈡埛绔被鍨嬬殑鏁伴噺銆?
7. 浣跨敤鏃犵姸鎬佷細(xì)璇?bean錛岃€屼笉鏄湁鐘舵€佷細(xì)璇?bean
榪欐牱鍋氬彲浠ヤ嬌鎮(zhèn)ㄧ殑緋葷粺緇忓緱璧烽敊璇殑緇堟銆備嬌鐢?HttpSession 瀛樺偍鍜岀敤鎴風(fēng)浉鍏崇殑鐘舵€併€?
浠ユ垜浠殑瑙傜偣鐪嬫潵錛屾湁鐘舵€佷細(xì)璇?bean 鐨勬蹇靛凡緇忚繃鏃朵簡(jiǎn)銆傚鏋滄?zhèn)ㄤ粩缁嗗鍏惰€冭檻涓€涓嬶紝涓€涓湁鐘舵€佷細(xì)璇?bean 瀹為檯涓婁笌涓€涓?CORBA 瀵硅薄鍦ㄤ綋緋葷粨鏋勪笂鏄畬鍏ㄧ浉鍚岀殑錛屾棤闈炲氨鏄竴涓璞″疄渚嬶紝緇戝畾鍒頒竴涓湇鍔″櫒錛屽茍涓斾緷璧栦簬鏈嶅姟鍣ㄦ潵綆$悊鍏剁敓鍛藉懆鏈熴€傚鏋滄湇鍔″櫒鍏抽棴浜?jiǎn)锛寴q欑瀵硅薄涔熷氨涓嶅瓨鍦紝閭d箞榪欎釜 bean 鐨勫鎴風(fēng)鐨勪俊鎭篃灝變笉瀛樺湪銆?
J2EE 搴旂敤鏈嶅姟鍣ㄤ負(fù)鏈夌姸鎬佷細(xì)璇?bean 鎻愪緵鐨勬晠闅滆漿縐伙紙failover錛夎兘澶熻В鍐充竴浜涢棶棰橈紝浣嗘槸鏈夌姸鎬佺殑瑙e喅鏂規(guī)娌℃湁鏃犵姸鎬佺殑瑙e喅鏂規(guī)鏄撲簬鎵╁睍銆備緥濡傦紝鍦?WebSphere Application Server 涓紝瀵規(guī)棤鐘舵€佷細(xì)璇?bean 鐨勮姹傦紝鏄€氳繃瀵歸儴緗叉棤鐘舵€佷細(xì)璇濈殑鎴愬憳闆嗙兢榪涜騫寵 鍔犺澆鏉ュ疄鐜般€傜浉鍙嶅湴錛孞2EE 搴旂敤鏈嶅姟鍣ㄤ笉鑳藉鏈夌姸鎬?bean 鐨勮姹傝繘琛屽鉤琛″姞杞姐€傝繖鎰忓懗鐫€鎮(zhèn)ㄧ殑闆嗙兢涓殑鏈嶅姟鍣ㄧ殑鍔犺澆榪囩▼浼?xì)鏄笉鍧囪 鐨勩€傛澶栵紝浣跨敤鏈夌姸鎬佷細(xì)璇?bean 灝嗕細(xì)鍐嶆坊鍔犱竴浜涚姸鎬佸埌鎮(zhèn)ㄧ殑搴旂敤鏈嶅姟鍣ㄤ笂錛岃繖涔熸槸涓嶅ソ鐨勫仛娉曘€傝繖鏍峰氨澧炲姞浜?jiǎn)绯痪l熺殑澶嶆潅鎬э紝騫朵笖鍦ㄥ嚭鐜版晠闅滅殑鎯呭喌涓嬩嬌闂鍙樺緱澶嶆潅鍖栥€傚垱寤哄仴澹殑鍒嗗竷寮忕郴緇熺殑涓€涓叧閿師鍒欐槸灝介噺浣跨敤鏃犵姸鎬佽涓恒€?
鍥犳錛屾垜浠緩璁澶у鏁板簲鐢ㄧ▼搴忎嬌鐢ㄦ棤鐘舵€佷細(xì)璇?bean 鏂規(guī)硶銆備換浣曞湪澶勭悊鏃墮渶瑕佷嬌鐢ㄧ殑涓庣敤鎴風(fēng)浉鍏崇殑鐘舵€佸簲璇ヤ互鍙傛暟鐨勫艦寮忎紶閫佸埌 EJB 鐨勬柟娉曚腑錛堝茍涓旈€氳繃浣跨敤涓€縐嶆満鍒跺 HttpSession 鏉ュ瓨鍌ㄥ畠錛夋垨鑰呬粠鎸佷箙鎬х殑鍚庣瀛樺偍錛堜緥濡傞€氳繃浣跨敤瀹炰綋 bean)浣滀負(fù) EJB 浜嬪姟鐨勪竴閮ㄥ垎鏉ヨ繘琛屾绱€€傚湪鍚堥€傜殑鎯呭喌涓嬶紝榪欎釜淇℃伅鍙互緙撳瓨鍒板唴瀛樹(shù)腑錛屼絾鏄娉ㄦ剰鍦ㄥ垎甯冨紡鐨勭幆澧冧腑淇濆瓨榪欑緙撳瓨鎵€娼滃湪鐨勬寫鎴樻€с€傜紦瀛橀潪甯擱€傚悎浜庡彧璇繪暟鎹€?
鎬諱箣錛屾?zhèn)ㄨ纭繚浠庝竴寮€濮嬪氨瑕佽€冭檻鍒板彲浼稿睍鎬с€傛鏌ヨ璁′腑鐨勬墍鏈夎鎯籌紝騫朵笖鑰冭檻鍒板綋鎮(zhèn)ㄧ殑搴旂敤紼嬪簭瑕佸湪澶氫釜鏈嶅姟鍣ㄤ笂榪愯鏃訛紝鏄惁涔熷彲浠ユ甯歌繍琛屻€傝繖涓鍒欎笉浣嗛€傚悎涓婅堪鎯呭喌鐨勫簲鐢ㄧ▼搴忎唬鐮侊紝涔熼€傜敤浜庡 MBean 鍜屽叾浠栫鐞嗙晫闈㈢殑鎯呭喌涓嬨€?
閬垮厤浣跨敤鏈夌姸鎬佹€т笉鍙槸瀵?IBM/WebSphere 鐨勫緩璁紝榪欐槸涓€涓熀鏈殑 J2EE 璁捐鍘熷垯銆?
8. 浣跨敤瀹瑰櫒綆$悊鐨勪簨鍔?/strong>
瀛︿範(fàn)涓€涓?J2EE 涓殑涓ら樁孌墊彁浜や簨鍔★紝騫朵笖浣跨敤榪欑鏂瑰紡錛岃€屼笉鏄紑鏀炬?zhèn)ㄨ嚜宸辩殑浜嬪姟绠$悊銆傚鍣ㄥ湪浜嬪姟浼樺寲鏂歸潰鍑犱箮鎬繪槸姣旇緝濂界殑銆?
浣跨敤瀹瑰櫒綆$悊鐨勪簨鍔★紙CMT錛夋彁渚涗簡(jiǎn)涓や釜鍏抽敭鐨勪紭鍔匡紙濡傛灉娌℃湁瀹瑰櫒鏀寔榪欏嚑涔庢槸涓嶅彲鑳界殑錛夛細(xì)鍙粍鍚堢殑宸ヤ綔鍗曞厓鍜屽仴澹殑浜嬪姟琛屼負(fù)銆?
濡傛灉鎮(zhèn)ㄧ殑搴旂敤紼嬪簭浠g爜鏄懼紡鍦頒嬌鐢ㄤ簡(jiǎn)寮€濮嬪拰緇撴潫浜嬪姟錛堜篃璁鎬嬌鐢?javax.jts.UserTransaction 鎴栬€呯敋鑷蟲(chóng)槸鏈湴璧勬簮浜嬪姟錛夛紝鑰屽皢鏉ョ殑瑕佹眰闇€瑕佺粍鍚堟ā鍧楋紙涔熻浼?xì)鏄唬鐮侀噸鏋勭殑涓€閮ㄥ垎錛夛紝榪欑鎯呭喌涓嬪線寰€闇€瑕佹敼鍙樹(shù)簨鍔′唬鐮併€備緥濡傦紝濡傛灉妯″潡 A 寮€濮嬩簡(jiǎn)涓€涓暟鎹簱浜嬪姟錛屾洿鏂版暟鎹簱錛岄殢鍚庢彁浜や簨鍔★紝騫朵笖鏈夋ā鍧?B 鍋氬嚭鍚屾牱鐨勫鐞嗭紝璇瘋€(gè)冭檻涓€涓嬪綋鎮(zhèn)ㄥ湪妯″潡 C 涓皾璇曚嬌鐢ㄤ笂榪頒袱涓ā鍧楋紝浼?xì)鍑虹庮C粈涔堟儏鍐靛憿錛熺幇鍦紝妯″潡 C 姝e湪鎵ц涓€涓€昏緫鍔ㄤ綔錛岃€岃繖涓姩浣滃疄闄呬笂灝嗚皟鐢ㄤ袱涓嫭绔嬬殑浜嬪姟銆傚鏋滄ā鍧?B 鍦ㄦ墽琛屼腑澶辮觸浜?jiǎn)锛岃€屾ā鍧?A 鐨勪簨鍔′粛鐒惰兘琚彁浜ゃ€傝繖鏄垜浠墍涓嶅笇鏈涘嚭鐜扮殑琛屼負(fù)銆傚鏋滐紝鐩稿弽鍦幫紝妯″潡 A 鍜屾ā鍧?B 閮戒嬌鐢?CMT 鐨勮瘽錛屾ā鍧?C 涔熷彲浠ュ紑濮嬩竴涓?CMT錛堥€氬父閫氳繃閰嶇疆鎻忚堪絎︼級(jí)錛屽茍涓斿湪妯″潡 A 鍜屾ā鍧?B 涓殑浜嬪姟灝嗘槸鍚屼竴涓簨鍔$殑闅愬惈閮ㄥ垎錛岃繖鏍峰氨涓嶅啀闇€瑕佸鏉傜殑閲嶅啓浠g爜鐨勫伐浣滀簡(jiǎn)銆?
濡傛灉鎮(zhèn)ㄧ殑搴旂敤紼嬪簭鍦ㄥ悓涓€涓搷浣滀腑闇€瑕佽闂縐嶈祫婧愶紝鎮(zhèn)ㄥ氨瑕佷嬌鐢ㄤ袱闃舵鎻愪氦浜嬪姟銆備緥濡傦紝濡傛灉浠?JMS 闃熷垪涓垹闄や竴涓秷鎭紝騫朵笖闅忓悗鏇存柊鍩轟簬榪欐潯娑堟伅鐨勭邯褰曪紝榪欐椂錛岃淇濊瘉榪欎袱涓搷浣滈兘浼?xì)鎵ц鎴栭兘涓嶄細(xì)鎵ц灏卞彉寰棡湄?fù)閲嶈銆傚鏋滀竴鏉℃秷鎭凡緇忎粠闃熷垪涓鍒犻櫎錛岃€岀郴緇熸病鏈夋洿鏂頒笌姝ゆ秷鎭浉鍏崇殑鏁版嵁搴撲腑鐨勭邯褰曪紝閭d箞榪欑緋葷粺鏄笉紼沖畾鐨勩€備竴浜涗弗閲嶇殑瀹㈡埛鍙?qiáng)鍟嗕笟绾牼U鋒簮鑷笉涓€鑷寸殑鐘舵€併€?
鎴戜滑鏃跺父鐪嬪埌涓€浜涘鎴峰簲鐢ㄧ▼搴忚瘯鍥懼疄鐜頒粬浠嚜宸辯殑瑙e喅鏂規(guī)銆備篃璁鎬細(xì)閫氳繃搴旂敤紼嬪簭鐨勪唬鐮佸湪鏁版嵁搴撴洿鏂板け璐ョ殑鏃跺€?"鎾ら攢"瀵歸槦鍒楃殑鎿嶄綔銆傛垜浠笉鎻愬€¤繖鏍峰仛銆傝繖縐嶅疄鐜拌姣旀?zhèn)ㄦ渶鍒濈殑鎯寵薄瑕佸鏉傚緱澶氾紝騫朵笖榪樻湁璁稿鍏朵粬鐨勬儏鍐碉紙鎯寵薄涓€涓嬪鏋滃簲鐢ㄧ▼搴忓湪鎵ц姝ゆ搷浣滅殑榪囩▼涓獊鐒跺穿婧冪殑鎯呭喌錛夈€備綔涓烘浛浠g殑鏂瑰紡錛屽簲璇ヤ嬌鐢ㄤ袱闃舵鎻愪氦浜嬪姟銆傚鏋滄?zhèn)ㄤ娇鐢?CMT錛屽茍涓斿湪涓€涓崟涓€鐨?CMT 涓闂袱闃舵鎻愪氦鐨勮祫婧愶紙渚嬪 JMS 鍜屽ぇ澶氭暟鏁版嵁搴擄級(jí)錛學(xué)ebSphere 灝嗕細(xì)澶勭悊鎵€鏈夌殑澶嶆潅宸ヤ綔銆傚畠?yōu)畣纭繚鏁翠釜浜嬪姟琚墽琛屾垨鑰呴兘涓嶈鎵ц錛屽寘鎷郴緇熷穿婧冦€佹暟鎹簱宕╂簝鎴栧叾浠栫殑鎯呭喌銆傚叾瀹炵幇鍦ㄤ簨鍔℃棩蹇椾腑淇濆瓨鐫€浜嬪姟鐘舵€併€傚綋搴旂敤紼嬪簭璁塊棶澶氱璧勬簮鐨勬椂鍊欙紝鎴戜滑鎬庝箞寮鴻皟浣跨敤 CMT 浜嬪姟鐨勫繀瑕佹€ч兘涓嶄負(fù)榪囥€?
9銆佸皢jsp浣滀負(fù)琛ㄧず灞傜殑棣栭€?br />鍙湁鍦ㄩ渶瑕佸縐嶈〃紺鴻緭鍑虹被鍨嬶紝騫朵笖杈撳嚭綾誨瀷琚竴涓崟涓€鐨勬帶鍒跺櫒鍙?qiáng)鍚庣鏀寔鏃舵墠鋴社?XML/XSLT銆?
鎴戜滑甯稿惉鍒頒竴浜涗簤璁鴻錛屼負(fù)浠€涔堟?zhèn)ㄩ€夋嫨 XML/XSLT 鑰屼笉鏄?JSP 浣滀負(fù)琛ㄧず灞傛妧鏈€傞€夋嫨 XML/XSLT 鐨勪漢鐨勮鐐規(guī)槸錛孞SP" 鍏佽鎮(zhèn)ㄥ皢妯″瀷鍜岃鍥炬販鍚堝湪涓€璧?錛岃€?XML/XSLT 涓嶄細(xì)鏈夎繖縐嶉棶棰樸€傞仐鎲劇殑鏄紝榪欑瑙傜偣騫朵笉瀹屽叏姝g‘錛屾垨鑰呰嚦灝戜笉鍍忕櫧涓庨粦閭f牱鍒嗙殑娓呮銆傚疄闄呬笂錛孹SL 鍜?XPath 鏄紪紼嬭璦€銆俋SL 鏄浘鐏靛畬鎴愮殑錛圱uring-complete錛夛紝灝界瀹冧笉絎﹀悎澶у鏁頒漢瀹氫箟鐨勭紪紼嬭璦€錛屽洜涓哄畠鏄熀浜庤鍒欑殑錛屽茍涓斾笉鍏峰紼嬪簭鍛樹(shù)範(fàn)鎯殑鎺у埗宸ュ叿銆?
鐜板湪鐨勯棶棰樻槸鏃㈢劧緇欎簣浜?jiǎn)杩櫩U嶇伒媧繪€э紝寮€鍙戜漢鍛樺氨浼?xì)鍒╃敤杩櫩U嶇伒媧繪€с€傚敖綆℃瘡涓漢閮借鍚?JSP 浣垮紑鍙戜漢鍛樺鏄撳湪瑙嗗浘涓姞鍏?綾諱技妯″瀷"鐨勮涓猴紝鑰屽疄闄呬笂錛屽湪 XSL 涓篃鏈夊彲鑳藉仛鍑轟竴浜涘悓鏍風(fēng)殑浜嬫儏銆傚敖綆′粠 XSL 涓繘琛岃闂暟鎹簱榪欐牱鐨勪簨鎯呬細(xì)闈炲父鍥伴毦錛屼絾鏄垜浠浘緇忚鍒拌繃涓€浜涘紓甯稿鏉傜殑 XSLT 鏍峰紡琛ㄦ墽琛屽鏉傜殑杞崲錛岃繖瀹為檯涓婃槸妯″瀷浠g爜銆?
鐒惰€岋紝搴旇閫夋嫨 JSP 浣滀負(fù)棣栭€夌殑琛ㄧず鎶€鏈殑鏈€鍩烘湰鐨勫師鍥犳槸錛孞SP 鏄幇鍦ㄦ敮鎸佹渶騫挎硾鐨勩€佷篃鏄渶琚箍娉涚悊瑙g殑 J2EE 瑙嗗浘鎶€鏈€傝€岄殢鐫€鑷畾涔夋爣璁板簱銆丣STL 鍜?JSP2.0 鐨勬柊鐗規(guī)€х殑寮曞叆錛屽垱寤?JSP 鍙樺緱鏇村姞瀹規(guī)槗錛屽茍涓斾笉闇€瑕佷換浣?Java 浠g爜錛屼互鍙?qiáng)鍙互灏嗘ā鍨嬪拰瑙嗗浘娓呮櫚鐨勫垎绂诲紑銆傚湪涓€浜涘紑鍙戠幆澧冧腑錛堝 WebSphere Studio錛夊姞鍏ヤ簡(jiǎn)瀵?JSP錛堝寘鎷璋冭瘯鐨勬敮鎸侊級(jí)鐨勫己澶ф敮鎸侊紝騫朵笖璁稿寮€鍙戜漢鍛樺彂鐜頒嬌鐢?JSP 榪涜寮€鍙戣姣斾嬌鐢?XLS 綆€鍗曪紝涓€浜涙敮鎸?JSP 鐨勫浘褰㈣璁″伐鍏峰強(qiáng)鍏朵粬鐗瑰緛錛堝挨鍏跺湪 JSF 榪欐牱鐨勬鏋朵笅錛変嬌寰楀紑鍙戜漢鍛樺彲浠ヤ互鎵€瑙佸嵆鎵€寰楃殑鏂瑰紡榪涜 JSP 鐨勫紑鍙戯紝鑰屽浜?XSL 鏈夋椂涓嶅鏄撳仛鍒般€?
鏈€鍚庝竴涓璋ㄦ厧鑰冭檻浣跨敤 JSP 鐨勫師鍥犳槸閫熷害闂銆傚湪 IBM 鎵€浣滅殑瀵規(guī)瘮 XSL 鍜?JSP 鐩稿閫熷害鐨勬€ц兘嫻嬭瘯鏄劇ず錛氬湪澶у鏁版儏鍐典笅錛孞SP 鍦ㄧ敓鎴愬悓鏍風(fēng)殑 HTML 鐨勬椂鍊欙紝瑕佹瘮 XSL 蹇ソ鍑犲€嶏紝鐢氳嚦浣跨敤緙栬瘧榪囩殑 XSL 涔熸槸濡傛銆傚敖綆″鏁版儏鍐典笅榪欎笉鏄棶棰橈紝浣嗗湪鎬ц兘瑕佹眰寰堥珮鐨勬儏鍐典笅錛岃繖灝變細(xì)鎴愪負(fù)闂銆?
鐒惰€岋紝榪欎篃涓嶈兘璇達(dá)紝鎮(zhèn)ㄦ案榪滀篃涓嶈浣跨敤 XSL銆傚湪涓€浜涙儏鍐典笅錛孹SL 鑳藉琛ㄧず涓€緇勫浐瀹氱殑鏁版嵁錛屽茍涓斿彲浠ュ熀浜庝笉鍚岀殑鏍峰紡琛ㄦ潵浠ヤ笉鍚岀殑鏂瑰紡鏄劇ず榪欎簺鏁版嵁鐨勮兘鍔涙槸鏄劇ず瑙嗗浘鐨勬渶浣寵В鍐蟲(chóng)柟妗堛€傜劧鑰岋紝榪欏彧鏄竴縐嶄緥澶栫殑鎯呭喌錛岃€屼笉鏄€氱敤鐨勮鍒欍€傚鏋滄?zhèn)ㄥ彧鏄敓鎴?HTML 鏉ヨ〃杈炬瘡涓€涓〉闈紝閭d箞鍦ㄥぇ澶氭暟鎯呭喌涓嬶紝XSL 鏄竴縐嶄笉蹇呰鐨勬妧鏈紝騫朵笖錛屽畠緇欐?zhèn)ㄧ殑寮€鍙戜漢鍛樻墍甯︽潵鐨勯棶棰樿繙姣斿畠鎵€鑳借В鍐崇殑闂澶氥€?
10. 褰撲嬌鐢?HttpSession 鏃訛紝灝介噺鍙皢褰撳墠浜嬪姟鎵€闇€瑕佺殑鐘舵€佷繚瀛樺叾涓紝鍏朵粬鍐呭涓嶈淇濆瓨鍦?HttpSession 涓€偮?br />
鍚敤浼?xì)璇濇寔涔呮€с€?
HttpSessions 瀵逛簬瀛樺偍搴旂敤紼嬪簭鐘舵€佷俊鎭槸闈炲父鏈夌敤鐨勩€傚叾 API 鏄撲簬浣跨敤鍜岀悊瑙c€傞仐鎲劇殑鏄紝寮€鍙戜漢鍛樺父甯擱仐蹇樹(shù)簡(jiǎn) HttpSession 鐨勭洰鐨?---鐢ㄦ潵淇濇寔鏆傛椂鐨勭敤鎴風(fēng)姸鎬併€傚畠涓嶆槸浠繪剰鐨勬暟鎹紦瀛樸€傛垜浠凡緇忚鍒拌繃澶鐨勭郴緇熶負(fù)姣忎釜鐢ㄦ埛鐨勪細(xì)璇濇斁鍏ヤ簡(jiǎn)澶ч噺鐨勬暟鎹紙杈懼埌鍏嗗瓧鑺傦級(jí)銆傞偅濂戒簡(jiǎn)錛屽鏋滃悓鏃舵湁 1000 涓櫥褰曠郴緇熺殑鐢ㄦ埛錛屾瘡涓敤鎴鋒嫢鏈?1MB 鐨勪細(xì)璇濇暟鎹紝閭d箞灝遍渶瑕?1G 鎴栬€呮洿澶氱殑鍐呭瓨鐢ㄤ簬榪欎簺浼?xì)璇濄€傝浣胯繖浜?HTTP 浼?xì)璇濇暟鎹緝灏忎竴浜涳紝涓嶇劧鐨勮瘽錛屾?zhèn)ㄧ殑搴旂敤绋嬪簭鐨勬€ц兘灝嗕細(xì)涓嬮檷銆備竴涓ぇ綰︽瘮杈冨悎閫傜殑鏁版嵁閲忓簲璇ユ槸姣忎釜鐢ㄦ埛鐨勪細(xì)璇濇暟鎹湪 2K-4K 涔嬮棿錛岃繖涓嶆槸涓€涓‖鎬х殑瑙勫垯錛?K 浠嶇劧娌℃湁闂錛屼絾鏄樉鐒朵細(xì)姣?2K 鏃剁殑閫熷害瑕佹參銆備竴瀹氳娉ㄦ剰錛屼笉瑕佷嬌 HttpSession 鍙樻垚鏁版嵁鍫嗙Н鐨勫満鎵€銆偮?br />
涓€涓父瑙佺殑闂鏄嬌鐢?HttpSession 緙撳瓨?shù)竴浜涘緢瀹規(guī)槗鍐嶅垱寤虹殑淇℃伅錛屽鏋滄湁蹇呰鐨勮瘽銆傜敱浜庝細(xì)璇濇槸鎸佷箙鎬х殑錛岃繘琛屼笉蹇呰鐨勫簭鍒楀寲浠ュ強(qiáng)鍐欏叆鏁版嵁鏄竴縐嶅緢濂緢鐨勫喅瀹氥€傜浉鍙嶅湴錛屽簲璇ヤ嬌鐢ㄥ唴瀛樹(shù)腑鐨勫搱甯岃〃鏉ョ紦瀛樻暟鎹紝騫朵笖鍦ㄤ細(xì)璇濅腑淇濆瓨?shù)竴涓姝ゆ暟鎹繘琛屽紩鐢ㄧ殑鍏抽敭瀛椼€傝繖鏍鳳紝濡傛灉涓嶈兘鎴愬姛鐧誨綍鍒板彟澶栫殑搴旂敤鏈嶅姟鍣ㄧ殑璇濓紝灝卞彲浠ラ噸鏂板垱寤烘暟鎹€?
褰撹皥鍙?qiáng)浼?xì)璇濇寔涔呮€ф椂錛屼笉瑕佸繕璁拌鍚敤榪欓」鍔熻兘銆傚鏋滄?zhèn)ㄦ病鏈夊惎鐢ㄤ細(xì)璇濇寔涔呮€э紝鎴栬€呮湇鍔″櫒鍥犱負(fù)鏌愮鍘熷洜鍋滄浜?jiǎn)锛堟湇鍔″櫒鏁呴殰鎴栨甯哥殑缁存姢锛?jí)錛屽垯鎵€鏈夋搴旂敤鏈嶅姟鐨勫綋鍓嶇敤鎴風(fēng)殑浼?xì)璇潪畣浼?xì)涓㈠け銆傝繖鏄歡浠や漢闈炲父涓嶉珮鍏寸殑浜嬫儏銆傜敤鎴蜂笉寰椾笉閲嶆柊鐧誨綍錛屽茍涓旈噸鏂板仛涓€浜涗粬浠浘緇忓凡緇忓仛榪囩殑浜嬫儏銆傜浉鍙嶅湴錛屽鏋滃惎鐢ㄤ簡(jiǎn)浼?xì)璇濇寔涔呮€э紝W(xué)ebSphere 浼?xì)鑷姩灏嗙敤鎴峰Q堜互鍙?qiáng)浠栦滑鐨勪細(xì)璇濆Q夌Щ鍒板彟澶栦竴涓簲鐢ㄦ湇鍔″櫒涓婂幓銆傜敤鎴風(fēng)敋鑷充笉鐭ラ亾浼?xì)鏈墭q欑浜嬫儏鐨勫彂鐢熴€傛垜浠浘緇忚鍒拌繃涓€浜涗駭鍝佺郴緇熷洜涓哄瓨鍦ㄤ簬鏈湴浠g爜涓護(hù)浜洪毦浠ュ繊鍙楃殑 bug錛堜笉鏄?IBM 鐨勪唬鐮侊紒錛夎€岀獊鐒跺穿婧冪殑鎯呭喌錛岃繖榪欑鎯呭喌涓嬶紝涓婅堪鍔熻兘浠嶇劧鍙互榪愯鑹ソ銆偮?br />
11. 鍦?WebSphere 涓紝浣跨敤鍔ㄦ€佺紦瀛橈紝騫朵嬌鐢?WebSphere servlet 緙撳瓨鏈哄埗銆?/strong>聽(tīng)
閫氳繃浣跨敤榪欎簺鍔熻兘錛岀郴緇熸€ц兘鍙互寰楀埌寰堝ぇ鐨勬彁楂橈紝鑰屽紑閿€鏄緢灝忕殑銆傚茍涓斾笉褰卞搷緙栫▼妯″瀷銆?
閫氳繃緙撳瓨鏉ユ彁楂樻€ц兘鐨勫ソ澶勬槸浼楁墍鍛ㄧ煡鐨勪簨鎯呫€傞仐鎲劇殑鏄紝褰撳墠鐨?J2EE 瑙勮寖娌℃湁鍖呮嫭涓€縐嶇敤浜?servlet/JSP 緙撳瓨鐨勬満鍒躲€傜劧鑰岋紝W(xué)ebSphere 鎻愪緵浜?jiǎn)瀵箼宓闈互鍙?qiáng)鐗囨柇緙撳瓨鐨勬敮鎸侊紝榪欑鏀寔鏄€氳繃鍏跺姩鎬佺紦瀛樺姛鑳芥潵瀹炵幇鐨勶紝騫朵笖涓嶉渶瑕佸搴旂敤紼嬪簭浣滃嚭浠諱綍鏀瑰彉銆傚叾緙撳瓨鐨勭瓥鐣ユ槸澹版槑鎬х殑錛岃€屼笖鍏墮厤緗槸閫氳繃 XML 閰嶇疆鎻忚堪絎︽潵瀹炵幇鐨勩€傚洜姝わ紝鎮(zhèn)ㄧ殑搴旂敤紼嬪簭涓嶄細(xì)鍙楀埌褰卞搷錛屽茍淇濇寔涓?J2EE 瑙勮寖鐨勫吋瀹規(guī)€у拰縐繪鎬э紝鍚屾椂榪樹(shù)粠 WebSphere 鐨?servlet 鍙?JSP 鐨勭紦瀛樻満鍒朵腑寰楀埌鎬ц兘鐨勪紭鍖栥€?
浠?servet 鍙?JSP 鐨勫姩鎬佺紦瀛樻満鍒跺緱鍒扮殑鎬ц兘鐨勬彁楂樻槸鏄捐€屾槗瑙佺殑錛岃繖鍙栧喅浜庡簲鐢ㄧ▼搴忕殑鐗規(guī)€с€侰ox 鍜?Martin [Cox] 鎸囧嚭瀵逛竴涓幇鏈夌殑 RDF錛堣祫婧愭弿榪版牸寮忥級(jí)绔欑偣鎽樿 (RSS)servlet錛屽綋浣跨敤鍔ㄦ€佺紦瀛樻椂錛屽叾鎬ц兘鍙互鎻愰珮 10%銆傝娉ㄦ剰榪欎釜瀹為獙鍙秹鍙?qiáng)鍒颁竴涓畝鍗曠殑 servlet錛岃繖涓€ц兘鐨勫闀塊噺鍙兘騫朵笉鑳藉弽鏄犱竴涓鏉傜殑搴旂敤紼嬪簭銆?
涓轟簡(jiǎn)鏇村鍦版彁楂樻€ц兘錛屽皢 WebSphere servlet/JSP 緇撴灉緙撳瓨?shù)?WebSphere 鎻掍歡 ESI Fragment 澶勭悊鍣ㄣ€両BM HTTP Server Fast Response Cache Accelerator (FRCA) 鍜?Edge Server 緙撳瓨鍔熻兘闆嗘垚鍦ㄤ竴璧楓€傚浜庣箒閲嶇殑鍩轟簬璇誨彇鐨勫伐浣滆礋鑽鳳紝閫氳繃浣跨敤榪欎簺鍔熻兘鍙互寰楀埌璁稿棰濆鐨勫ソ澶勩€?
12. 涓轟簡(jiǎn)鎻愰珮紼嬪簭鍛樼殑宸ヤ綔鏁堢巼錛屽皢 CMP 瀹炰綋 bean 浣滀負(fù) O/R 鏄犲皠鐨勯閫夎В鍐蟲(chóng)柟妗?
閫氳繃 WebSphere 妗嗘灦錛坮eadahead銆佺紦瀛樸€侀殧紱葷駭鍒瓑錛変紭鍖栨€ц兘銆傚鏋滃彲鑳斤紝鏈夐€夋嫨鐨勫簲鐢ㄤ竴浜涙ā寮忔潵杈懼埌鎻愰珮鎬ц兘鐨勭洰鐨勶紝渚嬪 Fast-Lane 闃呰鍣?[Marinescu]銆?
瀵硅薄/鍏崇郴錛圤/R錛夋槧灝勬槸浣跨敤 Java 鍒涘緩浼佷笟綰х殑搴旂敤紼嬪簭鐨勫熀紜€銆傚嚑涔庢瘡涓?J2EE 搴旂敤紼嬪簭閮介渶瑕佷竴浜涚被鍨嬬殑 O/R 鏄犲皠銆侸2EE 鍘傚晢鎻愪緵涓€縐?O/R 鏄犲皠鏈哄埗錛岃繖縐嶆満鍒跺湪涓嶅悓鐨勫巶鍟嗛棿鏄彲縐繪鐨勶紝楂樻晥鐨勶紝騫朵笖鑳藉琚竴浜涙爣鍑嗗強(qiáng)宸ュ叿寰堝ソ鍦版敮鎸併€傝繖灝辨槸 EJB 瑙勮寖涓殑 CMP錛堝鍣ㄧ鐞嗙殑鎸佷箙鎬э級(jí)閮ㄥ垎銆?
鏃╂湡鐨?CMP 瀹炵幇浠ヨ〃鐜頒笉浣?jīng)_強(qiáng)涓嶆敮鎸佽澶?SQL 緇撴瀯鑰岃憲縐般€傜劧鑰岋紝闅忕潃 EJB 2.0 鍙?2.1 瑙勮寖鐨勫嚭鐜幫紝浠ュ強(qiáng)琚竴浜涘巶鍟嗘墍閲囩撼錛屽茍涓旈殢鐫€鍍?IBM WebSphere Studio Application Developer 鐨勫嚭鐜幫紝榪欎簺闂宸茬粡涓嶅啀鏄棶棰樹(shù)簡(jiǎn)銆?
CMP EJB 緇勪歡鐜板湪宸茬粡琚箍娉涘湴搴旂敤浜庤澶氶珮鎬ц兘鐨勫簲鐢ㄧ▼搴忎腑銆俉ebSphere 鍖呮嫭涓€浜涗紭鍖栧姛鑳戒互鎻愰珮 EJB 緇勪歡鐨勬€ц兘錛屼紭鍖栧姛鑳藉寘鎷細(xì)瀵圭敓鍛藉懆鏈熺殑緙撳瓨鍜?read-ahead 鑳藉姏銆傝繖涓よ€呬紭鍖栧姛鑳介兘鏄厤緗椂鐨勯€夐」錛屽茍涓斾笉闇€瑕佸搴旂敤紼嬪簭榪涜淇敼鎴栬€呭獎(jiǎng)鍝嶅彲縐繪鎬с€?
澶勪簬緙撳瓨鐘舵€佺殑鐢熷懡鍛ㄦ湡緙撳瓨 CMP 鐘舵€佹暟鎹茍鎻愪緵鍩轟簬鏃墮棿鐨勬棤鏁堟€с€備粠澶勪簬緙撳瓨鐘舵€佺殑鐢熷懡鍛ㄦ湡寰楀埌鐨勬€ц兘鎻愰珮鍙互杈懼埌閫夐」 A 鐨勭紦瀛樻€ц兘錛屽茍涓斾粛鐒跺彲浠ヤ負(fù)鎮(zhèn)ㄧ殑搴旂敤紼嬪簭鎻愪緵鍙幾灞曟€с€俁ead-ahead 鑳藉姏鍜屽鍣ㄧ鐞嗙殑鍏崇郴緇撳悎浣跨敤銆傝繖涓壒鎬ч€氳繃鍦ㄧ浉鍚岀殑鏌ヨ涓殢鎰忓湴媯€(gè)绱㈢浉鍏崇殑鏁版嵁浣滀負(fù)鐖舵暟鎹€屽噺灝戜笌鏁版嵁搴撶殑浜や簰銆傚鏋滅浉鍏崇殑鏁版嵁瑕侀€氳繃浣跨敤騫跺彂鐨勬煡璇㈡潵璁塊棶鐨勮瘽錛岃繖縐嶆柟娉曞彲浠ュ緱鍒版€ц兘鐨勬敼榪涖€俒Gunther]鎻愪緵浜?jiǎn)璇l嗙殑鎻忚堪浠ュ強(qiáng)閫氳繃榪欎簺鐗規(guī)€у緱鍒扮殑鎬ц兘鎻愰珮鐨勭粏鑺傘€?
姝ゅ錛屼負(fù)浜?jiǎn)瀹屽叏浼樺寲鎮(zhèn)ㄧ?EJB 緇勪歡錛屽綋鎸囧畾闅旂綰у埆鏃惰鐗瑰埆娉ㄦ剰銆傚敖鍙兘浣跨敤鏈€浣庣殑闅旂綰у埆錛屽茍涓斾粛鐒朵繚鎸佹?zhèn)ㄧ殑鏁版嵁鐨勫畬鏁存€с€傝緝浣庣殑闅旂綰у埆鍙互鎻愪緵鏈€浣崇殑鎬ц兘錛屽茍涓斿彲浠ラ檷浣庡嚭鐜版暟鎹簱姝婚攣鐨勫嵄闄┿€?
榪欐槸鐩墠鏈€鏈変簤璁殑鏈€浣?jīng)_疄璺點(diǎn)€傚凡緇忔湁澶ч噺鐨勬枃绔犺禐鎵?CMP EJB錛屽悓鏍風(fēng)殑璐枼澹頒篃涓嶇粷浜庤€熾€傜劧鑰岋紝榪欓噷鏈€鍩烘湰鐨勯棶棰樻槸鏁版嵁搴撳紑鍙戞槸鍥伴毦鐨勩€傚綋鎮(zhèn)ㄥ紑濮嬩嬌鐢ㄤ換浣曟寔涔呮€цВ鍐蟲(chóng)柟妗堜箣鍓嶏紝鎮(zhèn)ㄩ渶瑕佹帉鎻℃煡璇互鍙?qiáng)鏁版嵁搴撻攣瀹氬浣曞伐浣湗q欎簺鍩虹鐭ヨ瘑銆傚鏋滄?zhèn)ㄩ€夋嫨浣跨敤 CMP EJB錛屾?zhèn)ㄨ纭繚鎮(zhèn)ㄥ凡缁忛€氳繃涓€浜涗功綾嶏紙渚嬪 [Brown] 鍜?[Barcia]錛夌煡閬撳浣曚嬌鐢ㄥ畠浠€傚湪閿佸畾鍙?qiáng)浜夌敤鏂归潰鏈変竴浜涘井濡欑殑浜や簰闅句互鐞嗚В錛屼絾鏄紝鍦ㄦ?zhèn)ㄨ€楄垂涓€瀹氱殑鏃墮棿鍙?qiáng)鍔姏鍚庝細(xì)灏嗗叾鎺屾彙鐨勩€?/p>