锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲色欲啪啪久久WWW综合网,中文字幕日韩亚洲,亚洲a级片在线观看http://www.tkk7.com/sailor/category/33060.html鍦ㄤ竴緗戞儏娣辯殑鏃ュ瓙閲岋紝璋佽兘璇村緱娓呮槸鑻︽槸鐢滐紝鍙煡閬撶‘瀹氫簡灝變箟鏃犲弽欏?/description>zh-cnSun, 06 Sep 2009 08:01:18 GMTSun, 06 Sep 2009 08:01:18 GMT60鍒╃敤OPI璇誨彇Excle鏂囦歡http://www.tkk7.com/sailor/articles/293588.htmlsailorsailorWed, 02 Sep 2009 05:44:00 GMThttp://www.tkk7.com/sailor/articles/293588.htmlhttp://www.tkk7.com/sailor/comments/293588.htmlhttp://www.tkk7.com/sailor/articles/293588.html#Feedback0http://www.tkk7.com/sailor/comments/commentRss/293588.htmlhttp://www.tkk7.com/sailor/services/trackbacks/293588.html闃呰鍏ㄦ枃

sailor 2009-09-02 13:44 鍙戣〃璇勮
]]>
DWR 鐨?Converter 瀹炵幇鍘熺悊綆鍗曞垎鏋愬強搴旂敤 http://www.tkk7.com/sailor/articles/292464.htmlsailorsailorMon, 24 Aug 2009 15:12:00 GMThttp://www.tkk7.com/sailor/articles/292464.htmlhttp://www.tkk7.com/sailor/comments/292464.htmlhttp://www.tkk7.com/sailor/articles/292464.html#Feedback0http://www.tkk7.com/sailor/comments/commentRss/292464.htmlhttp://www.tkk7.com/sailor/services/trackbacks/292464.html鎴戜滑鍦ㄥ簲鐢?DWR 璋冪敤榪滅▼鏂規硶鏃舵秹鍙婂埌 JS 涓?JAVA 涔嬮棿鍙傛暟鍜岃繑鍥炲肩殑鏁版嵁杞崲錛屼緥濡傦細

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.Character
PrimitiveConverter
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.Calendar
DateConverter
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.HttpSession
ServletConverter
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.tkk7.com/Unmi/archive/2009/06/23/283741.html">http://www.tkk7.com/Unmi/archive/2009/06/23/283741.html



sailor 2009-08-24 23:12 鍙戣〃璇勮
]]>
鍙傝冭祫鏂?/title><link>http://www.tkk7.com/sailor/articles/292399.html</link><dc:creator>sailor</dc:creator><author>sailor</author><pubDate>Mon, 24 Aug 2009 07:52:00 GMT</pubDate><guid>http://www.tkk7.com/sailor/articles/292399.html</guid><wfw:comment>http://www.tkk7.com/sailor/comments/292399.html</wfw:comment><comments>http://www.tkk7.com/sailor/articles/292399.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/sailor/comments/commentRss/292399.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/sailor/services/trackbacks/292399.html</trackback:ping><description><![CDATA[1銆丣2EE浠嬬粛<br />        <a ><font color="#000000">鍙傝冩枃浠訛細</font>http://www.ibm.com/developerworks/cn/java/j2ee/</a> <br /> <br /> 2銆丆ache鎶鏈曗昈SCache<br />     <p style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-size: 10pt; font-family: Arial">Cache</span><span style="font-size: 10pt; font-family: 瀹嬩綋">鏄竴縐嶇敤浜?span style="color: red">鎻愰珮緋葷粺鍝嶅簲閫熷害</span>銆?span style="color: red">鏀瑰杽緋葷粺榪愯鎬ц兘</span>鐨勬妧鏈傚挨鍏舵槸鍦?/span><span style="font-size: 10pt; font-family: Arial">Web</span><span style="font-size: 10pt; font-family: 瀹嬩綋">搴旂敤涓紝閫氳繃緙撳瓨欏甸潰鐨勮緭鍑虹粨鏋滐紝鍙互寰堟樉钁楃殑鏀瑰杽緋葷粺榪愯鎬ц兘銆?/span></p> <p style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-size: 10pt; font-family: 瀹嬩綋">OSCache鏍囪搴撶敱OpenSymphony璁捐錛屽畠鏄竴縐嶅紑鍒涙х殑緙撳瓨鏂規錛屽畠鎻愪緵浜嗗湪鐜版湁JSP欏甸潰涔嬪唴瀹炵幇鍐呭瓨緙撳瓨鐨勫姛鑳姐侽SCache鏄釜涓涓騫挎硾閲囩敤鐨勯珮鎬ц兘鐨凧2EE緙撳瓨妗嗘灦錛孫SCache榪樿兘搴旂敤浜庝換浣旿ava搴旂敤紼嬪簭鐨勬櫘閫氱殑緙撳瓨瑙e喅鏂規銆?/span></p> <br />         <a >鍙傝冩枃浠訛細http://aumy2008.blogbus.com/logs/36462858.html</a> <img src ="http://www.tkk7.com/sailor/aggbug/292399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/sailor/" target="_blank">sailor</a> 2009-08-24 15:52 <a href="http://www.tkk7.com/sailor/articles/292399.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Servlet鎬葷粨http://www.tkk7.com/sailor/articles/287237.htmlsailorsailorSat, 18 Jul 2009 03:57:00 GMThttp://www.tkk7.com/sailor/articles/287237.htmlhttp://www.tkk7.com/sailor/comments/287237.htmlhttp://www.tkk7.com/sailor/articles/287237.html#Feedback0http://www.tkk7.com/sailor/comments/commentRss/287237.htmlhttp://www.tkk7.com/sailor/services/trackbacks/287237.htmlThe Container initializes a servlet by loading the class, invoking the servlet’s no-arg constructor, and calling the servlet’s init() method.

1 The init() method (which the developer can override) is called only once in a servlet’s life, and always before the servlet can service any client requests.

2 The init() method gives the servlet access to the Serv-letConf g and ServletContext objects, which the servlet needs to get information about the servlet conf guration and the web app.

3 The Container ends a servlet’s life by calling its destroy() method.

4 Most of a servlet’s life is spent running a service() method for a client request.

5 Every request to a servlet runs in a separate thread! There is only one instance of any particular servlet class.

6 Your servlet will almost always extend javax.servlet.http.HttpServlet, from which it inherits an implementation of the service() method that takes an HttpServletRequest and an HttpServletResponse.

7 HttpServlet extends javax.servlet.GenericServlet鈥攁n abstract class that implements most of the basic servlet methods.

8 GenericServlet implements the Servlet interface.

9 Servlet classes (except those related to JSPs) are in one of two packages: javax.servlet or javax.servlet.http.

10 You can override the init() method, and you must override at least one service method (doGet(), doPost(), etc.)

The HttpServlet’s doGet() and doPost() methods take an HttpServletRequest and an HttpServletResponse.

1 The service() method determines whether doGet() or doPost() runs based on the HTTP Method (GET, POST, etc.) of the HTTP request.

2 POST requests have a body; GET requests do not, although GET requests can have request parameters appended to the request URL (sometimes called “the query string”).

3 GET requests are inherently (according to the HTTP spec) idempotent. They should be able to run multiple times without causing any side effects on the server. GET requests shouldn’t change anything on the server. But you could write a bad, non-idempotent doGet() method.

4 POST is inherently not idempotent, so it’s up to you to design and code your app in such a way that if the client sends a request twice by mistake, you can handle it.

5 If an HTML form does not explicitly say “method=POST”, the request is sent as a GET, not a POST. If you do not have a doGet() in your servlet, the request will fail.

6 You can get parameters from the request with the getParameter(“paramname”) method. The return value is always a String.

7 If you have multiple parameter values for a given param-eter name, use the getParameterValues(“paramname”) method that returns a String array.

8  You can get other things from the request object including headers, cookies, a session, the query string, and an input stream

Post涓嶨et鍖哄埆錛?br /> 1. Get鐢ㄤ簬浠庢湇鍔$鑾峰彇鏁版嵁錛孭ost鐢ㄤ簬鍚戞湇鍔″櫒绔彁浜ゆ暟鎹紱
2. Get鎻愪氦鍚庯紝鍙傛暟淇濈暀鍦ㄦ祻瑙堝櫒鍦板潃鏍忥紝Post涓嶄細錛?br /> 3. Get鎻愪氦鏃訛紝URL浼氬甫鍙傛暟錛孭ost涓嶄細銆傚洜涓篣RL鏄繚瀛樺埌http鍗忚澶撮儴銆傝孭ost鍙傛暟淇濆瓨鍒癶ttp鍗忚Body涓?br /> 4. Get瀹規槗浜х敓閲嶅鎻愪氦錛孭ost涓嶄細銆?br />
 

You use the Response to send data back to the client.

1 The most common methods you’ll call on the response object (HttpServletResponse) are setContentType() and getWriter().

2 Be careful鈥攎any developers assume the method is getPrintWriter(), but it’s getWriter().

3 The getWriter() method lets you do character I/O to write HTML (or something else) to the stream.

4 You can also use the response to set headers, send errors, and add cookies.

5 In the real world, you’ll probably use a JSP to send most HTML responses, but you may still use a response stream to send binary data

(like a JAR f le, perhaps) to the client.

6 The method you call on your response for getting a binary stream is getOutputStream().

7 The setContentType() method tells the browser how to handle the data coming in with the response. Typical content types are “text/html”, application/pdf”, and “image/jpeg”.

8 You don’t have to memorize content types (also known as MIME types).

9 You can set response headers using addHeader() or setHeader(). The difference depends on whether the header is already part of the response. If it is, setHeader() will replace the value, but addHeader will add an additional value to the existing response. If the header is not already part of the response, then setHeader() and addHeader() behave in exactly the same way.

10 If you don’t want to respond to a request, you can redirect the request to a different URL. The browser takes care of sending the new request to the URL you provide.

11 To redirect a request, call sendRedirect(aStringURL) on the response.

12 You cannot call sendRedirect() after the response is committed! In other words, if you’ve already written something to the stream, it’s too late to do a redirect.

13 A request redirect is different from a request dispatch. A request dispatch (covered more in another chapter) happens on the server, while a redirect happens on the client. A request dispatch hands the request to another component on the server, usually within the same web app. A request redirect simply tells the browser to go a different URL



sailor 2009-07-18 11:57 鍙戣〃璇勮
]]>
BeanUtils鏃ユ湡杞崲http://www.tkk7.com/sailor/articles/261673.htmlsailorsailorTue, 24 Mar 2009 04:26:00 GMThttp://www.tkk7.com/sailor/articles/261673.htmlhttp://www.tkk7.com/sailor/comments/261673.htmlhttp://www.tkk7.com/sailor/articles/261673.html#Feedback0http://www.tkk7.com/sailor/comments/commentRss/261673.htmlhttp://www.tkk7.com/sailor/services/trackbacks/261673.html            1銆佸啓涓涓棩鏈熻漿鎹㈠櫒錛岃繖涓漿鎹㈠櫒瀹炵幇浜咰onverter鎺ュ彛
 1public class DateConvert implements Converter {
 2        private Logger log = Logger.getLogger(DateConvert.class);
 3        static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");// HH:mm:ss
 4        private String datePattern = "yyyy-MM-dd";
 5
 6        public DateConvert() 
 7            
 8        }
 
 9        
10        public DateConvert(String datePattern)
11        {
12            this.datePattern = datePattern;
13        }

14    
15        /**
16         *  @type  闇瑕佽杞崲鐨勭被鍨?br /> 17         *  @value 琚漿鎹㈢殑鍊?br /> 18         */

19        public Object convert(Class type, Object value) 
20            
21            if(value==null)
22                 return null
23            
24            if(((String)value).trim().length()==0)
25                return null
26            
27            if(value instanceof String) 
28                try 
29                    //瑙f瀽鎺ユ敹鍒板瓧絎︿覆 
30                    return TimestampUtil.parseTimestamp((String)value,datePattern);   //鑷繁鍐欑殑灝佽錛屽緱鍒頒竴涓猅imestamp瀹炰緥
31                    
32                }
 catch (Exception ex) {
33                    //鍙戠敓瑙f瀽寮傚父
34                    throw new ConversionException("杈撳叆鐨勬棩鏈熺被鍨嬩笉鍚堜箮" + datePattern + "鏍煎紡" + value.getClass()); 
35                }
 
36            }
 else 
37                //鍏朵粬寮傚父 
38                throw new ConversionException("杈撳叆鐨勪笉鏄瓧絎︾被鍨?/span>" + value.getClass()); 
39            }
 
40        }

41}

        2銆佽嚜宸遍噸鍐欎簡涓涓狟eanUtil錛岀敤浜庡疄鐜版嫹璐漴equest浼犻掓潵鐨勫弬鏁板埌Model閲岄潰錛岄噷闈㈡敞鍐屼簡涓涓棩鏈熷鐞嗙洃鍚紝榪欎釜緇勪歡榪樻湁寰呮敼榪?br />
 1public class BeanUtil {
 2
 3    public void copyBean(){};
 4    
 5    /**
 6     * 灝唕equest閲岀殑鍙傛暟灝佽鍒頒竴涓狟ean銆傚鏋渂ean閲岄潰鏈夋棩鏈熷瀷錛屽彧鏄痡ava.sql.Date錛宩ava.sql.TimeStamp綾誨瀷
 7     * @param request
 8     * @param bean
 9     * @throws IllegalAccessException
10     * @throws InvocationTargetException
11     */

12    public static void copyRequestPrameterToModel(HttpServletRequest request, Object bean) throws IllegalAccessException, InvocationTargetException{
13        Map map = getRequestPrameters(request);
14        
15        if(map == null)
16            return ;    
17        
18        ConvertUtils.register(new DateConvert(), java.sql.Timestamp.class); //娉ㄥ唽鐩戝惉
19        BeanUtils.populate(bean, map);
20    }
;
21    
22    /**
23     * 浠巖equest涓彇鍑簁ey鍜寁alue灝佽鍒癕ap閲?br /> 24     * @param request
25     * @return
26     */

27    private static Map<String,Object> getRequestPrameters(HttpServletRequest request)
28    {
29        Map<String,Object> map = new HashMap<String,Object>();
30        
31        Enumeration enuma = request.getParameterNames();
32        while(enuma.hasMoreElements())
33        {
34            String key = (String)enuma.nextElement();
35            
36            String value = (String)request.getParameter(key);    //鑾峰彇value
37            
38            //濡傛灉鍊間負絀虹殑璇濓紝灝變笉鎻掑叆map閲?/span>
39            if(null == value || "".equals(value))
40            {
41                continue;
42            }

43            
44            map.put(key, request.getParameter(key));
45        }

46        
47        return map;
48    }

49}

 

   



sailor 2009-03-24 12:26 鍙戣〃璇勮
]]>
涓ょDatehttp://www.tkk7.com/sailor/articles/261557.htmlsailorsailorMon, 23 Mar 2009 10:08:00 GMThttp://www.tkk7.com/sailor/articles/261557.htmlhttp://www.tkk7.com/sailor/comments/261557.htmlhttp://www.tkk7.com/sailor/articles/261557.html#Feedback0http://www.tkk7.com/sailor/comments/commentRss/261557.htmlhttp://www.tkk7.com/sailor/services/trackbacks/261557.html        鍋氭瘯涓氳璁℃椂錛岄亣鍒頒簡Date綾誨瀷鐨勯棶棰橈細
        鍦╝ction灞傦紝鎴戝皝瑁呬簡涓涓狟eanUtil綾伙紝鐢ㄦ潵鎷瘋礉form琛ㄥ崟鐨勫弬鏁板埌model錛孊eanUtil緇ф壙浜咮eanUtils銆傚綋琛ㄥ崟鏈夋棩鏈熺被鍨嬫椂錛孊eanUtils涓嶄細杞寲java.util.Date鐨勭被鍨嬨傛墍浠O鐨勬棩鏈熺被鍨嬫槸java.sql.Date銆?br />         鏁版嵁鎻掑叆鍚庯紝浠庢暟鎹簱閲屽彇鍑虹殑鍊鹼紝灝佽鍒頒竴涓狶ist錛岀劧鍚庤漿鎹㈡垚JsonArray瀵硅薄錛屽張鍑轟簡闂錛岀粡榪囨鏌ワ紝鍙戠幇JSON涓嶈兘杞寲java.sql.Date鐨勭被鍨嬶紝鍙兘杞崲java.util.Date綾誨瀷鐨勩?br />         榪欎袱涓棶棰樻庝箞緇煎悎瑙e喅錛岃繕娌℃兂濂斤紝鍏堣涓嬨?br />         



sailor 2009-03-23 18:08 鍙戣〃璇勮
]]>
Javarebel浣跨敤http://www.tkk7.com/sailor/articles/248533.htmlsailorsailorFri, 26 Dec 2008 11:34:00 GMThttp://www.tkk7.com/sailor/articles/248533.htmlhttp://www.tkk7.com/sailor/comments/248533.htmlhttp://www.tkk7.com/sailor/articles/248533.html#Feedback0http://www.tkk7.com/sailor/comments/commentRss/248533.htmlhttp://www.tkk7.com/sailor/services/trackbacks/248533.htmlJavarebel鏄竴涓狫vm鎻掍歡錛屼嬌鐢ㄩ潪甯哥畝鍗曪紝鍙渶瑕佷袱姝ワ細

  • 灝唈avarebel.jar鍔犲叆classpath錛堜笉寤鴻灝唈avarebel.jar鏀懼湪WEB-INF/lib涓嬶紝鍥犱負鐢熶駭鐜涓嶉渶瑕佸畠錛?
  • 鍛戒護琛屼腑鍔犲叆涓嬮潰鐨勫惎鍔ㄥ弬鏁?br /> java -noverify -javaagent:C:\libraries\javarebel.jar -Drebel.dirs=c:\workspace\project\classes
    Drebel.dirs鎸囧悜宸ョ▼涓?class鏂囦歡鐨勭洰褰曪紝涓嶅繀鎸囧畾鍏蜂綋鐨勭被鍚嶃傚彟澶栵紝javarebel.jar鐨勫悕瀛椾笉鑳戒慨鏀廣?/code>

鍦∕yeclipse涓嬌鐢細
    window-preference-Tomcat 6.x-JDK-Optional JDK arguments涓嬭緗涓嬶細
   

1 -noverify -javaagent:D:/servers/javarebel-2.0-M1a/javarebel.jar



sailor 2008-12-26 19:34 鍙戣〃璇勮
]]>
java璧勬簮閾炬帴http://www.tkk7.com/sailor/articles/246255.htmlsailorsailorSun, 14 Dec 2008 11:28:00 GMThttp://www.tkk7.com/sailor/articles/246255.htmlhttp://www.tkk7.com/sailor/comments/246255.htmlhttp://www.tkk7.com/sailor/articles/246255.html#Feedback0http://www.tkk7.com/sailor/comments/commentRss/246255.htmlhttp://www.tkk7.com/sailor/services/trackbacks/246255.html

sailor 2008-12-14 19:28 鍙戣〃璇勮
]]>
cvs鐩稿叧宸ュ叿涓嬭澆鍦板潃http://www.tkk7.com/sailor/articles/246036.htmlsailorsailorFri, 12 Dec 2008 13:17:00 GMThttp://www.tkk7.com/sailor/articles/246036.htmlhttp://www.tkk7.com/sailor/comments/246036.htmlhttp://www.tkk7.com/sailor/articles/246036.html#Feedback0http://www.tkk7.com/sailor/comments/commentRss/246036.htmlhttp://www.tkk7.com/sailor/services/trackbacks/246036.html杞澆鑷?http://www.wujianrong.com/archives/2006/10/cvs.html

CVS鏈嶅姟鍣ㄧ錛?br /> CVS 涓嬭澆錛歨ttp://www.march-hare.com/cvspro/
CVS 涓嬭澆鍦板潃錛?/font>http://www.cvshome.org/ (鏈鏂扮増鏈細hp:1.12.11,Linux and win32:1.11.17)
cvsnt 涓嬭澆鍦板潃錛?/font>http://www.cvsnt.com/cvspro/ (鏈鏂扮増鏈細2.0.58d)

CVS瀹㈡埛绔細
TortoiseCVS 涓嬭澆鍦板潃錛?/font>http://www.tortoisecvs.org/ (鏈鏂扮増鏈細1.8.11)
wincvs 涓嬭澆鍦板潃錛?/font>http://cvsgui.sourceforge.net/download.html (鏈鏂扮増鏈細1.3.20.3)
Python 涓嬭澆鍦板潃錛?/font>http://www.python.org/download/ (鏈鏂扮増鏈細2.4)
TCL 涓嬭澆鍦板潃錛?/font>http://www.activestate.com/Products/ActiveTCL/ (鏈鏂扮増鏈細8.4.9.0)
SmartCVS 涓嬭澆鍦板潃錛?/font>http://www.regnis.de/download.html (鏈鏂扮増鏈細3.0.6)


CVSWEB 涓嬭澆鍦板潃錛?/font>http://www.freebsd.org/projects/cvsweb.html (鏈鏂扮増鏈細3.0.5)
viewcvs 涓嬭澆鍦板潃錛?/font>http://viewcvs.sourceforge.net/(鏈鏂扮増鏈細0.9.2)
CvsGraph 涓嬭澆鍦板潃錛?/font>http://www.akhphd.au.dk/~bertho/cvsgraph/(鏈鏂扮増鏈?1.5.1)


緙洪櫡璺熻釜錛?br /> CVSTrac 涓嬭澆鍦板潃錛?/font>http://www.cnpack.org/ (http://www.cvstrac.org/)(鏈鏂扮増鏈細1.1.5)



鍩轟簬CVS鐨勪唬鐮佺粺璁″伐鍏鳳細鎸変唬鐮侀噺錛屾寜寮鍙戣呯殑緇熻琛ㄧ瓑錛?br /> StatCVS 涓嬭澆鍦板潃錛?/font>http://sourceforge.net/projects/statcvs (鏈鏂扮増鏈細0.2.2)



CVS鏉冮檺綆$悊錛圕VSACL is a patch for CVS錛夛細
cvsacl 涓嬭澆鍦板潃錛?/font>http://cvsacl.sourceforge.net/(鏈鏂扮増鏈細1.2.2)


subversion鏈嶅姟鍣ㄧ錛?br /> subversion 涓嬭澆鍦板潃錛?/font>http://subversion.tigris.org/project_packages.html#binary-packages (鏈鏂扮増鏈細1.3.2)


subversion瀹㈡埛绔細
tortoisesvn 涓嬭澆鍦板潃錛?/font>http://tortoisesvn.tigris.org/ (鏈鏂扮増鏈細1.4.0)
rapidsvn 涓嬭澆鍦板潃錛?/font>http://rapidsvn.tigris.org/ (鏈鏂扮増鏈細0.9.3)



sailor 2008-12-12 21:17 鍙戣〃璇勮
]]>
姝e垯琛ㄨ揪寮忔葷粨http://www.tkk7.com/sailor/articles/244885.htmlsailorsailorSun, 07 Dec 2008 11:50:00 GMThttp://www.tkk7.com/sailor/articles/244885.htmlhttp://www.tkk7.com/sailor/comments/244885.htmlhttp://www.tkk7.com/sailor/articles/244885.html#Feedback0http://www.tkk7.com/sailor/comments/commentRss/244885.htmlhttp://www.tkk7.com/sailor/services/trackbacks/244885.html1銆?nbsp;

鍦ㄨ〃杈懼紡涓湁鐗規畩鎰忎箟錛岄渶瑕佹坊鍔?""" 鎵嶈兘鍖歸厤璇ュ瓧絎︽湰韜殑瀛楃姹囨?/span>

瀛楃

璇存槑

^

鍖歸厤杈撳叆瀛楃涓茬殑寮濮嬩綅緗傝鍖歸厤 "^" 瀛楃鏈韓錛岃浣跨敤 ""^"

$

鍖歸厤杈撳叆瀛楃涓茬殑緇撳熬浣嶇疆銆傝鍖歸厤 "$" 瀛楃鏈韓錛岃浣跨敤 ""$"

( )

鏍囪涓涓瓙琛ㄨ揪寮忕殑寮濮嬪拰緇撴潫浣嶇疆銆傝鍖歸厤灝忔嫭鍙鳳紝璇蜂嬌鐢?""(" 鍜?"")"

[ ]

鐢ㄦ潵鑷畾涔夎兘澶熷尮閰?'澶氱瀛楃' 鐨勮〃杈懼紡銆傝鍖歸厤涓嫭鍙鳳紝璇蜂嬌鐢?""[" 鍜?""]"

{ }

淇グ鍖歸厤嬈℃暟鐨勭鍙楓傝鍖歸厤澶ф嫭鍙鳳紝璇蜂嬌鐢?""{" 鍜?""}"

.

鍖歸厤闄や簡鎹㈣絎︼紙"n錛変互澶栫殑浠繪剰涓涓瓧絎︺傝鍖歸厤灝忔暟鐐規湰韜紝璇蜂嬌鐢?""."

?

淇グ鍖歸厤嬈℃暟涓?0 嬈℃垨 1 嬈°傝鍖歸厤 "?" 瀛楃鏈韓錛岃浣跨敤 ""?"

+

淇グ鍖歸厤嬈℃暟涓鴻嚦灝?1 嬈°傝鍖歸厤 "+" 瀛楃鏈韓錛岃浣跨敤 ""+"

*

淇グ鍖歸厤嬈℃暟涓?0 嬈℃垨浠繪剰嬈°傝鍖歸厤 "*" 瀛楃鏈韓錛岃浣跨敤 ""*"

|

宸﹀彸涓よ竟琛ㄨ揪寮忎箣闂?"鎴? 鍏崇郴銆傚尮閰?"|" 鏈韓錛岃浣跨敤 ""|"


姣旇緝{? + *}鐢ㄦ硶

 1public class DataMatcher {
 2    public static void main(String[] args) {
 3        String input = "aab ab acb ";
 4        String regex = "e.+?d";
 5        String regex1 = "a*b";
 6        String regex2 = "a+b";
 7        String regex3 = "a?b";
 8        
 9        Pattern p = Pattern.compile(regex1);
10        Matcher m = p.matcher(input);
11                
12        while(m.find()){
13            System.out.println("match: '" + m.group() + "' start: " + m.start() + " end: " + m.end());
14        }

15    }

16}


regex1 result:

1match: 'aab' start: 0 end: 3
2match: 'ab' start: 4 end: 6
3match: 'b' start: 9 end: 10



regex2 result

1match: 'aab' start: 0 end: 3
2match: 'ab' start: 4 end: 6



regex3 result

1match: 'ab' start: 1 end: 3
2match: 'ab' start: 4 end: 6
3match: 'b' start: 9 end: 10



{.}鐨勭敤娉?br />

1String regex = "a.*?b";
2String input = "eaab ab eb acb acsd df ad";
3

result:
1match: 'aab' start: 1 end: 4
2match: 'ab' start: 5 end: 7
3match: 'acb' start: 11 end: 14


{|}鐨勭敤娉?br />
1String input = "eaab ab eb acb acsd df ad";
2String regex = "(a.*?)(b|d)";

result:
1match: 'aab' start: 1 end: 4
2match: 'ab' start: 5 end: 7
3match: 'acb' start: 11 end: 14
4match: 'acsd' start: 15 end: 19
5match: 'ad' start: 23 end: 25

{[]}鐢ㄦ硶
1String input = "a b c da ab";
2String regex = "[ab]";

result:
1match: 'a' start: 0 end: 1
2match: 'b' start: 2 end: 3
3match: 'a' start: 7 end: 8
4match: 'a' start: 9 end: 10
5match: 'b' start: 10 end: 11



sailor 2008-12-07 19:50 鍙戣〃璇勮
]]>
綾誨姞杞藉櫒http://www.tkk7.com/sailor/articles/235266.htmlsailorsailorSun, 19 Oct 2008 00:31:00 GMThttp://www.tkk7.com/sailor/articles/235266.htmlhttp://www.tkk7.com/sailor/comments/235266.htmlhttp://www.tkk7.com/sailor/articles/235266.html#Feedback0http://www.tkk7.com/sailor/comments/commentRss/235266.htmlhttp://www.tkk7.com/sailor/services/trackbacks/235266.html  

綾誨姞杞藉櫒

Java涓被鐨勬煡鎵句笌瑁呰澆鍑虹幇鐨勯棶棰樻繪槸浼氭椂涓嶆椂鍑虹幇鍦?/span>Java紼嬪簭鍛橀潰鍓嶏紝榪欏茍涓嶆槸浠涔堜涪鑴哥殑浜嬫儏錛岀浉淇℃病鏈変竴涓?/span>Java紼嬪簭鍛樻病閬囧埌榪?/span>ClassNotException,鍥犳涓嶈涓鴻浜虹瀰瑙佽嚜宸變篃鐘繖鏍風殑閿欒鑰岃寰椾笉鑷劧錛屼絾鏄湪濡傛灉鍑虹幇浜?/span>ClassNotFoundException鍚庡紓甯稿悗涓鑴哥殑鑼劧錛岄偅鎴戞兂浣犺浜嗚В涓涓?/span>java鐨勭被瑁呰澆鐨勪綋鍒朵簡錛屽悓鏃朵負浜嗚繘琛屼笅闈㈢殑鍏充簬綾昏杞藉櫒涔嬮棿鐨勯殧紱繪х殑璁ㄨ錛屾垜浠厛綆鍗曚粙緇嶄竴涓嬬被瑁呰澆鐨勪綋緋葷粨鏋勩?/span>

1. Java綾昏杞戒綋緋葷粨鏋?/span>

瑁呰澆綾葷殑榪囩▼闈炲父綆鍗曪細鏌ユ壘綾繪墍鍦ㄤ綅緗紝騫跺皢鎵懼埌鐨?/span>Java綾葷殑瀛楄妭鐮佽鍏ュ唴瀛橈紝鐢熸垚瀵瑰簲鐨?/span>Class瀵硅薄銆?/span>Java鐨勭被瑁呰澆鍣ㄤ笓闂ㄧ敤鏉ュ疄鐜拌繖鏍風殑榪囩▼錛?/span>JVM騫朵笉姝㈡湁涓涓被瑁呰澆鍣紝浜嬪疄涓婏紝濡傛灉浣犳効鎰忕殑璇濓紝浣犲彲浠ヨJVM鎷ユ湁鏃犳暟涓被瑁呰澆鍣紝褰撶劧榪欓櫎浜嗘祴璇?/span>JVM澶栵紝鎴戞兂涓嶅嚭榪樻湁鍏朵粬鐨勭敤閫斻備綘搴旇宸茬粡鍙戠幇鍒頒簡榪欐牱涓涓棶棰橈紝綾昏杞藉櫒鑷韓涔熸槸涓涓被錛屽畠涔熼渶瑕佽瑁呰澆鍒板唴瀛樹腑鏉ワ紝閭d箞榪欎簺綾昏杞藉櫒鐢辮皝鏉ヨ杞藉憿錛屾誨緱鏈変釜鏍瑰惂錛熸病閿欙紝紜疄瀛樺湪榪欐牱鐨勬牴錛屽畠灝辨槸紲為緳瑙侀涓嶈灝劇殑Bootstrap ClassLoader. 涓轟粈涔堣瀹冪榫欒棣栦笉瑙佸熬鍛紝鍥犱負浣犳牴鏈棤娉曞湪Java浠g爜涓姄浣忓摢鎬曟槸瀹冪殑涓鐐圭偣鐨勫熬宸達紝灝界浣犺兘鏃舵椂鍒誨埢浣撲細鍒板畠鐨勫瓨鍦紝鍥犱負java鐨勮繍琛岀幆澧冩墍闇瑕佺殑鎵鏈夌被搴擄紝閮界敱瀹冩潵瑁呰澆錛岃屽畠鏈韓鏄?/span>C++鍐欑殑紼嬪簭錛屽彲浠ョ嫭绔嬭繍琛?/span>,鍙互璇存槸JVM鐨勮繍琛岃搗鐐?/span>,浼熷ぇ鍚с傚湪Bootstrap瀹屾垚瀹冪殑浠誨姟鍚庯紝浼氱敓鎴愪竴涓?/span>AppClassLoader(瀹為檯涓婁箣鍓嶇郴緇熻繕浼氫嬌鐢ㄦ墿灞曠被瑁呰澆鍣?/span>ExtClassLoader錛屽畠鐢ㄤ簬瑁呰澆Java榪愯鐜鎵╁睍鍖呬腑鐨勭被),榪欎釜綾昏杞藉櫒鎵嶆槸鎴戜滑緇忓父浣跨敤鐨勶紝鍙互璋冪敤ClassLoader.getSystemClassLoader() 鏉ヨ幏寰楋紝鎴戜滑鍋囧畾紼嬪簭涓病鏈変嬌鐢ㄧ被瑁呰澆鍣ㄧ浉鍏蟲搷浣滆瀹氭垨鑰呰嚜瀹氫箟鏂扮殑綾昏杞藉櫒錛岄偅涔堟垜浠紪鍐欑殑鎵鏈?/span>java綾婚氶氫細鐢卞畠鏉ヨ杞斤紝鍊煎緱灝婃暚鍚с?/span>AppClassLoader鏌ユ壘綾葷殑鍖哄煙灝辨槸鑰崇啛鑳借鐨?/span>Classpath錛屼篃鏄垵瀛﹁呭繀欏昏法榪囩殑闂ㄦ錛屾湁娌℃湁鐏靛厜涓闂殑鎰熻錛屾垜浠寜鐓у畠鐨勭被鏌ユ壘鑼冨洿緇欏畠鍙栧悕涓虹被璺緞綾昏杞藉櫒銆傝繕鏄厛鍓嶅亣瀹氱殑鎯呭喌錛屽綋Java涓嚭鐜版柊鐨勭被錛?/span>AppClassLoader棣栧厛鍦ㄧ被浼犻掔粰瀹冪殑鐖剁被綾昏杞藉櫒錛屼篃灝辨槸Extion ClassLoader錛岃闂畠鏄惁鑳藉瑁呰澆璇ョ被錛屽鏋滆兘錛岄偅AppClassLoader灝變笉騫茶繖媧諱簡錛屽悓鏍?/span>Extion ClassLoader鍦ㄨ杞芥椂錛屼篃浼氬厛闂棶瀹冪殑鐖剁被瑁呰澆鍣ㄣ傛垜浠彲浠ョ湅鍑虹被瑁呰澆鍣ㄥ疄闄呬笂鏄竴涓爲鐘剁殑緇撴瀯鍥撅紝姣忎釜綾昏杞藉櫒鏈夎嚜宸辯殑鐖朵翰錛岀被瑁呰澆鍣ㄥ湪瑁呰澆綾繪椂錛屾繪槸鍏堣鑷繁鐨勭埗綾昏杞藉櫒瑁呰澆(澶氫箞灝婃暚闀胯緢),濡傛灉鐖剁被瑁呰澆鍣ㄦ棤娉曡杞借綾繪椂錛岃嚜宸卞氨浼氬姩鎵嬭杞斤紝濡傛灉瀹冧篃瑁呰澆涓嶄簡錛岄偅涔堝涓嶈搗錛屽畠浼氬ぇ鍠婁竴澹幫細Exception錛?/span>class not found銆傛湁蹇呰鎻愪竴鍙ワ紝褰撶敱鐩存帴浣跨敤綾昏礬寰勮杞藉櫒瑁呰澆綾誨け璐ユ姏鍑虹殑鏄?/span>NoClassDefFoundException寮傚父銆傚鏋滀嬌鐢ㄨ嚜瀹氫箟鐨勭被瑁呰澆鍣?/span>loadClass鏂規硶鎴栬?/span>ClassLoader鐨?/span>findSystemClass鏂規硶瑁呰澆綾伙紝濡傛灉浣犱笉鍘誨埢鎰忔敼鍙橈紝閭d箞鎶涘嚭鐨勬槸ClassNotFoundException銆?/span>

鎴戜滑綆鐭葷粨涓涓嬩笂闈㈢殑璁ㄨ錛?/span>

1.JVM綾昏杞藉櫒鐨勪綋緋葷粨鏋勫彲浠ョ湅浣滄槸鏍戠姸緇撴瀯銆?/span>

2.鐖剁被瑁呰澆鍣ㄤ紭鍏堣杞姐傚湪鐖剁被瑁呰澆鍣ㄨ杞藉け璐ョ殑鎯呭喌涓嬪啀瑁呰澆錛屽鏋滈兘瑁呰澆澶辮觸鍒欐姏鍑?/span>ClassNotFoundException鎴栬?/span>NoClassDefFoundError寮傚父銆?/span>

閭d箞鎴戜滑鐨勭被鍦ㄤ粈涔堟儏鍐典笅琚杞界殑鍛紵

2. 綾誨浣曡瑁呰澆

鍦?/span>java2涓紝JVM鏄浣曡杞界被鐨勫憿錛屽彲浠ュ垎涓轟袱縐嶇被鍨嬶紝涓縐嶆槸闅愬紡鐨勭被瑁呰澆錛屼竴縐嶆槸鏄懼紡鐨勭被瑁呰澆銆?/span>

2.1 闅愬紡鐨勭被瑁呰澆

闅愬紡鐨勭被瑁呰澆鏄紪鐮佷腑鏈甯哥敤寰楁柟寮忥細

A b = new A();

濡傛灉紼嬪簭榪愯鍒拌繖孌典唬鐮佹椂榪樻病鏈?/span>A綾伙紝閭d箞JVM浼氳姹傝杞藉綋鍓嶇被鐨勭被瑁呭櫒鏉ヨ杞界被銆傞棶棰樻潵浜嗭紝鎴戞妸浠g爜寮勫緱澶嶆潅涓鐐圭偣錛屼絾渚濇棫娌℃湁浠諱綍闅懼害錛岃鎬濊?/span>JVM寰楄杞芥搴忥細

package test;

Public class A{

    public void static main(String args[]){

        B b 錛?/span> new B();

    }

}

class B{C c;}

class C{}

鎻檽絳旀錛岀被瑁呰澆鐨勬搴忎負A->B錛岃岀被C鏍規湰涓嶄細琚?/span>JVM鐞嗕細,鍏堜笉瑕佹儕璁訛紝浠旂粏鎯蟲兂錛岃繖涓嶆鏄垜浠渶闇瑕佸緱鍒扮殑緇撴灉銆傛垜浠粩緇嗕簡瑙d竴涓?/span>JVM瑁呰澆欏哄簭銆傚綋浣跨敤Java A鍛戒護榪愯A綾繪椂錛?/span>JVM浼氶鍏堣姹傜被璺緞綾昏杞藉櫒(AppClassLoader)瑁呰澆A綾伙紝浣嗘槸榪欐椂鍙杞?/span>A錛屼笉浼氳杞?/span>A涓嚭鐜扮殑鍏朵粬綾?/span>(B綾?/span>)錛屾帴鐫瀹冧細璋冪敤A涓殑main鍑芥暟錛岀洿鍒拌繍琛岃鍙?/span>b 錛?/span> new B()鏃訛紝JVM鍙戠幇蹇呴』瑁呰澆B綾葷▼搴忔墠鑳界戶緇繍琛岋紝浜庢槸綾昏礬寰勭被瑁呰澆鍣ㄤ細鍘昏杞?/span>B綾伙紝铏界劧鎴戜滑鍙互鐪嬪埌B涓湁鏈?/span>C綾葷殑澹版槑錛屼絾鏄茍涓嶆槸瀹為檯鐨勬墽琛岃鍙ワ紝鎵浠ュ茍涓嶅幓瑁呰澆C綾伙紝涔熷氨鏄JVM鎸夌収榪愯鏃剁殑鏈夋晥鎵ц璇彞錛屾潵鍐沖畾鏄惁闇瑕佽杞芥柊綾伙紝浠庤岃杞藉敖鍙兘灝戠殑綾伙紝榪欎竴鐐瑰拰緙栬瘧綾繪槸涓嶇浉鍚岀殑銆?/span>

2.2 鏄懼紡鐨勭被瑁呰澆

浣跨敤鏄劇ず鐨勭被瑁呰澆鏂規硶寰堝錛屾垜浠兘瑁呰澆綾?/span>test.A涓轟緥銆?/span>

浣跨敤Class綾葷殑forName鏂規硶銆傚畠鍙互鎸囧畾瑁呰澆鍣紝涔熷彲浠ヤ嬌鐢ㄨ杞藉綋鍓嶇被鐨勮杞藉櫒銆備緥濡傦細

Class.forName("test.A");                                            

瀹冪殑鏁堟灉鍜?/span>

Class.forName("test.A",true,this.getClass().getClassLoader());

鏄竴鏍風殑銆?/span>

浣跨敤綾昏礬寰勭被瑁呰澆瑁呰澆.

ClassLoader.getSystemClassLoader().loadClass("test.A");

浣跨敤褰撳墠榪涚▼涓婁笅鏂囩殑浣跨敤鐨勭被瑁呰澆鍣ㄨ繘琛岃杞斤紝榪欑瑁呰澆綾葷殑鏂規硶甯稿父琚湁鐫澶嶆潅綾昏杞戒綋緋葷粨鏋勭殑緋葷粺鎵浣跨敤銆?/span>

Thread.currentThread().getContextClassLoader().loadClass("test.A")

浣跨敤鑷畾涔夌殑綾昏杞藉櫒瑁呰澆綾?/span>

public class MyClassLoader extends URLClassLoader{

public MyClassLoader() {

        super(new URL[0]);

    }

}

MyClassLoader myClassLoader = new MyClassLoader();

myClassLoader.loadClass("test.A");

MyClassLoader緇ф壙浜?/span>URLClassLoader綾伙紝榪欐槸JDK鏍稿績鍖呬腑鐨勭被瑁呰澆鍣紝鍦ㄦ病鏈夋寚瀹氱埗綾昏杞藉櫒鐨勬儏鍐典笅錛岀被璺緞綾昏杞藉櫒灝辨槸瀹冪殑鐖剁被瑁呰澆鍣紝MyClassLoader騫舵病鏈夊鍔犵被鐨勬煡鎵捐寖鍥達紝鍥犳瀹冨拰綾昏礬寰勮杞藉櫒鏈夌浉鍚岀殑鏁堟灉銆?/span>

鎴戜滑宸茬粡鐭ラ亾Java鐨勭被瑁呰澆鍣ㄤ綋緋葷粨鏋勪負鏍戠姸錛屽涓被瑁呰澆鍣ㄥ彲浠ユ寚瀹氬悓涓涓被瑁呰澆鍣ㄤ綔涓鴻嚜宸辯殑鐖剁被錛屾瘡涓瓙綾昏杞藉櫒灝辨槸鏍戠姸緇撴瀯鐨勪竴涓垎鏀紝褰撶劧瀹冧滑鍙堝彲浠ヤ釜鏈夊瓙綾昏杞藉櫒綾昏杞藉櫒錛岀被瑁呰澆鍣ㄤ篃鍙互娌℃湁鐖剁被瑁呰澆鍣紝榪欐椂Bootstrap綾昏杞藉櫒灝嗕綔涓哄畠鐨勯殣鍚埗綾伙紝瀹為檯涓?/span>Bootstrap綾昏杞藉櫒鏄墍鏈夌被瑁呰澆鍣ㄧ殑紲栧厛錛屼篃鏄爲鐘剁粨鏋勭殑鏍廣傝繖縐嶆爲鐘朵綋緋葷粨鏋勶紝浠ュ強鐖剁被瑁呰澆鍣ㄤ紭鍏堢殑鏈哄埗錛屼負鎴戜滑緙栧啓鑷畾涔夌殑綾昏杞藉櫒鎻愪緵浜嗕究鍒╋紝鍚屾椂鍙互璁╃▼搴忔寜鐓ф垜浠笇鏈涚殑鏂瑰紡榪涜綾葷殑瑁呰澆銆備緥濡傛煇涓▼搴忕殑綾昏杞藉櫒浣撶郴緇撴瀯鍥懼涓嬶細

鍥?/span>2錛氭煇涓▼搴忕殑綾昏杞藉櫒鐨勭粨鏋?/span>

瑙i噴涓涓嬩笂闈㈢殑鍥撅紝ClassLoaderA涓鴻嚜瀹氫箟鐨勭被瑁呰澆鍣紝瀹冪殑鐖剁被瑁呰澆鍣ㄤ負綾昏礬寰勮杞藉櫒錛屽畠鏈変袱涓瓙綾昏杞藉櫒ClassLoaderAA鍜?/span>ClassLaderAB錛?/span>ClassLoaderB涓虹▼搴忎嬌鐢ㄧ殑鍙﹀涓涓被瑁呰澆鍣紝瀹冩病鏈夌埗綾昏杞藉櫒錛屼絾鏈変竴涓瓙綾昏杞藉櫒ClassLoaderBB銆備綘鍙兘浼氳錛岃楝鹼紝鎴戠殑紼嬪簭鎬庝箞浼氫嬌鐢ㄨ繖涔堝鏉傜殑綾昏杞藉櫒緇撴瀯銆備負浜嗚繘琛屼笅闈㈢殑璁ㄨ錛屾殏涓斿灞堜竴涓嬨?/span>

3. 濂囨殑闅旂鎬?/span>

鎴戜滑涓嶉毦鍙戠幇錛屽浘2涓殑綾昏杞藉櫒AA鍜?/span>AB錛?/span> AB鍜?/span>BB錛?/span>AA鍜?/span>B絳夌瓑浣嶄簬涓嶅悓鍒嗘敮涓嬶紝浠栦滑涔嬮棿娌℃湁鐖跺瓙鍏崇郴錛屾垜涓嶇煡閬撳浣曞畾涔夎繖縐嶅叧緋伙紝濮戜笖縐頒粬浠綅浜庝笉鍚屽垎鏀笅銆備袱涓綅浜庝笉鍚屽垎鏀殑綾昏杞藉櫒鍏鋒湁闅旂鎬э紝榪欑闅旂鎬т嬌寰楀湪鍒嗗埆浣跨敤瀹冧滑瑁呰澆鍚屼竴涓被錛屼篃浼氬湪鍐呭瓨涓嚭鐜頒袱涓?/span>Class綾葷殑瀹炰緥銆傚洜涓鴻鍏鋒湁闅旂鎬х殑綾昏杞藉櫒瑁呰澆鐨勭被涓嶄細鍏變韓鍐呭瓨絀洪棿錛屼嬌寰椾嬌鐢ㄤ竴涓被瑁呰澆鍣ㄤ笉鍙兘瀹屾垚鐨勪換鍔″彉寰楀彲浠ヨ交鑰屾槗涓撅紝渚嬪綾葷殑闈欐佸彉閲忓彲鑳藉悓鏃舵嫢鏈夊涓鹼紙铏界劧濂藉儚浣滅敤涓嶅ぇ錛夛紝鍥犱負灝辯畻鏄瑁呰澆綾葷殑鍚屼竴闈欐佸彉閲忥紝瀹冧滑涔熷皢琚繚瀛樹笉鍚岀殑鍐呭瓨絀洪棿錛屽張渚嬪紼嬪簭闇瑕佷嬌鐢ㄦ煇浜涘寘錛屼絾鍙堜笉甯屾湜琚▼搴忓彟澶栦竴浜涘寘鎵浣跨敤錛屽緢綆鍗曪紝緙栧啓鑷畾涔夌殑綾昏杞藉櫒銆傜被瑁呰澆鍣ㄧ殑榪欑闅旂鎬у湪璁稿澶у瀷鐨勮蔣浠跺簲鐢ㄥ拰鏈嶅姟紼嬪簭寰楀埌浜嗗緢濂界殑搴旂敤銆備笅闈㈡槸鍚屼竴涓被闈欐佸彉閲忎負涓嶅悓鍊肩殑渚嬪瓙銆?/span>

package test;

public class A {

 public static void main( String[] args ) {

    try {

      //瀹氫箟涓や釜綾昏杞藉櫒

      MyClassLoader aa= new MyClassLoader();

      MyClassLoader bb = new MyClassLoader();

      //鐢ㄧ被瑁呰澆鍣?/span>aa瑁呰澆testb.B綾?/span>

      Class clazz=aa.loadClass("testb. B");

      Constructor constructor=

        clazz.getConstructor(new Class[]{Integer.class});

      Object object =

     constructor.newInstance(new Object[]{new Integer(1)});

      Method method =

     clazz.getDeclaredMethod("printB",new Class[0]);

      //鐢ㄧ被瑁呰澆鍣?/span>bb瑁呰澆testb.B綾?/span>

      Class clazz2=bb.loadClass("testb. B");

      Constructor constructor2 =

        clazz2.getConstructor(new Class[]{Integer.class});

      Object object2 =

     constructor2.newInstance(new Object[]{new Integer(2)});

      Method method2 =

     clazz2.getDeclaredMethod("printB",new Class[0]);

      //鏄劇ずtest.B涓殑闈欐佸彉閲忕殑鍊?/span>

      method.invoke( object,new Object[0]);

      method2.invoke( object2,new Object[0]);

    } catch ( Exception e ) {

      e.printStackTrace();

    }

 }

}

//Class B 蹇呴』浣嶄簬MyClassLoader鐨勬煡鎵捐寖鍥村唴錛?/span>

//鑰屼笉搴旇鍦?/span>MyClassLoader鐨勭埗綾昏杞藉櫒鐨勬煡鎵捐寖鍥村唴銆?/span>

package testb;

public class B {

    static int b ;

    public B(Integer testb) {

        b = testb.intValue();

    }

    public void printB() {

        System.out.print("my static field b is ", b);

    }

}

public class MyClassLoader extends URLClassLoader{

 private static File file = new File("c:""classes ");

 //璇ヨ礬寰勫瓨鏀劇潃class B錛屼絾鏄病鏈?/span>class A

 public MyClassLoader() {

    super(getUrl());

 }

 public static URL[] getUrl() {

    try {

      return new URL[]{file.toURL()};

    } catch ( MalformedURLException e ) {

      return new URL[0];

    }

 }

}

紼嬪簭鐨勮繍琛岀粨鏋滀負錛?/span>

my static field b is 1

my static field b is 2

紼嬪簭鐨勭粨鏋滈潪甯告湁鎰忔濓紝浠庣紪紼嬭呯殑瑙掑害錛屾垜浠敋鑷沖彲浠ユ妸涓嶅湪鍚屼竴涓垎鏀殑綾昏杞藉櫒鐪嬩綔涓嶅悓鐨?/span>java铏氭嫙鏈猴紝鍥犱負瀹冧滑褰兼瑙夊療涓嶅埌瀵規柟鐨勫瓨鍦ㄣ傜▼搴忓湪浣跨敤鍏鋒湁鍒嗘敮鐨勭被瑁呰澆鐨勪綋緋葷粨鏋勬椂瑕侀潪甯稿皬蹇冿紝寮勬竻妤氭瘡涓被瑁呰澆鍣ㄧ殑綾繪煡鎵捐寖鍥達紝灝介噺閬垮厤鐖剁被瑁呰澆鍣ㄥ拰瀛愮被瑁呰澆鍣ㄧ殑綾繪煡鎵捐寖鍥翠腑鏈夌浉鍚岀被鍚嶇殑綾伙紙鍖呮嫭鍖呭悕鍜岀被鍚嶏級錛屼笅闈㈣繖涓緥瀛愬氨鏄敤鏉ヨ鏄庤繖縐嶆儏鍐靛彲鑳藉甫鏉ョ殑闂銆?/span>

鍋囪鏈夌浉鍚屽悕瀛楀嵈涓嶅悓鐗堟湰鐨勬帴鍙?/span> A錛?/span>

鐗堟湰 1錛?/span>

package test;

Intefer Same{ public String getVersion(); }

鐗堟湰 2錛?/span>

Package test;

Intefer Same{ public String getName(); }

鎺ュ彛A涓や釜鐗堟湰鐨勫疄鐜幫細

鐗堟湰1鐨勫疄鐜?/span>

package test;

public class Same1Impl implements Same {

public String getVersion(){ return "A version 1";}

}

鐗堟湰2鐨勫疄鐜?/span>

public class Same 2Impl implements Same {

public String getName(){ return "A version 2";}

}

鎴戜滑渚濈劧浣跨敤鍥?/span>2鐨勭被瑁呰澆鍣ㄧ粨鏋勶紝棣栧厛灝嗙増鏈?/span>1鐨?/span>Same鍜?/span>Same鐨勫疄鐜扮被Same1Impl鎵撴垚鍖?/span>same1.jar錛屽皢鐗堟湰2鐨?/span>Same鍜?/span>Same鐨勫疄鐜扮被Same1Impl鎵撴垚鍖?/span>same2.jar銆傜幇鍦紝鍋氳繖鏍風殑浜嬫儏錛屾妸same1.jar鏀懼叆綾昏杞藉櫒ClassLoaderA鐨勭被鏌ユ壘鑼冨洿涓紝鎶?/span>same2.jar鏀懼叆綾昏鍣?/span>ClassLoaderAB鐨勭被鏌ユ壘鑼冨洿涓傚綋浣犲叴鍐插啿鐨勮繍琛屼笅闈㈣繖涓湅浼兼紜殑紼嬪簭銆?/span>

瀹為檯涓婅繖涓敊璇殑鏄敱鐖剁被杞藉櫒浼樺厛瑁呰澆鐨勬満鍒墮犳垚錛屽綋綾昏杞藉櫒ClassLoaderAB鍦ㄨ杞?/span>Same2Impl綾繪椂鍙戠幇蹇呴』瑁呰澆鎺ュ彛test.Same錛屼簬鏄寜瑙勫畾璇鋒眰鐖剁被瑁呰澆鍣ㄨ杞斤紝鐖剁被瑁呰澆鍣ㄥ彂鐜頒簡鐗堟湰1鐨?/span>test.Same鎺ュ彛騫跺叴鍐插啿鐨勮杞斤紝浣嗘槸鍗存兂涓嶅埌Same2Impl鎵甯屾湜鐨勬槸鐗堟湰2 鐨?/span>test.Same錛屽悗闈㈢殑浜嬫儏鍙兂鑰岀煡浜嗭紝寮傚父琚姏鍑恒?/span>

鎴戜滑寰堥毦璐f?/span>Java涓殏鏃跺茍娌℃湁鎻愪緵鍖哄垎鐗堟湰鐨勬満鍒訛紝濡傛灉浣跨敤浜嗘瘮杈冨鏉傜殑綾昏杞藉櫒浣撶郴緇撴瀯錛屽湪鍑虹幇浜嗘煇涓寘鎴栬呯被鐨勫涓増鏈椂錛屽簲鐗瑰埆娉ㄦ剰銆?/span>

鎺屾彙鍜岀伒媧昏繍鐢?/span>Java鐨勭被瑁呰澆鍣ㄧ殑浣撶郴緇撴瀯錛屽紼嬪簭鐨勭郴緇熻璁★紝紼嬪簭鐨勫疄鐜幫紝宸茬粡紼嬪簭鐨勮皟璇曪紝閮芥湁鐩稿綋澶х殑甯姪銆傚笇鏈涗互涓婄殑鍐呭鑳藉瀵規偍鏈夋墍甯姪銆?/span>



sailor 2008-10-19 08:31 鍙戣〃璇勮
]]>
java涓枃瀛楃涓叉寜鎷奸煶鎺掑簭 浠g爜(杞? http://www.tkk7.com/sailor/articles/215381.htmlsailorsailorThu, 17 Jul 2008 01:48:00 GMThttp://www.tkk7.com/sailor/articles/215381.htmlhttp://www.tkk7.com/sailor/comments/215381.htmlhttp://www.tkk7.com/sailor/articles/215381.html#Feedback0http://www.tkk7.com/sailor/comments/commentRss/215381.htmlhttp://www.tkk7.com/sailor/services/trackbacks/215381.htmlimport java.text.Collator;
import java.util.Arrays;
import java.util.Comparator;

public class SortPinyin {

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);
        String[] arr 
= "寮犱笁","寮燗""鏉庡洓""鐜嬩簲""璧靛叚""F-16""12345""^%$%"};
        Arrays.sort(arr, cmp);
        
for (int i = 0; i < arr.length; i++)
            System.out.println(arr[i]);
        System.out.println();
    }


}


sailor 2008-07-17 09:48 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 国产男女爽爽爽爽爽免费视频| 久久精品国产精品亚洲| 国产特黄特色的大片观看免费视频| 亚洲精品高清视频| 久久久久国产成人精品亚洲午夜| 四虎www成人影院免费观看| 91香蕉国产线在线观看免费| 丝袜足液精子免费视频| 羞羞漫画在线成人漫画阅读免费 | eeuss影院免费直达入口| 亚洲国产成人AV在线播放| 亚洲youjizz| 亚洲欧洲久久精品| 亚洲一本综合久久| 久久精品国产亚洲沈樵| 亚洲熟妇丰满多毛XXXX| 亚洲国产一区二区视频网站| 四虎免费影院4hu永久免费| 日韩免费观看视频| 性感美女视频在线观看免费精品 | 成人亚洲网站www在线观看| 日韩精品视频免费观看| 天堂在线免费观看中文版| 青青草免费在线视频| 中字幕视频在线永久在线观看免费| 精品国产污污免费网站aⅴ| 120秒男女动态视频免费| 久久青草精品38国产免费| 久久aa毛片免费播放嗯啊| 99久久久国产精品免费蜜臀| 97视频免费观看2区| 2019中文字幕免费电影在线播放| 99re在线这里只有精品免费| 精品女同一区二区三区免费站| 99久久99久久精品免费看蜜桃| 永久免费av无码网站韩国毛片| 欧美a级在线现免费观看| 免费看片A级毛片免费看| 国产免费观看网站| 中文字幕亚洲第一| 亚洲国产一区二区a毛片|