隨筆-54  評(píng)論-0  文章-2  trackbacks-0
            2010年2月25日
          巴巴運(yùn)動(dòng)網(wǎng)的權(quán)限模塊總結(jié)
            因?yàn)榘桶瓦\(yùn)動(dòng)網(wǎng)的權(quán)限設(shè)計(jì)模塊對(duì)我來(lái)說(shuō),可以實(shí)現(xiàn),打算好好整理一下思路,面試時(shí)說(shuō)不定還能起點(diǎn)作用,看了兩遍,自己總結(jié)下:
          權(quán)限定義/權(quán)限組(角色)模塊
          1.對(duì)系統(tǒng)的所有功能定義相應(yīng)的權(quán)限
          2.由網(wǎng)管針對(duì)不同部門(mén)不同員工分配權(quán)限組(角色),在分配角色時(shí),
            可以選擇該角色具有的權(quán)限
          3.權(quán)限攔截模塊
           
          具體步驟:
           1.設(shè)計(jì)權(quán)限實(shí)體
              聯(lián)合主鍵(SystemPrivilegePK),該類(lèi)有module和privilage兩個(gè)屬性
           2.初始化權(quán)限
           3.設(shè)計(jì)權(quán)限組(角色)PrivilegeGroup實(shí)體,如果我們希望通過(guò)修改權(quán)限組添加或刪除權(quán)限,那么權(quán)限和角色之間的多對(duì)多關(guān)系的維護(hù)端由角色來(lái)維護(hù)
              private String groupid;
              private String name;
              private Set<SystemPrivilege> privileges = new HashSet<SystemPrivilege>();
          同時(shí)加上到數(shù)據(jù)庫(kù)表的映射
          當(dāng)然由于權(quán)限和角色之間的多對(duì)多關(guān)系是雙向關(guān)聯(lián),所以要在SystemPrivilege實(shí)體bean中加上和PrivilegeGroup實(shí)體Bean之間的映射

          4.實(shí)現(xiàn)權(quán)限組的添刪改
          路徑:/control/
           新建接口PrivilegeGroupService,繼承Dao<PrivilegeGroupService>,
           新建PrivilegeGroupService,繼承DaoSupport
          當(dāng)然這些Bean都需要交給Spring管理,加上相應(yīng)的注解即可
          5.實(shí)現(xiàn)權(quán)限組的分頁(yè),這個(gè)簡(jiǎn)單
          6.實(shí)現(xiàn)添加權(quán)限,分頁(yè)列表上的Action,新建Action,名稱(chēng)為PrivilegeGroupManageAction,
            ①.第一個(gè)方法是AddUI,主要是顯示頁(yè)面
            接下來(lái)就是增刪該操作了(...)

          7.權(quán)限做完后要新建一個(gè)Action用于完成SystemPrivilege,權(quán)限組,超級(jí)管理員的初始化,初始化完成后點(diǎn)擊“確定”,進(jìn)入登陸頁(yè)面


           權(quán)限模塊的核心:                        權(quán)限攔截模塊

          1.員工要訪問(wèn)control開(kāi)頭的路徑,必須登陸,即粗粒度的權(quán)限攔截,這是通過(guò)Fileter實(shí)現(xiàn)的,這里我們定義為PrivilegeFilter,先從session范圍中得到employee對(duì)象,如果對(duì)象為空,就瀏覽器重定向到登陸界面,,如果登陸了,就chain.doFilter(request,response);之后在web.xml配置,這樣就實(shí)現(xiàn)粗粒度的權(quán)限控制了3
          2.對(duì)于界面上的某些功能,不是每一個(gè)登陸到系統(tǒng)的員工對(duì)頁(yè)面的功能都有操作權(quán)限,這就是細(xì)粒度的權(quán)限攔截
          關(guān)鍵是怎樣細(xì)粒度的權(quán)限控制
          怎樣實(shí)現(xiàn)細(xì)粒度的權(quán)限控制?
          每點(diǎn)擊頁(yè)面上的按鈕,都會(huì)提交給相應(yīng)的Action處理,細(xì)粒度的權(quán)限攔截就是對(duì)Action攔截,在不修改原代碼情況下,增加攔截代碼,使用的是AOP技術(shù)
           每一個(gè)功能Action都有相應(yīng)的方法處理,我們用JDK5中的注解為Action中的方法注解相應(yīng)的權(quán)限,因?yàn)槲覀冇袝r(shí)會(huì)修改方法名稱(chēng),用注解維護(hù)起來(lái)比較方便比如:
          @Permission(module="order",privilege="modify")
          public ActionForward OrderModify(){}
           
          實(shí)現(xiàn)過(guò)程:
          ①.新建注解Permission,
                     @Retention(PetentionPolicy.RUNTIME)
                     @Target(ElementType.METHOD)
                       public @interface Permission{
                           String module();
                            String privilege();
                       }
                為Action中的方法,加上注解
              只有攔截到Action中的這個(gè)方法,才能實(shí)現(xiàn)權(quán)限攔截,現(xiàn)在我們的Action已經(jīng)交給Spring管理,所以我們可以使用Spring的AOP技術(shù)進(jìn)行權(quán)限攔截,有必要復(fù)習(xí)一下AOP的知識(shí):
           在Action類(lèi)上加一個(gè)注解如下:@Aspect,當(dāng)然要使這個(gè)注解起作用,我們必須在Spring的配置文件里配置:
            <aop:aspectj-autoproxy> <!--注解解析器-->
          要實(shí)現(xiàn)切面編程,抽象過(guò)程體現(xiàn)在代碼上, 就是一個(gè)采用類(lèi)來(lái)描述,要是這個(gè)類(lèi)起作用,我們必須要把它交給Spring管理,很郁悶
          @Aspect@Component
          public class Interceptor{
           @Pointcut("exception(org.apache.struts.action.ActionForward  cn.itcast.web.action.. * *(org.apache.struts.actionMapping,...))")
           private void actionMethod(){}
          @Around("actionMethod")
          public Object interceptor(ProceedingJoinPoint pjp) throw Throwable{
            System.out.println("攔截到了"+pjp.getSignature().getName()+"方法");
            return pjp.proceed();
           }

          注意:
          通知:
          前置通知,在攔截的方法前加通知,這個(gè)通知執(zhí)行后,被攔截的方法仍然會(huì)執(zhí)行。
          所以使用環(huán)繞通知,但是這樣的攔截只能是攔截Action實(shí)現(xiàn)的,他不能攔截繼承自DispatchAction
          原因:Spring的動(dòng)態(tài)代理技術(shù)的問(wèn)題
          Spring不能對(duì)通過(guò)反射調(diào)用的方法應(yīng)用上通知(Advice)
          當(dāng)Spring發(fā)現(xiàn)我們的繼承的DispatchAction的那個(gè)類(lèi)符合他攔截的要求,就會(huì)生成一個(gè)代理對(duì)象,因?yàn)闊o(wú)接口,默認(rèn)使用cglib為這個(gè)Action生成代理對(duì)象,根據(jù)cglib生成代理對(duì)象的特點(diǎn),繼承目標(biāo)類(lèi),并且重寫(xiě)所有非final的方法來(lái)實(shí)現(xiàn)
           
          注:spring只會(huì)為本類(lèi)定義的方法應(yīng)用通知



          posted @ 2010-04-01 07:10 d66380022| 編輯 收藏
           今天初步學(xué)習(xí)了一下Struts2,對(duì)于Struts2,企業(yè)中已應(yīng)用十分廣泛,由于他是在Struts基礎(chǔ)上發(fā)展而來(lái),技術(shù)上比struts高,比如struts2對(duì)同一個(gè)路徑的每個(gè)請(qǐng)求分別使用一個(gè)獨(dú)立Action實(shí)例對(duì)象,所有使用struts2不用考慮線程安全問(wèn)題,還有就是修改下配置文件,不用重啟服務(wù)器
          1.struts2的建立過(guò)程:
          配置過(guò)程:
          1.新建web項(xiàng)目
          2.導(dǎo)入struts2類(lèi)庫(kù). [blank項(xiàng)目中含有最少的jar文件]
          3.配置web.xml
          <filter>[...SrutsPrepareAndExecuteFilter]
          4.寫(xiě)Action類(lèi)
          public class HelloWorldAction {
          public String execute(){
          System.out.println("hello world!");
          try {
          ServletActionContext.getResponse().getWriter().printf("hello!");
          } catch (Exception e) {
          e.printStackTrace();
          }
          return null ;
          }
          }
          5.創(chuàng)建struts.xml
          ①.struts2默認(rèn)在類(lèi)路徑下查找struts.xml文件
          關(guān)于struts.xml配置,可以參看struts2-blank-2.1.8.1.war解壓后的配置
          設(shè)置環(huán)境為開(kāi)發(fā)模式.設(shè)置為開(kāi)發(fā)模式,有利于編程和調(diào)試,
          <constant name="struts.devMode" value="true" />
          3.讓struts.xml中的Package繼承struts-default.xml中的默認(rèn)包.
          所有的默認(rèn)包中的元素配置就引入進(jìn)來(lái).
          4.配置默認(rèn)值.
          <action name="HelloWorldAction" class="cn.itcast.struts2.helloworld.HelloWorldAction">
          <result name="success">
          <param name="location">/index.jsp</param>
          </result>
          </action>

          5.strtus2中的action不是單例的,它會(huì)為每個(gè)請(qǐng)求單獨(dú)分配一個(gè)action實(shí)例,所以可以在action類(lèi)中聲明實(shí)體屬性.
          Struts2的Action是模型層,不是控制層,原因它是需要攜帶業(yè)務(wù)數(shù)據(jù)的.
          6.struts2中的攔截器是負(fù)責(zé)每個(gè)獨(dú)立的一項(xiàng)任務(wù).例如,參數(shù)傳遞,國(guó)際化,異常處理,StrutsPrepareAndExecuteFilter是Struts 2框架的核心控制器,它負(fù)責(zé)攔截由<url-pattern>/*</url-pattern>指定的所有用戶(hù)請(qǐng)求,當(dāng)用戶(hù)請(qǐng)求到達(dá)時(shí),該Filter會(huì)過(guò)濾用戶(hù)的請(qǐng)求。
          7.在struts2的jsp中輸出數(shù)據(jù),借助于struts-tag.tld標(biāo)簽庫(kù).該庫(kù)在[struts-core.jar/META-INF/struts-tag.tld,但是其重要作用還是用于回顯數(shù)據(jù)

          8.Struts2可以數(shù)據(jù)的范圍:ActionContext request session application
          ActionContext是數(shù)據(jù)中心,ValueStack不過(guò)是該數(shù)據(jù)中心中的一個(gè)特殊對(duì)象.
          在jsp中訪問(wèn)ActionContext中的數(shù)據(jù)的話,可以使用OGNL語(yǔ)言.
          9.struts2中包的名字空間搜索原則:

          1.<package name="xxPkg">
          2.<package name="xxPkg" namespace="">
          3.<package name="xxPkg" namespace="/">
          4.<package name="xxPkg" namespace="/HelloWorld">

          1.和2.效果一樣,都是默認(rèn)的包.
          2.都會(huì)自后向前搜索,直到找到為止,"/" 和 "/HelloWorld"唯一不同就是也可以作為搜索目錄.
          3.空包是默認(rèn)包,如果每個(gè)包都沒(méi)有找到相應(yīng)的action的話,就去默認(rèn)包下去找.
          10.struts2中進(jìn)行動(dòng)態(tài)方法調(diào)用.
          http://localhost:8085/struts2/Hell/HelloWorldAction!toRewView.do
          11.struts2中使用標(biāo)簽庫(kù)
          <s:form action="HelloWorldAction_doReg" [namespace=""]>
          <s:textfield name="name" label="UserName" />
          <s:submit />
          </s:form>
          namespace:如果不寫(xiě),會(huì)使用當(dāng)期的名字空間.
          struts給的所有控件標(biāo)簽,主要目的用于回顯數(shù)據(jù).
          12.struts2中進(jìn)行基本的校驗(yàn),需要Validateable和ValidationAware兩個(gè)接口的支持,同時(shí)還需要
          workflow攔截器的支持.
          13.在struts2中,默認(rèn)的表達(dá)式語(yǔ)言是OGNL,Object Graphic Navigation Language(對(duì)象圖導(dǎo)航語(yǔ)言)的縮寫(xiě),它是一個(gè)開(kāi)源項(xiàng)目。 Struts 2框架使用OGNL作為默認(rèn)的表達(dá)式語(yǔ)言。相對(duì)EL表達(dá)式,它提供了平時(shí)我們需要的一些功能,如:支持對(duì)象方法調(diào)用,支持類(lèi)靜態(tài)方法調(diào)用和值訪問(wèn),操作集合對(duì)象。例如():

          訪問(wèn)值棧中的action的普通屬性: username = <s:property value="username"/>

          由于下午有公司來(lái)面試,耽誤了一些時(shí)間,老徐說(shuō)明天再多補(bǔ)一個(gè)小時(shí),太敬業(yè)了啊,佩服!

          posted @ 2010-03-25 16:39 d66380022| 編輯 收藏

            在線支付時(shí)針對(duì)易寶支付的網(wǎng)關(guān)而開(kāi)設(shè)的,眾所周知,易寶已是三大網(wǎng)上支付平臺(tái)之一,正好明天易寶來(lái)招聘,正好練練,呵呵,下午是面試技巧

            好好學(xué)習(xí),畢業(yè)倒計(jì)時(shí):15

          1.支付寶是不能立即拿到現(xiàn)錢(qián)的,這也是商家喜歡在線支付的一個(gè)原因吧,在線支付是直接和銀行對(duì)接的,這樣商家可以立即拿到現(xiàn)錢(qián),避免了和買(mǎi)家產(chǎn)生矛盾后,錢(qián)被封的風(fēng)險(xiǎn)。

          下面就來(lái)實(shí)現(xiàn)在線支付吧,首先提出請(qǐng)求,如果通過(guò),會(huì)得到賬號(hào)和密鑰

           我們要做的事有兩項(xiàng)                                              

            1.向支付網(wǎng)關(guān)發(fā)起請(qǐng)求,就是向http發(fā)起請(qǐng)求,所謂請(qǐng)求就是我們平常使用Http請(qǐng)求(http://www.xxx.cn/xxx.do),請(qǐng)求方式:Get/Post

            <form method=”” action=”https://www.yeepay.com/app-method”>

               <input name=”?”,value=””/>

               <input name=”url” value=”http://www.itcast.cn/re.do”/>

               <input name=”hmac” value=””>

               …..

              Hmac = MD5(pd_FrpId + p0_Cmd + p8_Url,key);32位,不可逆

              支付網(wǎng)關(guān):其實(shí)就是一個(gè)http路徑

            2.接收支付網(wǎng)關(guān)返回的支付結(jié)果信息

             第一次使用瀏覽器重定向技術(shù),

           把支付信息發(fā)送給:http://www.itcast.cn/re.do?id=21432&result=1

            

          2.相關(guān)知識(shí)點(diǎn):

          .接入方式:兩種接入方案

          .直接與銀行對(duì)接

          優(yōu)點(diǎn)因?yàn)橹苯优c銀行進(jìn)行財(cái)務(wù)結(jié)算,交易資金結(jié)算比較安全

          缺點(diǎn):開(kāi)發(fā)工作量比較大,而且銀行會(huì)不定期升級(jí)交易系統(tǒng),隨著銀行系統(tǒng)的升級(jí),企業(yè)也需要作相應(yīng)改動(dòng),所以維護(hù)工作量也是比較大的,而且企業(yè)每年還需要向銀行交納一定數(shù)量的接口使用費(fèi)。

           

          .通過(guò)中間公司間接與銀行對(duì)接

          優(yōu)點(diǎn):開(kāi)發(fā)工作量較少,因?yàn)槭褂玫氖侵虚g企業(yè)提供的接入規(guī)范,所以銀行升級(jí)系統(tǒng),不需要企業(yè)作相應(yīng)修改,除非中間企業(yè)的接入規(guī)范發(fā)生了改變,企業(yè)才作相應(yīng)修改。

          缺點(diǎn):因?yàn)槭桥c中間企業(yè)進(jìn)行資金結(jié)算,目前所有中間企業(yè)都是私企,資金安全是個(gè)大問(wèn)題。

           3. 對(duì)支付數(shù)據(jù)進(jìn)行Md5加密

          4. 支付流程:

          通過(guò)http請(qǐng)求方式向易寶支付網(wǎng)關(guān)發(fā)起一個(gè)支付請(qǐng)求,請(qǐng)求可以是getpost方式提交。

          易寶支付網(wǎng)關(guān)對(duì)企業(yè)發(fā)來(lái)的數(shù)據(jù)使用用戶(hù)的密鑰生成MD5-hmac碼,然后跟企業(yè)發(fā)來(lái)的MD5-hmac(即上面表單由hmac字段提供的值)比較是否相同,如果相同即把請(qǐng)求轉(zhuǎn)發(fā)到銀行網(wǎng)關(guān),當(dāng)用戶(hù)支付完成后,銀行網(wǎng)關(guān)會(huì)引導(dǎo)用戶(hù)的瀏覽器重定向到易寶支付網(wǎng)關(guān),然后易寶支付網(wǎng)關(guān)再引導(dǎo)用戶(hù)的瀏覽器重定向到企業(yè)提供的url(即上面表單由p8_Url提供的地址)

           

          接下來(lái)我們只需處理結(jié)果了

           

          下午是面試技巧:

          薪水:一定要寫(xiě) ,不要寫(xiě)區(qū)間 4000  

          心得體會(huì):具體點(diǎn)

          責(zé)任描述:多寫(xiě),詳細(xì),寫(xiě)開(kāi)發(fā)難點(diǎn),描述清楚,介紹清楚

            對(duì)某一模塊詳細(xì)描述,對(duì)難點(diǎn)的解決過(guò)程

          描述自己負(fù)責(zé)的模塊,抓住一點(diǎn),詳細(xì)說(shuō),千千不要泛泛而談

          不能寫(xiě)培訓(xùn)經(jīng)驗(yàn)

           

          三好學(xué)生,寫(xiě)一等獎(jiǎng)學(xué)金是應(yīng)屆的

          愛(ài)好還是要寫(xiě)的

          身份證不能造假,教育經(jīng)歷,通常企業(yè)篩選簡(jiǎn)歷過(guò)程:

           1-2千封中選,讓前臺(tái)做/人力去篩選簡(jiǎn)歷,要求:

             A.只提取兩年工作年限以上(一般企業(yè)都是這樣干的)

             B.連人力都能判斷出造假的簡(jiǎn)歷,排除

             C.經(jīng)過(guò)人力,剩下100

             D.面試官

           

          88年可以寫(xiě)兩年,教育經(jīng)歷:把畢業(yè)信息提前,證書(shū)造假

          簡(jiǎn)歷上可適當(dāng)造假

          薪水:

          寫(xiě)2年,月薪(北京,上海,廣州):

          初級(jí):3000 – 4000 4500  -- 8-12

          中級(jí):4500 – 6000 7K 其中5K-6K比較多 --

          高級(jí):7000 – 1.2W  3-5

           

          從事Android,薪水如下:

          Android 2 最長(zhǎng)就2

          原來(lái)做過(guò)j2se開(kāi)發(fā)3-4 8K-1.2W

          android 3個(gè)月(j2ee 1-26K

          Android 干半年 4.5K

          如果我們老老實(shí)實(shí)干半年,編碼能力就會(huì)沒(méi)問(wèn)題

           

          工作經(jīng)驗(yàn):

          1.為什么離職?

          我在深圳那邊4K,也不知道北京這邊的行情。

          2.當(dāng)公司準(zhǔn)備要你的時(shí)候,會(huì)讓你填以前公司的地址信息,聯(lián)系人信息

           造假唄,找個(gè)外地的同學(xué)

          3.入職后,離職證明,隨便蓋個(gè)章,離職證明模版網(wǎng)上有一大堆

           新公司不想惹麻煩,已經(jīng)和原來(lái)公司解除了勞動(dòng)合同

           

          4.關(guān)于android面試

           基礎(chǔ):

          多線程(并發(fā)控制),Socket通信,http通信

           android

          android的什么項(xiàng)目

          項(xiàng)目針對(duì)那些手機(jī)型號(hào)的手機(jī)HTC

          如何適應(yīng)各個(gè)分辨率的問(wèn)題,大分辨率靠前

          ContentProvider(難度),共享數(shù)據(jù)

          聯(lián)系人(如何獲取聯(lián)系人)

          Activity的生命周期:運(yùn)行 暫停 停止

          前臺(tái)生命周期

          完整生命周期

             

          意圖:隱,顯式

          組件:廣播,內(nèi)容提供者,Service 四大組件

          MMI:多媒體接口

          SQLite:數(shù)據(jù)庫(kù)訪問(wèn)

          項(xiàng)目開(kāi)發(fā)

            3   2-3

          公司部門(mén)           人員

          研發(fā)部/技術(shù)部     50-60

          測(cè)試部            8-10

          客服部/售后服務(wù)

          市場(chǎng)部           

          行政部

          posted @ 2010-03-24 00:49 d66380022| 編輯 收藏

          今天學(xué)習(xí)從網(wǎng)上獲得數(shù)據(jù),以xml文件輸出。流程:android客戶(hù)端 -----已經(jīng)開(kāi)發(fā)好的CRM(220.113.15.23) -----[客戶(hù)資料]--à屏幕

          用的是struts1.3的環(huán)境

          1.搭建環(huán)境

          1.web.xml配置struts servlet

          2.添加jar

          3.復(fù)制struts-config.xml

          環(huán)境搞定后,新建jsp文件,寫(xiě)好文件頭:<?xml version="1.0" encoding="UTF-8"?> 注意

          接著新建一個(gè)ContactAction

          最后配置struts-config.xml文件

          新建contact.jsp文件,得到數(shù)據(jù)

          訪問(wèn)路徑,測(cè)試得到的數(shù)據(jù),以驗(yàn)證是否正確,若正確的話,第一步完成

          下面是Android應(yīng)用

          2 ..設(shè)計(jì)要顯示的界面

            .新建service,可以調(diào)用

          關(guān)鍵代碼:

          String path = “http://192.168.1.100:8080/crm/contacts.do”;

          URL url = new URL(path);

          HttpURLConnection conn = (HttpURLConnection)url.openConnection();

          conn.setConnectionTimeout(5*1000);

          conn.setRequestMethod(“POST”);

          return conn.getInputStream();

          在該類(lèi)中還應(yīng)該新建sax解析方法,解析文檔,保存數(shù)據(jù)

          .新建android測(cè)試類(lèi),以日志形式打印出xml文件中的數(shù)據(jù)

          3.應(yīng)用HttpURLConnection對(duì)象,我們可以向網(wǎng)絡(luò)發(fā)送請(qǐng)求參數(shù).下面以POST發(fā)送為例,寫(xiě)一些關(guān)鍵代碼點(diǎn)

          Map<String, String> params = new HashMap<String, String>();

          params.put("age", "22");

          params.put("name", "浪淘沙");

           StringBuilder params = new StringBuilder();

          for(Map.Entry<String, String> entry : params.entrySet()){

               params.append(entry.getKey());

               params.append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8"));

               params.append("&");

          }

          if (params.length() > 0) params.deleteCharAt(params.length() - 1);

          byte[] data = params.toString().getBytes();

           

          4. 為應(yīng)用添加新的Activity

          ①:新建一個(gè)繼承Activity的類(lèi)

          ②:需要在功能清單AndroidManifest.xml文件中添加進(jìn)上面Activity配置代碼

           

          打開(kāi)新的Activity,不傳遞參數(shù)

          通過(guò)意圖打開(kāi)ActivityIntent,用于激活Activity的,在組件之間傳遞數(shù)據(jù)

          在新的Activity中接收前面Activity傳遞過(guò)來(lái)的參數(shù):

          添加參數(shù)的另一種方法:Bundle

          Bundle類(lèi)用作攜帶數(shù)據(jù),它類(lèi)似于Map,用于存放key-value名值對(duì)形式的值。相對(duì)于Map,它提供了各種常用類(lèi)型的putXxx()/getXxx()方法, putXxx()用于往Bundle對(duì)象放入數(shù)據(jù),getXxx()方法用于從Bundle對(duì)象里獲取數(shù)據(jù)。Bundle的內(nèi)部實(shí)際上是使用了HashMap<String, Object>類(lèi)型的變量來(lái)存放putXxx()方法放入的值:

           

          5. Intent過(guò)濾器

          Android鼓勵(lì)減少組件間的耦合,因此Android提供了Intent (意圖) Intent提供了一種通用的消息系統(tǒng),它允許在你的應(yīng)用程序與其它的應(yīng)用程序間傳遞Intent來(lái)執(zhí)行動(dòng)作和產(chǎn)生事件。使用Intent可以激活Android應(yīng)用的三個(gè)核心組件:活動(dòng)、 服務(wù)和廣播接收器。

          Intent可以劃分成顯式意圖和隱式意圖。

           

           

          posted @ 2010-03-20 23:30 d66380022| 編輯 收藏

          使用SharedPreferences進(jìn)行數(shù)據(jù)存儲(chǔ),是專(zhuān)門(mén)用來(lái)向用戶(hù)提供軟件參數(shù)設(shè)置功能,

          1.       SharedPreferences類(lèi),它是適合用于保存軟件配置參數(shù)。使用SharedPreferences保存數(shù)據(jù),其背后是用xml文件存放數(shù)據(jù)。

          2. SharedPreferences使 用xml文件保存 數(shù)據(jù),getSharedPreferences(name,mode)方法的第一個(gè)參數(shù)用于指定該文件的名稱(chēng),不用帶后綴,后綴由Android自動(dòng)加上,方法的第二個(gè)參數(shù)指 定文件的操作模式,共有四種操作模式。

          3.設(shè)置軟件參數(shù)過(guò)程:

           ①.當(dāng)用戶(hù)點(diǎn)擊保存按鈕時(shí),就激發(fā)保存事件

               Activity中的匿名內(nèi)部類(lèi)中,得到用戶(hù)輸入值

               需要注意的是:android.content.SharedPreferences.Editor用于保存參數(shù),該editor最后要commit一下。

               最后要Toast.makeText(PreferencesActivity.this, "保存參數(shù)成功", 1).show();用于提示保存參數(shù)成功

          .如果訪問(wèn)其他應(yīng)用中的Preference,前提條件是:該preference創(chuàng)建時(shí)指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE權(quán)限。如:有個(gè)<package name>cn.itcast的應(yīng)用使用下面語(yǔ)句創(chuàng)建了preference

          getSharedPreferences("itcast", Context.MODE_WORLD_READABLE);

          其他應(yīng)用要訪問(wèn)上面應(yīng)用的preference,首先需要?jiǎng)?chuàng)建上面應(yīng)用的Context,然后通過(guò)Context 訪問(wèn)preference ,訪問(wèn)preference時(shí)會(huì)在應(yīng)用所在包下的shared_prefs目錄找到preference

          Context otherAppsContext = createPackageContext("cn.itcast",

          Context.CONTEXT_IGNORE_SECURITY);

          4. 使 用SQLite數(shù) 據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)

          Android平臺(tái)上,集成了一個(gè)嵌入式關(guān)系型數(shù)據(jù)庫(kù)—SQLiteSQLite3支持 NULLINTEGERREAL(浮點(diǎn)數(shù)字)、TEXT(字符串文本)BLOB(二進(jìn)制對(duì)象)數(shù)據(jù)類(lèi)型,雖然它支持的類(lèi)型只有五種, SQLite最大的特點(diǎn)是你可以保存任何類(lèi)型的數(shù)據(jù)到任何字段中,無(wú)論這 列聲明的數(shù)據(jù)類(lèi)型是什么。SQLite可以解析大部分標(biāo)準(zhǔn)SQL語(yǔ)句。

          5.開(kāi)發(fā)3g數(shù)據(jù)庫(kù) 軟件需求:

           ①.用戶(hù)初次使用軟件,初始化數(shù)據(jù)庫(kù)

           ②.用戶(hù)升級(jí)軟件,自動(dòng)更新數(shù)據(jù)庫(kù)

           為此,類(lèi)對(duì)應(yīng)提供了兩個(gè)重要的方 法,分別是onCreate(SQLiteDatabase db)onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

          6.利用繼承自SQLiteOpenHelperDatabaseHelper類(lèi)實(shí)現(xiàn)增刪改查,和我們以前的用JDBC實(shí)現(xiàn)的增刪改查語(yǔ)法基本一樣,舉例:

           SQLiteDatabase db = ....;

          db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"傳智播客", 4});

          db.close();

           需要注意的是SQLiteDatabaserawQuery() 用于 執(zhí)行select語(yǔ)句

          7.將數(shù)據(jù)動(dòng)態(tài)顯示在手機(jī)屏幕上,用SimpleAparter實(shí)現(xiàn)


          今天到此結(jié)束!

             

                

          posted @ 2010-03-17 23:53 d66380022| 編輯 收藏

          3G的第二天,單元測(cè)試,老黎講的東西當(dāng)天基本可以掌握,很喜歡

          1.單元測(cè)試步驟:

          第一步:首先在AndroidManifest.xml中加入下面紅色代碼:

          ①.<application>中加入:

          <uses-library android:name="android.test.runner" />

          ②.在最后的標(biāo)簽前加上:

          <instrumentation android:name="android.test.InstrumentationTestRunner"

               android:targetPackage="cn.itcast.action" android:label="Tests for My App" />

          注意:上面targetPackage指定的包要和應(yīng)用的package相同。

          第二步:編寫(xiě)單元測(cè)試代碼(選擇要測(cè)試的方法,右鍵點(diǎn)擊“Run As”--“Android Junit Test” ):

          2.數(shù)據(jù)存儲(chǔ)和訪問(wèn)

           軟件需要對(duì)處理后的數(shù)據(jù)存儲(chǔ),Android為數(shù)據(jù)存儲(chǔ)提供了5種方式:

               文件,SharedPreferencesSQLite數(shù)據(jù)庫(kù),內(nèi)容提供者(Content provider),網(wǎng)絡(luò)

          使用文件對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),Activity提供了openFileOutput()方法可以用于把數(shù)據(jù)輸出到文件中。openFileOutput()方法的第二參數(shù)用于指定操作模式,有四種模式,分別為:

          Context.MODE_PRIVATE

          Context.MODE_APPEND 

          Context.MODE_WORLD_READABLE

          Context.MODE_WORLD_WRITEABLE

          3.SAX解析XML

          SAX是一個(gè)解析速度快并且占用內(nèi)存少的xml解析器,解析采用的是事件驅(qū)動(dòng),這些方法定義在ContentHandler接口中,下面是一些ContentHandler接口常用的方法:

          startDocument()

          當(dāng)遇到文檔的開(kāi)頭的時(shí)候,調(diào)用這個(gè)方法,可以在其中做一些預(yù)處理的工作。

          endDocument()

          和上面的方法相對(duì)應(yīng),當(dāng)文檔結(jié)束的時(shí)候,調(diào)用這個(gè)方法,可以在其中做一些善后的工作。

          startElement(String namespaceURI, String localName, String qName, Attributes atts)

          當(dāng)讀到一個(gè)開(kāi)始標(biāo)簽的時(shí)候,會(huì)觸發(fā)這個(gè)方法。

          endElement(String uri, String localName, String name)

          這個(gè)方法和上面的方法相對(duì)應(yīng),在遇到結(jié)束標(biāo)簽的時(shí)候,調(diào)用這個(gè)方法。

          characters(char[] ch, int start, int length)

          這個(gè)方法用來(lái)處理在XML文件中讀到的內(nèi)容,第一個(gè)參數(shù)為文件的字符串內(nèi)容,后面兩個(gè)參數(shù)是讀到的字符串在這個(gè)數(shù)組中的起始位置和長(zhǎng)度,使用new String(ch,start,length)就可以獲取內(nèi)容。

          4.使用Pull解析器讀取XML文件

          如果需要生成一個(gè)XML文件,生成XML文件的方法有很多,如:可以只使用一個(gè)StringBuilder組拼XML內(nèi)容,然后把內(nèi)容寫(xiě)入到文件中;

          或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,推薦使用Pull解析器。

           

          最后,

          巴巴運(yùn)動(dòng)網(wǎng),好好學(xué)習(xí)權(quán)限和優(yōu)化等技術(shù),面試特別有幫助

                                                                                                                                                                                                                    

          posted @ 2010-03-16 00:29 d66380022| 編輯 收藏

              今天是黎老師的3G應(yīng)用開(kāi)發(fā)Android項(xiàng)目的第一天,Android相當(dāng)火,從事Android開(kāi)發(fā)的人員不太多,接下來(lái)開(kāi)始Android之旅。

          1.3G簡(jiǎn)介:

           3G,即3rd Generation,目前中國(guó)聯(lián)通使用的是WCDMA,中國(guó)電信使用的是CDMA2000 中國(guó),移動(dòng)使用的是具有自主知識(shí)產(chǎn)權(quán)的TD-SCDMA3G的最大優(yōu)點(diǎn):速度上的提升

          2.wml標(biāo)簽,比Html標(biāo)簽簡(jiǎn)單,1-2天就可以搞定,工作中用到再學(xué),因?yàn)樗?/span>2.5G中用到的技術(shù),如果3G普及的話,這門(mén)技術(shù)就Over了。

          3.智能手機(jī)操作平臺(tái)

           我們學(xué)Android操作系統(tǒng),RIM BlackBerry,黑莓我比較喜歡,但在國(guó)內(nèi)還不怎么流行, Symbian手機(jī)硬件比較好,所以占用很大市場(chǎng),在3G時(shí)代,手機(jī)基本上可以當(dāng)做電腦,用戶(hù)更看重手機(jī)是否能滿(mǎn)足日常生活和工作的需要。這就好像大多電腦 用戶(hù)都安裝了Windows操作系統(tǒng),很少安裝Linux系統(tǒng)。開(kāi)發(fā)Android的人員的增多,必然會(huì)帶來(lái)手機(jī)軟件的增多,軟件的多少會(huì)決定以后操作系統(tǒng)的市場(chǎng)份額,windows mobileAndroidiPhone的界面差遠(yuǎn)了。我們關(guān)注:AndroidiPhoneSymbian智能手機(jī)平臺(tái),因?yàn)槲覀兏?/span>Java開(kāi)發(fā),只能學(xué)Android

          4.Android資料

           買(mǎi)Android手機(jī)就買(mǎi)多普達(dá)和Moto的,質(zhì)量好。Android最好的資料是android.pdfGoogle Android SDK開(kāi)發(fā)范例大全提供了Android的全部功能,在學(xué)完課程之后可以看

          5. 開(kāi)發(fā)環(huán)境的搭建: 

           JDK 5 JDK 6 (僅有JRE不夠)

          Eclipse 3.5 (galileo)

          ①.下載ADT Eclipse 插件

          http://dl.google.com/android/ADT-0.9.5.zip

          ②.安裝 Eclipse 插件 (ADT)

          啟動(dòng) Eclipse,選擇 Help > Install New Software,在出現(xiàn)的對(duì)話框里,點(diǎn)擊Add按鈕,在對(duì)話框的name一欄輸入“ADT” 然后點(diǎn)擊Archive...,瀏覽和選擇已經(jīng)下載的ADT插件壓縮文件。

          點(diǎn)擊 OK.。返回可用軟件的視圖,你會(huì)看到這個(gè)插件,然后選擇Developer Tools (會(huì)選中下 面的“Android Developer Tools” “Android Editors“),點(diǎn)擊 Next,最后重啟 Eclipse

          ③.下載Android SDK

          http://dl.google.com/android/android-sdk_r04-windows.zip

          下載完SDK后,把.zip文件解壓到你電腦上合適位置。啟動(dòng) Eclipse,選擇window->preferences, 在打開(kāi)的視圖左邊點(diǎn)擊android,在右邊的SDK Location中選擇Android SDK所在位置。

          6.開(kāi)發(fā)Android的第一個(gè)應(yīng)用:

          1.點(diǎn)擊工具欄上手機(jī)形狀的虛擬設(shè)備管理器(簡(jiǎn)稱(chēng)“AVD“)

          2.在打開(kāi)的虛擬設(shè)備管理器中創(chuàng)建一個(gè)虛擬手機(jī)

          3.在項(xiàng)目上右鍵點(diǎn)擊run as ?Android application

          OK,第一個(gè)應(yīng)用就OK

          7.端口號(hào):127.0.0.1:5554

          8.Activity

           就像struts中的Action,處理用戶(hù)請(qǐng)求,除此之外,Activity還代表一個(gè)用戶(hù)界面

          9. Android應(yīng)用程序架構(gòu)

                 src/ java原代碼存放目錄

                 gen/ 自動(dòng)生成目錄

                 gen 目錄中存放所有由Android開(kāi)發(fā)工具自動(dòng)生成的文件。目錄中最重要的就是R.java文件。 這個(gè)文件 由Android開(kāi) 發(fā)工具自動(dòng)產(chǎn)生的。Android開(kāi)發(fā)工具會(huì)自動(dòng)根據(jù)你放入res目錄的xml界面文件、圖標(biāo)與常量,同步更新修改R.java文件。

                 res/ 資源(Resource)目錄

                 在這個(gè)目錄中我們可以存放應(yīng)用使用到的各種資源,如xml界面文件,圖片或數(shù)據(jù)。具體請(qǐng)看ppt下方備注欄。

                 AndroidManifest.xml 功能清單文件

                  這個(gè)文件列出了應(yīng)用程序所提供的功 能,相當(dāng)于strutsconfig文件,只有配置好后,才能調(diào)用此Activity

                 default.properties 項(xiàng)目環(huán)境信息,一般是不需要修改此文件中

          10.短信發(fā)送器

           注意:因?yàn)閼?yīng)用要使用手機(jī)的短信服務(wù),所以要在清單文件AndroidManifest.xml中添 加短信服務(wù)權(quán)限:

          11.通知

           關(guān)于這些東西,還是看看文檔,拷過(guò)來(lái)運(yùn)行一下,測(cè)試測(cè)試看看效果就差不多了。


          posted @ 2010-03-16 00:20 d66380022| 編輯 收藏

          .使用poi

            1.參見(jiàn)poi的文檔,添加jar

            2.workbook表示一個(gè)Excel文檔

            3.下載Excel模版,必須按格式

               1.創(chuàng)建workbook對(duì)象

                 2.創(chuàng)建下載Excel文件的第一行

                  3.從數(shù)據(jù)庫(kù)中讀取到需要的Employee列表

               5.利用Servlet Api 對(duì)準(zhǔn)備好的Excel下載

            4.上傳excel        

                .配置Action

                .導(dǎo)入兩個(gè)jarcommons-iocommons-fileupload.jar

                .上傳

                   1.根據(jù)ActionFormFormFile屬性讀取上傳數(shù)據(jù),獲得Workbook對(duì)象

                         2.讀取Workbook對(duì)象中的內(nèi)容:遍歷Workbook對(duì)象除標(biāo)題行以外的行

                   3.把每一行都轉(zhuǎn)換為一個(gè)Employee對(duì)象

                   4.調(diào)用方法,把Employee對(duì)象的集合保存到數(shù)據(jù)庫(kù)中,注意:有可能不能保存,其原因可能違反格式或者違反數(shù)據(jù)庫(kù)的唯一性約束

                      

          .PDF文檔輸出

            1.iText介紹:iText是著名的開(kāi)放源碼的站點(diǎn)sourceforge一個(gè)項(xiàng)目, 是用于生成 PDF 文檔的一個(gè)java類(lèi)庫(kù). 

          2.Pdf 文件輸出的 5 個(gè)步驟

          1. 創(chuàng)建一個(gè) Document 對(duì)象.

          public Document()

          public Document(Rectangle pageSize): 定義頁(yè)面的大小

          public Document(Rectangle pageSize, int marginLeft, int marginRight, int marginTop, int marginBottom): 定義頁(yè)面的大小, 后邊的四個(gè)參數(shù)分別指定左, , , 下頁(yè)邊距

          2.建立一個(gè)書(shū)寫(xiě)器 (Writer) document對(duì)象關(guān)聯(lián), 通過(guò)書(shū)寫(xiě)器(Writer)可以將文檔寫(xiě)入到磁盤(pán)中

          3. 打開(kāi)文檔

          4. 在文檔中添加文字

          5. 關(guān)閉文檔 

          其中:

           

          ①。設(shè)定文檔屬性

          當(dāng)新的頁(yè)面產(chǎn)生之前, 可以設(shè)定頁(yè)面的大小、書(shū)簽、腳注(HeaderFooter)等信息,調(diào)用的方法是:

           

          ②。添加文檔內(nèi)容

          所有向文檔添加的內(nèi)容都是以對(duì)象為單位的, PhraseParagraphTable. 比較常用的是段落(Paragraph)對(duì)象, 用于向文檔中添加一段文字

          ③。文本處理

          iText中用文本塊(Chunk)、短語(yǔ)(Phrase)和段落(paragraph)處理文本。

          文本塊(Chunk)是處理文本的最小單位, 由一串帶格式(包括字體、顏色、大小)的字符串組成:

           

           

          注意: iText 中沒(méi)有行的概念, 一個(gè)表格里直接放單元格, 如果一個(gè) 3 列的表格中放進(jìn) 6 個(gè)單元格, 那就是兩行的表格. 如果放入 5 個(gè)基本的沒(méi)有任何跨列設(shè)置的單元格, 表格就會(huì)出錯(cuò). 此時(shí)表格不會(huì)添加到文檔中, 并且沒(méi)有任何提示

           

          .面試

             老佟給我們找了一個(gè)簡(jiǎn)歷,介紹了一些面試的注意點(diǎn),要點(diǎn):

               1.符合自身?xiàng)l件,各種技術(shù)。

               2.最好寫(xiě)點(diǎn)權(quán)限設(shè)計(jì),Compass+Lucene實(shí)現(xiàn)全文搜索,流程采用JBPM管理。

               3.項(xiàng)目三個(gè):小湯的OA和老佟的權(quán)限整合為一個(gè)項(xiàng)目,網(wǎng)上商城(巴巴運(yùn)功網(wǎng)),3g,數(shù)據(jù)采集

          OA用到的技術(shù):SSH

          jQuery + Ajax

          jbpm 完成審批流程

          spring-security

          lucence :全文檢索

           

          posted @ 2010-03-13 23:40 d66380022| 編輯 收藏
           接著昨天的實(shí)現(xiàn)將攔截的url,權(quán)限信息,用戶(hù)信息放到數(shù)據(jù)庫(kù)中,并將spring-security集成到項(xiàng)目中

          1. 實(shí)現(xiàn)資源信息存放到數(shù)據(jù)庫(kù)中:

          訪問(wèn)資源時(shí), spring-security 能區(qū)分出訪問(wèn)該資源需要哪些權(quán)限
            1. 自定義ObjectDefinitionSource 接口的實(shí)現(xiàn)類(lèi), 將該類(lèi)的實(shí)例裝配給 FilterSecurityInterceptor 的 objectDefinitionSource 的屬性. 即可實(shí)現(xiàn)自定義的資源獲取.

            2. 通過(guò)繼承 DefaultFilterInvocationDefinitionSource 類(lèi)的方法定義ObjectDefinitionSource 接口的實(shí)現(xiàn)類(lèi)有困難, 因?yàn)? DefaultFilterInvocationDefinitionSource中沒(méi)有無(wú)參的構(gòu)造器

             3.通過(guò)查看 spring-security 核心 jar 包的 META-IN 下 的 spring.handlers 找到 SecurityNamespaceHandler, 在該類(lèi)中查看 registerBeanDefinitionParser(Elements.HTTP, new HttpSecurityBeanDefinitionParser()); 方法在 HttpSecurityBeanDefinitionParser 類(lèi)中可以看到如何創(chuàng)建 DefaultFilterInvocationDefinitionSource 實(shí)例.

             4. 通過(guò) FactoryBean 在 IOC 容器中注冊(cè)  DefaultFilterInvocationDefinitionSource 實(shí)例   

             5. 實(shí)現(xiàn)ResourceDetailsService 接口    

          2.關(guān)于MD5加密:

          1.網(wǎng)上的關(guān)于MD5已經(jīng)很多了,MD5算法對(duì)密碼進(jìn)行摘要加密,這是一種單項(xiàng)加密手段,無(wú)法通過(guò)加密后的結(jié)果反推回原來(lái)的密碼明文。

          為了使用MD5對(duì)密碼加密,我們需要修改一下配置文件
          <authentication-provider>
              <password-encoder hash="md5" >
              <jdbc-user-service data-source-ref="dataSource" >
          < authentication-provider>  
          上述代碼中新增的黃色部分,將啟用md5算法。

          3.管理會(huì)話(HttpSession)
              多個(gè)用戶(hù)不能使用同一個(gè)賬號(hào)同時(shí)登陸系統(tǒng)。
          添加監(jiān)聽(tīng)器
          在web.xml中添加一個(gè)監(jiān)聽(tīng)器,這個(gè)監(jiān)聽(tīng)器會(huì)在session創(chuàng)建和銷(xiāo)毀的時(shí)候通知Spring Security。
          這種監(jiān)聽(tīng)session生命周期的監(jiān)聽(tīng)器主要用來(lái)收集在線用戶(hù)的信息,比如統(tǒng)計(jì)在線用戶(hù)數(shù)之類(lèi)的事。后登陸的將先登錄的踢出系統(tǒng)默認(rèn)情況下,后登陸的用戶(hù) 會(huì)把先登錄的用戶(hù)踢出系統(tǒng)。

          ============================================================================================
                                        集成spring-security框架

          1. 集成 spring-security 框架

              1. 加入 spring-security 的兩個(gè) jar 包
              2. 在 web.xml 文件中加入加入 spring-security 框架的過(guò)濾器
              3. 新建 applicationContext-security.xml 配置文件,并且把 security 作為默認(rèn)的命名空間, 并將其導(dǎo)入到 applicationContext.xml 中
              4. 設(shè)計(jì)領(lǐng)域模型:
                 Authority -- 權(quán)限
                 Resource -- 資源
                 Role -- 角色
                 Employee -- 添加 Set<Role> roleSet 屬性

                 Resource 和 Authority 為多對(duì)多的對(duì)應(yīng)關(guān)系
                 Authority 和 Role 為多對(duì)多的對(duì)應(yīng)關(guān)系
                 Role 和 Employee 為多對(duì)多的對(duì)應(yīng)關(guān)系
          需要 3 個(gè)關(guān)聯(lián)表
              5.
                 1. 修改當(dāng)前系統(tǒng)的 login.jsp 頁(yè)面, 改為 spring-security 的登錄頁(yè)面, 并且在 <http> 節(jié)點(diǎn)中進(jìn)行配置.
          注意: spring-security 在登錄成功后, 利用 "重定向" 轉(zhuǎn)到 form-login 節(jié)點(diǎn)對(duì)應(yīng)的 default-target-url 屬性對(duì)應(yīng)的頁(yè)面. 所以不能直接將其配置為 WEB-INF 目錄下的任何頁(yè)面
                2. 新建 UserDetailsService 接口的實(shí)現(xiàn)類(lèi), 以實(shí)現(xiàn)從數(shù)據(jù)庫(kù)中獲取用戶(hù)信息(需要查詢(xún) Employee, Role, Authority, 參見(jiàn) spring-security-2 的UserDetailsServiceImpl, 基于 Hibernate 實(shí)現(xiàn)),并把該類(lèi)的 Bean 引用裝配給 <authentication-provider> 節(jié)點(diǎn)的 user-service-ref 屬性 
              6. 向 ems_resource_table, ems_authority_table, ems_resource_authority_table 數(shù)據(jù)表中添加數(shù)據(jù)
              7. 新建 ResourceDetailsService 接口的實(shí)現(xiàn)類(lèi), 實(shí)現(xiàn)從數(shù)據(jù)庫(kù)中讀取需要被保護(hù)的資源信息及其可以訪問(wèn)這些資源的權(quán)限信息
              8. 利用 FactoryBean 新建 DefaultFilterInvocationDefinitionSource 接口的 Bean, 并把  ResourceDetailsService 的 Bean 注入進(jìn)來(lái), 再把該 Bean 配置為 filterSecurityInterceptor 過(guò)濾器的 objectDefinitionSource 屬性

          2. 實(shí)現(xiàn)權(quán)限模塊:
           1. 實(shí)現(xiàn) Role 的增, 刪, 改, 查

                  角色的添加:

                頁(yè)面 UI:
                        a. 對(duì)字段的 jQuery validation 驗(yàn)證
                        b. struts validator 驗(yàn)證 **
                        c. Action的復(fù)雜驗(yàn)證: 角色名不能重復(fù) **.
                        d. 角色名的 ajax 驗(yàn)證, 角色名不能重復(fù) **.
                        e. 勾選權(quán)限時(shí)的級(jí)聯(lián)選擇. 例如: 勾選 "員工刪除" 的同時(shí)必須勾選 "員工查詢(xún)", 即不能讓用戶(hù)只有 "員工刪除" 權(quán)限, 而沒(méi)有 "員工查詢(xún)" 權(quán)限.
                        f. 使用到 Authority 的如下兩個(gè)字段: relatedAuthorites(與當(dāng)前權(quán)限關(guān)聯(lián)的權(quán)限信息, 多個(gè)權(quán)限使用 "," 分隔), parentAuthority(當(dāng)前權(quán)限的父權(quán)限)
          subAuthorities(當(dāng)前權(quán)限的子權(quán)限)            
                 若驗(yàn)證都通過(guò), 在 Action 中受理請(qǐng)求, 錄入角色
             
          注意:

                 不能通過(guò)以下代碼獲取 parentAuthority 為 null 的 Authority 集合
                 List list = authorityDao.findBy("parentAuthority", null);
                 System.out.println(list.size());
          而應(yīng)該使用:

                 List list = authorityDao.find("FROM Authority auth WHERE auth.parentAuthority IS null");
              為 #select 添加 change 相應(yīng)事件, 當(dāng)選取某個(gè)父權(quán)限時(shí), 子權(quán)限顯示


          今天就此為止,明天繼續(xù)!
          posted @ 2010-03-13 23:21 d66380022| 編輯 收藏

            

          今天主要實(shí)現(xiàn)的是員工信息的修改和權(quán)限管理基礎(chǔ),修改用AJAX實(shí)現(xiàn)的,權(quán)限看了不少的源代碼,感覺(jué)蠻難的,不過(guò)今天只是初步介紹,還有時(shí)間再學(xué)習(xí)一下!

           

          1.員工信息的修改

           1.struts對(duì)表單信息的回顯

           2.對(duì)可以進(jìn)行修改的字段

          1.當(dāng)該字段值發(fā)生改變時(shí),confirm”確定修改該信息嗎?

             點(diǎn)擊取消:使該字段恢復(fù)為以前的默認(rèn)值,不做改變,需要使用隱藏域

                  

           點(diǎn)擊“確定”:用AJAX改變字段,在配置文件中不需返回任何信息                              

             <script type=”text/javascript”>

              $(function(){

               $(“:text,select”).change(function(){

                 var flag = confirm(“確定要修改” + $(this).prev(“label”).text()+”信息嗎?”);

                  ...

          });

          }):

          </script>

          信息

          2.集成spring-security 框架

           1. Spring Security 能用 于保護(hù)各種 Java 應(yīng) 用程序(權(quán)限管理框架).

           2.spring-security入門(mén)

             需 求:1. Spring-security 應(yīng)用的根目錄下有兩個(gè) Jsp 頁(yè)面: index.jsp admin.jsp. admin 用戶(hù)有權(quán)限訪問(wèn)這兩個(gè)頁(yè)面, user 用戶(hù)只能訪問(wèn) index.jsp

          2.提供”登出”功能

             搭建環(huán)境:

                首先添加spring環(huán)境

          1.加入spring-security jar 包:

          spring-security-2.0.5"dist"spring-security-core-2.0.5.RELEASE.jar

          2.web.xml 文件中加入加入spring-security 框架的過(guò)濾器

          3.新建applicationContext-security.xml 配置文件,并且把security 作為默認(rèn)的命名

          空間, 并將其導(dǎo)入到applicationContext.xml

          applicationContext-security.xml,有幾種重要配置:

          1. 配置 spring-security http 安全屬性   

                 <http auto-config="true">

                 2. 配置需要保護(hù)那些 資源, 以及訪問(wèn)這些資源 所需要的權(quán)限, 若有多個(gè) 權(quán)限使用 ',' 分隔   

                        <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN"/>

                        <intercept-url pattern="/index-1.jsp" access="ROLE_USER"/>

                 3.配置登出服務(wù)   

                        <logout logout-url="/logout"

                               logout-success-url="/loguot-success.jsp"

                               invalidate-session="false" />

                 4.配置登錄頁(yè)面,

                               default-target-url: 若直接請(qǐng)求登錄頁(yè)面, 那么該屬性配置登錄成功之后的相應(yīng)頁(yè)面  

                               always-use-default-target: 若請(qǐng)求的目標(biāo)頁(yè)面受保護(hù), spring-security 會(huì)相應(yīng) login-page 屬性對(duì)應(yīng)的頁(yè)面, 默認(rèn)情況下, 若登錄成功將相應(yīng)剛才請(qǐng)求的目標(biāo)頁(yè)面,

          但這相當(dāng)麻煩,每次都要配置不少信息。下面 有更好的實(shí)現(xiàn),即

          把需要攔截的url,權(quán)限,用戶(hù)信息放到放數(shù)據(jù)庫(kù)中,實(shí)現(xiàn)如下:

          1.實(shí)體類(lèi):

          Authority -- 權(quán)限

          Resource -- 資源

          Role -- 角色

          Employee -- 添加Set<Role> roleSet 屬性

          2.關(guān)系

          Resource Authority 為多對(duì)多的對(duì)應(yīng)關(guān)系

          Authority Role 為多對(duì)多的對(duì)應(yīng)關(guān)系

          Role Employee 為多對(duì)多的對(duì)應(yīng)關(guān)系

          所以還需要3 個(gè)額外的關(guān)聯(lián)表


          3.實(shí)現(xiàn)把用戶(hù)信息,權(quán)限信息存放到數(shù)據(jù)庫(kù)中

            1. 實(shí)現(xiàn)把用戶(hù)信息, 權(quán)限信息存放到數(shù)據(jù)庫(kù)中

                 1). 自定義 UserDetailsService 接口的實(shí)現(xiàn)類(lèi), 將該類(lèi)配置到 Spring IOC 容器中, 并在

                     <authentication-provider user-service-ref=""> 節(jié)點(diǎn)的 user-service-ref 屬性中引用該 Bean.

                 2). 通過(guò) debug 查看 UserDetailsService 接口的實(shí)現(xiàn)類(lèi)返回的 UserDetails 對(duì)象     

          4. 實(shí)現(xiàn)資源信息存放到數(shù)據(jù)庫(kù)中: 訪問(wèn)資源時(shí), spring-security 能區(qū)分出訪問(wèn)該資源需要哪些權(quán)限

                 1). 自定義 ObjectDefinitionSource 接口的實(shí)現(xiàn)類(lèi), 將該類(lèi)的實(shí)例裝配給 FilterSecurityInterceptor objectDefinitionSource 的 屬性.即可實(shí)現(xiàn)自定義的資 源獲取.

                 2). 通過(guò)繼承 DefaultFilterInvocationDefinitionSource 類(lèi)的方法定義    ObjectDefinitionSource 接口的實(shí)現(xiàn)類(lèi)有困難, 因?yàn)?/span> DefaultFilterInvocationDefinitionSource

                            中沒(méi)有無(wú)參的構(gòu) 造器, 該構(gòu)造器有兩個(gè)參 數(shù): UrlMatcher urlMatcher, LinkedHashMap requestMap.

                     urlMatcher 參數(shù)可 以通過(guò) bean 的形式 事先配置, requestMap 參數(shù)類(lèi)似于: {[/admin.jsp]=[ROLE_ADMIN], [/index.jsp]=[ROLE_USER]}, 需要訪問(wèn)數(shù)據(jù)庫(kù)才能對(duì)其初始化, 但這不可能.

                 3). 通過(guò)查看 spring-security 核心 jar 包的 META-IN spring.handlers 找到 SecurityNamespaceHandler, 在該類(lèi)中查看 registerBeanDefinitionParser(Elements.HTTP, new HttpSecurityBeanDefinitionParser()); 方法

                           HttpSecurityBeanDefinitionParser 類(lèi) 中可以看到如何創(chuàng)建 DefaultFilterInvocationDefinitionSource 實(shí)例.

                 4). 通過(guò) FactoryBean IOC 容器中注冊(cè) DefaultFilterInvocationDefinitionSource 實(shí)例        

           


          posted @ 2010-03-10 01:00 d66380022| 編輯 收藏

          今天主要實(shí)現(xiàn)的是員工信息的翻頁(yè)設(shè)計(jì),用AJAX實(shí)現(xiàn)的,接著實(shí)現(xiàn)了員工信息的刪除實(shí)現(xiàn),總結(jié) 一天的知識(shí),感覺(jué)jQuery確實(shí)是十分有用的一門(mén)技術(shù)。

          1.帶復(fù)雜條件的分頁(yè):(AJAX分頁(yè))

           

          直接把deptid屬性過(guò)濾加上會(huì)導(dǎo)致出現(xiàn):org.hibernate.QueryException:

          這時(shí)因?yàn)樵?/span> Employee 實(shí)體類(lèi)中根本就沒(méi)有 deptid 屬性(并非指在 Employee 類(lèi)中有該屬性,而是要在映射文件中映射該屬性).

          解決方法:

          EmployeeDao 中重寫(xiě) Page<T> findPage(final Page<T> page, final List<PropertyFilter> filters) 方法, 以解決表單頁(yè) 面的 deptid實(shí)體類(lèi)的

          dept屬性的對(duì)應(yīng)問(wèn)題

              注 意1.增強(qiáng) for 循環(huán)時(shí), 不能 remove 其元素

                  2.在 循環(huán)時(shí)刪除集合的元素, 會(huì)改變集合的 size 屬性

          2.AJAX分頁(yè)設(shè)計(jì)

           1.需要在EmployeeAction的對(duì)應(yīng)方法中,返回JSON數(shù)據(jù),在頁(yè)面上進(jìn)行解析即可

           2.實(shí)現(xiàn)過(guò)程:

               1.點(diǎn)擊上一頁(yè)連接時(shí),需要使用AJAX分頁(yè):因?yàn)?/span>ajax分頁(yè)時(shí),頁(yè)面沒(méi)有刷新,

           下一頁(yè)連接添加AJAX支持

          <script type=”text/javascript”>

          $(function(){

           $(“#nextpage”).click(function(){

           Var url=”${cp}/employee-list-2.do?pageNo=” + (parseInt($(“#pageNo”).val()) + 1);

          var args = $(“:hidden:not(#pageNo)”).serialize();

          $.getJSON(url,args,function(data){

          $(“.pagebanner”).html(“”+data.totalCount+”條記錄&nbsp;”);

          $(“#pageNo”).val(data.pageNo);

          });

          return false;

          });

          });

          </script>


          服務(wù)器端實(shí)現(xiàn)(employeeList2

          1.獲取請(qǐng)求參數(shù)

          String pageNoStr = request.getParameter(“pageNo”);

          2.從頁(yè)面獲取PropertyFilter集合

          3.調(diào)用servicefindPage方法,得到分頁(yè)數(shù)據(jù)Page對(duì)象

          4.page對(duì)象轉(zhuǎn)化為對(duì)應(yīng)的JSON數(shù)據(jù)格式。那么需要轉(zhuǎn)化為什么樣的JSON數(shù)據(jù)

          {totalCount:,totalPages:,pageNo:,employees:[{employeid,:loginName:,gender:,...}] }

           5.返回JSON數(shù)據(jù)

          response.setContentType(“text/javascript”);

          response.getWritter().print(jsonResult);

           

          3.員工信息 刪除功能

          1.AjAX刪除功能的實(shí)現(xiàn):

           1.若當(dāng)前頁(yè)已經(jīng)是最后一頁(yè),且當(dāng)前記錄是當(dāng)前頁(yè)的最后一條記錄,則不能再請(qǐng)求當(dāng)前頁(yè)的信息, totalPages不能代表服務(wù)器端的總頁(yè)數(shù)

          2.Ajax 刪除要實(shí)現(xiàn)的功能:

          1. 彈出confirm(): 確 定要?jiǎng)h除嗎?

          2. 若點(diǎn)擊"", 則文本框或下拉框的值恢復(fù)為剛才的默認(rèn) 值: 使用隱藏域.

          3. 若點(diǎn)擊"", 進(jìn)行ajax 刪除

          4. 若 員工信息有外鍵關(guān)聯(lián)時(shí),注 意:通過(guò) ajaxError 函數(shù)進(jìn)行提示彈出“不能刪除該記錄”

              關(guān)鍵代碼:

          4.查看員工的詳細(xì)信息

           這樣的功能實(shí)現(xiàn)在現(xiàn)在來(lái)說(shuō),已不難實(shí)現(xiàn),我實(shí)現(xiàn)了一下,不難!還用了下插件!顯示Employee 的頭像!

          posted @ 2010-03-07 23:03 d66380022| 編輯 收藏

           

                                         員工的錄入和查詢(xún)(帶 條件查詢(xún))

            今天做的是員工信息錄入和服務(wù)器端的驗(yàn)證,目標(biāo)是使用jQuery更熟悉,掌握分頁(yè)設(shè)計(jì),更好理解Hibernate的一些以前未用過(guò)的類(lèi)中的一些方法。

           一. 員工的錄入,并進(jìn)行驗(yàn)證

          1.顯示員工的錄入頁(yè)面

          1.jQuery validator 為表單做前臺(tái)驗(yàn)證

          2.對(duì)登錄名的Ajax 校驗(yàn)

          3.使用jQuery blockUI 插件提示Ajax 操作

          4.錄入員工信息

          2.服務(wù)器端的簡(jiǎn)單驗(yàn)證

           1.使用strutsvalidator框架

           2.email為例,email非空,且符合email格式

          3.員工錄入服務(wù)器端的復(fù)雜驗(yàn)證

           1.數(shù)據(jù)庫(kù),EmployeeAction中,得到登錄名

           2.對(duì)登錄名的可用性進(jìn)行驗(yàn)證,驗(yàn)證登錄名在數(shù)據(jù)庫(kù)中是否存在

           3.這時(shí)可以采用struts的聲明式異常

          4.使用py4j 解決把漢字轉(zhuǎn)為對(duì)應(yīng)的拼音: 佟剛--> tg, 張孝祥--> zxx, 黎活明--> lhm

           二.員工的查詢(xún)

          1.顯示員工信息:AJAX分頁(yè)

          使用displaytag 分頁(yè)顯示員工信息,記 錄不超過(guò)百萬(wàn)條。簡(jiǎn)單,使用。比如OA

          1.在tomcatwebapps目錄下展示其實(shí)例。

          2. OpenSessionInView

          1使用OpenSessionInView

           Hibernate中某一個(gè)類(lèi)的引用屬性(也 包括集合屬性)采取懶加載策略,則可能出現(xiàn)懶加載異常,但沒(méi)有對(duì)其懶加載屬性進(jìn)行初始化,此時(shí)關(guān)閉Session,然后再來(lái)獲取屬性,就會(huì)異常

          聲明使用spring的聲明式事務(wù):

          <aop:config>

           <aop:pointcut expression="execution(* cn.itcast.ems.service.*.*(..))" id="emsTxPointcut"/>

           <aop:advisor advice-ref="emsTxAdvice" pointcut-ref="emsTxPointcut"/>

          </aop:config>

          OpenSessionInView可以解決這個(gè)問(wèn)題,因?yàn)?/span>OpenSessionInView的使用流程是:

           request à open session 并開(kāi)始transaction –>controller à view(jsp)à

          2.如何使用:

          web.xml配置:

          3.缺點(diǎn):

          如果流程中的某一步被阻塞, 而這期間的 connection 卻一直被占用不被釋放. 例如輸出頁(yè)面時(shí), 一方面可能是頁(yè)面內(nèi)容大, response.write的時(shí)間長(zhǎng); 另一方面可能是網(wǎng)速慢, 服務(wù)器與用戶(hù)間傳輸時(shí)間久. 當(dāng)大量這樣的情況出現(xiàn)時(shí),就有連接池連接不足, 造成頁(yè)面假死現(xiàn) 象. 所以在內(nèi)容多流量大的網(wǎng)站需慎用.

          3.翻頁(yè)相關(guān)的類(lèi):

          1.Page: 與具體 ORM 實(shí)現(xiàn)無(wú)關(guān)的分頁(yè)參數(shù)及查詢(xún)結(jié)果封裝

                 2. PropertyFilter: 與具體 ORM 實(shí)現(xiàn)無(wú)關(guān)的屬性過(guò)濾條件封裝類(lèi), 主要記錄頁(yè)面中簡(jiǎn)單的搜索過(guò)濾條件

                 3. HibernateDao: 擴(kuò)展 SimpleHibernateDao, 功能包括分頁(yè)查詢(xún), 按屬性過(guò)濾條件列表:

                        1.不帶任何查詢(xún)條件時(shí), 需要使用的方法:

                               --countCriteriaResult

                               --setPageParameter

                               --findPage(Page<T> page, Criterion...criterions)

          HibernateWebUtils

          分頁(yè):

          不帶查詢(xún)的分頁(yè)

          employee-list-1.do --> Action --> Service --> DAO   

          2.查詢(xún)條件的翻頁(yè):使用jQuery 的一個(gè)thickbox 插件完成查詢(xún)頁(yè)面的彈出

           1.jQuery的分頁(yè)插件

           2.在獲取第一頁(yè)的內(nèi)容以后,如何 把查詢(xún)條件帶到第二頁(yè)

               --把封裝了查詢(xún)條件的List放到session域中,下一次從session中取。

                 --把查詢(xún)條件放在隱藏域中

          3.攜帶查詢(xún)條件

           使用jQuery提供的serialize()方法攜帶查詢(xún)條件(行不通)

             var url = this.href + “&” + $(“:hidden”).serialize();

              window.location.href=url;

           注意:上述方法在第一次不能起作用: 即不能再第一次把隱藏域中的參數(shù)帶過(guò)去, 因?yàn)樵诘谝淮吸c(diǎn)擊該鏈接時(shí), href 的屬性值已經(jīng)固定了, 不能再發(fā)生變化,

          而第二次點(diǎn)擊時(shí), 因?yàn)榈谝淮我呀?jīng)改變了該屬性的值, 所以好用

          所以必須在第一次點(diǎn)擊該鏈接之前讓 this.href = this.href + "&" + $(":hidden").serialize(); 起作用

          解決方案:

          $("#criteria").attr("href", $("#criteria").attr("href") + "&" + $(":hidden").serialize());

          今天就到這兒,明天continue!

          posted @ 2010-03-06 23:50 d66380022| 編輯 收藏



              今天接著昨天的整合,由佟老師總指揮,基于xml配置的Action,這涉及struts整合.今天先把登陸實(shí)現(xiàn)了,最后使用兩個(gè)插件把員工信息錄入功能 實(shí)現(xiàn),頁(yè)面效果在當(dāng)今還是主流的。

          2.服務(wù)器端驗(yàn)證
            1.查詢(xún)數(shù)據(jù)庫(kù),得到信息
            2.若用戶(hù)名不存在,則提示用戶(hù)名不存在
                     errors.add("",new ActionMessage(" "));
               若用戶(hù)名和密碼不匹配,則提示用戶(hù)名和密碼不匹配
               若errors.isEmpty()為true,則登陸,并將其保存在session中,
                   
               方法:
                  使用 struts 的聲明式異常來(lái)轉(zhuǎn)發(fā)頁(yè)面和顯示提示信息.
                  
                  詳細(xì)解決:
                  由 EmployeeService 的方法拋出異常, Action 不進(jìn)行處理, 而由 struts 框架根據(jù)當(dāng)前的 action 節(jié)點(diǎn)配置來(lái)進(jìn)行相應(yīng)的處理:
                         如果出現(xiàn)對(duì)應(yīng)的異常, 會(huì)利用當(dāng)前 excpeption 配置節(jié)點(diǎn)的 key 生成對(duì)應(yīng)的 ActionMessage 對(duì)象, 再放入 ActionMessages 中,
                        把頁(yè)面派發(fā)到 input 對(duì)應(yīng)的頁(yè)面中,  在前臺(tái)頁(yè)面利用 <html:errors property="key"> 進(jìn)行顯示      
                  

          4.ReflectUtils類(lèi)的作用:
            1.convertValue:beanUtils1.8提供了DateConverter
            2. PropertyUtils: 提供了讀寫(xiě) Bean 的屬性的方法
            3. fetchElementPropertyToString: StringUtils.join 方法可以把指定集合的元素用分隔符鏈接起來(lái)
            4. getSuperClassGenricType: ParameterizedType


          5.SimpleHibernateDao 類(lèi)介紹:SimpleHibernateDao<T,PK extends Serializable> 說(shuō)明:該類(lèi)在service層中使用,
               T:Dao操作的對(duì)象類(lèi)型
               PK:主鍵類(lèi)型
            1.getIdName():
            2.distinct(List list):通過(guò) Set 將不唯一的對(duì)象列表唯一化,主      要用于 HQL/Criteria 預(yù)加載關(guān)聯(lián)集合形成重復(fù)記    錄, 又不方便使用 distinct 查詢(xún)語(yǔ)句時(shí)
               
          6.CreateCriteria:
               createQuery(String queryString, Object... values)
          7. ReflectionUtils
              1 convertValue: beanUtils 1.8 提供了 DateConverter
              2. PropertyUtils: 提供了讀寫(xiě) Bean 的屬性的方法
              3. fetchElementPropertyToString: StringUtils.join 方法可以把指定集合的元素用分隔符鏈接起來(lái)
              4. getSuperClassGenricType: ParameterizedType

          8. SimpleHibernateDao:
              1. getIdName: ClassMetadata 該類(lèi)可以獲取到對(duì)應(yīng)的 class 的 hbm 配置文件的幾乎所有信息
              2. 標(biāo)準(zhǔn)查詢(xún):
                  -->創(chuàng)建 Criteria 對(duì)象: session.createCriteria(clazz);
                  -->為 Criteria 對(duì)象添加查詢(xún)條件: criteria.add(criterion);
                  -->獲取 Criterion 對(duì)象: 通過(guò) Restrictions 來(lái)獲取

          9.struts的導(dǎo)航組件:struts-menu的使用方法:
               1. 把 struts-menu.war 文件復(fù)制到服務(wù)器下, 運(yùn)行
              2. 在 struts-config.xml 文件中加入 struts-menu 插件
              3. 復(fù)制 struts-menu\WEB-INF\menu-config.xml 到 conf 目錄下.
              4. 復(fù)制 struts-menu-2.4.3\struts-menu-2.4.3.jar 到 classpath 下
              5. struts-menu 的去除默認(rèn)背景色問(wèn)題:
                  ①. 通過(guò) jQuery: 把 left.jsp 頁(yè)面的第三個(gè) table 的 style="background-color:lightgrey" 屬性清除
                  ②. 通過(guò)修改默認(rèn)的配置文件: 修改 struts-menu=2.4.3.jar net.sf.navigator.displayer 包的的 DisplayerStrings.properties 文件,
                            把  dd.menu.top=<table width\="150" style\="background-color\:lightgrey" cellpadding\=1 cellspacing\=1><tr align\=left><td nowrap class\=normal><b>
                      的 style\="background-color\:lightgrey" 去除


          10.員工錄入前臺(tái)驗(yàn)證,用的是jQuery的插件jquery-validate

          5.對(duì)輸入的登陸名進(jìn)行ajax驗(yàn)證:驗(yàn)證該登錄名在數(shù)據(jù)庫(kù)中是否存在。

          11.在loginname字段已經(jīng)給出對(duì)應(yīng)的“該登錄名已經(jīng)被占用”的基礎(chǔ)上,再一次點(diǎn)擊“提交”按鈕,則需要進(jìn)行服務(wù)器端驗(yàn)證,再返回錄入頁(yè)面

          12.若驗(yàn)證都通過(guò),則需要進(jìn)行服務(wù)器端的驗(yàn)證。

          13.員工的錄入操作:
              1). 顯示員工的錄入頁(yè)面
                  ①. 查詢(xún)數(shù)據(jù)庫(kù), 獲取所有的部門(mén)信息和職位信息, 并在頁(yè)面上加以顯示
                  ②. 頁(yè)面使用 jQuery 的 validator 插件作為表單的前臺(tái)驗(yàn)證
                      1. 在當(dāng)前 jsp 頁(yè)面中導(dǎo)入 jquery.validate.js
                      2. 為需要驗(yàn)證的字段添加 class 屬性, 在其中指定驗(yàn)證規(guī)則, 獲取添加 minlength 等屬性

            今天就到此了!   

          posted @ 2010-03-05 23:16 d66380022| 編輯 收藏

              

                                       SVN版本控制

          今天有毛偉老 師講版本控制,版本控制(Revision control)是維護(hù)工程藍(lán)圖的標(biāo)準(zhǔn)做法,能追蹤工程藍(lán)圖從誕生一直到定案的過(guò)程,確保由不同人員所編輯的同一文 件檔案都能得以同步。最新的Spring3.0已經(jīng)提供了更高級(jí)的版本控制,但是國(guó)內(nèi)沒(méi)幾個(gè)用,先掌握SVN,以后有機(jī)會(huì)再用高級(jí)的。下面詳細(xì)總結(jié) 一下:

          1.Subversion介紹:是一種開(kāi)放源碼的全新版本控制系統(tǒng)是新一代的版本控 制工具,他不但提供了常見(jiàn)的比較、修補(bǔ)、標(biāo)記、提交、回復(fù)和分支功能,適于 Web 開(kāi)發(fā)和其他 在傳統(tǒng)方式下未采納版本控制功能的領(lǐng)域

          2.svn安裝

           1.運(yùn)行svnserver端,運(yùn)行setup.exe,OK

           檢驗(yàn)安裝好了:

           運(yùn)行dos窗口 ,輸入svn ,回車(chē),出現(xiàn)svn help 提示,安裝成功

           2.svn服務(wù)器啟動(dòng)(我安裝目錄:D:"Program Files"Subversion"bin

           cmd

           svn根目錄 svnserve -d D:"Program Files"Subversion"bin>svnserve –d

          是否啟動(dòng)成功

          .當(dāng)前是否啟動(dòng)3690端口號(hào)

          3.版本庫(kù)目錄介紹:

            dav目錄:是提供給Apachemod_dav_svn使用的目錄,讓它們存儲(chǔ)內(nèi)部數(shù)據(jù),當(dāng)前我們使用的版本沒(méi)有這個(gè)目錄(與你下載的Subversion版 本有關(guān)系)。

              db目錄:就是所有版本控制的數(shù)據(jù)存放文件。

              hooks目錄:放置hook腳本文件的目錄。

              locks目錄:用來(lái)放置Subversion文件庫(kù)鎖定數(shù)據(jù)的目錄,用來(lái)追蹤存取文件庫(kù)的客戶(hù)端。

              format文件是一個(gè)文本文 件,里面只放了一個(gè)整數(shù),表示當(dāng)前文件庫(kù)配置的版本號(hào)。

              conf目錄:是這個(gè)倉(cāng)庫(kù)的配置文件(倉(cāng)庫(kù)的用戶(hù)訪問(wèn)帳號(hào)、權(quán)限等)。

          4.創(chuàng)建版本庫(kù)、導(dǎo)入、檢出

          1、創(chuàng)建版本庫(kù)

                 右鍵--->TortoiseSVN--->Create repository here

          2.導(dǎo)

                 右鍵--->TortoiseSVN--->導(dǎo)入(一般在項(xiàng)目創(chuàng)建初始化數(shù)據(jù)時(shí)使用,當(dāng)然也可用于把任意文件或目錄從外部導(dǎo)入到指定倉(cāng)庫(kù)中)

          3.檢出(提醒:檢出項(xiàng)目后客戶(hù)端文件夾 的變化.svn

                右鍵--->SVN Checkout...

          5.SVN基本功能:

          清理、更新到指定版本

          日志記錄、提交日志限定必填。

          鎖定、解鎖:基本權(quán)限控制(可以限制被鎖定的文件只能由被鎖定用戶(hù)修改提交)

          誤刪除恢復(fù)操作:直接重更新或通過(guò)日志列表

          單個(gè)文件過(guò)濾:選中文件-->TortoiseSVN---->增加到忽略列表

          導(dǎo)出:使項(xiàng)目脫離版本控制。

          6.總結(jié)SVN的使用:

          在其文件夾上右鍵 "SVN Checkout..."寫(xiě)上對(duì)應(yīng)SVN地址

           在其文件夾上右鍵 "SVN Update" 來(lái)更新我們的本地版本

          在其文件夾上右鍵 "SVN Commit" 來(lái)提交我們的本地版本

           在其文件夾上右鍵 "TortoiseSVN" --> "Export..." 來(lái) 發(fā)布、導(dǎo)出

          在其文件上右鍵 "TortoiseSVN" --> 增加(A)" 來(lái)向版本庫(kù)中增加一 個(gè)受版本控制的文件

          7.關(guān)于SVN的各種顏色提示說(shuō)明:



          CVS客戶(hù)端的使用基本上同SVN客戶(hù)端一樣,更簡(jiǎn)單些,就不多說(shuō)了



          posted @ 2010-03-03 00:02 d66380022| 編輯 收藏

                                   spring對(duì)事務(wù)的管理

             今天講了Spring的事務(wù),及對(duì)hibernate的整合,對(duì)struts的整合。以后還得學(xué)習(xí),記不住,用到再整理。

          1.事務(wù)的四大特點(diǎn):

             atomic:要么都發(fā)生,要么都不發(fā)生。

             consistent:數(shù)據(jù)應(yīng)該不被破壞。

             Isolated:用戶(hù)間操作不相混淆

             Durable:永久保存

          2.介紹spring的事務(wù)管理器

           spring沒(méi)有直接管理事務(wù),而是將管理事務(wù)的責(zé)任委

           托給某個(gè)特定平臺(tái)的事務(wù)實(shí)現(xiàn)。

          3.Hibernate事務(wù):

                 <bean id="transactionManager"

                       class="…HibernateTransactionManager">

                       <property name="sessionFactory" ref="sf" />

                 </bean>

          其中sessionFactory屬性必須和一個(gè)HibernateSessionFactory綁定

             HibernateTransactionManager把事務(wù)管理委托給一個(gè)從Hibernate

                 session 中取得的net.Transaction對(duì)象。當(dāng)一個(gè)事務(wù)成功完成時(shí),

                 HibernateTransactionManager將調(diào)用Transaction對(duì)象的commit()

                 方法。類(lèi)似的,當(dāng)一個(gè)事務(wù)失敗時(shí),Transaction對(duì)象的rollback()

                 法將被調(diào)用。

          4.事務(wù)屬性

             1.隔離級(jí)別:設(shè)定事務(wù)的并發(fā)程度

                  臟讀:一個(gè)事務(wù)讀取了另一個(gè)事務(wù)改寫(xiě)但還未

                         提交的數(shù)據(jù),如果這些數(shù)據(jù)被回滾,則

                         讀到的數(shù)據(jù)是無(wú)效的。

                  不可重復(fù)讀:一個(gè)事務(wù)執(zhí)行相同的查詢(xún)兩次或兩次以

                                上,但每次查詢(xún)結(jié)果都不同。

                  幻讀:一個(gè)事務(wù)讀取了幾行記錄后,另一個(gè)事務(wù)插入一

                         些記錄,幻讀就發(fā)生了。再后來(lái)的查詢(xún)中,第一

                         個(gè)事務(wù)就會(huì)發(fā)現(xiàn)有些原來(lái)沒(méi)有的記錄。

             2.只讀               若對(duì)數(shù)據(jù)庫(kù)只進(jìn)行讀操作,可設(shè)置事務(wù)只讀的屬性,使用某些優(yōu)化措施。數(shù)據(jù)庫(kù)會(huì)進(jìn)行優(yōu)化處理。若使用hibernate作為持久化機(jī)制,聲明一個(gè)只讀事務(wù)會(huì)使hibernateflush模式設(shè)置為FLUSH_NEVER。避免不必要的數(shù)據(jù)同步,將所有更新延遲到事務(wù)的結(jié)束。

             3.事務(wù)超時(shí) 若事務(wù)在長(zhǎng)時(shí)間的運(yùn)行,會(huì)不必要的占用數(shù)據(jù)庫(kù)資源。設(shè)置超時(shí)后,會(huì)在指定的時(shí)間片回滾。將那些具有可能啟動(dòng)新事務(wù)的傳播行為的方法的事務(wù)設(shè)置超時(shí)才有意義

          5.CMT:容器管理事務(wù)

             BMTbean 管理事務(wù)

          <tx:annocation-driven transaction-manager="hibernateTransactionManager"/>

          類(lèi)上加@Transactional

          6.總結(jié):

          事務(wù)策略

          在業(yè)務(wù)中不能加try catch ,因?yàn)?/span>Spring的環(huán)繞通知在出現(xiàn)異常時(shí)會(huì)回滾事務(wù),你已捕獲,就會(huì)提交事務(wù)(任何情況下)

          7.Spring整合Struts

           1.web服務(wù)器啟動(dòng)時(shí),完成Spring容器的實(shí)例化。plugin|listener

           2.struts中的action交給Spring容器管理。

           3.基本操作

           注意:在spring上下文中,作為普通bean配置action,action的不能用id,只能用name,

          因?yàn)樾枰?/span>struts-config.xml文件中actionpath一致.

          bean.xml

          <bean name="/loginAction" class="..LoginAction">

           <property name="xxxService" ref="xxxService" />

          </bean>

          posted @ 2010-03-01 01:04 d66380022| 編輯 收藏

                今天主要是AOP編程,徐老師先講了原理,由淺入深,最 后讓開(kāi)發(fā)由aspectJ來(lái)完成,使開(kāi)發(fā)更簡(jiǎn)單,收獲蠻大

          1.Aspect術(shù)語(yǔ)

           通知:切面的實(shí)際實(shí)現(xiàn),他通知系統(tǒng)新的行為。如在日志通知包含了實(shí)

                現(xiàn)日志功能的代碼,如向日志文件寫(xiě)日志。通知在連接點(diǎn)插入 到應(yīng)用系統(tǒng)中。

          連接點(diǎn)::應(yīng)用程序執(zhí)行過(guò)程中插入切面的地點(diǎn),可以是 方法調(diào)用,異常拋出,或者      要修改的字段。

          切入點(diǎn):定義了通知應(yīng)該應(yīng)用在哪些連接點(diǎn), 通知可以應(yīng)用到AOP框架支持的任何         連接點(diǎn)。

                    

          引入:不變?cè)创a的情況下,為類(lèi)添加新方法 和屬性。

          目標(biāo)對(duì)象::被通知的對(duì)象。既可以是你編寫(xiě)的類(lèi)也可以是 第三方類(lèi)。

          代理對(duì)象:嶄新的對(duì)象,將通知應(yīng)用到目標(biāo)對(duì) 象后創(chuàng)建的對(duì)象,應(yīng)用系統(tǒng)的其他部              分不用為了支持代理對(duì)象而 改變。

          織入:將切面應(yīng)用到目標(biāo)對(duì)象從而創(chuàng)建一個(gè)新代理對(duì) 象的過(guò)程。織入發(fā)生在目標(biāo)

                        對(duì)象生命周期的多個(gè)點(diǎn)上:

                         編譯期:切面在目標(biāo)對(duì)象編譯時(shí)織入.這需要一個(gè)特殊的編譯器.

                         類(lèi)裝載期:切面在目標(biāo)對(duì)象被載入JVM時(shí)織入.這需要一個(gè)特殊的類(lèi)載入器.

                         運(yùn)行期:切面在應(yīng)用系統(tǒng)運(yùn)行時(shí)織入.

           4.切入點(diǎn):定義了通知應(yīng)該應(yīng)用在哪些連接點(diǎn),通知可以應(yīng)用到AOP框架支持的任何連接點(diǎn)。

          兩種:jdk動(dòng)態(tài)代理(接口,松耦合),cglib(對(duì)類(lèi)代理)

          2.方法介紹

           .通知類(lèi)型

           1.前置通知

             public interface MethodBeforeAdvice{

                 void before(Method m,Object[]

                           os ,Object target){

                  }

             }

             該接口提供了獲得目標(biāo)方法、參數(shù)和目標(biāo)對(duì)象的機(jī)會(huì)。不能夠改變運(yùn)行時(shí)參數(shù),即不能替換參數(shù)對(duì)象和目 標(biāo)對(duì)象。

             注意在方法結(jié)束后不返回任何值東西。原因是該接口返回后,目標(biāo)方法將會(huì)被調(diào)用,應(yīng)該返回目標(biāo)對(duì)象的 返回值。該接口唯一能

             阻止目標(biāo)方法被調(diào)用的途徑是拋出異常或(System.exit())

           2.動(dòng)態(tài)代理對(duì)象ProxyFactoryBean是一個(gè)在BeanFactory中顯式創(chuàng)建代理對(duì)象的中心類(lèi),可以給它一個(gè)

           要實(shí)現(xiàn)的接口、一個(gè)要代理的目標(biāo)對(duì)象、一個(gè)

           要織入的通知,并且他將創(chuàng)建一個(gè)嶄新的代理

           對(duì)象。

           3.后置通知

              同前置通知類(lèi)似。

                  public interface AfterReturningAdvice{

                       public void afterReturning(Object returnValue,Method

                       m,Object[] os,Object target);

                  }

             多了一個(gè)返回值。

           4.環(huán)繞通知

                 public interface MethodInterceptor extends Interceptor{

                     Object invoke(MethodInvocation invocation);

                 }

                 該接口同前兩種通知有兩個(gè)重要區(qū)別:1.該通知能夠控制目標(biāo)方法

                 是否真的被調(diào)用。通過(guò)invocation.proceed()方法來(lái)調(diào)用。

                 2.該通知可以控制返回的對(duì)象。可以返回一個(gè)與proceed()方法返回對(duì)象完全不同的對(duì)象。但要謹(jǐn)慎使用。

                                                                   

           5.異常通知

                  public interface ThrowsAdvice{

                 }

                 該接口為標(biāo)識(shí)性接口,沒(méi)有任何方法,但實(shí)現(xiàn)該接口的類(lèi)必須要有如下形

                 式的方法:

                 void afterThrowing(Throwable throwable);

                 void afterThrowing(Method m,Object[] os,Object

                 target,Throwable throwable);

                 第一個(gè)方法只接受一個(gè)參數(shù):需要拋出的異常。

                 第二個(gè)方法接受異常、被調(diào)用的方法、參數(shù)以及目標(biāo)對(duì)象。

           .創(chuàng)建切入點(diǎn)方法

                  1. 切入點(diǎn)根據(jù)方法和類(lèi)決定何處 織入通知。ClassFilter接口決定了一個(gè)類(lèi)

                  是否符合通知的要求:

                  public interface ClassFilter{

                       boolean matches(Class clazz);

                  }

                  實(shí)現(xiàn)該接口的類(lèi)決定了以參數(shù)傳遞 進(jìn)來(lái)的類(lèi)是否應(yīng)該被通知。實(shí)現(xiàn)該接

                  口的類(lèi)一般根據(jù)類(lèi)名決定,但不一 定必須如此。

                 注意: 為減少系統(tǒng)負(fù)擔(dān),盡量使用靜態(tài)切入點(diǎn)

                 

                  2.定義切入點(diǎn)      spring提供了Advisor類(lèi)。他把通知和切入點(diǎn)組合到一個(gè)對(duì)象中。更確切地說(shuō)PointcutAdvisor提供了這些功 能

          3.使用aspectJ開(kāi)發(fā)

                 1.添加類(lèi)庫(kù):aspectjrt.jaraspectjweaver.jar

                 2.添加aop schema.

                 3.定義xml元素:<aop:aspectj-autoproxy>

                 4.編寫(xiě)java類(lèi),并用@Aspect注解成通知

                      AspectJ 支持 5 種類(lèi)型的通知注解:

                  @Before: 前置通知, 在方法執(zhí)行之前執(zhí)行

                  @After: 后置通知, 在方法執(zhí)行之后執(zhí)行

                  @AfterRunning: 返 回通知, 在方法 返回結(jié)果之后執(zhí)行

                  @AfterThrowing: 異 常通知, 在方法 拋出異常之后

                  @Around: 環(huán)繞通知, 圍繞著方法執(zhí)行

                 配置成普通bean元素即可.

              注意:

              JoinPoint參數(shù)可訪問(wèn)連接點(diǎn)細(xì)節(jié),入方法名和參數(shù)等.

          今天知識(shí)點(diǎn)蠻多的,對(duì)面試挺有用的,好好掌 握!

              


          posted @ 2010-02-28 01:11 d66380022| 編輯 收藏

                                                Spring

           對(duì)這個(gè)框架并不陌生,spring是一個(gè)開(kāi)源的控制反轉(zhuǎn)(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目得是簡(jiǎn)化企業(yè)開(kāi)發(fā)...

          1.為Spring添加jar支持

          2.Spring1.xml + 反射

                 2.不需要實(shí)例化

                    3.不需要set方法

           以前 至上而下, 按部就班

                        之下而上,反的

          3. bean的生命周期

                 bean被載入到容器中時(shí),他的生命周期就開(kāi)始

                 了。bean工廠在一個(gè)bean可以使用前完成很多

                 工作:

                 1.容器尋找bean的定義信息并實(shí)例化。

                 2.使用依賴(lài)注入,springbean定義信息配置bean的所有屬性。

                 3.bean實(shí)現(xiàn)了BeanNameAware接口,工廠調(diào)用BeansetBeanName

                  ()方法傳遞beanID

                 4.bean實(shí)現(xiàn)了BeanFactoryAware接口,工廠調(diào)用setBeanFactory()

                    方法傳入工廠自身。

                 5.BeanPostProcessorbean關(guān)聯(lián),則它們的

                    postProcessBeforeInitialization()方法被調(diào)用。

                 6.bean指定了ini-method方法、,它將被調(diào)用。

                 7.最后,若有BeanPostProcessorbean關(guān)聯(lián),則它們的

                    postProcessAfterInitialization()方法被調(diào)用、。

          4.set注入的缺點(diǎn):

           無(wú)法清晰表達(dá)哪些屬性是必須的,哪些是可選

              的,構(gòu)造注入的優(yōu)勢(shì)是通過(guò)構(gòu)造強(qiáng)制依賴(lài)關(guān)系,不可能實(shí)例化不

              完全的或無(wú)法使用的bean

          5.自動(dòng)裝配

             <bean id=" " class="" autowire="autowire 類(lèi)型">

              有四種自動(dòng)裝配類(lèi)型:

              1.byName:尋找和屬性名相同的bean,若找不到,則裝不上。

              2.byType:尋找和屬性類(lèi)型相同的bean,找不到,裝不上,找到多個(gè)拋異常。

              3.constructor:查找和bean的構(gòu)造參數(shù)一致的一個(gè)或

                多個(gè)bean,若找不到或找到多個(gè),拋異常。按照參數(shù)的類(lèi)型裝配 

              4.autodetect: (3) 或者(2)方式選一個(gè)。不確定

                 性的處理與(3)(2)一致。

          注意:

               spring2.5提供了<context:annotation-config />配置.

               該配置可激活在類(lèi)中探測(cè)到的各種注解,@Required @Autowire @PostConstrct @PreDestroy @Resource @EJB @PersistenceContext @WebServiceRef等等,

               也可以選擇為這些注解激活單獨(dú)的后處理器.

          6.屬性的外部化

           分散配置

           將配置文件分成幾個(gè)分散的配置文件。如數(shù)據(jù)源。

             <bean class="...PropertyPlaceholderConfigurer">

                  <property name="locations">

                       <list>

                            <value>jdbc.properties</value>

                            <value>securtiy.properties</value>

                         </list>

                    </property>

              </bean>

             當(dāng)然在Spring2.5可以簡(jiǎn)化為

             <context:property-placehoder location>

          7.AOP

          有一些模塊是每個(gè)系統(tǒng)都需要的,切面是系統(tǒng) 模塊化的一個(gè)切面或領(lǐng)域。如日志記錄。不改變?cè)创a,還給類(lèi)增加新的功能

           2.連接點(diǎn):應(yīng)用程序執(zhí)行過(guò)程中,可以應(yīng)用切面的地點(diǎn),可以是方法調(diào)用,異常拋出,或者要修改的

                         字段。

           3.通知:切面的實(shí)際實(shí)現(xiàn),他通知系統(tǒng)新的行為。

           4.切入點(diǎn):定義了通知應(yīng)該應(yīng)用在哪些連接點(diǎn),通知可以應(yīng)用到AOP框架支持的任何連接點(diǎn)。

           5.引入:為類(lèi)添加新方法和屬性。

           6.目標(biāo)對(duì)象:被通知的對(duì)象。既可以是你編寫(xiě)的類(lèi)也可以是第三方類(lèi)。

           7.代理:將通知應(yīng)用到目標(biāo)對(duì)象后創(chuàng)建的對(duì)象,應(yīng)用系統(tǒng)的其他部分不用為了支持代理對(duì)象而

                      改變。

           8.織入:將切面應(yīng)用到目標(biāo)對(duì)象從而創(chuàng)建一個(gè)新代理對(duì)象的過(guò)程。織入發(fā)生在目標(biāo)

                      對(duì)象生命周期的多個(gè)點(diǎn)上:

                      編譯期:切面在目標(biāo)對(duì)象編譯時(shí)織入.這需要一個(gè)特殊的編譯器.

                      類(lèi)裝載期:切面在目標(biāo)對(duì)象被載入JVM時(shí)織入.這需要一個(gè)特殊的類(lèi)載入器.

                      運(yùn)行期:切面在應(yīng)用系統(tǒng)運(yùn)行時(shí)織入.

          今天到此結(jié)束,明天繼續(xù)!

          posted @ 2010-02-26 23:02 d66380022| 編輯 收藏

          UML

          今天學(xué)習(xí)UMLumlunified modeling language,是一種基于面向?qū)ο蟮目梢暬UZ(yǔ)言. 老徐講了很多與開(kāi)發(fā)有關(guān)的東西,很不錯(cuò),還介紹了軟件的發(fā)展等,開(kāi)始整理下

          1. UML 采用了一組形象化的圖形(如類(lèi)圖)符號(hào)作為建模語(yǔ)言, 使用這些符號(hào)可以形象地描述系統(tǒng)的各個(gè)方面。oop:ooa(分析) + ood(設(shè)計(jì))

          2.軟件的生命周期

          瀑布模型:

          需求分析(可行性分析:)

          1.時(shí)間可行性

          2.技術(shù)可行性

          3.經(jīng)濟(jì)可行性

          系統(tǒng)分析和設(shè)計(jì)(系分)

          實(shí)現(xiàn)

          測(cè)試

          維護(hù)

          角色分配:項(xiàng)目經(jīng)理技術(shù)總監(jiān)代碼人員測(cè)試人員 db管理人員系統(tǒng)分析人員

          project leader 系統(tǒng)架構(gòu)師

          3. 統(tǒng)一軟件開(kāi)發(fā)過(guò)程(Rational Unified Process,RUP): 一個(gè)通用的軟件流程框架, 以架構(gòu)為中心, 用例驅(qū)動(dòng)的迭代化開(kāi)發(fā)流程.

          4.uml:圖(圖元)

          UML 中一共有 10 種圖:

          類(lèi)圖**** 對(duì)象圖 包圖 組件圖 部署圖 用例圖** 時(shí)序圖*** 協(xié)作圖 狀態(tài)圖 活動(dòng)圖*

          5.用例圖

          是從軟件需求分析到最終實(shí)現(xiàn)的第一步, 它是從客戶(hù)的角度來(lái)描述系統(tǒng)功能.

          用例圖包含 3 個(gè)基本組件: 參與者(Actor), 用例(Use Case),關(guān)系

          6.類(lèi)圖

          類(lèi)圖是面向?qū)ο笙到y(tǒng)建模中最常用的圖. 是定義其他圖的基礎(chǔ).

          類(lèi)圖主要是用來(lái)顯示系統(tǒng)中的類(lèi), 接口以及它們之間的關(guān)系.

          類(lèi)圖包含的主要元素有類(lèi), 接口和關(guān)系. 其中關(guān)系有關(guān)聯(lián)關(guān)系, 泛化關(guān)系, 依賴(lài)關(guān)系和實(shí)現(xiàn)關(guān)系. 在類(lèi)圖中也可以包含注釋和約束.

          7.類(lèi)之間的幾種關(guān)系:實(shí)現(xiàn)依賴(lài)關(guān)聯(lián)聚合組成

          實(shí)現(xiàn)關(guān)系: UML , 實(shí)現(xiàn)關(guān)系用來(lái)表示類(lèi)與接口之間的實(shí)現(xiàn)關(guān)系.

          依賴(lài)關(guān)系:對(duì)于兩個(gè)相對(duì)獨(dú)立的系統(tǒng),當(dāng)一個(gè)系統(tǒng)負(fù)責(zé)構(gòu)造另一個(gè)系統(tǒng)的實(shí)例,或者依賴(lài)另一個(gè)系統(tǒng)的服務(wù)時(shí),這兩個(gè)系統(tǒng)之間體現(xiàn)為依賴(lài)關(guān)系.

          關(guān)聯(lián):對(duì)于兩個(gè)相對(duì)獨(dú)立的系統(tǒng),當(dāng)一個(gè)系統(tǒng)的實(shí)例與另一個(gè)系統(tǒng)的一些特定實(shí)例存在固定的對(duì)應(yīng)關(guān)系時(shí),這兩個(gè)系統(tǒng)之間為關(guān)聯(lián)關(guān)系。

          聚合:聚合關(guān)聯(lián)是一種特殊的關(guān)聯(lián). 它表示類(lèi)間的關(guān)系是整體與部分的關(guān)系.

          組合關(guān)系: 整件擁有部件的生命周期, 所以整件刪除時(shí), 部件一定會(huì)跟著刪除. 而且, 多個(gè)整件不可以同時(shí)共享同一個(gè)部件。

          8. 時(shí)序圖

          時(shí)序圖用于描述對(duì)象之間的傳遞消息的時(shí)間順序, 即用例中的行為順序.

          當(dāng)執(zhí)行一個(gè)用例時(shí), 時(shí)序圖中的每條消息對(duì)應(yīng)了一個(gè)類(lèi)操作或者引起轉(zhuǎn)換的觸發(fā)事件.

          對(duì)象: 時(shí)序圖中對(duì)象使用矩形表示, 并且對(duì)象名稱(chēng)下有下劃線. 將對(duì)象置于時(shí)序圖的頂部說(shuō)明在交互開(kāi)始時(shí)對(duì)象就已經(jīng)存在了. 如果對(duì)象的位置不在頂部, 表示對(duì)象是在交互的過(guò)程中被創(chuàng)建的.

          生命線:生命線是一條垂直的虛線. 表示時(shí)序圖中的對(duì)象在一段生命周期內(nèi)的存在. 每個(gè)對(duì)象底部中心的位置都帶有生命線.

          9. 活動(dòng)圖

          UML , 活動(dòng)圖本質(zhì)上就是流程圖. 它用于描述系統(tǒng)的活動(dòng), 判定點(diǎn)和分支等.

          10.臨時(shí) 持久化 游離 刪除

          11.狀態(tài)圖

          狀態(tài)圖: 通過(guò)建立對(duì)象的生存周期模型來(lái)描述對(duì)象隨時(shí)間變化的動(dòng)態(tài)行為.

          狀態(tài): 用圓角矩形表示. 狀態(tài)名稱(chēng)表示狀態(tài)的名字, 通常用字符串表示. 一個(gè)狀態(tài)的名稱(chēng)在狀態(tài)圖所在的上下文中應(yīng)該是唯一的.

          12.包圖:

          由包和包之間的關(guān)系組成. 包的圖標(biāo)就如同一個(gè)帶標(biāo)簽的文件夾.

          13.組件圖

          用來(lái)建立系統(tǒng)中各組件之間的關(guān)系, 各組件通過(guò)功能組織在一起.

          14.部署圖

          用來(lái)幫助開(kāi)發(fā)者了解軟件中的各個(gè)組件駐留在什么硬件位置, 以及這些硬件之間的交互關(guān)系。

          今天就講了這些知識(shí),挺瑣碎的,關(guān)鍵是看懂就OK了!

          posted @ 2010-02-25 23:29 d66380022| 編輯 收藏
          主站蜘蛛池模板: 剑河县| 贡觉县| 乐平市| 扶绥县| 故城县| 曲松县| 罗源县| 剑川县| 麻阳| 台南市| 定南县| 德钦县| 共和县| 白沙| 定西市| 旬邑县| 聂荣县| 江西省| 西乌珠穆沁旗| 镇远县| 巴东县| 南昌县| 武川县| 达尔| 资中县| 方山县| 东山县| 肥乡县| 湘潭市| 横山县| 西乌珠穆沁旗| 镇坪县| 灯塔市| 湘阴县| 广宁县| 平昌县| 盐源县| 托克逊县| 泗洪县| 铜陵市| 西峡县|