锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
JS 鐨?123 涓?Java 鐨?int 鎴?Integer銆乴ong 闂寸殑杞崲
JS 鐨?"2009-06-23" 涓?Java 鐨?java.util.Date 涔嬮棿鐨勮漿鎹?br />
JS 鐨?"[1,2,3]" 涓?Java 鐨?int[] 闂寸殑杞崲
JS 鐨?"{id:123, name: 'Unmi'}" 涓?Java 鐨?Class Person{int id; String name} 闂寸殑杞崲
鎴栬呮洿澶嶆潅鐨勫祵濂楃被鍨? "{id:123, name: 'Unmi', blogs:['http://unmi.blogjava.net','http://blog.csdn.net/kypfos']}" ) 涓?Java 綾誨瀷闂寸殑杞崲錛岀瓑絳夈傞偅涔堣繖涓鍒囨槸鎬庝箞榪涜鐨勫憿錛熷叾瀹炴垜浠璇嗚繃寰堝緇勪歡鐨勭被鍨嬫槧灝勶紝濡?Java 鐨?PropertyEditor銆丠ibernate(UserType)銆乮Batis(TypeHandler) 鐨勭被鍨嬫槧灝勶紝Struts1/2 涓?Form/Model 鐢ㄧ殑 Converter 絳夈?br />
榪欓噷鎴戞潵紼嶇◢鍒嗘瀽 DWR 鐨?Converter 瀹炵幇錛屼互鍙婅鏄庡浣曞畾鍒惰嚜宸辯殑 Converter銆傛湰鏂囨墍鐢?DWR 鏄?2.0.5 鐗堛?br />
1. DWR 鍐呯疆鐨?Converter 鍙婂簲鐢ㄧ被鍨?/strong>
鍚嶇О
搴旂敤綾誨瀷
杞崲鍣?/strong>
null
void錛宩ava.lang.Void
NullConverter
enum
EnumConverter
primitive
boolean,byte,short,int,long,float,double,char,
java.lang.Boolean,java.lang.Byte,java.lang.Short,
java.lang.Integer,java.lang.Long,java.lang.Float,
java.lang.Double,java.lang.CharacterPrimitiveConverter
bignumber
java.math.BigInteger,java.math.BigDecimal
BigNumberConverter
string
java.lang.String
StringConverter
array
[Z,[B,[S,[I,[J,[F,[D,[C,[L*
ArrayConverter
map
java.util.Map
MapConverter
collection
java.util.Collection
CollectionConverter
date
java.util.Date,java.sql.Date,java.sql.Time,
java.sql.Timestamp,java.util.CalendarDateConverter
dom
org.w3c.dom.Node,org.w3c.dom.Element,org.w3c.dom.Document
DOMConverter
dom4j
org.dom4j.Document,org.dom4j.Element,org.dom4j.Node
DOM4JConverter
jdom
org.jdom.Document,org.jdom.Element
JDOMConverter
xom
nu.xom.Document,nu.xom.Element,nu.xom.Node
XOMConverter
servlet
javax.servlet.ServletConfig,javax.servlet.ServletContext,
javax.servlet.http.HttpServletRequest,
javax.servlet.http.HttpServletResponse,
javax.servlet.http.HttpSessionServletConverter
bean
BeanConverter
object
ObjectConverter
hibernate2
H2BeanConverter
hibernate3
H3BeanConverter
url
java.net.URL
URLConverter
exception
ExceptionConverter
miniException
java.lang.Throwable
MinimalistExceptionConverter
瀹冧滑鏄簲鐢ㄥ惎鍔ㄧ殑鏃跺欙紝閫氳繃 org.directwebremoting.servlet.DwrServlet 鍒濆鍖?dwr-2.0.5.jar!/org/directwebremoting/dwr.xml 鏂囦歡鍔犺澆榪涙潵鐨勩備緥濡傦細
<converter id="date" class="org.directwebremoting.convert.DateConverter"/>銆娉ㄥ唽浜?date 杞崲鍣?br />
<convert converter="date" match="java.util.Date"/>銆搴旂敤娉ㄥ唽鐨?date 杞崲鍣ㄥ簲鐢ㄥ埌 java.util.Date 綾誨瀷
鐪嬪埌涓婇潰錛屼綘涔熻浼氭儕璁朵竴涓嬶紝鎴戜滑騫蟲椂鍙兘涔熷氨鐢ㄤ笅 bean 杞崲鍣紝鍏朵粬鐢ㄥ唴緗氨琛屻傜劧鑰?DWR 紜負鎴戜滑鑰冭檻鐨勫緢鍛ㄥ埌鐨勶紝鍖呮嫭 hibernate 鐩稿叧鐨勶紝URL銆丼ervlet銆丏om 絳夌浉鍏崇被鍨嬬殑杞崲鍣ㄣ?br />
2. DWR 濡備綍紜畾鐢ㄥ摢涓?Converter?
DWR 鏄牴鎹柟娉曞弬鏁版潵紜畾鍏ュ彛鍙傛暟鐨?Converter銆佹牴鎹繑鍥炲肩被鍨嬬‘瀹氫紶鍚?JS 鐨勫嚭鍙e弬鏁扮殑 Converter銆傛諱箣鏄互 Java 鏂規硶鍘熷瀷涓哄熀鍑嗘潵鍐沖畾姣忎竴鍙傛暟鎴栬繑鍥炲煎悇鑷敤鍝釜 Converter 鏉ヨ漿鎹㈡暟鎹?br />
鍦?BaseCallMarshaller.marshallInbound(HttpServletRequest request, HttpServletResponse response) 鏂規硶涓紝浣跨敤
Class paramType = method.getParameterTypes()[j] 鏉ヨ幏寰楀弬鏁扮殑綾誨瀷錛岀劧鍚庝粠宸插姞杞界殑 Converter Map 涓壘鍒?Converter 鍚嶇О錛岃繘鑰岀‘瀹?Converter 綾誨悕銆?/p>
鑰岀‘瀹氳繑鍥炲肩被鍨嬪氨涓嶆槸鐩存帴鐢ㄥ弽灝勭殑 method.getReturnType()銆傝屾槸浠ュ弽灝勬柟寮忚皟鐢ㄦ柟娉曞悗錛屾牴鎹叿浣撹繑鍥炲肩殑綾誨瀷鏉ョ‘瀹氱殑銆傝錛?br />
Replay DefaultRemoter.execute(Call) 鏂規硶涓殑
Object reply = chain.doFilter(object, method, call.getParameters());銆鍐嶈繘鍏ュ埌
Object ExecuteAjaxFilter.doFilter(Object obj, Method method, Object[] params Ajax FilterChain){
return method.invoke(obj, params);
}
灝辨槸鏍規嵁涓婇潰鐨勮繑鍥炲鹼紝鐒跺悗鍦?br />
DefaultConverterManager.convertOutbound(Object, OutboundContext) 鏂規硶涓殑
Converter converter = getConverter(object); 銆//鏍規嵁榪斿洖鍊?object 紜畾璇ョ敤鐨?Converter銆?br />
3. DWR Converter 鐨勮皟鐢?/strong>
澶氱暀鎰忎笅 DWR 鑷甫鐨?Converter錛屽彲浠ョ湅鍒版墍鏈夌殑 Converter 鐩存帴鎴栫畝鎺ョ殑 extends BaseV20Converter implements Converter錛屽叾瀹?BaseV20Converter(DWR 1.x 涓搴斾負 BaseV10Converter) 鏈韓灝卞疄鐜頒簡 Converter銆傚湪 BaseV20Converter 鎶借薄綾諱腑榛樿瀹炵幇浜?Converter 鐨勬柟娉?br />
public void setConverterManager(ConverterManager config) { }
鍏蜂綋鐨?Converter 鍙涓撳績鍘誨疄鐜版帴鍙?Converter 涓殑鍙︿袱涓柟娉?
Object convertInbound(Class paramType, InboundVariable data, InboundContext inctx) throws MarshallException;
OutboundVariable convertOutbound(Object data, OutboundContext outctx) throws MarshallException;
榪愯鏃訛紝瀹冧滑鐩稿簲鐨勮 ConvertManager(榛樿涓?DefaultConvertManager) 鐨?br />
Object convertInbound(Class paramType, InboundVariable iv, InboundContext inctx, TypeHintContext incc) throws MarshallException
OutboundVariable convertOutbound(Object object, OutboundContext outctx) throws MarshallException
鏉ヨ皟鐢ㄣ?br />
DWR 瀵規瘡涓弬鏁版垨榪斿洖鍊艱嚦灝戜細搴旂敤涓嬈?Converter錛屼絾瀵逛簬澶嶆潅鐨勭被鍨嬩細閫掑綊鐨勮皟鐢?Converter錛屾瘮濡傦紝瑕佸畬鎴?br />
JS "{id:123, name: 'Unmi', blogs:['http://unmi.blogjava.net','http://blog.csdn.net/kypfos']}" 鍒?Java 鐨?Person{int id, String name, String[] blogs;} 鐨勮漿鎹紝灝變細浣跨敤鍒?bean->primitive->array 涓変釜 Converter銆?br />
4. 瀹氬埗鑷繁鐨?Converter
鍩烘湰涓?DWR 鍐呯疆鐨?Converter 灝卞鐢ㄧ殑錛屼絾涔熸湁鍙兘闇瑕佸畾瀹氳嚜宸辯殑 Converter銆備粠 DWR 鐨?Converter 瀹炵幇鏉ョ湅錛屼竴鑸細鐢ㄤ袱縐嶆柟寮忥細
1) extends BaseV20Converter implements Converter錛屽疄鐜?Converter 鐨?converterInbound() 鍜?converterOutbound() 鏂規硶
2) extends BasicObjectConverter implements Converter錛屾垨緇ф壙 BeanConverter錛屽疄鐜?BasicObjectConverter 鐨?getPropertyMapFromObject()錛実etPropertyMapFromObject() 鍜?createTypeHintContext() 鏂規硶銆?br />
鍓嶄竴縐嶆柟寮忥紝璇峰弬鐓?org.directwebremoting.convert.DateConverter 鐨勬簮鐮佸疄鐜幫細
convertInbound() 鐢?JS 鐨勫瓧絎︿覆杞崲鎴愯姹傜殑 Date銆乀ime銆乀imestamp 鎴?Calender 瀵瑰儚銆?br />
convertOubound() 鎶?Java 鐨勭被鍨嬭漿鎹㈡垚 JS 鐨?new Date() 綾誨瀷錛屾敞鎰忚繑鍥炲肩殑鍐欐硶錛?br />
return new SimpleOutboundVariable("new Date(" + millis + ")", outctx, true);
絎簩縐嶇戶鎵?BasicObjectConverter 鎴栨槸 BeanConverter 鐨勫仛娉曪紝鍙弬鑰?BeanConverter 鐨勬簮鐮佸疄鐜般傝〃鐜板湪 JSON 鍜?Java 瀵硅薄闂寸殑杞崲錛岃鏄紩鍏ヨВ鏋?JSON 鐨?JAR 鍖呮垨璁歌兘鏈変笉灝戝府鍔┿?br />
瀹氬埗 Converter 鐨勫唴瀹硅鐨勫緢灝戯紝涓昏鏄湡鏈夎繖鏂歸潰鐨勯渶瑕佺殑鏃跺欒鍙傝?DWR 鐨勭浉鍏蟲簮鐮侊紝瀹為檯涓悊瑙e悇涓帴鍙f柟娉曞弬鏁扮殑鎰忎箟錛屽強榪斿洖鍊肩殑瑕佹眰銆傚寰呭紑婧愮粍浠惰繕鏄淇濇寔闃呰婧愮爜鐨勫ソ涔犳儻銆?br />
濂藉暒錛岃嚜宸辯殑 Converter 鍐欏ソ錛岄渶瑕佹敞鍐岋紝闇瑕佸簲鐢ㄣ傛垜浠繕鏄弬鑰?DWR 鐨勫仛娉曪紝鍐欏湪鑷繁鐨?dwr.xml 涓備緥濡傚畾鍒朵簡 com.unmi.dwr.converter.SpecialConverter錛岃瀵?com.unmi.model.SpecialObject 榪涜鍑哄叆綾誨瀷鐨勮漿鎹紝灝辮繖涔堝啓錛?br />
<converter id="special" class="com.unmi.dwr.converter.SpecialConverter"/>銆娉ㄥ唽浜?nbsp;special 杞崲鍣?br />
<convert converter="special" match="com.unmi.model.SpecialObject"/>銆搴旂敤娉ㄥ唽鐨?special 杞崲鍣ㄥ簲鐢ㄥ埌 com.unmi.model.SpecialObject 綾誨瀷
5. 灝忕粨
鐢?DWR 鍏跺疄涔熸湁孌墊椂鏃ヤ簡錛屾湭鏇劇郴緇熺殑瀛︼紝鎬繪槸閬囦竴闂銆佹壂闄や竴涓紝涓嶅厤涔熶細鍘繪壘鎵劇浉鍏蟲洿緋葷粺鐨勮祫鏂欍傜劧鑰岀潃涓嬫綃囩殑鍔ㄦ満鏄笂鍛ㄥ叚鍦ㄤ功鍩庣炕浜嗕笅 銆?DWR 瀹炴垬銆嬶紝瀹冨疄闄呰 DWR 鏈韓鐨勮緝灝戙傛渶鍚庢垜絎竴涓兂浜嗚В浜嗘槸 DWR 鑳藉畬鎴?JS 涓?Java 闂翠粈涔堢被鍨嬬殑杞崲錛岀涓鎵嬬殑璧勬枡緗戜笂涔熸病鎼滅儲鍒幫紝浜庢槸榪涘埌婧愮爜涓幓錛屼翰韜巻緇冿紝涔熸洿鍔犳繁浜嗗嵃璞°?br />
璇昏呬篃璁稿拰鎴戜竴鏍風洰鐨勶紝鍙兂鐪嬬湅鍐呯疆鐨勮漿鎹㈠櫒鏈夊摢浜涳紝鑳借漿鎹㈠摢浜涚被鍨嬶紝閭e氨鍙渶鐪嬫渶涓烘姠鐪肩殑閭e紶琛ㄦ牸鍚с傞渶瑕佸畾鍒?Converter 搴旇寰堝皯錛屽氨鍍忔垜浠緢灝戝畾鍒?Struts 鐨?Converter銆丠ibernate 鐨?UserType 鍜?iBatis 鐨?TypeHandler 涓鏍楓傚洜姝や篃灝卞瀹氬埗 DWR 鐨?Converter 鎵鐢ㄧ瘒騫呬笉澶氥?br />
瀵瑰緟寮婧愶紝鑷繁鎬繪湁涓範鎯氨鏄繀欏繪湁鐩稿叧鐨勬簮浠g爜浼撮殢鍦ㄥ畠韜竟銆傚紑婧愮粍浠剁殑浣跨敤涓鑸笉闅撅紝紕板埌闂錛屾棦鐒舵簮鐮侀兘鎺屾彙浜嗭紝鎴戞兂鎬昏兘浠庢簮鐮佷腑鎵懼嚭鍘熷洜鏉ャ傚皻涓旓紝瀵硅繖鏍風殑鐭ュ悕緇勪歡瓚婂彂娣卞叆錛屽氨鏇磋兘鍤煎嚭璁稿鍛沖銆?br />
鍙傝冿細DWR 2.0.5 鐨勬簮浠g爜錛屽 DWR 欏圭洰榪涜鍗曟璋冭瘯
鍘熸枃錛?a href="http://www.aygfsteel.com/Unmi/archive/2009/06/23/283741.html">http://www.aygfsteel.com/Unmi/archive/2009/06/23/283741.html