計算機程序虛擬的人生
          虛擬世界中的游魂

          2009年6月22日

          第一次接觸mina這個物件,在網上看了一些相關的資料,同時也參考了別人的一些分析mina的心得和方式!
          mina是何物?
          Mina是一個用于開發高性能和高可用性的網絡應用程序基礎架構,它封裝了底層的I/O和線程并發等復雜工作。
          Mina主要是基于java NIO類庫開發;采用非阻塞方式的異步傳輸、事件驅動、批量數據傳輸;支持TCP、UDP網絡協議

          首先從服務器端啟動NioSocketAcceptor對象進行分析。
          1、實例化DefaultSocketSessionConfig會話配置器和異步傳輸NioProcessor處理器
          2、實例化AbstractPollingIoAcceptor構造器同時實例化SimpleIoProcessorPool處理器池
                --〉在SimpleProcessorPool中初始化執行器<線程池>,然后初始化一個IoProcessor對象數組,長度為3,最后將處理器對象放入到IoProcessor數組中
                --〉處理化傳輸帶元數據
                --〉初始化服務監視器
                --〉初始化異常監視器
          3、初始化過濾鏈
          4、初始化選擇器

          架構介紹

          應用結構圖

          深入分析結構圖

          mina的基本應用可以分為3層:
          1、I/O Serivce:實際執行I/O層
          2、I/OFilter chain:數據過濾和轉換層,主要是把字節轉換為需要的數據格式或者反過來處理
          3、I/OHandler:業務處理層
          創建Mina應用分為3部分:
          1、創建I/O 2、創建過濾鏈
          3、創建I/O業務處理

          posted @ 2009-09-04 12:25 小兄弟(Robbins) 閱讀(1417) | 評論 (1)編輯 收藏
           
           Dojo介紹
                 Dojo 是一個用javascript語言實現的開源DHTML工具包。它是在幾個項目捐助基礎上建立起來的(nWidgets, Burstlib, f(m)), 這也是為什么叫它a \"unified\" toolkit的原因。Dojo的目標是解決開發DHTML應用程序遇到的那些,長期存在 、歷史問題。historical problems with DHTML 跨瀏覽器問題。Dojo讓你更容易 使web頁面具有動態能力,或在任何穩健的支持javascript語言的環境中發揮作用。

          a、利用dojo提供的組件,你可以提升你的web應用程序可用性、交互能力以及功能上的提高;
          b、你也可以 更容易的建立degradeable user interfaces ??,dojo提供小巧的 widgets ,animate transitions;
          c、利用它的低級APIs和可兼容的代碼,寫出輕便的、單一風格(復雜)的javascript代碼,Dojo的 event system, I/O APIs, and generic language enhancement form the basis of a powerful programming environment.
          d、通過Dojo提供的工具,你可以為你的代碼寫命令行式的單元測試代碼。
          e、the Dojo package system使你自己的代碼更容易維護,偶合性更低。

          Dojo通過很少的代碼完成了以上的功能。(以后可能我詳細說說dojo的package system ,只需要三個js文件)。當你寫腳本時,只需要包含很少的js文件(大?。?。也可以選擇的(包含)下載dojo提供的龐大的功能。Dojo provides MultiplePointsOfEntry, InterpreterIndependence, ForwardLookingAPIs, and focuses on ReducingBarriersToAdoption.
            dojo試圖建立一種新的標簽語言DojoML。目標是,在DojoML和javascript腳本語言不變的情況下,用不同的render方式展示數據, Renderings may be made available in several rendering contexts (such as SVG, or perhaps even the desktop or Flash)。(比較美好?。└M一步,the DojoML 剖析器可以接受html和svg為輸入,容易的建立DegradeableResponsiveApplications。

          第一部分  安裝
          第一個小節  怎么安裝Dojo Toolkit
           Dojo在磁盤上只是一堆文件,它不需要特殊的設置,它可以通過以下三種途徑獲得:
           1、可以從google的內容分布網絡獲得
             加載的方法可以參考http://code.google.com/intl/zh-CN/apis/ajaxlibs/documentation/index.html#dojo
           2、.在你自己的服務器上使用Dojo
            a、下載最新的dojo包,地址:http://dojotoolkit.org/downloads;目前最新的包為1.3.1
            b、解壓下載的壓縮文件
                   --dojo-release-1.3.1-src
                      ----dijit
                      ----dojo
                      ----dojox
                      ----util
            c、可以通過D:\Apache-Source\dojo\1.3.1\dojo-release-1.3.1-src\dojo-release-1.3.1-src\dijit\themes\themeTester.html 這樣的路徑來查看相關的JS例子
          3、每日構建代碼
             你可以通過SVN地址獲得
          For instance, Dojo Core repository is:
          http://svn.dojotoolkit.org/src/dojo/trunk

          There are two versions of this view: anonymous and committer.

          For users (readonly):
          http://svn.dojotoolkit.org/src/view/anon/all/trunk

          For committers (read/write):
          https://svn.dojotoolkit.org/src/view/committer/all/trunk

          第二部分 Ajax
          第一個小節 ajax
          a、ajax and Dojo
          1)XHR選項
          例子:

          // post some data, ignore the response:
          dojo.xhrPost({
          form: "someFormId", // read the url: from the action="" of the <form>
          timeout: 3000, // give up after 3 seconds
          content: { part:"one", another:"part" } // creates ?part=one&another=part with GET, Sent as POST data when using xhrPost
          });
          // get some data, convert to JSON
          dojo.xhrGet({
          url:"data.json",
          handleAs:"json",
          load: function(data){
          for(var i in data){
          console.log("key", i, "value", data[i]);
          }
          }
          });
          

          2)XHR回調
          有三種方法可以附加到XHR選擇對象,以確定當數據回調時該怎么做。


          posted @ 2009-06-29 14:20 小兄弟(Robbins) 閱讀(373) | 評論 (0)編輯 收藏
           
             如果不輸入絕對的URL訪問地址,例如:URL=http://localhost:8080/petstore;則Glassfish能夠自動的搜索項目中是否存在index.html或者index.jsp頁面作為入口頁面。 
             CatalogFacade對象在服務器啟動時被實例化,然后將實例化的CatalogFacade對象放置到ServletContext環境中,這樣可以直接從ServletContext環境中取得CatalogFacade對象進行相關數據方法的調用。
             index.jsp中涉足到一個js框架DOJO,這個需要進一步的學習。
             對數據的增、刪、改、查主要用到了JPA來處理。
          posted @ 2009-06-29 12:34 小兄弟(Robbins) 閱讀(349) | 評論 (0)編輯 收藏
           
              由于PetStore涉及到了jsf,那就沒有辦法了,還是先看看JSF
          --------------------------------------------------------------------------
              JSF是有JCP(JAVA Community Process)團隊研發出來的一套標準,并在2004年3月發表JavaServer Faces1.0成果。

              看到一篇內容對初學者目前jsf的了解很重要:注意這篇文章是2006年的內容
                 JSF1.1 JSF1.2 , myfaces,oracle ADF,ajax4jsf facelets, 它們究竟是什么,有什么關系呢?

          JSF1.1 1.2 都是 JSF 的標準,定義例如接口、規范( JSF 是面向接口編程的),必須通過實現才能被我們所使用,而實現包括有 JSF RI(Reference Implementation) ,還有 myfaces core1.1.4 的實現等。 JSF RI SUN JSF 的實現,相對來說兼容性比較好,也比較穩定(因為 1.1 已經很久沒更新過了,已經轉向 1.2 去了),而 myfaces 更新比較快,功能也比較多一點,初學的推薦 JSF RI1.1 就可以了, 1.2 需要新的 servlet2.5/jsp2.1 以及服務器支持,現在還不穩定。

          myfaces ,它是一個大的項目,下面有幾個子項目,分別是 myfaces core, sandbox ,tabago,tomahawk ,(奇怪的名字,好難說,我簡稱它為 TOM ),還有一個新的 ADF Faces (跟 oracle adf 有關,應該是兼容整合 adf 的功能吧)。 Tabago,tom 都是組件庫, tabago 比較好玩的是支持換膚,還有一些支持 ajax 的組件, TOM 則是一個豐富的增強組件庫,大概有三十個之多,例如 TREE TAB 等等。 Sandbox 是測試用的。

          Oracle ADF oracle jsf 做的一個大型的組件庫,以前是收費的,現在開源了,我沒用過,不好說。

          Ajax4jsf 是為 jsf 提供 AJAX 支持的一個標簽庫,使用它提供的標簽,就能在原有的 JSF 程序上輕易的加上 AJAX 的功能,而且不用寫任何 Javascript 。

          Facelets 這個是很激動人心的一個框架,有了這個框架才把 JSF 的組件化發揮出來,通過模板的方式來組合成我們所需要的組件,而且可以不使用 <h:input> 這樣的標簽庫,而用 <input type=”text” jsfc=”h:input”> 這樣的方式來使用組件,這樣就可以方便的使用 UI 可視化工具去開發我們的 WEB 程序。這個框架我會在以后的文章中詳細的說,以及和 jsp2.0 的模板功能作對比。
          --------------------------------------------------------------------------------
             JSF的session超時問題會在頁面上拋出如下異常:
          javax.faces.application.ViewExpiredException: viewId:/pages/index.faces - View /pages/index.faces could not be restored.
           at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:185)
           at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
           at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
           at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
           at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
           at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
           at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
           at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
           at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
           at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
           at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
           at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
           at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
           at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
           at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
           at java.lang.Thread.run(Unknown Source)
              解決方案:
                    在web.xml中添加如下代碼:
            <error-page>
              <exception-type>javax.faces.application.ViewExpiredException</exception-type>
              <location>/pages/SessionRefire.jsp</location>
            </error-page>

          ----------------------------------------------------
          注意:所有的JSF標簽一定要包含在<f:view></f:view>這個節點中,不然會報一下問題:

          javax.servlet.ServletException: Component javax.faces.component.UIViewRoot@f1fad1 not expected type.  Expected: javax.faces.component.UIOutput.  Perhaps you're missing a tag?
          javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
          


           

          posted @ 2009-06-26 09:19 小兄弟(Robbins) 閱讀(447) | 評論 (0)編輯 收藏
           
           Hibernate本身自帶的連接池算法不成熟,并不適合用于產品系統或者性能測試。出于最佳性能和穩定性考慮你應該使用第三方連接池。
          比如使用:C3PO。
          C3PO是一個隨Hibernate一同分發的開源JDBC連接池。
          posted @ 2009-06-25 15:17 小兄弟(Robbins) 閱讀(154) | 評論 (0)編輯 收藏
           

          使用HTML5構建下一代的Web Form

          作者 蔣博 發布于 2009年6月22日 上午4時52分

          社區
          Architecture,
          Java
          主題
          編程,
          語言
          標簽
          W3C,
          標識語言

          HTML5 是由 WHATWG (Web Hypertext Application Technology Working Group) 發起的,最開始的名稱叫做Web Application 1.0,而后這個標準吸納了Web Forms 2.0的標準,并一同被W3C組織所采用,合并成為下一代的HTML5標準。

          前言

          HTML語言作為如今編程最為廣泛的語言,具有易用、快捷、多瀏覽平臺兼容等特點,但是隨著時代的進步,HTML的標準卻停滯不前,這一次還在不斷開發中的HTML5標準的更新可以說給這門標記語言帶來了新的生命力。本文將著重討論HTML5中的Web Forms 2.0, 即表單的部分。

          表單是網頁中常見的控件(集)。小到網站注冊登錄,大到一個企業的數據管理系統,都基本上有表單的身影。表單之所以如此重要,主要是因為它擔負大量的用戶和網頁后臺數據更新交互的任務。Web開發人員,對于網頁表單可以說又愛又恨,愛的是它方便的收集、組織數據的功能,恨的是它的功能很大程度上也就僅此而已。一些在最終網站用戶看起來稀松平常的功能,比如說輸入類型檢查、表單校驗、錯誤提示等等,開發人員無不需要花費大量精力利用 JavaScript和DOM編程來滿足這些天然所需的功能點,而隨著Ajax的流行,出現的一些JavaScript的工具庫,比如Dojo, YUI等都提供了方便的JavaScript Widget或者API來減輕開發人員的負擔。

          HTML5的表單新特性

          HTML5 Web Forms 2.0是對目前Web表單的全面提升,它在保持了簡便易用的特性的同時,增加了許多內置的控件或者控件屬性來滿足用戶的需求,并且同時減少了開發人員的編程。在我看來,HTML5 主要在以下幾個方面對目前的Web表單做了改進:

          • 新的控件類型
            • 還在為類型檢查犯愁嗎,還在為那一長串看不太明白的檢驗輸入的正則表達式而苦惱嗎,HTML5提供的一系列新的控件將天然的具備類型檢查的功能。比如說URL輸入框,Email輸入框等。
              <input type="url"></input>
              <input type="email"></input>
            • 當然還有非常重要的日期輸入框,要知道使用JavaScript和CSS來“手工”制作一個日期輸入框還是非?;üΨ虻模愃艱ojo,YUI這樣的類庫也無不在這個widget上面大做文章。
              <input type="date"></input>
            • 作為我痛苦記憶的一部分,我經常記得我們開發人員要為一個select下拉別表動態的添加非常多的選項,這些選項大多數都是來自數據庫,比如說國家、省市列表等等。這個事情非常繁瑣。HTML5將支持data屬性,為select控件外聯數據源!
              <select data="http://domain/getmyoptions"></select>
          • 改進的文件上傳控件,你可以使用一個控件上傳多個文件,自行規定上傳文件的類型(accept),你甚至可以設定每個文件最大的大?。╩axlength)。你看出它和一般操作系統提供的文件上傳控件的區別了嗎,反正我覺得基本一致了。在HTML5應用中,文件上傳控件將變得非常強大和易用。
          • 重復(repeat)的模型,HTML5提供一套重復機制來幫助我們構建一些重復輸入列表,其中包括一些諸如 add、remove、move-up,move-down的按鈕類型,通過這一套重復的機制,開發人員可以非常方便的實現我們經??吹降木庉嬃斜?,這是一個很常見的模式,我們可以增加一個條目、刪除某個條目、或者移動某個條目等等。
          • 內建的表單校驗系統,HTML5為不同類型的輸入控件各自提供了新的屬性,來控制這些控件的輸入行為,比如我們常見的必填項required屬性,以及為數字類型控件提供的max、min等。而在你提交表單的時候,一旦校驗錯誤,瀏覽器將不執行提交操作,而會顯示相應的檢驗錯誤信息。
            <input type="text" required></input>
            <input type="number" min=10  max=100></input>
          • XML Submission,我們一般常見的是form的編碼格式是application/x-www-form-urlencoded。開發人員都很清楚這種格式,數據送到服務器端,可以方便的存取。HTML5將提供一種新的數據格式:XML Submission,即application/x-www-form+xml。簡單的舉例說,服務器端將直接接收到XML形式的表單數據。
            <submission>
                <field name="name" index="0">Peter</field>
                <field name="password" index="0">password</field>
            </submission>

          實例分析

          我將利用HTML5新的表單系統, 做一個簡單的用戶注冊的界面,包括用戶名,密碼,出生日期,保密問題等內容,代碼如下:

          <! doctype html>
          <html>
          <head>
          <style>
          p label {
          width: 180px;
          float: left;
          text-align: right;
          padding-right: 10px
          }
          table {
          margin-left: 80px
          }
          table td {
          border-bottom: 1px solid #CCCCCC
          }
          input.submit {
          margin-left: 80px
          }
          </style>
          </head>
          <body>
          <form action='/register' enctype="application/x-www-form+xml" method="post">
          <p>
          <label for='name'>ID(請使用Email注冊)</label>
          <input name='name' required type='email'></input>
          </p>
          <p>
          <label for='password'>密碼</label>
          <input name='password' required type='password'></input>
          </p>
          <p>
          <label for='birthday'>出生日期</label>
          <input type='date' name='birthday' />
          </p>
          <p>
          <label for='gender'>國籍</label>
          <select name='country' data='countries.xml'></select>
          </p>
          <p>
          <label for='photo'>個性頭像</label>
          <input type='file' name='photo' accept='image/*' />
          </p>
          <table>
          <thead>
          <td><button type="add" template="questionId">+</button> 保密問題</td>
          <td>答案</td>
          <td></td>
          </thead>
          <tr id="questionId" repeat="template" repeat-start="1" repeat-min="1" repeat-max="3">
          <td><input type="text" name="questions[questionId].q"></td>
          <td><input type="text" name="questions[questionId].a"></td>
          <td><button type="remove">刪除</button></td>
          </tr>
          </table>
          <p>
          <input type='submit' value='send' class='submit' />
          </p>
          </form>
          </body>
          </html>
          

          由于目前HTML5標準仍然在開發中,不同的瀏覽器對HTML5特性的支持都相當有限。其中Opera在表單方面支持得比較好,本實例在Opera9上運行一切正常,效果圖如下:

          這個實例運用了一些HTML5的新的表單元素,比如email類型的輸入框(ID),日期類型的輸入框(出生日期)。并且使用了重復模型來引導用戶填寫保密問題,而在個性頭像的上傳中,通過限制文件類型,方便用戶選擇圖片進行合乎規范的內容上傳。而用戶選擇國籍的下拉選擇輸入框中,采用的是外聯數據源的形式,外聯數據源使用coutries.xml,內容如下:

          <select xmlns="http://www.w3.org/1999/xhtml">
          <option>China</option>
          <option>Japan</option>
          <option>Korea</option>
          </select>
          

          并且form的enctype是application/x-www-form+xml,也就是HTML5的XML提交。所以一旦form校驗通過,form的內容將會以XML的形式提交。你還會發現,在ID輸入框如果沒有值,或者輸入了非email類型的字符串時,一旦試圖提交表單,就會有提示錯誤的信息出現,而這都是瀏覽器內置的。

          結語

          HTML5對表單控件的更新,無疑是很振奮人心的。本文描述了一部分表單的新特性,還有一部分新特性同樣很令人期待。相信隨著標準的深入開發以及瀏覽器對HTML5支持程度的進一步提升,設計一個簡單易用的表單的工作,將變得非常輕松。

          參考資料

          1. W3C HTML5 規范: http://www.w3.org/TR/html5/
          2. HTML5 與 HTML4的差異:http://www.w3.org/TR/html5-diff/
          3. Opera dev: Improve your forms with HTML5: http://dev.opera.com/articles/view/improve-your-forms-using-html5/
          4. Comparison of layout engines(HTML5):
            http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(HTML_5)

          關于作者

          蔣博,主要從事Web前端技術的開發工作,在Web開發與性能分析以及敏捷實踐等領域有較豐富的經驗。對HTML5的發展以及各種 JavaScript類庫有比較濃厚的興趣,經常關注社交型的網站發展情況,平常喜歡聽音樂,看一些歷史類書籍。(本文僅代表個人觀點,與公司立場無關。)


          給InfoQ中文站投稿或者參與內容翻譯工作,請郵件至editors@cn.infoq.com。也歡迎大家加入到InfoQ中文站用戶討論組中與我們的編輯和其他讀者朋友交流。

          posted @ 2009-06-24 09:04 小兄弟(Robbins) 閱讀(190) | 評論 (0)編輯 收藏
           
              看完這本書給我的感覺,比較實在,基本上對spring有個初步的認識。
              接下來我會接著看<Spring參考手冊>,這樣更好的理解Spring這個輕量級的框架。
              
              從縱向第三方框架集成方面講
              1、 web層的集成
                     spring對于web層集成外部框架有:Struts、webwork、Tapestry、JSF、Dinamica、VRaptor
              2、DAO層的集成
                      spring對于DAO層集成外部框架有:Hibernate、Ibatis、JDO

              事務處理上,Spring可以利用不同的事務管理對象進行事務上的配置,根據不同的數據層環境而定。
          posted @ 2009-06-23 21:44 小兄弟(Robbins) 閱讀(180) | 評論 (0)編輯 收藏
           
            Spring的容器事務主要是基于動態AOP來處理。
           下面這段xml配置片斷展示了Spring中的事務設定方式:
          <beans>
               <bean id="dataSource"
                          class="org.apache.commons.dbcp.BasicDataSource"
                          destroy-method="close">
                        <property name="driverClassName">
                                 <value>org.gjt.mm.mysql.Driver</value>
                        </property>
                        <property name="url">
                                  <value>jdbc:mysql://localhost/sample</value>
                       </property>
                       <property name="username">
                                 <value>user</value>
                       </property>
                       <property name="password">
                                  <value>mypass</value>
                        </property>
                 </bean>
                <bean id="transactionManager"
                           class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                           <property name="dataSource">
                                <ref local="dataSource" />
                           </property>
                 </bean>
                  <bean id="userDAO" class="net.xiaxin.dao.UserDAO">
                            <property name="dataSource">
                                  <ref local="dataSource" />
                           </property>
                   </bean>
                  <bean id="userDAOProxy"
                             class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
                           <property name="transactionManager">
                                    <ref bean="transactionManager" />
                           </property>
                           <property name="target">
                                   <ref local="userDAO" />
                           </property>
                            <property name="transactionAttributes">
                                   <props>
                                      <prop key="insert*">PROPAGATION_REQUIRED</prop>
                                      <prop key="get*">
                                         PROPAGATION_REQUIRED,readOnly
                                       </prop>
                                     </props>
                              </property>
                       </bean>
          </beans>

          ------------------------------------------------------------------------------------------------------------------------------------------------------------------
          EJB事務處理與Spring事務處理的區別,關鍵兩點:
          1、Spring可以將任意Java Class 納入事務管理這里的UserDAO只是我們編寫的一個普通Java Class,其中包含了一些基本的數據應用邏輯。通過Spring,我們即可簡單的實現事務的可配置化。也就是說,我們可以隨意為某個類的某個方法指定事務管理機制。與之對比,如果使用EJB容器提供的事務管理功能,我們不得不按照EJB規范編將UserDAO 進行改造,將其轉換為一個標準的EJB。
          2、Spring事務管理并不依賴特定的事務資源。EJB 容器必須依賴于JTA 提供事務支持。而Spring 的事務管理則支持JDBC、JTA 等多種事務資源。這為我們提供了更多的選擇,從而也使得我們的系統部署更加靈活。
          posted @ 2009-06-23 20:08 小兄弟(Robbins) 閱讀(160) | 評論 (0)編輯 收藏
           
            模板技術相對傳統JSP技術有以下三個主要的優勢:
             1、表現邏輯與業務邏輯的分離
             2、將UI和程序分離,即將美工人員和程序員分離
             3、如果需要,模板引擎可以脫離web容器單獨運行,為系統可能的移植需求提供了更多的彈性空間

             目前spring支持以下模板技術: 
             1、XSLT
                   XSLT的性能相對較低,因為在XSLT中,每個節點都是一個java對象,大量對象的存儲對內存占用極大,同時大量對象的頻繁創建和銷毀也對JVM垃圾收集產生了較大的負面影響。
             2、Velocity
                   目前最為成熟的模板技術,它是apache jakarta項目中的一個子項目。
             3、FreeMarker
                   對于web開發而言,FreeMarker在生產效率和學習成本上更具優勢,而velocity的相對優勢在于更多第三方工具的支持和更廣泛的開發和用戶團體。
            
          posted @ 2009-06-23 13:13 小兄弟(Robbins) 閱讀(171) | 評論 (0)編輯 收藏
           
              對于web應用,spring提供了可配置的ApplicatonContext加載機制;加載器目前有兩種加載選擇:ContextLoaderListener和ContextLoaderServlet

              加載器目前有兩種選擇:ContextLoaderListener和ContextLoaderServlet。這兩者在功能上完全等同,只是一個是基于Servlet2.3版本中新引入的Listener接口實現,而另一個基于Servlet接口實現。開發中可根據目標Web容器的實際情況進行選擇。

          在web.xml中增加:
          <listener>
              <listener-class>
                   org.springframework.web.context.ContextLoaderListener
               </listener-class>
          </listener>
          -----------------------------------------------------------------
          <servlet>
                <servlet-name>context</servlet-name>
                <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
                <load-on-startup>1</load-on-startup>
          </servlet>
          通過以上配置,Web容器會自動加載/WEB-INF/applicationContext.xml初始化

          如果需要指定配置文件位置,可通過context-param加以指定
          <context-param>
                 <param-name>contextConfigLocation</param-name>
                 <param-value>/WEB-INF/myApplicationContext.xml</param-value>
          </context-param>

          posted @ 2009-06-23 11:32 小兄弟(Robbins) 閱讀(206) | 評論 (0)編輯 收藏
           
            這個文檔的作者是夏昕。先看看這個文檔的內容,在作出評論??! 
            看了spring初探這一章,給我的感覺就是利用java的反射機制,和hibernate差不多!!
           
            控制反轉 IOC(Inversion of control):由容器控制程序之間的關系,而非傳統實現中,有程序直接操控。
            依賴注入DI(Dependency injection):組件之間的依賴關系由容器在運行期決定,即由容器動態的將某種依賴關系注入到組件中。
           
           依賴注入的特性:依賴注入機制減輕了組件之間的依賴關系,同時也大大地提高了組件的可移植性,這意味組件得到重用的機會將會更多!

           注入主要有:接口方式、參數方式、構造方式,其實我覺得參數和構造應該都屬于參數傳值的方式。 
           
           什么叫熱部署?
                熱部署指的是配置文件修改后自動被容器讀取,無需重新啟動應用服務器。

          <beans>
               <description>Spring Quick Start</description>
               <bean id="messageSource"
                         class="org.springframework.context.support.ResourceBundleMessageSource">
                     <property name="basenames">
                        <list>
                              <value>messages</value>
                        </list>
                     </property>
                </bean>
          </beans>
          這里聲明了一個名為messageSource的Bean(注意對于Message定義,Bean ID必須為messageSource,這是目前Spring的編碼規約),對應類為ResourceBundleMessageSource,目前Spring中提供了兩個MessageSource接口的實現,即ResourceBundleMessageSourceReloadableResourceBundleMessageSource,后者提供了無需重啟即可重新加載配置信息的特性

          注意:實際上Spring實用了jdk中的ResourceBundle來讀取配置文件

          對于屬性文件中的國際化中文問題:可以利用JDK中的轉碼工具native2ascii.exe來進行轉換
          posted @ 2009-06-22 15:49 小兄弟(Robbins) 閱讀(244) | 評論 (0)編輯 收藏
           
             從hibernate的概要圖上可以看出hibernate的主要是將對象模型轉換成關系模型的過程。
          第二章看完了,感覺框架中涉及的關鍵性概念及作用要記住:
          SessionFactory(org.hibernate.SessionFactory)
             針對單個數據庫映射關系經過編譯后的內存鏡像,是線程安全的(不可變)。它是生成Session的工廠,本身要用到ConnectionProvider。該對象可以在進程或集群的級別上,為那些事務之間可以重用的數據提供可選得二級緩存。
          Session(org.hibernate.Session)
             表示應用程序與持久存儲層之間交互操作的一個單線程對象,此對象生存期很短。其隱藏了JDBC連接,也是Transaction的工廠。其會持有一個針對持久化對象的必選(第一級)緩存,在遍歷對象圖或者根據持久化標識查找對象時會用到。
          -----------------------------------------------------------------------------------------------------------------
          目前好像沒有什么感覺!!

          什么瞬態(transient)\什么持久化(persistent)\什么脫管(detached)
          把一個對象說的這么理論化,不知為何???
                                                
          posted @ 2009-06-22 15:12 小兄弟(Robbins) 閱讀(117) | 評論 (0)編輯 收藏
           
              我找來一本《hibernate的參考手冊-翻譯版本》
              我訪問http://www.hibernate.org.cn ,既然目前處于域名轉讓???不知何解!可能已經不用了,網上有些人說已經轉向www.javaeye.com上了。
           
             還有個網站:http://www.java99.com/
          ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
             例子:
                    使用JAVA 數據庫(HSQL DB)

                    運行Hibernate所使用的最小的jar為:
                            antlr.jar;cglib.jar;asm.jar;asm-attrs.jar;commons-collections.jar;commons-logging.jar;ehcache.jar;hibernate3.jar;jta.jar;dom4j.jar;log4j.jar
                    其中第三方庫jar需要看自身使用的情況而定。 

           hibernate是通過反射機制來實例化javaBean,javaBean中默認構造函數是不帶參數的。
           hibernate主要依賴于映射文件將對象模型轉換成關系模型。hibernate的配置文件中的DTD文件放在hibernate3.jar包中。 

           標識符生成策略:
          <hibernate-mapping>
            <class name="events.Event" table="EVENTS">
               <id name="id" column="EVENT_ID">
                   <generator class="native"/>
               </id>
            </class>
          </hibernate-mapping>

          native:根據已配置的數據庫(方言)自動選擇最佳的標識符生成策略。

          看完了第一章內容,感覺所講的東西只是傳達一個比較初略的了解。其實第一章內容根本沒有很多必要寫出來。
          posted @ 2009-06-22 10:27 小兄弟(Robbins) 閱讀(138) | 評論 (0)編輯 收藏
           
          主站蜘蛛池模板: 德格县| 博罗县| 栾川县| 永仁县| 通江县| 肇庆市| 彭阳县| 丹阳市| 肥城市| 九寨沟县| 吴堡县| 墨江| 托克逊县| 萝北县| 正镶白旗| 靖安县| 富阳市| 岳西县| 财经| 沙河市| 北海市| 桐庐县| 彭水| 茶陵县| 玉屏| 那坡县| 阿合奇县| 沂南县| 简阳市| 神池县| 湛江市| 喀喇沁旗| 库车县| 陈巴尔虎旗| 大厂| 闸北区| 无棣县| 嘉祥县| 海丰县| 永顺县| 通山县|