锘??xml version="1.0" encoding="utf-8" standalone="yes"?>最新亚洲卡一卡二卡三新区,久久亚洲AV成人无码国产电影 ,亚洲欧洲日产国码久在线观看http://www.tkk7.com/wangajing/archive/2009/12/31/307899.html榪芥眰鏃犳澧?/dc:creator>榪芥眰鏃犳澧?/author>Thu, 31 Dec 2009 04:55:00 GMThttp://www.tkk7.com/wangajing/archive/2009/12/31/307899.htmlhttp://www.tkk7.com/wangajing/comments/307899.htmlhttp://www.tkk7.com/wangajing/archive/2009/12/31/307899.html#Feedback0http://www.tkk7.com/wangajing/comments/commentRss/307899.htmlhttp://www.tkk7.com/wangajing/services/trackbacks/307899.html       2009騫?2鏈?1鏃ワ紝绔欏湪2009騫寸殑灝懼反涓婏紝涓嶇鎰熷埌鏃墮棿椋為濄?009騫達紝鍖嗗寙鑰岃繃銆傚湪榪囧幓鐨?009騫達紝鏀惰幏浣曞錛屽け鍘諱綍澶氥?009騫達紝瀵規(guī)垜鏉ヨ錛屾槸涓涓噸瑕佺殑杞姌鐐廣傛笎娓愮殑鍙戠幇鑷繁搴旇闀垮ぇ浜嗭紝涔熷彂鐜拌嚜宸辯‘瀹為暱澶т簡錛屾洿鍙戠幇鑷繁瀹為檯涓婅繕鏄渶瑕佺戶緇暱澶с?/p>

      姣忓勾鐨勮繖涓椂鍊欙紝鍚勪釜鏂伴椈濯掍綋閮戒細璇勫嚭浠涔堝崄澶т箣綾葷殑錛屾垜涔熻惤涓浼氫織錛堝綋鐒惰嚜宸辨湰韜氨寰堜織錛夛紝鏉ョ湅鐪嬩粖騫村彂鐢熷湪鎴戣韓涓婄殑鍑犲ぇ浜嬩歡錛?/p>

鍏堝ぇ浣撶綏鍒椾竴涓嬪惂錛?/p>

  1. 璁㈠
  2. 榪涗含
  3. 宸ヤ綔
  4. 姣曚笟
  5. 璇葷爺
  6. 涔扮瑪璁版湰

     浠庢椂闂磋法搴︿笂鏉ヨ錛?1鏈堝埌2鏈堝湪瀹惰繃騫達紝2鏈堝拰3鏈堝湪闈掑矝鏌愬叕鍙稿疄涔狅紝4鏈堝拰5鏈堝湪鍖椾含鏌愬叕鍙稿疄涔狅紝6鏈堝湪涓浗鐭蟲補澶у浜彈姣曚笟涔嬪墠鐨勬椂鍏夛紝7鏈堝埌8鏈堢戶緇湪鍖椾含鏌愬叕鍙稿疄涔狅紝9鏈堝埌12鏈堝湪涓婂+瀹炰範銆?009騫存渶騫哥鐨勪簨鎯呭彂鐢熷湪1鍒?鏈堬紝灝藉揩涔熸湁涓嶅揩錛涙渶騫沖父鐨勬棩瀛愬湪2鏈堝拰3鏈堬紝鍒頒簡4鏈堝拰5鏈堟垨璁告槸鎴戞渶綰犵粨鐨勬棩瀛愬惂錛?鏈堟垨璁告槸鏈蹇箰鐨勬棩瀛愮殑鍚э紱7鏈堝拰8鏈堣鎴戜綋浼氬埌浜嗗伐浣滅殑婊嬪懗錛涜?鏈堝埌12鏈堬紝鏁村ぉ鍦ㄥ叕鍙鎬笌瀛︽牎涔嬮棿濂旇窇錛岀煡閬撲簡宸ヤ綔+涓婅涓よ呰鍋氬埌鍏奸【鐨勬粙鍛籌紝铏界劧騫舵病鏈夊仛鍒板吋欏俱?/p>

     2009騫村ぇ浣撶粡鍘嗗姝ゃ?009騫村鎴戞渶澶х殑鍏抽敭瀛楁垨璁稿氨鏄滄敼鍙樷濓紝榪欎竴騫存垜璁㈠浜嗭紝鍦ㄨ繖涓鐐逛笂錛屾敼鍙樹簡鎴戠殑鍑嗛潪鍗曡韓鐘舵侊紱鍦ㄨ繖涓騫達紝鎴戝疄涔犱簡錛岃屼笖澶ч噺鐨勬椂闂撮兘鍦ㄤ簬姝わ紝鏀瑰彉浜嗘垜浠呬粎鏄鐢熺殑鐘舵侊紱鍦ㄨ繖涓騫達紝鎴戞瘯涓氫簡錛屾垜紱誨紑浜嗙敓媧誨涔犲洓騫寸殑涓浗鐭蟲補澶у錛岀寮浜嗚鎴戞瘯鐢熼毦蹇樼殑鏃ュ瓙錛涘湪榪欎竴騫達紝鎴戞潵鍖椾含浜嗭紝浠庡鍖椾含鐨勪竴鏃犳墍鐭ワ紝鍒板紑濮嬬殑褰峰鯨錛岀劧鍚庢笎娓愮啛鎮(zhèn)夊拰閫傚簲錛涘湪榪欎竴騫達紝鎴戠殑緇忔祹娓愭笎鐙珛錛屽敖綆℃瘡涓湀鍙湁涓嶅埌1000鐨勬敹鍏ワ紝浣嗚兘婊¤凍鐨勬垜鐨勫熀鏈渶姹傦紱鍦ㄨ繖涓騫達紝鎴戜拱浜嗙瑪璁版湰錛岃櫧鐒跺鍏朵粬浜烘潵璇達紝榪欎笉鏄竴浠剁壒鍒殑浜嬶紝瀵規(guī)垜鏉ヨ錛屽洜閲囩敤浜嗗垎鏈熶粯嬈撅紝鑰岀敤鎺ヤ笅鏉ヤ竴騫翠腑榪戝崐涓湀鐨勫伐璧勬潵榪橈紝浣嗘垜涓嶈寰楀悗鎮(zhèn)旓紝鍦ㄨ繖涓繃紼嬩腑錛屾垜鐨勭粡嫻庤蹇靛拰鐞嗚儲瑙傚康寮濮嬫笎娓愭敼鍙橈紱鍦ㄨ繖涓騫達紝宸ヤ綔鎴愪簡鎴戠殑鏍稿績錛屽伐浣滄暀浼氭垜寰堝涓滆タ錛屽湪涓庝漢浜ゆ祦銆佸湪宸ヤ綔鎬佸害銆佸湪鎶鏈笂錛岄兘鏈変竴瀹氱殑鎻愰珮銆?/p>

     鍥炲繂2009騫達紝鏀惰幏棰囧錛屼篃澶卞幓涓嶅皯銆備絾鏃ュ瓙鎬繪槸鍚戝墠鐨勶紝鏈夊緱蹇呮湁澶便傚笇鏈涘湪浠ュ悗鐨?009騫達紝鑷繁鑳藉娓愭笎鎻愰珮鑷繁鐨勮兘鍔涖傛棤璁烘槸鍦ㄧ敓媧諱笂錛屽湪宸ヤ綔涓婏紝榪樻槸鍦ㄥ績鐞嗕笂銆?/p>

 

    2009騫?0澶уぇ浜嬶細

       涓庤佸﹩璁㈠錛?/p>

       2009騫達紝



]]>
Spring web MVC 妗嗘灦瀛︿範絎旇 涔?ViewResolver鎶鏈?/title><link>http://www.tkk7.com/wangajing/archive/2009/11/27/303880.html</link><dc:creator>榪芥眰鏃犳澧?/dc:creator><author>榪芥眰鏃犳澧?/author><pubDate>Fri, 27 Nov 2009 04:11:00 GMT</pubDate><guid>http://www.tkk7.com/wangajing/archive/2009/11/27/303880.html</guid><wfw:comment>http://www.tkk7.com/wangajing/comments/303880.html</wfw:comment><comments>http://www.tkk7.com/wangajing/archive/2009/11/27/303880.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/wangajing/comments/commentRss/303880.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wangajing/services/trackbacks/303880.html</trackback:ping><description><![CDATA[<p>涓婃鐨勬枃绔犱腑浠嬬粛浜哅odelAndView瀵硅薄涓殑view瀵硅薄錛屽彲浠ヤ嬌鐢ㄥ瓧絎︿覆鏉ヨSpring妗嗘灦榪涜瑙f瀽鑾峰緱閫傚悎鐨勮鍥俱傝岃В鏋怴iew鐨勫氨鏄疺iewResolver鎶鏈?/p> <p>ViewResolver鐨勫畾涔夊涓嬶細</p> <pre class="csharpcode"><span id="1jt9fnv" class="kwrd">public</span> <span id="19b993h" class="kwrd">interface</span> ViewResolver {<br /> View resolveViewName(String viewName, Locale locale) throws Exception;<br /> }</pre> <pre class="csharpcode"> </pre> <pre class="csharpcode">鍦╗spring-dispatcher-name]-servlet.xml涓紝鍙互瀹氫箟viewResolver錛?/pre> <p><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><br />         <property name="prefix" value="/jsp/"/><br />         <property name="suffix" value=".jsp"/><br />     </bean> </p> <p><font face="Consolas" size="3">鏉ヨDispacherServlet榪涜鍔犺澆榛樿鐨剉iewResolver錛屽鏋滄病鏈夎緗畍iewResolver錛宻pring浣跨敤InternalResourceViewResolver榪涜瑙f瀽銆?/font></p> <p><font face="Consolas" size="3">Spring瀹炵幇ViewResolver鐨勯潪鎶借薄綾諱笖鎴戜滑緇忓父浣跨敤鐨剉iewResolver鏈変互涓嬪洓縐嶏細</font></p> <table unselectable="on" border="2" cellpadding="2" cellspacing="1" width="700"> <tbody> <tr> <td valign="top" width="350">InternalResourceViewResolver</td> <td valign="top" width="350">灝嗛昏緫瑙嗗浘鍚嶅瓧瑙f瀽涓轟竴涓礬寰?/td> </tr> <tr> <td valign="top" width="350">BeanNameViewResolver</td> <td valign="top" width="350">灝嗛昏緫瑙嗗浘鍚嶅瓧瑙f瀽涓篵ean鐨凬ame灞炴э紝浠庤屾牴鎹畁ame灞炴э紝鎵懼畾涔塚iew鐨刡ean</td> </tr> <tr> <td valign="top" width="350">ResourceBundleResolver</td> <td valign="top" width="350">鍜孊eanNameViewResolver涓鏍鳳紝鍙笉榪囧畾涔夌殑view-bean閮藉湪涓涓猵roperties鏂囦歡涓紝鐢ㄨ繖涓被榪涜鍔犺澆榪欎釜properties鏂囦歡</td> </tr> <tr> <td valign="top" width="350">XmlViewResolver</td> <td valign="top" width="350">鍜孯esourceBundleResolver涓鏍鳳紝鍙笉榪囧畾涔夌殑view-bean鍦ㄤ竴涓獂ml鏂囦歡涓紝鐢ㄨ繖涓被鏉ュ姞杞絰ml鏂囦歡</td> </tr> </tbody> </table> <p> </p> <p>浣跨敤澶氳鍥捐В鏋愬櫒錛?/p> <p>鎴戜滑涓嶆兂鍙嬌鐢ㄤ竴縐嶈鍥捐В鏋愬櫒鐨勮瘽錛屽彲浠ュ湪[spring-dispatcher-name]-servlet.xml瀹氫箟澶氫釜viewResolver錛?/p> <div class="jp91f93" id="codeSnippetWrapper"> <pre id="codeSnippet" class="csharpcode"><bean id=<span id="bnl9jtf" class="str">"viewResolver"</span> <span id="d3zxlvf" class="kwrd">class</span>=<span id="9n9dzr1" class="str">"org.springframework.web.servlet.view.InternalResourceViewResolver"</span>><br /> <property name=<span id="ftx39dl" class="str">"prefix"</span> value=<span id="dfzvjhn" class="str">"/jsp/"</span>/><br /> <property name=<span id="39zvhf1" class="str">"suffix"</span> value=<span id="339fjfv" class="str">".jsp"</span>/><br /> </bean><br /> <br /> <bean id=”beanNameViewResolver” <span id="rt39xdj" class="kwrd">class</span>=”...BeanNameViewResolver”><br /> <property name=<span id="33zln9j" class="str">"order"</span> value=<span id="3j3v9d9" class="str">"1"</span>></property><br /> </bean><br /> <br /> <bean id=”beanNameViewResolver” <span id="3dbnt39" class="kwrd">class</span>=”...XmlViewResolver”><br /> <property name=<span id="1nbh9pz" class="str">"order"</span> value=<span id="vfr9h9l" class="str">"0"</span>></property><br /> </bean></pre> <br /> </div> <p>DispatcherServlet浼氬姞杞芥墍鏈夌殑viewResolver鍒頒竴涓猯ist涓紝騫舵寜鐓т紭鍏堢駭榪涜瑙f瀽銆傛敞鎰弌rder涓殑鍊艱秺灝忥紝浼樺厛綰ц秺楂樸傝宨d涓簐iewResolver</p> <p>鐨剉iewResolver鐨勪紭鍏堢駭鏄渶浣庣殑銆?/p> <img src ="http://www.tkk7.com/wangajing/aggbug/303880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wangajing/" target="_blank">榪芥眰鏃犳澧?/a> 2009-11-27 12:11 <a href="http://www.tkk7.com/wangajing/archive/2009/11/27/303880.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Spring MVC妗嗘灦瀛︿範絎旇 涔?View鎶鏈?/title><link>http://www.tkk7.com/wangajing/archive/2009/11/26/303759.html</link><dc:creator>榪芥眰鏃犳澧?/dc:creator><author>榪芥眰鏃犳澧?/author><pubDate>Thu, 26 Nov 2009 05:25:00 GMT</pubDate><guid>http://www.tkk7.com/wangajing/archive/2009/11/26/303759.html</guid><wfw:comment>http://www.tkk7.com/wangajing/comments/303759.html</wfw:comment><comments>http://www.tkk7.com/wangajing/archive/2009/11/26/303759.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/wangajing/comments/commentRss/303759.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wangajing/services/trackbacks/303759.html</trackback:ping><description><![CDATA[<p>浠ュ墠錛屾垜浠緇嗕粙緇嶄簡Spring鐨凜ontroller鎶鏈係pring鐨勯潰鍚戞帴鍙g紪紼嬶紝浣緾ontroller鐨勫疄鐜板縐嶅鏍楓俈iew鎶鏈篃涓鏍楓備粖澶╃殑鍒嗘瀽鍏堜粠鍦–ontroller涓殑ModelAndView寮濮嬨?/p> <div><pre class="csharpcode"><span id="jjntpjz" class="kwrd">public</span> <span id="pj9trrp" class="kwrd">class</span> ModelAndView { <span id="v9vprzf" class="kwrd">private</span> Object view; <span id="znbr9pn" class="rem">//View瀹炰緥鎴栬卾iew鐨勫瓧絎︿覆 </span> <span id="39vxzxn" class="rem">/** Model Map */</span> <span id="z931xnd" class="kwrd">private</span> ModelMap model; <span id="zv39f11" class="rem">//model</span> <span id="d99fh9t" class="rem">/* * Convenient constructor when there is no model data to expose. * Can also be used in conjunction with <code>addObject</code>. </span> <span id="3pb9tt9" class="rem"> * @param view View object to render </span> <span id="3jvb1j9" class="rem"> * @see #addObject */</span> <span id="lhjvf99" class="kwrd">public</span> ModelAndView(View view) { <span id="lfrl9jp" class="kwrd">this</span>.view = view; } <span id="x9lpzxn" class="kwrd">public</span> ModelAndView(String viewName){ <span id="9ztnhpn" class="kwrd">this</span>.view = viewName; }</pre></div> <style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style> <div><pre id="codeSnippet" class="csharpcode"><br> </pre></div> <div>鍙互鐪嬪埌view瀹炰緥鍙互鎸囧悜涓涓猇iew瀵硅薄鎴栬呭瓧絎︿覆銆傜幇鍦ㄥ厛鐪嬬湅View鎺ュ彛錛?/div><pre class="csharpcode"><span id="3v9x1fv" class="kwrd">public</span> <span id="1df9trh" class="kwrd">interface</span> View { <span id="vtnx9db" class="rem">/**</span> <span id="f31bfdj" class="rem"> * Return the content type of the view, if predetermined.</span> <span id="3t9x9d9" class="rem"> * <p>Can be used to check the content type upfront,</span> <span id="h3t9pv3" class="rem"> * before the actual rendering process.</span> <span id="pd3fhpf" class="rem"> * @return the content type String (optionally including a character set),</span> <span id="9v999bb" class="rem"> * or <code>null</code> if not predetermined.</span> <span id="3vz9v93" class="rem"> */</span> String getContentType(); <span id="djt3p9t" class="rem">/**</span> <span id="zrd99t9" class="rem"> * 緇樺埗瑙嗗浘</span></pre><pre class="csharpcode"><span id="f39f9dt" class="rem"></span><span id="9l39l99" class="rem"> * 緇樺埗瑙嗗浘鐨勭涓姝ユ槸鍑嗗璇鋒眰: 濡傛灉鏄疛SP鐨勮鍥炬妧鏈?/span></pre><pre class="csharpcode"><span id="lpj39b9" class="rem"></span><span id="pjt9l3n" class="rem"> * 棣栧厛浼氭妸model璁句負request鐨勫睘鎬с?/span></pre><pre class="csharpcode"><span id="r3jdn9z" class="rem"></span><span id="bd9f99h" class="rem"> * 絎簩姝ュ垯鏄湡姝g殑緇樺埗瑙嗗浘</span></pre><pre class="csharpcode"><span id="n99dbrx" class="rem"> * @param model Map with name Strings as keys and corresponding model</span> <span id="xj3dfn9" class="rem"> * objects as values (Map can also be <code>null</code> in case of empty model)</span> <span id="hjl99lr" class="rem"> * @param request current HTTP request</span> <span id="thrf9tb" class="rem"> * @param response HTTP response we are building</span> <span id="txz1hrh" class="rem"> * @throws Exception if rendering failed</span> <span id="j99jd9d" class="rem"> */</span> <span id="j99hrh9" class="kwrd">void</span> render(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception; } 鍦ㄨ繖涔嬪悗錛屾垜浠啀鏉ョ湅鐪媀iew鐨勫疄鐜扮戶鎵跨被鍥撅紝鍙互鐪嬪埌Spring鏀寔澶氱綾誨瀷瑙嗗浘錛?/pre> <p>org.springframework.web.servlet.view.<b>AbstractView</b> (implements org.springframework.beans.factory.BeanNameAware, org.springframework.web.servlet.<strong>View</strong>) <ul> <li>org.springframework.web.servlet.view.document.<b>AbstractExcelView</b> <li>org.springframework.web.servlet.view.document.<b>AbstractJExcelView</b> <li>org.springframework.web.servlet.view.document.<b>AbstractPdfView</b> <li>org.springframework.web.servlet.view.<b>AbstractUrlBasedView</b> (implements org.springframework.beans.factory.InitializingBean) <ul> <li>org.springframework.web.servlet.view.jasperreports.<b>AbstractJasperReportsView</b> <ul> <li>org.springframework.web.servlet.view.jasperreports.<b>AbstractJasperReportsSingleFormatView</b> <ul> <li>org.springframework.web.servlet.view.jasperreports.<b>ConfigurableJasperReportsView</b> <li>org.springframework.web.servlet.view.jasperreports.<b>JasperReportsCsvView</b> <li>org.springframework.web.servlet.view.jasperreports.<b>JasperReportsHtmlView</b> <li>org.springframework.web.servlet.view.jasperreports.<b>JasperReportsPdfView</b> <li>org.springframework.web.servlet.view.jasperreports.<b>JasperReportsXlsView</b></li></ul> <li>org.springframework.web.servlet.view.jasperreports.<b>JasperReportsMultiFormatView</b></li></ul> <li>org.springframework.web.servlet.view.document.<b>AbstractPdfStamperView</b> <li>org.springframework.web.servlet.view.<b>AbstractTemplateView</b> <ul> <li>org.springframework.web.servlet.view.freemarker.<b>FreeMarkerView</b> <li>org.springframework.web.servlet.view.velocity.<b>VelocityView</b> <ul> <li>org.springframework.web.servlet.view.velocity.<b>VelocityToolboxView</b> <ul> <li>org.springframework.web.servlet.view.velocity.<b>VelocityLayoutView</b></li></ul></li></ul></li></ul> <li>org.springframework.web.servlet.view.<b>InternalResourceView</b> <ul> <li>org.springframework.web.servlet.view.<b>JstlView</b> <li>org.springframework.web.servlet.view.tiles.<b>TilesView</b> <ul> <li>org.springframework.web.servlet.view.tiles.<b>TilesJstlView</b></li></ul></li></ul> <li>org.springframework.web.servlet.view.<b>RedirectView</b> <li>org.springframework.web.servlet.view.tiles2.<b>TilesView</b> <li>org.springframework.web.servlet.view.xslt.<b>XsltView</b></li></ul> <li>org.springframework.web.servlet.view.xslt.<b>AbstractXsltView</b></li></ul><pre class="csharpcode"> </pre> <style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style> <div>鍜孋ontroller涓鏍鳳紝View鐨勭涓涓疄鐜頒篃鏄疉bstractView銆傛墍浠ュ厛璁╂垜浠湅鐪婣bstractView瀵箁ender鍑芥暟鐨勫疄鐜幫細</div> <p>  <div class="jl99fdb" id="codeSnippetWrapper"><pre id="codeSnippet" class="csharpcode"><span id="p9bv939" class="kwrd">public</span> <span id="j3r9bjr" class="kwrd">void</span> render(Map model, HttpServletRequest request, HttpServletResponse response) <span id="blxdnlj" class="kwrd">throws</span> Exception {<br> <span id="zhtrb3j" class="kwrd">if</span> (logger.isTraceEnabled()) {<br> logger.trace(<span id="xr9dn11" class="str">"Rendering view with name '"</span> + <span id="rbnjt9n" class="kwrd">this</span>.beanName + <span id="b3lj99d" class="str">"' with model "</span> + model +<br> <span id="3nxr99n" class="str">" and static attributes "</span> + <span id="9fzlnv9" class="kwrd">this</span>.staticAttributes);<br> } <br><br> <span id="rlfz91t" class="rem">// Consolidate static and dynamic model attributes.</span><br> Map mergedModel = <span id="jbvhbxj" class="kwrd">new</span> HashMap(<span id="d9vfbz1" class="kwrd">this</span>.staticAttributes.size() + (model != null ? model.size() : 0));<br> mergedModel.putAll(<span id="31vhbzt" class="kwrd">this</span>.staticAttributes);<br> <span id="x9phtbh" class="kwrd">if</span> (model != null) {<br> mergedModel.putAll(model);<br> } <br><br> <span id="fph991v" class="rem">// Expose RequestContext?</span><br> <span id="3npjvrr" class="kwrd">if</span> (<span id="9j991jp" class="kwrd">this</span>.requestContextAttribute != null) {<br> mergedModel.put(<span id="39zjljz" class="kwrd">this</span>.requestContextAttribute, createRequestContext(request, mergedModel));<br> } <br><br> prepareResponse(request, response);<br> renderMergedOutputModel(mergedModel, request, response);<br> }<br></pre><br></div> <p>絎竴姝ワ紝灝嗛潤鎬佸睘鎬у拰model鐨勫睘鎬ч兘娣誨姞鍒癿ergedModel閲岄潰銆傚鏋滈渶瑕佽姹備笂涓嬫枃錛屽垯灝嗚姹備笂涓嬫枃娣誨姞鍒癿odel涓?/p> <p>闈欐佸睘鎬ф槸緇ф壙AbstractView榪涜璁劇疆鐨勫睘鎬с傝岃姹備笂涓嬫枃濡傛灉璁劇疆鐨勫悕瀛楀氨浼氬垱寤轟竴涓猺equest涓婁笅鏂囥傚湪requestContext涓畾涔変簡涓浜涘寘鎷湰鍦板寲鍜屼富棰樼殑澶勭悊宸ュ叿銆?/p> <p>絎簩姝ワ紝瀵瑰搷搴旇繘琛岄澶勭悊銆傛渶鍚庤皟鐢ㄥ瓙綾婚渶瑕佸疄鐜扮殑鍑芥暟renderMergedOutputModel銆?/p> <p>瀵筆DF鍜孍XCEL鏍煎紡鎴戜滑鏆備笖涓嶇錛屼笖Spring鏀寔澶氱瑙嗗浘鎶鏈紝榪欓噷鎴戜滑涓昏鍏蟲敞JSTL鎶鏈紝</p> <p>鎺ョ潃鎴戜滑鏉ョ湅<b>AbstractUrlBasedView</b> 綾匯傚湪<b>AbstractUrlBasedView</b> 鍙畾涔変簡涓涓猽rl灞炴с傚埆鐨勬病鏈変粈涔堢壒孌婂鐞嗐?/p> <p>鎺ョ潃緇ф壙<b>AbstractUrlBasedView</b> 鐨勬槸<b>InternalResourceView</b>銆備粬瀵箁enderMergedOutputModel榪涜瀹炵幇錛屽疄鐜板涓?</p> <div><pre class="csharpcode"><span id="rb9vpxv" class="rem">/**</span><br><span id="jl3x9p9" class="rem"> * Render the internal resource given the specified model.</span><br><span id="f3f99tb" class="rem"> * This includes setting the model as request attributes.</span><br><span id="jtv9llr" class="rem"> */</span><br> <span id="9fr9ndb" class="kwrd">protected</span> <span id="3b9ln9h" class="kwrd">void</span> renderMergedOutputModel(<br> Map model, HttpServletRequest request, HttpServletResponse response) <span id="l399t9v" class="kwrd">throws</span> Exception {<br><br> <span id="ll99llj" class="rem">// 鑾峰彇瑕佹毚闇茬殑request錛屼竴鑸兘鏄紶鍏ョ殑鍙傛暟request</span><br> HttpServletRequest requestToExpose = getRequestToExpose(request);<br><br> <span id="z99nzn9" class="rem">// 灝唌odel鐨勬暟鎹坊鍔犲埌request灞炴т腑</span></pre></div> <div><pre class="csharpcode"><span id="vp3p91d" class="rem"></span> exposeModelAsRequestAttributes(model, requestToExpose);<br><br> <span id="dlf9p9r" class="rem">// 璁劇疆helper錛屽鏋滃瓨鍦ㄧ殑璇?/span><br> exposeHelpers(requestToExpose);<br><br> <span id="tn9xthx" class="rem">// 瀵圭粯鍒惰繘琛岄澶勭悊錛屼粠鑰岃幏寰楀埌瑕佸垎鍙戠殑url</span><br> String dispatcherPath = prepareForRendering(requestToExpose, response);<br><br> <span id="x3vxb1d" class="rem">// 鑾峰彇璇鋒眰鍒嗗彂瀵硅薄</span><br> RequestDispatcher rd = requestToExpose.getRequestDispatcher(dispatcherPath);<br> <span id="19zlv9z" class="kwrd">if</span> (rd == null) {<br> <span id="jldzjzx" class="kwrd">throw</span> <span id="lfr9d9f" class="kwrd">new</span> ServletException(<br> <span id="l99rdlr" class="str">"Could not get RequestDispatcher for ["</span> + getUrl() + <span id="blnz999" class="str">"]: check that this file exists within your WAR"</span>);<br> }<br><br> <span id="z9zrvbb" class="rem">// 鍐沖畾浣跨敤RequestDispatcher鐨刬nclude鏂規(guī)硶榪樻槸forward鏂規(guī)硶</span><br> <span id="9p91hx9" class="kwrd">if</span> (useInclude(requestToExpose, response)) {<br> response.setContentType(getContentType());<br> <span id="3dp1t99" class="kwrd">if</span> (logger.isDebugEnabled()) {<br> logger.debug(<span id="x99v9nd" class="str">"Including resource ["</span> + getUrl() + <span id="jv3pzpr" class="str">"] in InternalResourceView '"</span> + getBeanName() + <span id="l99bvv1" class="str">"'"</span>);<br> }<br> rd.include(requestToExpose, response);<br> }<br><br> <span id="rt3vpvp" class="kwrd">else</span> {<br> <span id="prdn9n9" class="rem">// Note: The forwarded resource is supposed to determine the content type itself.</span><br> exposeForwardRequestAttributes(requestToExpose);<br> <span id="3d3nr9h" class="kwrd">if</span> (logger.isDebugEnabled()) {<br> logger.debug(<span id="3h93z93" class="str">"Forwarding to resource ["</span> + getUrl() + <span id="rj999jh" class="str">"] in InternalResourceView '"</span> + getBeanName() + <span id="b9jn999" class="str">"'"</span>);<br> }<br> rd.forward(requestToExpose, response);<br> }<br> }</pre></div> <div>鍙互鐪嬪埌<b>InternalResourceView瀵硅姹傝繘琛屼簡杞彂銆傝漿鍙戝埌url涓娿傛渶鍚庢垜浠湅鐪婮STLView鐨勫疄鐜幫細</b></div> <div><strong></strong><br> </div><pre class="csharpcode"><span id="33b9d9l" class="kwrd">public</span> <span id="z3zb9b9" class="kwrd">class</span> JstlView extends InternalResourceView { <span id="199p9fv" class="kwrd">private</span> MessageSource messageSource; <span id="ldfrbrh" class="kwrd">public</span> JstlView() { } <span id="zrl9xr9" class="kwrd">public</span> JstlView(String url) { super(url); } <span id="rtnf339" class="kwrd">public</span> JstlView(String url, MessageSource messageSource) { <span id="3tphb9d" class="kwrd">this</span>(url); <span id="39p99n3" class="kwrd">this</span>.messageSource = messageSource; } <span id="b3b99h9" class="kwrd">protected</span> <span id="zzlf39f" class="kwrd">void</span> initServletContext(ServletContext servletContext) { <span id="399vhp3" class="kwrd">if</span> (<span id="ztn3xvx" class="kwrd">this</span>.messageSource != <span id="39fzb99" class="kwrd">null</span>) { <span id="3x9jlrh" class="kwrd">this</span>.messageSource = JstlUtils.getJstlAwareMessageSource(servletContext, <span id="33b993b" class="kwrd">this</span>.messageSource); } super.initServletContext(servletContext); } <span id="3xz9vdr" class="kwrd">protected</span> <span id="xr9d93v" class="kwrd">void</span> exposeHelpers(HttpServletRequest request) throws Exception { <span id="z3jb3db" class="kwrd">if</span> (<span id="399f9n3" class="kwrd">this</span>.messageSource != <span id="h9p9jpn" class="kwrd">null</span>) { JstlUtils.exposeLocalizationContext(request, <span id="pbt99hf" class="kwrd">this</span>.messageSource); } <span id="b9931zx" class="kwrd">else</span> { JstlUtils.exposeLocalizationContext(<span id="dvx9t99" class="kwrd">new</span> RequestContext(request, getServletContext())); } } }</pre> <style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style> <p> </p> <p><b>鍦↖nternalResourceView  涓紝鍩烘湰涓婃墍鏈夌殑澶勭悊閮藉樊涓嶅浜嗐傚湪JSTLView瀵逛袱涓柟娉曡繘琛屼簡瑕嗙洊銆傜涓涓猧nitServletContext錛屼富瑕佸垵濮嬪寲浜哅essageResource</b></p> <p><strong>絎簩涓猠xposeHelpers灝唌essageSource鏀懼湪浜唕equest閲岄潰銆?/strong></p> <p><strong>榪欐牱view鐨勮В鏋愬氨緇撴潫浜嗐傛帴涓嬫潵瀹瑰櫒瀵筳sp榪涜瑙f瀽錛屽茍榪涜tag絳夌殑澶勭悊銆傜劧鍚庡皢鐢熸垚鐨勯〉闈㈣繑鍥炵粰瀹㈡埛绔?/strong></p><img src ="http://www.tkk7.com/wangajing/aggbug/303759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wangajing/" target="_blank">榪芥眰鏃犳澧?/a> 2009-11-26 13:25 <a href="http://www.tkk7.com/wangajing/archive/2009/11/26/303759.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>SpringMVC web妗嗘灦瀛︿範 Controller 鍒嗘瀽http://www.tkk7.com/wangajing/archive/2009/11/26/303714.html榪芥眰鏃犳澧?/dc:creator>榪芥眰鏃犳澧?/author>Thu, 26 Nov 2009 01:35:00 GMThttp://www.tkk7.com/wangajing/archive/2009/11/26/303714.htmlhttp://www.tkk7.com/wangajing/comments/303714.htmlhttp://www.tkk7.com/wangajing/archive/2009/11/26/303714.html#Feedback0http://www.tkk7.com/wangajing/comments/commentRss/303714.htmlhttp://www.tkk7.com/wangajing/services/trackbacks/303714.htmlorg.springframework.web.servlet.mvc.AbstractController (implements org.springframework.web.servlet.mvc.Controller)

Spring MVC妗嗘灦涓殑Controller瀵硅姹傝繘琛屽鐞嗭細鎵鏈夌殑Controller閮藉疄鐜版帴鍙ontroller錛?/p>

public interface Controller { 

    /**
     * Process the request and return a ModelAndView object which the DispatcherServlet
     * will render. A <code>null</code> return value is not an error: It indicates that
     * this object completed request processing itself, thus there is no ModelAndView
     * to render.
     * @param request current HTTP request
     * @param response current HTTP response
     * @return a ModelAndView to render, or <code>null</code> if handled directly
     * @throws Exception in case of errors
     */
    ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception; 

}
涓婇潰鐨刣oc琛ㄦ槑Controller榪斿洖鐨刴odelandview鍙互浣跨┖錛岃〃鏄庤姹傞兘鏄鍑芥暟涓鐞嗗畬鎴愪簡錛屼笉闇瑕乵odeland鏉ヨ繘琛屾覆鏌撱?/pre>
 
鍦ㄧ戶緇箣鍓嶅厛浠嬬粛涓涓湁鐢ㄧ殑宸ュ叿綾伙細WebUtils銆傜敤榪欎釜鍙互綆鍖杝ession錛宺equest鐨勫鐞嗐傚叿浣撶殑鍐呭鍙互鍙傝冩枃妗c?/pre>
 
Controller鐨勭涓涓疄鐜版槸錛欰bstractController銆備粬鏄竴涓狝bstract綾伙紝闄や簡瀹炵幇浜咰ontroller鎺ュ彛錛屽畠榪樼戶鎵夸簡WebContentGenerator銆?/pre>
 
WebContentGenerator鐨勪綔鐢ㄦ槸浠涔堬紵鍙傝冩枃妗e彲浠ュ彂鐜幫紝璇ョ被涓昏瀵笴ache鍜孲ession榪涜綆$悊銆?/pre>
 
cacheSeconds 鎸囧畾鍐呭緙撳瓨鐨勬椂闂達紝榛樿涓?
requireSession 鏄惁闇瑕佷細璇濓紝榛樿鏀寔
supportedMethods 鏀寔鐨勬柟娉曪紝榛樿鏄疓ET\post\Head
useCacheControlHeader 鎸囧畾鏄惁浣跨敤http1.1鐨刢ache鎺у埗澶翠俊鎭紝榛樿浣跨敤
useCacheControlNoStore 鎸囧畾鏄惁璁劇疆http1.1鐨刢ache鎺у埗澶翠俊鎭負no-store銆傞粯璁や嬌鐢?/td>
useExpiresHeader 鎸囧畾鏄惁浣跨敤http1.0鐨別xpire澶翠俊鎭傞粯璁や嬌鐢?/td>
鐢ㄦ埛鍙互瀵硅繖浜涘弬鏁拌繘琛屾祴璇?cache鍜宔xpire淇℃伅娑夊強鍒頒簡http鍗忚淇℃伅錛屾洿澶氫俊鎭彲浠ュ弬鑰僪ttp鍗忚鏂囨。銆傝繖閲屼笉鍐嶈鏄庛?/pre>
 
鍐嶇湅AbstractController鐨勪唬鐮侊細
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws Exception {

// Delegate to WebContentGenerator for checking and preparing.
checkAndPrepare(request, response, this instanceof LastModified);

// Execute handleRequestInternal in synchronized block if required.
if (this.synchronizeOnSession) {
HttpSession session = request.getSession(false);
if (session != null) {
Object mutex = WebUtils.getSessionMutex(session);
synchronized (mutex) {
return handleRequestInternal(request, response);
}
}
}
return handleRequestInternal(request, response);
}
checkandPrepare鐨勭洰鐨勫氨鏄嬌鐢ㄧ敤浜庤繘琛岀殑閰嶇疆鏉ュrequest榪涜棰勫鐞嗗拰鍑嗗銆?/pre>
浠栦細媯鏌ユ敮鎸佺殑鏂規(guī)硶錛屽拰浼氳瘽錛岀劧鍚庡簲鐢╟ache璁劇疆銆?/pre>
濡傛灉闇瑕乻ession鍚屾錛屽氨榪涜鍚屾澶勭悊銆俿ession鍚屾搴旂敤浜庢湁session鐨勬儏鍐典笅銆傚鏋滄病鏈塻ession錛宻ession鍚屾鏄病鏈夌敤鐨勩?/pre>
AbstractController浼氳皟鐢╤andleRequestInternal鏂規(guī)硶榪涜澶勭悊錛岀戶鎵緼bstractController鐨勭被闇瑕佸疄鐜拌鏂規(guī)硶銆?br>
涓嬮潰鎴戜滑鍐嶇湅鐪?b>AbstractUrlViewController 鐨勪唬鐮佸疄鐜板拰鏂囨。錛屽厛鐪媓andleRequestInternal鐨勫疄鐜幫細

 
/**
* Retrieves the URL path to use for lookup and delegates to
* {@link #getViewNameForRequest}.
*/
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) {
String lookupPath = getUrlPathHelper().getLookupPathForRequest(request);
String viewName = getViewNameForRequest(request);
if (logger.isDebugEnabled()) {
logger.debug("Returning view name '" + viewName + "' for lookup path [" + lookupPath + "]");
}
return new ModelAndView(viewName);
}

鍙互鐪嬪埌錛屽畠浣跨敤浜唃etViewNameForRequest鑾峰彇闇瑕佺殑viewName銆傝実etViewNameForRequest鏄竴涓娊璞″嚱鏁幫紝闇瑕佸瓙綾誨疄鐜般俵ookupPath灝辨槸鎴戜滑璇鋒眰鐨刄RL涓殑涓閮ㄥ垎銆傚鎴戜滑浣跨敤UrlFilenameViewController鏉ヨ繘琛屽涓嬬殑閰嶇疆錛?/b>
<bean name="/index.do" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"></bean>銆?/div>
09-11-25 11:56:06 - DEBUG [http-8200-1] - Returning view name 'index' for lookup path [/index.do]
璇ontroller瀵?index.do瑙f瀽鎴恑ndex錛岀劧鍚庡啀閫氳繃viewResolver瀵筰ndex榪涜鎵╁睍涓?jsp/index.jsp銆備粠鑰屾壘鍒拌欏甸潰銆?/div>
鍙互鐪嬪埌榪欎釜綾葷殑涓昏鏄敤浜庡url榪涜瑙f瀽錛岀劧鍚庤漿鍒板悎閫傜殑欏甸潰涓婏紝鑰屽湪杞埌榪欎釜欏甸潰涔嬪墠涓嶉渶瑕佽繘琛岀壒鍒殑澶勭悊銆?/div>
鏄庣櫧浜嗚綾葷殑浣滅敤鑷劧涔熷氨鐭ラ亾浜哢rlFilenameViewController鐨勪綔鐢ㄣ傝繖閲屼笉鍐嶈繘琛岃緇嗗垎鏋愩?/div>
 
 


]]>Spring MVC 妗嗘灦瀛︿範涔婣bstractFormController浠ュ強AbstractFormControllhttp://www.tkk7.com/wangajing/archive/2009/11/25/303665.html榪芥眰鏃犳澧?/dc:creator>榪芥眰鏃犳澧?/author>Wed, 25 Nov 2009 09:31:00 GMThttp://www.tkk7.com/wangajing/archive/2009/11/25/303665.htmlhttp://www.tkk7.com/wangajing/comments/303665.htmlhttp://www.tkk7.com/wangajing/archive/2009/11/25/303665.html#Feedback0http://www.tkk7.com/wangajing/comments/commentRss/303665.htmlhttp://www.tkk7.com/wangajing/services/trackbacks/303665.html鍦ㄧ湅瀹孊aseCommandController鍜孉bstractCommandController涔嬪悗錛屾垜浠啀鐪婤aseCommandController鐨勫彟涓涓疄鐜癆bstractFormController錛屼互鍙夾bstractFormController鐨勫叿浣撳疄鐜癝impleFormController銆?/p>

鍏堢湅鐪婣bstractFormController瀵筯andleRequestInternal鐨勫疄鐜幫細

protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
throws Exception {
// Form submission or new form to show?
if (isFormSubmission(request)) {
// Fetch form object from HTTP session, bind, validate, process submission.
try {
Object command = getCommand(request);
ServletRequestDataBinder binder = bindAndValidate(request, command);
BindException errors = new BindException(binder.getBindingResult());
return processFormSubmission(request, response, command, errors);
}
catch (HttpSessionRequiredException ex) {
// Cannot submit a session form if no form object is in the session.
if (logger.isDebugEnabled()) {
logger.debug("Invalid submit detected: " + ex.getMessage());
}
return handleInvalidSubmit(request, response);
}
}
else {
// New form to show: render form view.
return showNewForm(request, response);
}
}
榪欎釜鏂規(guī)硶錛岄鍏堝垽鏂槸涓嶆槸Form鎻愪氦錛屽垽鏂柟娉曟槸錛?/pre>
protected boolean isFormSubmission(HttpServletRequest request) {
return "POST".equals(request.getMethod());
}
濡傛灉鏄痜orm鎻愪氦鐨勮瘽錛岀郴緇熼鍏堝垱寤轟竴涓狢ommand錛岀劧鍚庡鏁版嵁榪涜緇戝畾鍜岄獙璇侊紝涔嬪悗璋冪敤processFormSubmission鏂規(guī)硶銆俿howNewForm鍒欒皟鐢╯howForm銆?/div>
鍦ˋbstractFormController涓噷闈㈡湁涓や釜鎶借薄鏂規(guī)硶錛?/div>

protected abstract ModelAndView processFormSubmission(
HttpServletRequest request, HttpServletResponse response, Object command, BindException errors)
throws Exception;
protected abstract ModelAndView showForm(
HttpServletRequest request, HttpServletResponse response, BindException errors)
throws Exception;



 

 

濂戒簡錛岀湅瀹孉bstractFormController涔嬪悗錛屽啀鐪嬬湅SimpleFormController鏄浣曞疄鐜幫細

protected ModelAndView processFormSubmission(
HttpServletRequest request, HttpServletResponse response, Object command, BindException errors)
throws Exception {

if (errors.hasErrors()) {
if (logger.isDebugEnabled()) {
logger.debug("Data binding errors: " + errors.getErrorCount());
}
return showForm(request, response, errors);
}
else if (isFormChangeRequest(request, command)) {
logger.debug("Detected form change request -> routing request to onFormChange");
onFormChange(request, response, command, errors);
return showForm(request, response, errors);
}
else {
logger.debug("No errors -> processing submit");
return onSubmit(request, response, command, errors);
}
}
鍦ㄤ笂闈㈢殑鏂規(guī)硶涓紝濡傛灉鏈夐敊璇紝璋冪敤showForm錛屾潵鏄劇ずform銆傛病鏈夐敊璇殑璇濓紝鍒欒皟鐢╫nSubmit鏂規(guī)硶銆?br />
protected final ModelAndView showForm(
HttpServletRequest request, BindException errors, String viewName, Map controlModel)
throws Exception {

// In session form mode, re-expose form object as HTTP session attribute.
// Re-binding is necessary for proper state handling in a cluster,
// to notify other nodes of changes in the form object.
if (isSessionForm()) {
String formAttrName = getFormSessionAttributeName(request);
if (logger.isDebugEnabled()) {
logger.debug("Setting form session attribute [" + formAttrName + "] to: " + errors.getTarget());
}
request.getSession().setAttribute(formAttrName, errors.getTarget());
}

// Fetch errors model as starting point, containing form object under
// "commandName", and corresponding Errors instance under internal key.
Map model = errors.getModel();

// Merge reference data into model, if any.
Map referenceData = referenceData(request, errors.getTarget(), errors);
if (referenceData != null) {
model.putAll(referenceData);
}

// Merge control attributes into model, if any.
if (controlModel != null) {
model.putAll(controlModel);
}

// Trigger rendering of the specified view, using the final model.
return new ModelAndView(viewName, model);
}
鍦╯howForm涓紝璁劇疆灞炴э紝鏀懼湪model涓紝鐒跺悗鍦╲iewName榪涜璁劇疆銆?/div>
FormController灝辨槸涓婇潰鐨勮繃紼嬨傚叿浣撶殑鎵ц榪囩▼鍜岃緇嗕俊鎭細鍦ㄤ互鍚庣殑鍗氬涓叿浣撲粙緇嶃?br />



]]>Spring MVC 妗嗘灦瀛︿範絎旇涔婤aseCommandController鍜孉bstractCommandControllerhttp://www.tkk7.com/wangajing/archive/2009/11/25/303652.html榪芥眰鏃犳澧?/dc:creator>榪芥眰鏃犳澧?/author>Wed, 25 Nov 2009 08:25:00 GMThttp://www.tkk7.com/wangajing/archive/2009/11/25/303652.htmlhttp://www.tkk7.com/wangajing/comments/303652.htmlhttp://www.tkk7.com/wangajing/archive/2009/11/25/303652.html#Feedback0http://www.tkk7.com/wangajing/comments/commentRss/303652.htmlhttp://www.tkk7.com/wangajing/services/trackbacks/303652.html 

Spring鐨凚aseCommandController緇ф壙鑷狝bstractController銆傚湪鐪婤aseCommandController涔嬪墠鍏堢湅浠栫殑緇ф壙綾籄bstractCommandController鏄浣曞疄鐜?/p>

AbstractController鐨刪andleInternalRequest鏂規(guī)硶鐨勶細

protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
throws Exception {
Object command = getCommand(request);
ServletRequestDataBinder binder = bindAndValidate(request, command);
BindException errors = new BindException(binder.getBindingResult());
return handle(request, response, command, errors);
}

getCommand灝辨槸BaseCommandController涓殑鏂規(guī)硶銆?/p>

protected Object getCommand(HttpServletRequest request) throws Exception {
return createCommand();
}
protected final Object createCommand() throws Exception {
if (this.commandClass == null) {
throw new IllegalStateException("Cannot create command without commandClass being set - " +
"either set commandClass or (in a form controller) override formBackingObject");
}
if (logger.isDebugEnabled()) {
logger.debug("Creating new command of class [" + this.commandClass.getName() + "]");
}
return BeanUtils.instantiateClass(this.commandClass);
}

createCommand鍒涘緩浜嗕竴涓狢ommandClass鐨勫璞°?/p>

鐒跺悗鍐嶇湅bindAndValidate鏂規(guī)硶錛?/p>

protected final ServletRequestDataBinder bindAndValidate(HttpServletRequest request, Object command)
throws Exception {
ServletRequestDataBinder binder = createBinder(request, command);
BindException errors = new BindException(binder.getBindingResult());
if (!suppressBinding(request)) {
binder.bind(request);
onBind(request, command, errors);
if (this.validators != null && isValidateOnBinding() && !suppressValidation(request, command, errors)) {
for (int i = 0; i < this.validators.length; i++) {
ValidationUtils.invokeValidator(this.validators[i], command, errors);
}
}
onBindAndValidate(request, command, errors);
}
return binder;
}

榪欎釜鏂規(guī)硶棣栧厛鍒涘緩浜? DataBinder瀵硅薄錛岀劧鍚庯紝鑾峰彇鍒涘緩緇戝畾瀵硅薄鏃跺彂鐢熺殑閿欒銆傛姤閿欏湪errors銆傛帴涓嬫潵緇戝畾瀵硅薄錛岃皟鐢╫nBind澶勭悊緇戝畾浜嬩歡錛涙帴涓嬫潵搴旂敤Validator銆傜劧鍚庤皟鐢╫nBindAndValidate鏉ュ鐞嗙粦瀹氬拰楠岃瘉浜嬩歡銆傛渶鍚庤繑鍥瀊inder銆?/p>

澶勭悊瀹屼箣鍚庤皟鐢╤andle鏂規(guī)硶榪涜澶勭悊銆?/p>

緇間笂鎵榪幫紝AbstractCommandController鍏鋒湁涓や釜鍔熻兘:

1銆佸皢璇鋒眰鍙傛暟杞崲涓篊ommand瀵硅薄銆傚湪璇ontroller涓紝鎴戜滑璁劇疆涓涓猳bject瀵硅薄銆傜劧鍚嶣aseCommandController灝嗚姹傜殑鍙傛暟榪涜杞崲銆傚鏋滆姹傚弬鏁版湁value鍊鹼紝灝變細璋冪敤object鐨勭殑setValue瀵硅薄鏉ヨ緗璞¢噷鐨勫箋傚鏋滆姹傚弬鏁頒腑鏈塧ddress.city.灝變細璋冪敤object涓璯etAddress().setCity()鏂規(guī)硶鏉ヨ祴鍊箋傝繖涓猳bject鍙互鏄換鎰忕殑object錛屽敮涓鐨勮姹傚氨鏄繖涓猳bject綾繪病鏈夊弬鏁般?/p>

2銆佸鏁版嵁榪涜楠岃瘉銆傚湪杞崲鍜岄獙璇佹椂鍙戠敓閿欒鏃訛紝闇瑕佸湪handle(request, response, command, errors)涓繘琛屽鐞嗐?/p>

]]>
Spring鐨凪VC web妗嗘灦瀛︿範絎旇http://www.tkk7.com/wangajing/archive/2009/11/25/303590.html榪芥眰鏃犳澧?/dc:creator>榪芥眰鏃犳澧?/author>Wed, 25 Nov 2009 03:09:00 GMThttp://www.tkk7.com/wangajing/archive/2009/11/25/303590.htmlhttp://www.tkk7.com/wangajing/comments/303590.htmlhttp://www.tkk7.com/wangajing/archive/2009/11/25/303590.html#Feedback2http://www.tkk7.com/wangajing/comments/commentRss/303590.htmlhttp://www.tkk7.com/wangajing/services/trackbacks/303590.html1銆丼pring web 妗嗘灦鐨勬牳蹇冿細DispatcherServlet

DispatcherServlet 鐢ㄤ簬鎺ユ敹璇鋒眰銆傛槸浣跨敤Spring妗嗘灦鐨勫叆鍙c傚湪web.xml涓紝闇瑕侀厤緗servlet銆傚湪閰嶇疆璇ervlet鐨勬椂鍊檜rl-pattern浣犲彲浠ヤ嬌鐢ㄤ綘鑷繁鎯充嬌鐢ㄧ殑褰㈠紡錛屽*.aspx,*.do,*.htm,*.action錛岀敤浠ユ販娣嗗鎴風瀵規(guī)湇鍔″櫒鏋舵瀯鐨勮璇嗐?/p>

鍙﹀錛岃Servlet鍦ㄥ鍣ㄤ腑榪樹細鍔犺澆涓涓狝PPlicationContext鐨剎ml鏂囦歡銆傞粯璁ゅ姞杞界殑鏄痆servlet-name]-servlet.xml銆備緥濡傦紝浣犲湪web.xml涓厤緗殑servlet濡備笅錛?/p>

<web-app>
<servlet>
<servlet-name>example</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>*.form</url-pattern>
</servlet-mapping>
</web-app>
璇ervlet灝變細鍦ㄦ湇鍔″櫒鍚姩鏃訛紝鍔犺澆example-servlet.xml銆傚綋鐒訛紝浣犱篃鍙互鑷繁鏉ユ寚瀹氬姞杞芥枃浠躲?/pre>
瑕佺湅鐪婦ispatcherServlet鐪熼潰鐩紝鎵撳紑婧愭枃浠訛紝鍙戠幇瀹氫箟浜嗗緢澶欱eanName鐨勫父閲忥紝濡傛湰鍦板寲瑙f瀽鍣╞eanname錛屼富棰樿В鏋愬櫒beanname錛岃鍥捐В鏋愬櫒beanname錛屼笂浼犳枃浠惰В鏋愮殑multipart瑙f瀽鍣╞eanname銆?/pre>
絳夛細
public static final String MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver";
public static final String LOCALE_RESOLVER_BEAN_NAME = "localeResolver";
public static final String THEME_RESOLVER_BEAN_NAME = "themeResolver";
public static final String HANDLER_MAPPING_BEAN_NAME = "handlerMapping";
public static final String HANDLER_ADAPTER_BEAN_NAME = "handlerAdapter";
public static final String HANDLER_EXCEPTION_RESOLVER_BEAN_NAME = "handlerExceptionResolver";
public static final String REQUEST_TO_VIEW_NAME_TRANSLATOR_BEAN_NAME = "viewNameTranslator";
public static final String VIEW_RESOLVER_BEAN_NAME = "viewResolver";
榪欎釜綾繪庝箞浣跨敤榪欎簺bean鍛紵浠ヤ笂闈㈢殑exexample-servlet.xml涓轟緥錛屾垜浠畾涔夌殑鍚嶅瓧涓篹xample鐨凞ispatcherServlet浣跨敤example-servlet.xml鐨勯厤緗傚湪example-servlet.xml閲岋紝鎴戜滑鍙互閰嶇疆鍚嶅瓧涓婇潰鐨刡eanName鐨刡ean錛屾潵璁﹕ervlet鍔犺澆榪欎簺bean銆?/pre>
榪欎笅鏄庣櫧浜嗭紝servlet.xml璇ユ庝箞閰嶇疆錛岃閰嶇疆浠涔堜簡銆?/pre>
濂戒簡錛岀湅瀹屼簡鏈閲嶈鐨剆ervlet鐨勯厤緗棶棰橈紝鎴戜滑鍐嶇湅涓嬩竴涓噸瑕佺殑鎺ュ彛:Controller銆傝嚦浜庝笂闈ervlet瑕佷嬌鐢ㄧ殑浠涔堜粈涔堣В鏋愬櫒鍟︼紝鎴戜滑紼嶅悗鍦ㄥ垎鏋愩?/pre>
 
2銆丆ontroller
鎴戜滑鐨勮姹傛彁浜ゅ埌DispacherServlet鍚庯紝浼氳漿緇機ontroller銆傛庝箞鎵綜ontroller錛熼氳繃浣跨敤handlerMapping銆傚鏋滄病鏈夎緗甴andlerMapping錛宻pring浣跨敤榛樿鐨凚eanNameUrlHandlerMapping鏉ユ壘Controller銆?/pre>
BeanNameUrlHandlerMapping錛熼【鍚嶆濅箟錛屽氨鏄氳繃bean鐨刵ame灞炴ф潵鏄犲皠controller銆俠ean鐨刵ame璇鋒眰鏄竴涓猽rl錛屽鏋滆姹傜殑鏄痩ogout.do錛屽湪example-servlet.xml涓畾涔変竴涓悕瀛楋紙name錛変負login.do鐨凜ontroller.

<bean name="/logout.do" class="com.jy.bookshop.web.spring.LogoutController">
    </bean>

鍐嶆彃涓鍙ヨ瘽錛屽湪handlerMapping涓紝鎴戜滑鍙互浣跨敤璇鋒眰鎷︽埅鍣ㄦ潵瀵硅姹傝繘琛屾嫤鎴鐞嗐傝鎷︽埅鍣ㄦ庝箞浣跨敤榪欓噷鏆備笖涓嶈〃錛屾湁鏈轟細鍐嶈璁恒?/p>

ok錛岀幇鍦ㄦ垜浠垱寤轟竴涓狶ogoutController鏉ヨ浠栧鐞嗚姹傦紝璁╀粬瀹炵幇Controller鍚э細

public class LogOutController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest req,
            HttpServletResponse res) throws Exception {
          鈥?
        return new ModelAndView(new RedirectView("login.do"));
    }
}
鐪嬬湅榪欎釜Controller鎺ュ彛鐨勫畾涔夛紝鍙戠幇榪欎釜鎺ュ彛鍙畾涔変簡涓涓猦andleRequest鏂規(guī)硶銆傚湪榪欎釜鏂規(guī)硶涓紝榪斿洖涓涓狹odelAndView銆?/pre>
鍏堣ModelAndView銆傛垜浠煡閬揗VC錛岄偅涔圡odelAndView灝辨槸 MV浜嗐侰ontroller灝辨槸C銆傝繖鏍稭VC鍏ㄤ簡銆傚懙鍛點?/pre>
緇х畫璇碝odelAndView錛岃浜嗚В浠栫殑緇撴瀯錛岄偅鑷劧瑕佺湅鐪嬩粬鐨勬簮浠g爜浜嗭細
/** View instance or view name String */
private Object view; 

/** Model Map */
private ModelMap model;

   

    鍙叧娉ㄦ垜浠叧娉ㄧ殑錛岄噷闈㈠寘鍚簡涓涓猇iew瀵硅薄鍜宮odel瀵硅薄銆俶odel瀵硅薄鏄竴涓狹ap錛岃繖閲屼笉鍐嶈浜嗐傚叧閿湅鐪媣iew錛屽鎬紝鎬庝箞鏄竴涓狾bject錛屽お鎶借薄浜嗐傚啀緇х畫鐪嬫簮浠g爜鐨勮瘽錛屼細鏇村姞鏄庣櫧錛?/p>

 

public ModelAndView(String viewName, String modelName, Object modelObject) {
        this.view = viewName;
        addObject(modelName, modelObject);
    }
public void setViewName(String viewName) {
        this.view = viewName;
    }

鍘熸潵榪欎釜view鍙互鎸囧悜涓涓猇iew瀵硅薄錛屼篃鍙互鎸囧悜String瀵硅薄鍟娿俈iew涓涓帴鍙o紝濡傛灉鐪媎oc鐨勮瘽錛屼粬鐨勫疄鐜扮被鏈堿bstractExcelView, AbstractJasperReportsSingleFormatView, AbstractJasperReportsView, AbstractJExcelView, AbstractPdfStamperView, AbstractPdfView,AbstractTemplateView, AbstractUrlBasedView, AbstractView, AbstractXsltView, ConfigurableJasperReportsView, FreeMarkerView, InternalResourceView,JasperReportsCsvView, JasperReportsHtmlView, JasperReportsMultiFormatView, JasperReportsPdfView, JasperReportsXlsView, JstlView, RedirectView,TilesJstlView, TilesView, TilesView, VelocityLayoutView, VelocityToolboxView, VelocityView, XsltView錛堣瘹瀹炵殑璇達紝榪欎簺View鏄嫹doc鐨勶級銆?/p>

鐜板湪鍙互鐭ラ亾錛屾垜浠殑Controller榪斿洖涓涓猇iew鍜孧odel錛屾潵璁㏒pring妗嗘灦鏉ュ垱寤轟竴涓洖搴斻?/p>

鐜板湪濂囨殑榪樻湁涓鐐癸紝鎴戝惂view璁劇疆涓哄瓧絎︿覆錛孲pring妗嗘灦鎬庝箞澶勭悊錛熷湪ModelAndView涓紝濡傛灉view鏄竴涓瓧絎︿覆錛屽垯浼氬皢榪欎釜鍊間氦緇橠ispatcherServlet鐨剉iewResovler鏉ュ鐞嗐傝寰椾笂闈㈡彁鍒扮殑viewResovler浜嗗悧錛熷懙鍛碉紝媧句笂鐢ㄥ満浜嗐?/p>

view鐨勯棶棰樿В鍐充簡錛岀劧鍚庡啀璇磎odel鍚с傚湪ModelAndView娣誨姞浜嗕竴浜涘璞★紝Spring鏄庝箞澶勭悊鐨勫憿錛熸誨簲璇ユ妸榪欎簺瀵硅薄緇欏紕鍒皉equest瀵硅薄閲岋紝璁﹋sp欏甸潰鏉ヤ嬌鐢ㄥ惂銆傝View浣跨敤錛熼偅涔堢湅鐪媀iew鎺ュ彛鍚э細

public interface View {

    String getContentType();

    void render(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception;

}
render鍑芥暟闇瑕佸甫涓涓猰odel鍙橀噺銆傚啀鎵炬壘view鐨勫疄鐜扮被錛岀湅鐪嬫槸鎬庝箞宸ヤ綔鐨勩備笉榪噕iew鏈夐偅涔堝錛屽浜庝竴浜涘儚浠涔坧df鍟︼紝excel浜嗕粬浠兘涓嶉渶瑕佸湪request涓坊鍔犺繖涓猰odel銆?/pre>
鏈緇堝憿錛屾垜浠湪jstlView鐨勭埗綾籌nternalResourceView涓殑renderMergedOutputModel鍑芥暟鍙戠幇浠栨妸model鏀懼湪浜唕equest閲岄潰浜嗐?/pre>
 
OK錛岀幇鍦ㄦ垜浠槑鐧戒簡錛宑ontroller榪斿洖鐨刴odelandview浜ょ粰Servlet榪涜澶勭悊錛屾潵鐢熸垚涓涓〉闈€?/pre>
鏈綆鍗曠殑Controller浠嬬粛瀹屾瘯銆傜幇鍦ㄧ湅鐪婼pring鎻愪緵鐨勪竴浜沜ontroller鐨勫疄鐜幫紝Spring鎻愪緵浜嗗緢澶歝ontroller鐨勫疄鐜幫紝緇ф壙鐨勭粨鏋勫涓嬶細

 

org.springframework.web.servlet.mvc.AbstractController (implements org.springframework.web.servlet.mvc.Controller)

  • org.springframework.web.servlet.mvc.AbstractUrlViewController
    • org.springframework.web.servlet.mvc.UrlFilenameViewController
  • org.springframework.web.servlet.mvc.BaseCommandController
    • org.springframework.web.servlet.mvc.AbstractCommandController
    • org.springframework.web.servlet.mvc.AbstractFormController
      • org.springframework.web.servlet.mvc.AbstractWizardFormController
      • org.springframework.web.servlet.mvc.SimpleFormController
        • org.springframework.web.servlet.mvc.CancellableFormController
  • org.springframework.web.servlet.mvc.ParameterizableViewController
  • org.springframework.web.servlet.mvc.ServletForwardingController (implements org.springframework.beans.factory.BeanNameAware)
  • org.springframework.web.servlet.mvc.ServletWrappingController (implements org.springframework.beans.factory.BeanNameAware, org.springframework.beans.factory.DisposableBean, org.springframework.beans.factory.InitializingBean)
    AbstractController鏄疌ontroller鐨勭涓涓疄鐜般傚叾浠栫殑Controller閮芥槸緇ф壙榪欎釜Controller鐨勩傛垜浠厛鐪嬫瘮杈冮噸瑕佺殑Controller銆?/pre>
    鍏堣UrlFilenameViewController銆備笉濡傛垜浠嚜宸辨潵閮ㄧ講涓涓惂銆?/b>
    鍦╡xample-servlet.xml涓鍔犲涓嬬殑閰嶇疆錛?/strong>

    <bean name="/error.do"  class="org.springframework.web.servlet.mvc.UrlFilenameViewController">
        </bean>

    OK錛屽綋/error.do鐨勮姹備笂鏉ュ悗錛寀rlFileNameViewController灝嗕粬鍙樻垚/error銆傜劧鍚庤繑鍥炰釜View錛岃繖涓獀iew鐨刵ame灝辨槸/error錛岀劧鍚庝嬌鐢╲iewresolver鏉ヨ繘琛岃В鏋愶紝鍙互瑙f瀽鎴?jsp/error.jsp銆?/pre>
    鍙﹀榪樻湁姣旇緝閲嶈鐨刢ontroller鏄痓aseCommandController錛屽皢璇鋒眰鍙傛暟杞崲涓轟竴涓璞★紝騫跺瀵硅薄鍙傛暟鍚堟硶鎬ц繘琛岄獙璇併傚彟澶?SimpleFormController鍙互瀵硅〃鍗曡繘琛屽鐞嗐?/pre>
    鍏充簬鍚勪釜controller鐨勫垎鏋愩傛湭瀹屽緟緇傘?br>
     

     

     



    ]]>[杞琞 java.beans.PropertyEditor(灞炴х紪杈戝櫒)綆鍗曞簲鐢?http://www.tkk7.com/wangajing/archive/2009/11/20/303110.html榪芥眰鏃犳澧?/dc:creator>榪芥眰鏃犳澧?/author>Fri, 20 Nov 2009 14:07:00 GMThttp://www.tkk7.com/wangajing/archive/2009/11/20/303110.htmlhttp://www.tkk7.com/wangajing/comments/303110.htmlhttp://www.tkk7.com/wangajing/archive/2009/11/20/303110.html#Feedback0http://www.tkk7.com/wangajing/comments/commentRss/303110.htmlhttp://www.tkk7.com/wangajing/services/trackbacks/303110.html鍘熸枃錛歨ttp://www.tkk7.com/orangewhy/archive/2007/06/26/126371.html

    java.beans.PropertyEditor鐨勪粠瀛椾箟鏉ョ湅鏄竴涓睘鎬х紪杈戝櫒錛屼絾鎬昏寰楀畠鐨勪綔鐢ㄦ洿鍍忎竴涓漿鎹㈠櫒錛嶏紞浠庡瓧絎︿覆杞崲涓虹被瀵硅薄鐨勫睘鎬с?/p>

    java.beans.PropertyEditor鎺ュ彛瀹氫箟鐨勬柟娉曟湁濂藉嚑涓紝浣嗘槸鏈閲嶈涓轟笅闈袱涓細

     void setValue(Object value)

     void setAsText(String text) throws java.lang.IllegalArgumentException;

    涓鑸湴錛屾垜浠浣跨敤PropertyEditor鏃訛紝騫朵笉鐩存帴瀹炵幇姝ゆ帴鍙o紝鑰屾槸閫氳繃緇ф壙瀹炵幇姝ゆ帴鍙g殑java.beans.PropertyEditorSupport鏉ョ畝鍖栨垜浠殑宸ヤ綔錛屽湪瀛愮被瑕嗙洊setAsText鏂規(guī)硶灝卞彲浠ヤ簡錛宻etValue鏂規(guī)硶涓鑸笉鐩存帴浣跨敤錛屽湪setAsText鏂規(guī)硶涓皢瀛楃涓茶繘琛岃漿鎹㈠茍浜х敓鐩爣瀵硅薄浠ュ悗錛岀敱璋僺etAsText璋冪敤setValue鏉ユ妸鐩爣瀵硅薄娉ㄥ叆鍒扮紪杈戝櫒涓傚綋鐒訛紝浣犲彲鐢ㄨ鐩栨洿澶氱殑鏂規(guī)硶鏉ユ弧瓚充綘鐨勭壒孌婅姹傘侸avaBean鐨勭被鍜屾帴鍙o紝琚ぇ閮ㄥ垎spring鍖呬嬌鐢紝鍙互浠巗pring涓涔犳洿鎴愮啛鐨凧avaBean浣跨敤鏂規(guī)硶銆?/p>

    綆鍗曠殑渚嬪瓙錛?/p>

    瀹炰綋綾籔erson錛?/p>

    public class Person
    {
        
    private String name;
        
    private String sex;
        
    private int age;
        
        
    public Person(String name, String sex, int age)
        
    {
            
    this.name = name;
            
    this.sex = sex;
            
    this.age = age;
        }

        
        
    public int getAge()
        
    {
            
    return age;
        }

        
    public void setAge(int age)
        
    {
            
    this.age = age;
        }

        
    public String getName()
        
    {
            
    return name;
        }

        
    public void setName(String name)
        
    {
            
    this.name = name;
        }

        
    public String getSex()
        
    {
            
    return sex;
        }

        
    public void setSex(String sex)
        
    {
            
    this.sex = sex;
        }

        
        @Override
        
    public String toString()
        
    {
            
    return "Person["+name+""+sex+""+age+"]";
        }

    }

     

    Person鐨勫睘鎬х紪杈戝櫒錛?/p>

    public class PersonPropertyEditor extends PropertyEditorSupport
    {
        
    public void setAsText(String text)
        
    {
            setValue(parseString(text));
        }


        
    private Object parseString(String text)
        
    {
            String[] parts 
    = tokenizeToStringArray(text, ""falsefalse);
            String name 
    = (parts.length > 0 ? parts[0] : "undefine");
            String sex 
    = (parts.length > 1 ? parts[1] : "undefine");
            
    int age = (parts.length > 2 ? Integer.valueOf(parts[2]) : 0);
            
    return (text.length() > 0 ? new Person(name, sex, age) : null);
        }


        
    private  String[] tokenizeToStringArray(String str, String delimiters, boolean trimTokens,
                                                        
    boolean ignoreEmptyTokens)
        
    {
            StringTokenizer st 
    = new StringTokenizer(str, delimiters);
            List tokens 
    = new ArrayList();
            
    while(st.hasMoreTokens())
            
    {
                String token 
    = st.nextToken();
                
    if(trimTokens)
                
    {
                    token 
    = token.trim();
                }

                
    if(!ignoreEmptyTokens || token.length() > 0)
                
    {
                    tokens.add(token);
                }

            }

            
    return toStringArray(tokens);
        }


        
    private  String[] toStringArray(Collection collection)
        
    {
            
    if(collection == null)
            
    {
                
    return null;
            }

            
    return (String[])collection.toArray(new String[collection.size()]);
        }

    }

     

    嫻嬭瘯浠g爜錛?/p>

        public static void main(String[] args)
        
    {
            PersonPropertyEditor editor 
    = new PersonPropertyEditor();
            editor.setAsText(
    "aSam,man,22");
            System.out.println(editor.getValue());
        }

     

    緇撴灉杈撳嚭錛?/p>

    Person[aSam, man, 22]


    ]]>鎻愰珮寮鍙戞妧鏈殑Tiphttp://www.tkk7.com/wangajing/archive/2009/11/16/302558.html榪芥眰鏃犳澧?/dc:creator>榪芥眰鏃犳澧?/author>Mon, 16 Nov 2009 07:11:00 GMThttp://www.tkk7.com/wangajing/archive/2009/11/16/302558.htmlhttp://www.tkk7.com/wangajing/comments/302558.htmlhttp://www.tkk7.com/wangajing/archive/2009/11/16/302558.html#Feedback6http://www.tkk7.com/wangajing/comments/commentRss/302558.htmlhttp://www.tkk7.com/wangajing/services/trackbacks/302558.html 

      浠ヤ笅Tip鍜屽涔犺礬綰夸粠鑷繁韜笂鍑哄彂榪涜鎬葷粨錛屼粎浠h〃涓漢瑙傜偣銆備綘鍙互鐣欒█榪涜璁ㄨ銆?/p>

    1.鏈夎鍒掔殑瀛︿範

           瀛︿範鏄竴涓驚搴忔笎榪涚殑榪囩▼銆傚鏋滄病鏈変竴涓鍒掞紝瀛︿範灝嗗彉寰楁病鏈夎寰嬶紝鎴戜滑涔熸棤娉曟彁楂樿嚜宸辯殑鑳藉姏銆傛兂璧蜂笂瀛︾殑鏃跺欙紝瀛︽牎姣忎釜瀛︽湡閮戒細鍒跺畾涓涓暀瀛﹀ぇ綰叉潵鎸囧鑰佸笀鐨勬暀瀛﹀拰鎴戜滑鐨勫涔犮傛槸鐨勶紝濡傛灉娌℃湁璁″垝錛屼粖澶╃獊鐒舵兂瀛﹁繖涓紝鏄庡ぉ紿佺劧鎯沖閭d釜錛屾湞涓夋毊鍥涳紝鎴戜滑姘歌繙涔熸棤娉曞鍒拌嚜宸辨兂瀛︾殑涓滆タ銆傛墍浠ユ垜浠渶瑕佸埗瀹氫竴涓涔犺鍒掋傛湁璁″垝鐨勫涔犳墠鑳芥彁楂樿嚜宸辯殑鑳藉姏銆侸ava web欏圭洰鐨勫紑鍙戞槸闇瑕佸緢澶氱煡璇嗙殑縐瘡鐨勶紝鍖呮嫭Java SE錛屾暟鎹簱錛孞DBC錛孡inux錛孡og4j錛孒tml/CSS/Javascript錛屾寔涔呭眰妗嗘灦錛孞UNIT鍙婂叾浠栨祴璇曟鏋訛紝IOC妗嗘灦錛寃eb MVC妗嗘灦絳夌瓑錛屽鏋滄垜浠病鏈変竴涓壇濂界殑璁″垝錛屼粖澶╁涔燣og4j錛屾槑澶╁涔燡unit錛岃繖浜涗笢瑗塊兘涓嶄細鎺屾彙濂藉茍瀛︿範濂姐?/p>

          濡傛灉緇欒嚜宸卞仛璁″垝銆傝鍒掑彲浠ユ寜鐓ф椂闂存鏉ヨ繘琛屻備緥濡傛湰騫村害鐨勫伐浣滐紝鏈搴﹁杈懼埌鐨勬按騫籌紝鏈湀瑕佸涔犵殑涓滆タ錛屾湰鍛ㄥ涔犵殑璁″垝瀹夋帓錛屼互鍙婃瘡涓澶╃殑瀹夋帓銆傛瘡澶╂櫄涓婄潯瑙夊墠錛屾兂鎯充粖澶╃殑璁″垝瀹夋帓鏄惁瀹屾垚錛屾槑澶╄瀛︿範浠涔堬紱姣忓懆鍒扮粨鏉熺殑鏃跺欙紝鎬葷粨涓涓嬫湰鍛ㄥ畬鎴愪簡浠涔堬紝涓嬪懆瑕佸涔犱粈涔堛傛牴鎹嚜宸卞璁″垝鐨勫疄琛屾儏鍐靛彲浠ユ敼鍙樿嚜宸辯殑璁″垝銆傛諱箣瑕佹湁璁″垝鐨勫涔犮傚彲浠ヤ嬌鐢╣oogle 鏃ュ巻鍜?qq mail 閭絳夋潵綆$悊鑷繁鐨勮鍒掋?/p>

    2. 鍚屼竴孌墊椂闂村彧瀛︿範涓縐嶆妧鏈?nbsp; 

           鎴戞槸涓涓粈涔堥兘鎯沖鐨勪漢銆傛垜涓嶆兂鎶婅嚜宸辯殑鏃墮棿閮界敤鍦ㄥ涔燡ava涓婏紝鎴戣繕鎯沖涔燙++錛岃繕鎯沖涔?web 璁捐錛岃繕鎯沖濂絯indows緙栫▼錛屾兂瀛inux緙栫▼錛屾兂瀛︿範璁$畻鏈虹綉緇滅紪紼嬶紝鎯沖涔犺礬鐢卞櫒銆佺綉緇滅殑閰嶇疆……銆備簬鏄紝浠婂ぉ鐪嬩簡VC++娣卞叆璇﹁В錛屾槑澶╁涔燣inux shell緙栫▼銆傝綆楁満鎶鏈寘鍚簡澶鎶鏈傛垜浠棤娉曚竴涓灝嗕粬浠兘鎺屾彙銆傛墍浠ヤ笉瑕佹兂浠涔堥兘瀛︿細銆傝嚦灝戝湪涓孌墊椂闂村唴瀛︿範涓縐嶆妧鏈傛垜緇欒嚜宸卞埗瀹氫簡榪欐牱鐨勮鍒掞紝浠婂勾瑕佹妸鎵鏈夌殑綺懼姏閮借嚧鍔涗負 java EE 寮鍙戞妧鏈笂銆備竴騫村悗錛屽姫鍔涘涔燙/C++緙栫▼銆?/p>

          鏄殑銆傛垜浠涔犵殑涓滆タ鍙互騫夸竴鐐癸紝浣嗕竴瀹氳鏈夎嚜宸變笓鐨勬柟闈€傚涓撲簡涓涓柟闈紝浣犲氨鍙互鎺ョ潃瀛︿範鍏朵粬鐨勬妧鏈備竴涓粈涔堥兘浼氱殑浜猴紝寰堝彲鑳戒粈涔堥兘涓嶄細錛涙墍浠ワ紝綺句簬涓錛岃屽崥浜庡箍銆?/p>

    3.瀛︿細浼戞伅

         鎴戜滑閮藉緢蹇欙紝涓婂鐨勬椂鍊欏濂藉悇縐戯紝鑷沖皯涓嶈兘鎸傜錛岀劧鍚庡湪璇懼瀛︿範鑷繁鍠滄鐨刯ava 緙栫▼錛涘伐浣滅殑鏃跺欙紝闇瑕佸仛濂藉伐浣滐紝鐒跺悗鍦ㄥ伐浣滀箣浣欏瀛︿竴浜涗笢瑗匡紱鏃墮棿闀夸簡錛屾垜浠氨鍙兘鍊︿簡錛岀瘡浜嗐傛墍浠ユ垜浠渶瑕佸浼氫紤鎭潵鏀瑰彉鑷繁鐨勭簿紲炵姸鎬併?/p>

         鏁村ぉ鍦ㄧ數(shù)鑴戝墠榪涜杞歡寮鍙戠殑鎴戜滑錛岃瀛︿細鏀炬澗鑷繁鍜屼紤鎭備綔涓虹▼搴忓憳鏁村ぉ鍦ㄧ數(shù)鑴戝墠錛屾瀬瀹規(guī)槗鍏繪垚宸ヤ綔鍜屼紤鎭兘紱諱笉寮鐢?shù)鑴戠殑涔犳儻銆備紤鎭殑鏃跺欙紝涔熸槸鍦ㄧ數(shù)鑴戝墠鐪嬬數(shù)褰憋紝鐜╂父鎴忋傛垜鎯籌紝鍦ㄦ垜浠伐浣滅瘡浜嗕箣鍚庯紝搴旇紱誨紑鐢?shù)鑴戝Q岃蛋鍚戞埛澶栨潵鏀炬澗鍜屼紤鎭傛垨鍒板ぇ琛椾笂杞漿錛屾垨鍒板晢鍦洪噷璐墿錛屾垨鍘繪父娉抽娓告吵錛屾垨鍘誨仴韜埧鍋ヨ韓錛屾垨鍜屾湅鍙嬩竴璧鋒墦鍙扮悆銆傜瓑絳夌瓑絳夈傛諱箣瑕佸浼氭斁鏉捐嚜宸憋紝璧板嚭鎴峰錛屼笉瑕佹暣澶╁湪鐢?shù)鑴戝墠銆?/p>

         浠ヤ笂3鐐規(guī)槸鑷繁瀵硅嚜宸卞伐浣滃涔犵殑鎬葷粨鍜屾彁閱掞紝鐗瑰埆鍐欏嚭鏉ュ拰澶у涓璧峰垎浜?/p>


      鎰熻阿HiMagic!鍒嗕韓鑷繁鐨勮鐐廣傚煎緱瀛︿範銆?/span>

    鎻愰珮寮鍙戞妧鏈?>濡備綍瀛︿範錛岃繖涓漿鎹㈠茍涓嶅畬鍏ㄥ絳夈傚浜庡涔犳潵璇達紝鏈閲嶈鐨勪笉鏄鍒掑拰榪囩▼錛岃屾槸緇撴灉錛屾病鏈夋垚鏋滅殑瀛︿範絳変簬鐧借垂鏃墮棿銆傚浜庢彁楂樻妧鏈潵璇達紝蹇呴』瑕佹湁絎戝偛姹熸箹鍞垜鐙皧鐨勬皵鍔匡紝浠ュ強鎸佷箣浠ユ亽鐨勫畾鍔涖?
    2009-11-17 08:54 | HiMagic!


    鎰熻阿CoderCream鍒嗕韓鑷繁鐨勮鐐癸紝娌¢敊錛屾墽琛屽拰緇撴灉鏇村姞閲嶈錛?br />


    ]]>
    主站蜘蛛池模板: www.亚洲色图.com| 另类专区另类专区亚洲| 亚洲裸男gv网站| av无码国产在线看免费网站| 成人免费ā片在线观看| 欧美亚洲国产SUV| 亚洲一区二区三区播放在线| 日韩va亚洲va欧洲va国产| 免费一级毛片在线观看| 无码少妇一区二区浪潮免费| 99久久久国产精品免费蜜臀| 中文字幕的电影免费网站| 老司机福利在线免费观看| 亚洲熟妇AV一区二区三区浪潮| 亚洲综合色一区二区三区小说| 亚洲欧洲∨国产一区二区三区| 午夜亚洲av永久无码精品| 暖暖日本免费在线视频| 无人在线观看完整免费版视频| 四虎在线视频免费观看视频| 久久久久久AV无码免费网站下载 | 久久久精品午夜免费不卡| 成人免费夜片在线观看| 真人无码作爱免费视频| 亚洲av无码日韩av无码网站冲| 亚洲色www永久网站| 亚洲熟女精品中文字幕| 99999久久久久久亚洲| 国产成+人+综合+亚洲专| 亚洲18在线天美| 亚洲中文字幕久久精品无码A| 91亚洲国产成人久久精品| 亚洲码在线中文在线观看| 1区1区3区4区产品亚洲| 亚洲国产成人久久综合一区| 亚洲无线一二三四区| 亚洲a级片在线观看| 亚洲 欧洲 日韩 综合在线| 亚洲日本成本人观看| 亚洲国产高清国产拍精品| 日本系列1页亚洲系列|