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

          2009年6月26日

          第一次接觸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)。(比較美好啊)更進一步,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) 閱讀(348) | 評論 (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)編輯 收藏
           
          主站蜘蛛池模板: 浮山县| 常山县| 阳新县| 尤溪县| 会东县| 望奎县| 雷波县| 贵港市| 右玉县| 兴安县| 曲靖市| 宽城| 九龙坡区| 大埔区| 衢州市| 夏津县| 永川市| 邓州市| 从化市| 昌乐县| 太保市| 保德县| 历史| 萨迦县| 泾川县| 三穗县| 莱州市| 台湾省| 雅江县| 阜南县| 安康市| 始兴县| 基隆市| 电白县| 南皮县| 丹寨县| 察隅县| 卢龙县| 无为县| 蒙阴县| 醴陵市|