計(jì)算機(jī)程序虛擬的人生
          虛擬世界中的游魂

          2009年4月2日

          第一次接觸mina這個(gè)物件,在網(wǎng)上看了一些相關(guān)的資料,同時(shí)也參考了別人的一些分析mina的心得和方式!
          mina是何物?
          Mina是一個(gè)用于開(kāi)發(fā)高性能和高可用性的網(wǎng)絡(luò)應(yīng)用程序基礎(chǔ)架構(gòu),它封裝了底層的I/O和線程并發(fā)等復(fù)雜工作。
          Mina主要是基于java NIO類(lèi)庫(kù)開(kāi)發(fā);采用非阻塞方式的異步傳輸、事件驅(qū)動(dòng)、批量數(shù)據(jù)傳輸;支持TCP、UDP網(wǎng)絡(luò)協(xié)議

          首先從服務(wù)器端啟動(dòng)NioSocketAcceptor對(duì)象進(jìn)行分析。
          1、實(shí)例化DefaultSocketSessionConfig會(huì)話(huà)配置器和異步傳輸NioProcessor處理器
          2、實(shí)例化AbstractPollingIoAcceptor構(gòu)造器同時(shí)實(shí)例化SimpleIoProcessorPool處理器池
                --〉在SimpleProcessorPool中初始化執(zhí)行器<線程池>,然后初始化一個(gè)IoProcessor對(duì)象數(shù)組,長(zhǎng)度為3,最后將處理器對(duì)象放入到IoProcessor數(shù)組中
                --〉處理化傳輸帶元數(shù)據(jù)
                --〉初始化服務(wù)監(jiān)視器
                --〉初始化異常監(jiān)視器
          3、初始化過(guò)濾鏈
          4、初始化選擇器

          架構(gòu)介紹

          應(yīng)用結(jié)構(gòu)圖

          深入分析結(jié)構(gòu)圖

          mina的基本應(yīng)用可以分為3層:
          1、I/O Serivce:實(shí)際執(zhí)行I/O層
          2、I/OFilter chain:數(shù)據(jù)過(guò)濾和轉(zhuǎn)換層,主要是把字節(jié)轉(zhuǎn)換為需要的數(shù)據(jù)格式或者反過(guò)來(lái)處理
          3、I/OHandler:業(yè)務(wù)處理層
          創(chuàng)建Mina應(yīng)用分為3部分:
          1、創(chuàng)建I/O 2、創(chuàng)建過(guò)濾鏈
          3、創(chuàng)建I/O業(yè)務(wù)處理

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

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

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

          第一部分  安裝
          第一個(gè)小節(jié)  怎么安裝Dojo Toolkit
           Dojo在磁盤(pán)上只是一堆文件,它不需要特殊的設(shè)置,它可以通過(guò)以下三種途徑獲得:
           1、可以從google的內(nèi)容分布網(wǎng)絡(luò)獲得
             加載的方法可以參考http://code.google.com/intl/zh-CN/apis/ajaxlibs/documentation/index.html#dojo
           2、.在你自己的服務(wù)器上使用Dojo
            a、下載最新的dojo包,地址:http://dojotoolkit.org/downloads;目前最新的包為1.3.1
            b、解壓下載的壓縮文件
                   --dojo-release-1.3.1-src
                      ----dijit
                      ----dojo
                      ----dojox
                      ----util
            c、可以通過(guò)D:\Apache-Source\dojo\1.3.1\dojo-release-1.3.1-src\dojo-release-1.3.1-src\dijit\themes\themeTester.html 這樣的路徑來(lái)查看相關(guān)的JS例子
          3、每日構(gòu)建代碼
             你可以通過(guò)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
          第一個(gè)小節(jié) ajax
          a、ajax and Dojo
          1)XHR選項(xiàng)
          例子:

          // 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回調(diào)
          有三種方法可以附加到XHR選擇對(duì)象,以確定當(dāng)數(shù)據(jù)回調(diào)時(shí)該怎么做。


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

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

          JSF1.1 1.2 都是 JSF 的標(biāo)準(zhǔn),定義例如接口、規(guī)范( JSF 是面向接口編程的),必須通過(guò)實(shí)現(xiàn)才能被我們所使用,而實(shí)現(xiàn)包括有 JSF RI(Reference Implementation) ,還有 myfaces core1.1.4 的實(shí)現(xiàn)等。 JSF RI SUN 對(duì) JSF 的實(shí)現(xiàn),相對(duì)來(lái)說(shuō)兼容性比較好,也比較穩(wěn)定(因?yàn)?/span> 1.1 已經(jīng)很久沒(méi)更新過(guò)了,已經(jīng)轉(zhuǎn)向 1.2 去了),而 myfaces 更新比較快,功能也比較多一點(diǎn),初學(xué)的推薦 JSF RI1.1 就可以了, 1.2 需要新的 servlet2.5/jsp2.1 以及服務(wù)器支持,現(xiàn)在還不穩(wěn)定。

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

          Oracle ADF oracle jsf 做的一個(gè)大型的組件庫(kù),以前是收費(fèi)的,現(xiàn)在開(kāi)源了,我沒(méi)用過(guò),不好說(shuō)。

          Ajax4jsf 是為 jsf 提供 AJAX 支持的一個(gè)標(biāo)簽庫(kù),使用它提供的標(biāo)簽,就能在原有的 JSF 程序上輕易的加上 AJAX 的功能,而且不用寫(xiě)任何 Javascript 。

          Facelets 這個(gè)是很激動(dòng)人心的一個(gè)框架,有了這個(gè)框架才把 JSF 的組件化發(fā)揮出來(lái),通過(guò)模板的方式來(lái)組合成我們所需要的組件,而且可以不使用 <h:input> 這樣的標(biāo)簽庫(kù),而用 <input type=”text” jsfc=”h:input”> 這樣的方式來(lái)使用組件,這樣就可以方便的使用 UI 可視化工具去開(kāi)發(fā)我們的 WEB 程序。這個(gè)框架我會(huì)在以后的文章中詳細(xì)的說(shuō),以及和 jsp2.0 的模板功能作對(duì)比。
          --------------------------------------------------------------------------------
             JSF的session超時(shí)問(wèn)題會(huì)在頁(yè)面上拋出如下異常:
          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標(biāo)簽一定要包含在<f:view></f:view>這個(gè)節(jié)點(diǎn)中,不然會(huì)報(bào)一下問(wèn)題:

          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) | 評(píng)論 (0)編輯 收藏
           
           Hibernate本身自帶的連接池算法不成熟,并不適合用于產(chǎn)品系統(tǒng)或者性能測(cè)試。出于最佳性能和穩(wěn)定性考慮你應(yīng)該使用第三方連接池。
          比如使用:C3PO。
          C3PO是一個(gè)隨Hibernate一同分發(fā)的開(kāi)源JDBC連接池。
          posted @ 2009-06-25 15:17 小兄弟(Robbins) 閱讀(153) | 評(píng)論 (0)編輯 收藏
           

          使用HTML5構(gòu)建下一代的Web Form

          作者 蔣博 發(fā)布于 2009年6月22日 上午4時(shí)52分

          社區(qū)
          Architecture,
          Java
          主題
          編程,
          語(yǔ)言
          標(biāo)簽
          W3C,
          標(biāo)識(shí)語(yǔ)言

          HTML5 是由 WHATWG (Web Hypertext Application Technology Working Group) 發(fā)起的,最開(kāi)始的名稱(chēng)叫做Web Application 1.0,而后這個(gè)標(biāo)準(zhǔn)吸納了Web Forms 2.0的標(biāo)準(zhǔn),并一同被W3C組織所采用,合并成為下一代的HTML5標(biāo)準(zhǔn)。

          前言

          HTML語(yǔ)言作為如今編程最為廣泛的語(yǔ)言,具有易用、快捷、多瀏覽平臺(tái)兼容等特點(diǎn),但是隨著時(shí)代的進(jìn)步,HTML的標(biāo)準(zhǔn)卻停滯不前,這一次還在不斷開(kāi)發(fā)中的HTML5標(biāo)準(zhǔn)的更新可以說(shuō)給這門(mén)標(biāo)記語(yǔ)言帶來(lái)了新的生命力。本文將著重討論HTML5中的Web Forms 2.0, 即表單的部分。

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

          HTML5的表單新特性

          HTML5 Web Forms 2.0是對(duì)目前Web表單的全面提升,它在保持了簡(jiǎn)便易用的特性的同時(shí),增加了許多內(nèi)置的控件或者控件屬性來(lái)滿(mǎn)足用戶(hù)的需求,并且同時(shí)減少了開(kāi)發(fā)人員的編程。在我看來(lái),HTML5 主要在以下幾個(gè)方面對(duì)目前的Web表單做了改進(jìn):

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

          實(shí)例分析

          我將利用HTML5新的表單系統(tǒng), 做一個(gè)簡(jiǎn)單的用戶(hù)注冊(cè)的界面,包括用戶(hù)名,密碼,出生日期,保密問(wèn)題等內(nèi)容,代碼如下:

          <! 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(請(qǐng)使用Email注冊(cè))</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'>國(guó)籍</label>
          <select name='country' data='countries.xml'></select>
          </p>
          <p>
          <label for='photo'>個(gè)性頭像</label>
          <input type='file' name='photo' accept='image/*' />
          </p>
          <table>
          <thead>
          <td><button type="add" template="questionId">+</button> 保密問(wèn)題</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標(biāo)準(zhǔn)仍然在開(kāi)發(fā)中,不同的瀏覽器對(duì)HTML5特性的支持都相當(dāng)有限。其中Opera在表單方面支持得比較好,本實(shí)例在Opera9上運(yùn)行一切正常,效果圖如下:

          這個(gè)實(shí)例運(yùn)用了一些HTML5的新的表單元素,比如email類(lèi)型的輸入框(ID),日期類(lèi)型的輸入框(出生日期)。并且使用了重復(fù)模型來(lái)引導(dǎo)用戶(hù)填寫(xiě)保密問(wèn)題,而在個(gè)性頭像的上傳中,通過(guò)限制文件類(lèi)型,方便用戶(hù)選擇圖片進(jìn)行合乎規(guī)范的內(nèi)容上傳。而用戶(hù)選擇國(guó)籍的下拉選擇輸入框中,采用的是外聯(lián)數(shù)據(jù)源的形式,外聯(lián)數(shù)據(jù)源使用coutries.xml,內(nèi)容如下:

          <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校驗(yàn)通過(guò),form的內(nèi)容將會(huì)以XML的形式提交。你還會(huì)發(fā)現(xiàn),在ID輸入框如果沒(méi)有值,或者輸入了非email類(lèi)型的字符串時(shí),一旦試圖提交表單,就會(huì)有提示錯(cuò)誤的信息出現(xiàn),而這都是瀏覽器內(nèi)置的。

          結(jié)語(yǔ)

          HTML5對(duì)表單控件的更新,無(wú)疑是很振奮人心的。本文描述了一部分表單的新特性,還有一部分新特性同樣很令人期待。相信隨著標(biāo)準(zhǔn)的深入開(kāi)發(fā)以及瀏覽器對(duì)HTML5支持程度的進(jìn)一步提升,設(shè)計(jì)一個(gè)簡(jiǎn)單易用的表單的工作,將變得非常輕松。

          參考資料

          1. W3C HTML5 規(guī)范: 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)

          關(guān)于作者

          蔣博,主要從事Web前端技術(shù)的開(kāi)發(fā)工作,在Web開(kāi)發(fā)與性能分析以及敏捷實(shí)踐等領(lǐng)域有較豐富的經(jīng)驗(yàn)。對(duì)HTML5的發(fā)展以及各種 JavaScript類(lèi)庫(kù)有比較濃厚的興趣,經(jīng)常關(guān)注社交型的網(wǎng)站發(fā)展情況,平常喜歡聽(tīng)音樂(lè),看一些歷史類(lèi)書(shū)籍。(本文僅代表個(gè)人觀點(diǎn),與公司立場(chǎng)無(wú)關(guān)。)


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

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

              事務(wù)處理上,Spring可以利用不同的事務(wù)管理對(duì)象進(jìn)行事務(wù)上的配置,根據(jù)不同的數(shù)據(jù)層環(huán)境而定。
          posted @ 2009-06-23 21:44 小兄弟(Robbins) 閱讀(180) | 評(píng)論 (0)編輯 收藏
           
            Spring的容器事務(wù)主要是基于動(dòng)態(tài)AOP來(lái)處理。
           下面這段xml配置片斷展示了Spring中的事務(wù)設(shè)定方式:
          <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事務(wù)處理與Spring事務(wù)處理的區(qū)別,關(guān)鍵兩點(diǎn):
          1、Spring可以將任意Java Class 納入事務(wù)管理這里的UserDAO只是我們編寫(xiě)的一個(gè)普通Java Class,其中包含了一些基本的數(shù)據(jù)應(yīng)用邏輯。通過(guò)Spring,我們即可簡(jiǎn)單的實(shí)現(xiàn)事務(wù)的可配置化。也就是說(shuō),我們可以隨意為某個(gè)類(lèi)的某個(gè)方法指定事務(wù)管理機(jī)制。與之對(duì)比,如果使用EJB容器提供的事務(wù)管理功能,我們不得不按照EJB規(guī)范編將UserDAO 進(jìn)行改造,將其轉(zhuǎn)換為一個(gè)標(biāo)準(zhǔn)的EJB。
          2、Spring事務(wù)管理并不依賴(lài)特定的事務(wù)資源。EJB 容器必須依賴(lài)于JTA 提供事務(wù)支持。而Spring 的事務(wù)管理則支持JDBC、JTA 等多種事務(wù)資源。這為我們提供了更多的選擇,從而也使得我們的系統(tǒng)部署更加靈活。
          posted @ 2009-06-23 20:08 小兄弟(Robbins) 閱讀(160) | 評(píng)論 (0)編輯 收藏
           
            模板技術(shù)相對(duì)傳統(tǒng)JSP技術(shù)有以下三個(gè)主要的優(yōu)勢(shì):
             1、表現(xiàn)邏輯與業(yè)務(wù)邏輯的分離
             2、將UI和程序分離,即將美工人員和程序員分離
             3、如果需要,模板引擎可以脫離web容器單獨(dú)運(yùn)行,為系統(tǒng)可能的移植需求提供了更多的彈性空間

             目前spring支持以下模板技術(shù): 
             1、XSLT
                   XSLT的性能相對(duì)較低,因?yàn)樵赬SLT中,每個(gè)節(jié)點(diǎn)都是一個(gè)java對(duì)象,大量對(duì)象的存儲(chǔ)對(duì)內(nèi)存占用極大,同時(shí)大量對(duì)象的頻繁創(chuàng)建和銷(xiāo)毀也對(duì)JVM垃圾收集產(chǎn)生了較大的負(fù)面影響。
             2、Velocity
                   目前最為成熟的模板技術(shù),它是apache jakarta項(xiàng)目中的一個(gè)子項(xiàng)目。
             3、FreeMarker
                   對(duì)于web開(kāi)發(fā)而言,F(xiàn)reeMarker在生產(chǎn)效率和學(xué)習(xí)成本上更具優(yōu)勢(shì),而velocity的相對(duì)優(yōu)勢(shì)在于更多第三方工具的支持和更廣泛的開(kāi)發(fā)和用戶(hù)團(tuán)體。
            
          posted @ 2009-06-23 13:13 小兄弟(Robbins) 閱讀(171) | 評(píng)論 (0)編輯 收藏
           
              對(duì)于web應(yīng)用,spring提供了可配置的ApplicatonContext加載機(jī)制;加載器目前有兩種加載選擇:ContextLoaderListener和ContextLoaderServlet

              加載器目前有兩種選擇:ContextLoaderListener和ContextLoaderServlet。這兩者在功能上完全等同,只是一個(gè)是基于Servlet2.3版本中新引入的Listener接口實(shí)現(xiàn),而另一個(gè)基于Servlet接口實(shí)現(xiàn)。開(kāi)發(fā)中可根據(jù)目標(biāo)Web容器的實(shí)際情況進(jìn)行選擇。

          在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>
          通過(guò)以上配置,Web容器會(huì)自動(dòng)加載/WEB-INF/applicationContext.xml初始化

          如果需要指定配置文件位置,可通過(guò)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) | 評(píng)論 (0)編輯 收藏
           
            這個(gè)文檔的作者是夏昕。先看看這個(gè)文檔的內(nèi)容,在作出評(píng)論!! 
            看了spring初探這一章,給我的感覺(jué)就是利用java的反射機(jī)制,和hibernate差不多?。?br />  
            控制反轉(zhuǎn) IOC(Inversion of control):由容器控制程序之間的關(guān)系,而非傳統(tǒng)實(shí)現(xiàn)中,有程序直接操控。
            依賴(lài)注入DI(Dependency injection):組件之間的依賴(lài)關(guān)系由容器在運(yùn)行期決定,即由容器動(dòng)態(tài)的將某種依賴(lài)關(guān)系注入到組件中。
           
           依賴(lài)注入的特性:依賴(lài)注入機(jī)制減輕了組件之間的依賴(lài)關(guān)系,同時(shí)也大大地提高了組件的可移植性,這意味組件得到重用的機(jī)會(huì)將會(huì)更多!

           注入主要有:接口方式、參數(shù)方式、構(gòu)造方式,其實(shí)我覺(jué)得參數(shù)和構(gòu)造應(yīng)該都屬于參數(shù)傳值的方式。 
           
           什么叫熱部署?
                熱部署指的是配置文件修改后自動(dòng)被容器讀取,無(wú)需重新啟動(dòng)應(yīng)用服務(wù)器。

          <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>
          這里聲明了一個(gè)名為messageSource的Bean(注意對(duì)于Message定義,Bean ID必須為messageSource,這是目前Spring的編碼規(guī)約),對(duì)應(yīng)類(lèi)為ResourceBundleMessageSource,目前Spring中提供了兩個(gè)MessageSource接口的實(shí)現(xiàn),即ResourceBundleMessageSourceReloadableResourceBundleMessageSource,后者提供了無(wú)需重啟即可重新加載配置信息的特性

          注意:實(shí)際上Spring實(shí)用了jdk中的ResourceBundle來(lái)讀取配置文件

          對(duì)于屬性文件中的國(guó)際化中文問(wèn)題:可以利用JDK中的轉(zhuǎn)碼工具native2ascii.exe來(lái)進(jìn)行轉(zhuǎn)換
          posted @ 2009-06-22 15:49 小兄弟(Robbins) 閱讀(243) | 評(píng)論 (0)編輯 收藏
           
             從hibernate的概要圖上可以看出hibernate的主要是將對(duì)象模型轉(zhuǎn)換成關(guān)系模型的過(guò)程。
          第二章看完了,感覺(jué)框架中涉及的關(guān)鍵性概念及作用要記住:
          SessionFactory(org.hibernate.SessionFactory)
             針對(duì)單個(gè)數(shù)據(jù)庫(kù)映射關(guān)系經(jīng)過(guò)編譯后的內(nèi)存鏡像,是線程安全的(不可變)。它是生成Session的工廠,本身要用到ConnectionProvider。該對(duì)象可以在進(jìn)程或集群的級(jí)別上,為那些事務(wù)之間可以重用的數(shù)據(jù)提供可選得二級(jí)緩存。
          Session(org.hibernate.Session)
             表示應(yīng)用程序與持久存儲(chǔ)層之間交互操作的一個(gè)單線程對(duì)象,此對(duì)象生存期很短。其隱藏了JDBC連接,也是Transaction的工廠。其會(huì)持有一個(gè)針對(duì)持久化對(duì)象的必選(第一級(jí))緩存,在遍歷對(duì)象圖或者根據(jù)持久化標(biāo)識(shí)查找對(duì)象時(shí)會(huì)用到。
          -----------------------------------------------------------------------------------------------------------------
          目前好像沒(méi)有什么感覺(jué)?。?br />
          什么瞬態(tài)(transient)\什么持久化(persistent)\什么脫管(detached)
          把一個(gè)對(duì)象說(shuō)的這么理論化,不知為何???
                                                
          posted @ 2009-06-22 15:12 小兄弟(Robbins) 閱讀(117) | 評(píng)論 (0)編輯 收藏
           
              我找來(lái)一本《hibernate的參考手冊(cè)-翻譯版本》
              我訪問(wèn)http://www.hibernate.org.cn ,既然目前處于域名轉(zhuǎn)讓?zhuān)???不知何解!可能已?jīng)不用了,網(wǎng)上有些人說(shuō)已經(jīng)轉(zhuǎn)向www.javaeye.com上了。
           
             還有個(gè)網(wǎng)站:http://www.java99.com/
          ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
             例子:
                    使用JAVA 數(shù)據(jù)庫(kù)(HSQL DB)

                    運(yùn)行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
                    其中第三方庫(kù)jar需要看自身使用的情況而定。 

           hibernate是通過(guò)反射機(jī)制來(lái)實(shí)例化javaBean,javaBean中默認(rèn)構(gòu)造函數(shù)是不帶參數(shù)的。
           hibernate主要依賴(lài)于映射文件將對(duì)象模型轉(zhuǎn)換成關(guān)系模型。hibernate的配置文件中的DTD文件放在hibernate3.jar包中。 

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

          native:根據(jù)已配置的數(shù)據(jù)庫(kù)(方言)自動(dòng)選擇最佳的標(biāo)識(shí)符生成策略。

          看完了第一章內(nèi)容,感覺(jué)所講的東西只是傳達(dá)一個(gè)比較初略的了解。其實(shí)第一章內(nèi)容根本沒(méi)有很多必要寫(xiě)出來(lái)。
          posted @ 2009-06-22 10:27 小兄弟(Robbins) 閱讀(138) | 評(píng)論 (0)編輯 收藏
           
          project
          <project name="" default="" basedir="">
          </project>

          name:工程名稱(chēng)
          default:構(gòu)建文件中的一個(gè)目標(biāo)名,如果在命令行沒(méi)有指定目標(biāo),則使用默認(rèn)的目標(biāo)
          basedir:定義工程的根目錄,一般情況下為"."
          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
          target
          以下目標(biāo)將編譯一組文件,并將它們打包到一個(gè)名為finallib.jar的文件中
          <target name="build-lib">
            <javac srcdir="${src.ejb.dir}:${src.java.dir}"
                       destdir="${build.dir}"
                       debug="on"
                       deprecation="on"
                       includes="**/*.java"
                       excludes="${global.exclude}">
                <classpath>
                   <pathelement location="."/>
                   <pathelemetn location="${lib.dir}/somelib.jar"/>
                </classpath>
             </javac>
             <jar jarfile="${dist}/lib/finallib.jar" basedir="${build.dir}"/>
          </target>
          -------------------------------------------------------------------
          <copy todir="${weblogic.dir}/${weblogic.server.home}/public_html/jsp">
            <fileset dir="${src.www.dir}/jsp"/>
          </copy>
          -------------------------------------------------
          相關(guān)概念:
          特性(property):在構(gòu)建文件中由<property>標(biāo)簽表示的名-值對(duì)
          DataType:一類(lèi)表示復(fù)雜數(shù)據(jù)集合的元素,例如fileset和path
          數(shù)據(jù)元素(data element):這個(gè)詞涵蓋了特性和DataType

          property
          <property name="my.first.property" value="ignore me"/>
          <property file="user.properties"/>

          <property name="property.one" value="one"/>
          <property name="property.two" value="${property.one}:two"/>
          --------------------------------------------------------------------
          <path id="classpath">
            <fileset dir="${lib.dir}">
                <include name="**/*.jar"/>
            </fileset>
          </path>
          -------------------------------------------------
          <target name="" depends="bot">
           <mkdir dir="${doc.dir}/api"/>
           <javadoc packagenames="irssibot.*"
                          sourcepath="${src.dir}"
                          destdir="${doc.dir}/api"
                          author="true"
                          version="true"
                          use="true">
                 <classpath refid="classpath"/>
              </javadoc>
          </target>
          ------------------------------------------------------------
          <target name="clean">
              <delete>
                  <fileset dir="${build.classes}" includes="**/*.class"/>
              </delete>
           </target>

          <target name="cleanall" depends="clean">
             <delete dir="${build.dir}"/>
             <delete dir="${dist.dir}"/>
             <delete dir="${doc.dir}/api"/>
          </target>
          posted @ 2009-06-19 10:27 小兄弟(Robbins) 閱讀(113) | 評(píng)論 (0)編輯 收藏
           
          這一章沒(méi)有什么新意。但是有一個(gè)點(diǎn)就是網(wǎng)絡(luò)任務(wù)需要關(guān)注一下

          真搞不懂,一本書(shū)怎么寫(xiě)這么多的文字,簡(jiǎn)直多余??!
          一個(gè)ANT寫(xiě)這么厚?????
          posted @ 2009-06-18 16:56 小兄弟(Robbins) 閱讀(93) | 評(píng)論 (0)編輯 收藏
           

          我看的書(shū)籍是<Ant權(quán)威指南>,Ant的開(kāi)發(fā)者:James Duncan Davidson。對(duì)于一些比較重要的內(nèi)容我記錄了下來(lái):
          ANT命令行參考
          ant [option [option...]] [target [target...]]
          option :={-help:顯示描述Ant命令及其選項(xiàng)的幫助信息
                         -projecthelp:顯示包含在構(gòu)建文件中的、所有用戶(hù)編寫(xiě)的幫助文檔。即為各個(gè)<target>中description屬  性的文本,以及包含在<description>元素中的任何文本。將有description屬性的目標(biāo)列為主目標(biāo)("Main target"),沒(méi)有此屬性的目標(biāo)則列為子目標(biāo)("subtarget")
                         -version:要求Ant顯示其版本信息,然后退出
                         -quiet:抑制并非由構(gòu)建文件中的echo任務(wù)所產(chǎn)生的大多數(shù)信息
                         -verbose:顯示構(gòu)建過(guò)程中每個(gè)操作的詳細(xì)消息。此選項(xiàng)與-debug選項(xiàng)只能選其一
                         -debug:顯示Ant和任務(wù)開(kāi)發(fā)人員已經(jīng)標(biāo)志為調(diào)試消息的消息。此選項(xiàng)與-verbose只能選其一
                         -emacs:對(duì)日志消息進(jìn)行格式化,使它們能夠很容易地由Emacs的shell模式(shell-mode)所解析;也就是說(shuō),打印任務(wù)事件,但并不縮排,在其之前也沒(méi)有[taskname]
                         -logfile filename:將日志輸出重定向到指定文件
                         -logger classname:指定一個(gè)類(lèi)來(lái)處理Ant的日志記錄。所指定的類(lèi)必須實(shí)現(xiàn)了org.apache.tools.ant.BuildLogger接口
                         -listener classname:為Ant聲明一個(gè)監(jiān)聽(tīng)類(lèi),并增加到其監(jiān)聽(tīng)者列表中。在Ant與IDE或其他Java程序集成時(shí),此選項(xiàng)非常有用
                         -buildfile filename:指定Ant需要處理的構(gòu)建文件。默認(rèn)的構(gòu)建文件為build.xml
                         -Dproperty=value:在命令行上定義一個(gè)特性名--值對(duì)
                         -find filename:指定Ant應(yīng)當(dāng)處理的構(gòu)建文件。與-buildfile選項(xiàng)不同,如果所指定文件在當(dāng)前目錄中未找到,-find就要求Ant在其父目錄中再進(jìn)行搜索。這種搜索會(huì)繼續(xù)在其祖父目錄中進(jìn)行,直至達(dá)到文件系統(tǒng)的根為止,在此如果文件還未找到,則構(gòu)建失敗
                         }

          posted @ 2009-06-18 13:57 小兄弟(Robbins) 閱讀(143) | 評(píng)論 (0)編輯 收藏
           
               突然想學(xué)習(xí)學(xué)習(xí)Java-PetStore2.0,感覺(jué)比較有趣,學(xué)習(xí)一個(gè)Java-PetStore就涉及到GlassFish2.1、db-Derby-10.1.2.1、IDE-NetBeans6.5.1、Ant1.7.1,一堆的工具,java-PetStore2.0是一個(gè)netBeans工程,直接使用NetBeans就可以打開(kāi),也可以使用Ant操作;工程中所涉及的服務(wù)器GlassFish和數(shù)據(jù)庫(kù)Derby,NetBeans都已經(jīng)為你準(zhǔn)備好了。
               ANT一直都沒(méi)有好好的去學(xué)習(xí)過(guò),現(xiàn)在打算先把ANT看看?。?


          -------------------------------------------------------------------------------------------
              在開(kāi)發(fā)的過(guò)程中,我們可能需要將生產(chǎn)環(huán)境和調(diào)試環(huán)境分開(kāi)來(lái),這樣才能保證安全性,但是安裝兩個(gè)glassfish又不太可能,因?yàn)樗嫶罅恕A硗庾鰹橐粋€(gè)工程發(fā)布也不太方便,每次都要將工程名改來(lái)改去,并且綁定的EJB在同一個(gè)域內(nèi)里是不能同名的。這樣的話(huà),要改變的東西實(shí)在是太多了。
              我們可有以第三種方法,那就是為glassfish添加另外的domain,一個(gè)domain跑我們的真實(shí)環(huán)境,一個(gè)domain跑我們的測(cè)試環(huán)境,因?yàn)槭峭粋€(gè)glassfish,所以也不會(huì)存在從測(cè)試到真實(shí)環(huán)境的移植問(wèn)題。以后只要改一個(gè)domain就可以了。我們?cè)诎惭bglassfish的時(shí)候,它已經(jīng)默認(rèn)為我們安裝了一個(gè)domain,那就是domain1.
              我們查看setup.xml里面可以看出,是如何新建domain的,于是我們把我們需要的一些target提取了出來(lái),見(jiàn)如下。下面的配置里面唯一可能需要改變的就是glassfish安裝目錄這個(gè)屬性了,其它可以按照我配的來(lái),也可以自己修改。

          <?xml version="1.0" encoding="UTF-8"?>
          <project name="createDomain" default="create.domain" basedir=".">
          <target name="setEnv">
              
          <property name="domain.name" value="domain3"/>
              
          <property name="admin.user" value="admin"/>
              
          <property name="admin.password" value="adminadmin"/>
              
          <property name="admin.port" value="6848"/>
              
          <property name="instance.port" value="10080"/>
              
          <property name="orb.port" value="5700"/>
              
          <property name="imq.port" value="9676"/>
              
          <property name="https.port" value="10181"/>

              
          <property name="iiop.ssl" value="5821"/>  
              
          <property name="iiop.mutualauth" value="5921"/>  
              
          <property name="jmx.admin" value="10687"/>  

              
          <property name="install.home" value="C:/Program Files/glassfish-v2ur2"/>
              
          <property name="adminpassfile" value="${install.home}/passfile"/>
              
          <property name="ASADMIN" value="${install.home}/bin/asadmin.bat"/>
              
          <echo file="${adminpassfile}" append="false">AS_ADMIN_ADMINPASSWORD=${admin.password}</echo>
          </target>
          <target name="create.domain" depends="setEnv">
              
          <exec executable="${ASADMIN}" failonerror="true">
                  
          <arg line="create-domain" />
                  
          <arg line="--adminport ${admin.port}" />
                  
          <arg line="--instanceport ${instance.port}" />
                  
          <arg line="--user ${admin.user}" />
                  
          <arg line="--passwordfile &quot;${adminpassfile}&quot;" />
                  
          <arg line="--domainproperties orb.listener.port=${orb.port}:jms.port=${imq.port}:http.ssl.port=${https.port}:domain.jmxPort=${jmx.admin}:orb.ssl.port=${iiop.ssl}:orb.mutualauth.port=${iiop.mutualauth}" />
                  
          <arg line="--savelogin" />
                  
          <arg line="${domain.name}" />
              
          </exec>
              
          <delete file="${adminpassfile}" />
          </target>
          </project>


          然后用ant執(zhí)行它就可以了,我這里的執(zhí)行輸出如下:

          C:\Program Files\glassfish-v2ur2>ant
          Buildfile: build.xml

          setEnv:

          create.domain:
               [exec] Using port 6848 for Admin.
               [exec] Using port 10080 for HTTP Instance.
               [exec] Using port 9676 for JMS.
               [exec] Using port 5700 for IIOP.
               [exec] Using port 10181 for HTTP_SSL.
               [exec] Using port 5821 for IIOP_SSL.
               [exec] Using port 5921 for IIOP_MUTUALAUTH.
               [exec] Using port 10687 for JMX_ADMIN.
               [exec] Domain being created with profile:developer, as specified by variabl
          e AS_ADMIN_PROFILE in configuration file.
               [exec] The file in given locale [zh_CN] at: [C:\Program Files\glassfish-v2u
          r2\lib\install\templates\locales\zh_CN\index.html] could not be found. Using def
          ault (en_US) index.html instead.
               [exec] Security Store uses: JKS
               [exec] Domain domain3 created.
               [exec] Login information relevant to admin user name [admin] for this domai
          n [domain3] stored at [C:\Documents and Settings\hadeslee\.asadminpass] successf
          ully.
               [exec] Make sure that this file remains protected. Information stored in th
          is file will be used by asadmin commands to manage this domain.
             [delete] Deleting: C:\Program Files\glassfish-v2ur2\passfile

          BUILD SUCCESSFUL
          Total time: 21 seconds
          C:\Program Files\glassfish-v2ur2>


          這樣我們就可以看到glassfish的domains目錄下面,多出了一個(gè)domain3這個(gè)文件夾。然后有關(guān)數(shù)據(jù)庫(kù)連接池啊什么的,就可以到該目錄下面的config/domain.xml去改了,domain.xml里面的屬性我們以后有時(shí)候再好好研究一下。當(dāng)然,我們也可以去glassfish的控制臺(tái)進(jìn)行可視化修改,glassfish的控制臺(tái)是所有的應(yīng)用服務(wù)器里面做得最好的一個(gè)了。訪問(wèn)的端口就是我們新建domain的時(shí)候用到的admin.port的這個(gè)屬性。
          posted @ 2009-06-18 10:43 小兄弟(Robbins) 閱讀(741) | 評(píng)論 (0)編輯 收藏
           
          三種依賴(lài)范圍:compile,test,provided,runtime,test,system

          compile(編譯范圍)

          compile是默認(rèn)的范圍;如果沒(méi)有提供一個(gè)范圍,那該依賴(lài)的范圍就是編譯范圍。編譯范圍依賴(lài)在所有的classpath中可用,同時(shí)它們也會(huì)被打包。

          provided(已提供范圍)

          provided依賴(lài)只有在當(dāng)JDK或者一個(gè)容器已提供該依賴(lài)之后才使用。例如,如果你開(kāi)發(fā)了一個(gè)web應(yīng)用,你可能在編譯classpath中需要可用的Servlet API來(lái)編譯一個(gè)servlet,但是你不會(huì)想要在打包好的WAR中包含這個(gè)Servlet API;這個(gè)Servlet API JAR由你的應(yīng)用服務(wù)器或者servlet容器提供。已提供范圍的依賴(lài)在編譯classpath(不是運(yùn)行時(shí))可用。它們不是傳遞性的,也不會(huì)被打包。

          runtime(運(yùn)行時(shí)范圍)

          runtime依賴(lài)在運(yùn)行和測(cè)試系統(tǒng)的時(shí)候需要,但在編譯的時(shí)候不需要。比如,你可能在編譯的時(shí)候只需要JDBC API JAR,而只有在運(yùn)行的時(shí)候才需要JDBC驅(qū)動(dòng)實(shí)現(xiàn)。

          test(測(cè)試范圍)

          test范圍依賴(lài)在一般的 編譯和運(yùn)行時(shí)都不需要,它們只有在測(cè)試編譯和測(cè)試運(yùn)行階段可用。

          system(系統(tǒng)范圍)

          system范圍依賴(lài)與provided類(lèi)似,但是你必須顯式的提供一個(gè)對(duì)于本地系統(tǒng)中JAR文件的路徑。這么做是為了允許基于本地對(duì)象編譯,而這些對(duì)象是系統(tǒng)類(lèi)庫(kù)的一部分。這樣的構(gòu)件應(yīng)該是一直可用的,Maven也不會(huì)在倉(cāng)庫(kù)中去尋找它。如果你將一個(gè)依賴(lài)范圍設(shè)置成系統(tǒng)范圍,你必須同時(shí)提供一個(gè)systemPath元素。注意該范圍是不推薦使用的(你應(yīng)該一直盡量去從公共或定制的Maven倉(cāng)庫(kù)中引用依賴(lài))。

           
          依賴(lài)版本界限:
          (?, ?) 不包含量詞。意思為:?<xx<?
          [?, ?] 包含量詞。意思為:?<=xx<=?
          例如:指定一個(gè)依賴(lài)界限:JUnit 3.8 - JUnit 4.0
          <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>[3.8,4.0)</version>
          <scope>test</scope>
          </dependency>
          
           
          posted @ 2009-06-07 22:28 小兄弟(Robbins) 閱讀(567) | 評(píng)論 (0)編輯 收藏
           
          查看有效的pom—〉mvn help:effective-pom
          ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
          Maven中的版本包含了以下部分:主版本,次版本,增量版本,和限定版本號(hào);一個(gè)版本中,這些部分對(duì)應(yīng)如下的格式:
          <major version>.<minor version>.<incremental version>-<qualifier>
          Maven提供了三個(gè)隱式的變量,可以用來(lái)訪問(wèn)環(huán)境變量,POM信息,和Maven Settings.

          env變量:暴露了你操作系統(tǒng)或者shell的環(huán)境變量

          project變量暴露了POM。

          settings變量暴露了Maven settings信息。

          除了這三個(gè)隱式的變量,你還可以引用系統(tǒng)屬性,以及任何在Maven POM中和構(gòu)建profile中自定義的屬性組
           
          自定義屬性:
          <properties>
          <foo>bar</foo>
          </properties>

           

           

          posted @ 2009-06-07 22:10 小兄弟(Robbins) 閱讀(119) | 評(píng)論 (0)編輯 收藏
           

          超級(jí)POM
          所有的Maven項(xiàng)目的POM都擴(kuò)展自超級(jí)POM。你可以在${M2_HOME}/lib中的maven-2.0.9-uber.jar文件中找到pom-4.0.0.xml。
          超級(jí)pom:
          <project>
            <modelVersion>4.0.0</modelVersion>
            <name>Maven Default Project</name>

            <repositories>
              <repository>
                <id>central</id>
                <name>Maven Repository Switchboard</name>
                <layout>default</layout>
                <url>http://repo1.maven.org/maven2</url>
                <snapshots>
                  <enabled>false</enabled>
                </snapshots>
              </repository>
            </repositories>

            <pluginRepositories>
              <pluginRepository>
                <id>central</id>
                <name>Maven Plugin Repository</name>
                <url>http://repo1.maven.org/maven2</url>
                <layout>default</layout>
                <snapshots>
                  <enabled>false</enabled>
                </snapshots>
                <releases>
                  <updatePolicy>never</updatePolicy>
                </releases>
              </pluginRepository>
            </pluginRepositories>

            <build>
              <directory>target</directory>
              <outputDirectory>target/classes</outputDirectory>
              <finalName>content-zh-0.5</finalName>
              <testOutputDirectory>target/test-classes</testOutputDirectory>
              <sourceDirectory>src/main/java</sourceDirectory>
              <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
              <testSourceDirectory>src/test/java</testSourceDirectory>
              <resources>
                <resource>
                  <directory>src/main/resources</directory>
                </resource>
              </resources>
              <testResources>
                <testResource>
                  <directory>src/test/resources</directory>
                </testResource>
              </testResources>
            </build>

                <pluginManagement>
                 <plugins>
                   <plugin>
                     <artifactId>maven-antrun-plugin</artifactId>
                     <version>1.1</version>
                   </plugin>      
                   <plugin>
                     <artifactId>maven-assembly-plugin</artifactId>
                     <version>2.2-beta-1</version>
                   </plugin>
                   <plugin>
                     <artifactId>maven-clean-plugin</artifactId>
                     <version>2.2</version>
                   </plugin>
                   <plugin>
                     <artifactId>maven-compiler-plugin</artifactId>
                     <version>2.0.2</version>
                   </plugin>
                   <plugin>
                     <artifactId>maven-dependency-plugin</artifactId>
                     <version>2.0</version>
                   </plugin>
                   <plugin>
                     <artifactId>maven-deploy-plugin</artifactId>
                     <version>2.3</version>
                   </plugin>
                   <plugin>
                     <artifactId>maven-ear-plugin</artifactId>
                     <version>2.3.1</version>
                   </plugin>
                   <plugin>
                     <artifactId>maven-ejb-plugin</artifactId>
                     <version>2.1</version>
                   </plugin>
                   <plugin>
                     <artifactId>maven-install-plugin</artifactId>
                     <version>2.2</version>
                   </plugin>
                   <plugin>
                     <artifactId>maven-jar-plugin</artifactId>
                     <version>2.2</version>
                   </plugin>
                   <plugin>
                     <artifactId>maven-javadoc-plugin</artifactId>
                     <version>2.4</version>
                   </plugin>
                   <plugin>
                     <artifactId>maven-plugin-plugin</artifactId>
                     <version>2.3</version>
                   </plugin>
                   <plugin>
                     <artifactId>maven-rar-plugin</artifactId>
                     <version>2.2</version>
                   </plugin>
                   <plugin>               
                     <artifactId>maven-release-plugin</artifactId>
                     <version>2.0-beta-7</version>
                   </plugin>
                   <plugin>               
                     <artifactId>maven-resources-plugin</artifactId>
                     <version>2.2</version>
                   </plugin>
                   <plugin>
                     <artifactId>maven-site-plugin</artifactId>
                     <version>2.0-beta-6</version>
                   </plugin>
                   <plugin>
                     <artifactId>maven-source-plugin</artifactId>
                     <version>2.0.4</version>
                   </plugin>        
                   <plugin>
                      <artifactId>maven-surefire-plugin</artifactId>
                      <version>2.4.2</version>
                   </plugin>
                   <plugin>
                     <artifactId>maven-war-plugin</artifactId>
                     <version>2.1-alpha-1</version>
                   </plugin>
                 </plugins>
               </pluginManagement>
           
            <reporting>
              <outputDirectory>target/site</outputDirectory>
            </reporting>
          </project>

          1).默認(rèn)的超級(jí)POM定義了一個(gè)單獨(dú)的遠(yuǎn)程Maven倉(cāng)庫(kù),ID為central,這是所有Maven客戶(hù)端默認(rèn)配置訪問(wèn)的中央Maven倉(cāng)庫(kù);該配置可以通過(guò)一個(gè)自定義的settings.xml文件來(lái)覆蓋,注意這個(gè)默認(rèn)的超級(jí)POM關(guān)閉了從中央Maven倉(cāng)庫(kù)下載snapshot構(gòu)件的功能。如果你需要使用一個(gè)snapshot倉(cāng)庫(kù),你就要在你的pom.xml或者settings.xml中自定義倉(cāng)庫(kù)設(shè)置.
          2)build元素設(shè)置Maven標(biāo)準(zhǔn)目錄布局中那些目錄的默認(rèn)值.
          3)POM中定義的groupIdartifactIdversion:這三項(xiàng)是所有項(xiàng)目都需要的坐標(biāo)

          groupId

          一個(gè)groupId歸類(lèi)了一組相關(guān)的構(gòu)件。組定義符基本上類(lèi)似于一個(gè)Java包名。例如:groupId org.apache.maven是所有由Apache Maven項(xiàng)目生成的構(gòu)件的基本groupId。組定義符在Maven倉(cāng)庫(kù)中被翻譯成路徑,例如,groupId org.apache.maven可以在repo1.maven.org/maven2/org/apache/maven目錄下找到。

          artifactId

          artifactId是項(xiàng)目的主要定義符。當(dāng)你生成一個(gè)構(gòu)件,這個(gè)構(gòu)件將由artifactId命名。當(dāng)你引用一個(gè)項(xiàng)目,你就需要使用artifactId來(lái)引用它。artifactIdgroupId的組合必須是唯一的。換句話(huà)說(shuō),你不能有兩個(gè)不同的項(xiàng)目擁有同樣的artifactIdgroupId;在某個(gè)特定的groupId下,artifactId也必須是唯一的。

          version

          當(dāng)一個(gè)構(gòu)件發(fā)布的時(shí)候,它是使用一個(gè)版本號(hào)發(fā)布的。該版本號(hào)是一個(gè)數(shù)字定義符如“1.0”,“1.1.1”,或“1.1.2-alpha-01”。你也可以使用所謂的快照(snapshot)版本。一個(gè)快照版是一個(gè)處于開(kāi)發(fā)過(guò)程中的組件的版本,快照版本號(hào)通常以SNAPSHOT結(jié)尾;如,“1.0-SNAPSHOT”,“1.1.1-SNAPSHOT”,和“1-SNAPSHOT”。Section 9.3.1, “項(xiàng)目版本”介紹了版本和版本界限。


           

          posted @ 2009-06-07 21:50 小兄弟(Robbins) 閱讀(283) | 評(píng)論 (0)編輯 收藏
           
          maven概念:Maven是一個(gè)項(xiàng)目管理工具,它包含了一個(gè)項(xiàng)目對(duì)象模型 (Project Object Model),一組標(biāo)準(zhǔn)集合,一個(gè)項(xiàng)目生命周期(Project Lifecycle),一個(gè)依賴(lài)管理系統(tǒng)(Dependency Management System),和用來(lái)運(yùn)行定義在生命周期階段(phase)中插件(plugin)目標(biāo)(goal)的邏輯。

          項(xiàng)目特征定義的特征:
           1).依賴(lài)管理:項(xiàng)目間可以使用這些坐標(biāo)來(lái)聲明依賴(lài);由于項(xiàng)目是根據(jù)一個(gè)包含組標(biāo)識(shí)符,構(gòu)件標(biāo)識(shí)符和版本的唯一的坐標(biāo)定義的。
           2).遠(yuǎn)程倉(cāng)庫(kù):和項(xiàng)目依賴(lài)相關(guān)的,我們可以使用定義在項(xiàng)目對(duì)象模型(POM)中的坐標(biāo)來(lái)創(chuàng)建 Maven 構(gòu)件的倉(cāng)庫(kù)。
           3).全局性構(gòu)建邏輯重用:插件被編寫(xiě)成和項(xiàng)目模型對(duì)象(POM)一起工作,它們沒(méi)有被設(shè)計(jì)成操作某一個(gè)已知位置的特定文件。一切都被抽象到模型中,插件配置和自定義行為都在模型中進(jìn)行。
           4).工具可移植性/集成:像 Eclipse,NetBeans,和 InteliJ 這樣的工具現(xiàn)在有共同的地方來(lái)找到項(xiàng)目的信息。在 Maven 出現(xiàn)之前,每個(gè) IDE 都有不同的方法來(lái)存儲(chǔ)實(shí)際上是自定義項(xiàng)目對(duì)象模型(POM)的信息。Maven 標(biāo)準(zhǔn)化了這種描述,而雖然每個(gè) IDE 仍然繼續(xù)維護(hù)它的自定義項(xiàng)目文件,但這些文件現(xiàn)在可以很容易的由模型生成。
           5).便于搜索和過(guò)濾構(gòu)件:像 Nexus 這樣的工具允許你使用存儲(chǔ)在 POM 中的信息對(duì)倉(cāng)庫(kù)中的內(nèi)容進(jìn)行索引和搜索。
          posted @ 2009-06-07 21:37 小兄弟(Robbins) 閱讀(111) | 評(píng)論 (0)編輯 收藏
           

              項(xiàng)目管理只是時(shí)間上的管理。
              MOT是告訴你自己的內(nèi)心,你應(yīng)該怎么在社會(huì)上去做人。
              其實(shí)我覺(jué)得做人是由后天性格+先天意識(shí)行為組合而成,而并不能由于某種培訓(xùn)和讀書(shū)就能夠改變本身個(gè)人后天形成的性格問(wèn)題。
              再者我們?cè)倩剡^(guò)頭來(lái)思考,我們先天意識(shí)行為是怎么樣產(chǎn)生的。

          posted @ 2009-06-07 07:49 小兄弟(Robbins) 閱讀(123) | 評(píng)論 (0)編輯 收藏
           

                      1、想法不結(jié)合實(shí)際的情況
                      2、直接插足項(xiàng)目工作的安排
                      3、對(duì)管理上的專(zhuān)業(yè)知識(shí)不強(qiáng)
                      4、想到什么做什么,沒(méi)有顧及后果或者以后產(chǎn)生的問(wèn)題
                      5、沒(méi)有針對(duì)問(wèn)題去解決問(wèn)題,反而火上加火
                      6、相互的推讓問(wèn)題的責(zé)任,嘴上說(shuō)對(duì)責(zé)任要勇于承擔(dān),但是自己卻在逃避
                      7、不懂得怎么去管理人和協(xié)調(diào)人員的關(guān)系

          posted @ 2009-04-02 13:16 小兄弟(Robbins) 閱讀(251) | 評(píng)論 (1)編輯 收藏
           
          主站蜘蛛池模板: 德令哈市| 理塘县| 北京市| 宁阳县| 固始县| 临武县| 运城市| 左云县| 个旧市| 遂川县| 南阳市| 赤壁市| 囊谦县| 尉犁县| 扎赉特旗| 修武县| 钟祥市| 双辽市| 临高县| 临桂县| 无极县| 双城市| 定襄县| 建湖县| 洮南市| 白城市| 宜川县| 仁化县| 乌拉特后旗| 会昌县| 楚雄市| 通河县| 洪雅县| 包头市| 红河县| 乌鲁木齐县| 梅河口市| 昌都县| 木里| 上犹县| 砚山县|