<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    拾貝殼

    走過(guò)的路
    隨筆 - 39, 文章 - 1, 評(píng)論 - 14, 引用 - 0
    數(shù)據(jù)加載中……

    2006年9月19日

    System.getProperty()參數(shù)大全

    System.getProperty()參數(shù)大全  
  •   
  • java.version            Java Runtime Environment version  
  • java.vendor            Java Runtime Environment vendor  
  • java.vendor.url            Java vendor URL  
  • java.home            Java installation directory  
  • java.vm.specification.version                    Java Virtual Machine specification version  
  • java.vm.specification.vendor                    Java Virtual Machine specification vendor  
  • java.vm.specification.name                    Java Virtual Machine specification name  
  • java.vm.version            Java Virtual Machine implementation version  
  • java.vm.vendor            Java Virtual Machine implementation vendor  
  • java.vm.name            Java Virtual Machine implementation name  
  • java.specification.version                Java Runtime Environment specification version  
  • java.specification.vendor             Java Runtime Environment specification vendor  
  • java.specification.name        Java Runtime Environment specification name  
  • java.class.version                        Java class format version number  
  • java.class.path                  Java class path  
  • java.library.path                        List of paths to search when loading libraries  
  • java.io.tmpdir                Default temp file path  
  • java.compiler            Name of JIT compiler to use  
  • java.ext.dirs            Path of extension directory or directories  
  • os.name                Operating system name  
  • os.arch                Operating system architecture  
  • os.version            Operating system version  
  • file.separator            File separator ("/" on UNIX)  
  • path.separator            Path separator (":" on UNIX)  
  • line.separator            Line separator ("\n" on UNIX)  
  • user.name            User's account name  
  • user.home            User's home directory  
  • user.dir                User's current working directory 
  • posted @ 2008-02-18 17:43 binge 閱讀(697) | 評(píng)論 (0)編輯 收藏

    axis userguide(3)

    服務(wù)類型

    在axis中有4中服務(wù)類型
    RPC服務(wù)采用soap rpc的標(biāo)準(zhǔn),and also the SOAP "section 5" encoding.
    Document 服務(wù)沒(méi)有采用任何編碼(所以你在組裝時(shí)不會(huì)看到復(fù)雜對(duì)象的序列化以及soap-style數(shù)組),但是仍然作了xml和java對(duì)象的互映射。
    Wrapped服務(wù)和Document服務(wù)類似
    Message 服務(wù)接受和返回soap Envelope中的任意的xml而不需要mapping/data得榜定。如果你想處理來(lái)自外部的原始的xml,可以采用Message 服務(wù)。

    RPC服務(wù)
       這個(gè)服務(wù)是axis默認(rèn)的服務(wù)。我們?cè)谇懊娴睦又袑?xiě)的就是rpc服務(wù)。<service ... provider="java:RPC"> 。rpc服務(wù)遵從soap rpc規(guī)范和編碼規(guī)則,意味著來(lái)自rpc服務(wù)的xml將類似上面例子中的“echoString”--每個(gè)rpc調(diào)用被模塊化為一個(gè)外部元素,匹配操作名稱,并包含了很多內(nèi)部元素,每一個(gè)都是操作的一個(gè)參數(shù)。axis將把這些xml轉(zhuǎn)化為java對(duì)象,配送給你得服務(wù),并將序列化來(lái)自服務(wù)的java對(duì)象為xml.因?yàn)閞pc服務(wù)默認(rèn)采用soap section 5規(guī)則,對(duì)象將會(huì)通過(guò)"multi-ref" 序列化來(lái)編碼。
    Document / Wrapped 服務(wù)
     這2個(gè)服務(wù)很類似,都不需要用soap編碼來(lái)處理數(shù)據(jù)。他就是一個(gè)普通的xml格式。無(wú)論哪種情況,axis還是對(duì)他們做了xml到j(luò)ava得榜定,所以你最終處理的還是java對(duì)象,而不是xml結(jié)構(gòu)的字符串。
     下面的例子來(lái)說(shuō)明他們2個(gè)之間的區(qū)別。
     <soap:Envelope xmlns="http://xml.apache.org/axis/wsdd/"
        xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
      <soap:Body>
        <myNS:PurchaseOrder xmlns:myNS="http://commerce.com/PO">
          <item>SK001</item>
          <quantity>1</quantity>
          <description>Sushi Knife</description>
        </myNS:PurchaseOrder>
      </soap:Body>
    </soap:Envelope>

    相關(guān)的PurchaseOrder類型定義如下:

    <schema targetNamespace="http://commerce.com/PO">
      <complexType name="POType">
        <sequence>
          <element name="item" type="xsd:string"/>
          <element name="quantity" type="xsd:int"/>
          <element name="description" type="xsd:string"/>
        </sequence>
      </complexType>
      <element name="PurchaseOrder" type="POType"/>
    </schema>

    對(duì)于一個(gè)document服務(wù)來(lái)說(shuō),他將對(duì)應(yīng)到這樣的方法
    public void method(PurchaseOrder po)

    換句話說(shuō),整個(gè)PurchaseOrder元素將被處理為一個(gè)單一的對(duì)象,包含3個(gè)屬性。
    而對(duì)于wrapped服務(wù)來(lái)說(shuō),他對(duì)應(yīng)于下面的方法
    public void purchaseOrder(String item, int quantity, String description)
    注意到,在wrapped中,PurchaseOrder元素被映射為代表了一個(gè)方法。他的參數(shù)就是他的那些元素。
    他們?cè)趙sdd得使用如下
    <service ... style="document"> for document style
    <service ... style="wrapped"> for wrapped style
    Message 服務(wù)
      當(dāng)你需要處理純xml而不是java對(duì)象時(shí),你將會(huì)用到這種服務(wù)。
      message服務(wù)的方法有4中簽名
    public Element [] method(Element [] bodies);
    public SOAPBodyElement [] method (SOAPBodyElement [] bodies);
    public Document method(Document body);
    public void method(SOAPEnvelope req, SOAPEnvelope resp);

    posted @ 2008-02-17 20:31 binge 閱讀(622) | 評(píng)論 (0)編輯 收藏

    axis userguide(2)

    發(fā)布service
    有2種發(fā)布方式,一種是實(shí)例發(fā)布,一種是描述符發(fā)布
    實(shí)例發(fā)布很簡(jiǎn)單
      把我們的java源文件拷貝到axis目錄下,改擴(kuò)展名為jws
      然后就可以直接訪問(wèn)了,例如:
    java samples.userguide.example2.CalcClient -p8080 add 2 5
     他將調(diào)用add方法,傳遞的2個(gè)變量分別為2和5。
    很顯然,第一種方法有很多弊端,比如需要源文件,不能有包路徑等等
    描述符發(fā)布
    一個(gè)最簡(jiǎn)單的例子如下:
    <deployment xmlns="http://xml.apache.org/axis/wsdd/"
        xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
      <service name="MyService" provider="java:RPC">
        <parameter name="className" value="samples.userguide.example3.MyService"/>
        <parameter name="allowedMethods" value="*"/>
      </service>
    </deployment>
    一個(gè)服務(wù)是一個(gè)targeted chain ,可能包含下面的一些或者全部:請(qǐng)求Handler,pivot Handler 支點(diǎn)Handler,響應(yīng)Handler。支點(diǎn)hander在服務(wù)中叫做provider,在例子中我們的provider是java:RPC,他被axis內(nèi)嵌,代表了Java RPC service,具體的類是org.apache.axis.providers.java.RPCProvider.
    我們告訴RPCProvider 我們要調(diào)用的服務(wù)MyService,并以參數(shù)的形式告訴他具體的目標(biāo)以及可以被調(diào)用的方法。
    我們也可以給我們要調(diào)用的對(duì)象設(shè)置作用范圍scope,和servlet的scope一樣,有request,session,application.
    我們需要把這個(gè)描述符定義的內(nèi)容告訴應(yīng)用服務(wù)器才能真正提供我們需要的服務(wù)。
    如果已經(jīng)部署axis到tomcat,我們可以這樣發(fā)布
    org.apache.axis.client.AdminClient deploy.wsdd
    這樣我們的服務(wù)就可以通過(guò)soap來(lái)訪問(wèn)了
    測(cè)試一下
    java samples.userguide.example3.Client
      -lhttp://localhost:8080/axis/services/MyService "test me!"
    可以通過(guò)下面來(lái)查看所有已經(jīng)部署的服務(wù)
    java org.apache.axis.client.AdminClient list
    來(lái)看看更進(jìn)一步的應(yīng)用,使用一下request handler
    <deployment xmlns="http://xml.apache.org/axis/wsdd/"
        xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
      <!-- define the logging handler configuration -->
      <handler name="track" type="java:samples.userguide.example4.LogHandler">
        <parameter name="filename" value="MyService.log"/>
       </handler>

      <!-- define the service, using the log handler we just defined -->
      <service name="LogTestService" provider="java:RPC">
        <requestFlow>
          <handler type="track"/>
        </requestFlow>

        <parameter name="className" value="samples.userguide.example4.Service"/>
        <parameter name="allowedMethods" value="*"/>
      </service>
    </deployment>
    這個(gè)例子會(huì)在客戶端掉用LogTestService的時(shí)候,先調(diào)用samples.userguide.example4.LogHandler作記錄操作
    遠(yuǎn)程管理
    默認(rèn)狀態(tài)下,axis只允許在axis部署的機(jī)器上使用管理請(qǐng)求,如果希望在其他的機(jī)器上進(jìn)行管理操作可以參照下面的例子

    <service name="AdminService" provider="java:MSG">
      <parameter name="className" value="org.apache.axis.util.Admin"/>
      <parameter name="allowedMethods" value="*"/>
      <parameter name="enableRemoteAdmin" value="true"/>
    </service>
    注意,這樣配置需要作必要的安全配置

    posted @ 2008-02-17 12:17 binge 閱讀(605) | 評(píng)論 (0)編輯 收藏

    osworkflow幾個(gè)主要組件和概念

    原文見(jiàn):

    http://blog.csdn.net/huabingl/archive/2008/02/12/2089145.aspx

    posted @ 2008-02-17 10:36 binge 閱讀(776) | 評(píng)論 (0)編輯 收藏

    Javascript 的dtree

    說(shuō)dtree是使用最廣泛的目錄樹(shù)javascript應(yīng)該也不為過(guò).這得意于他簡(jiǎn)單的使用方式和良好的結(jié)構(gòu).

    可能這里是他最早的發(fā)源地之一http://www.destroydrop.com/javascripts/tree/

    上面有他的示例和api文檔.

    dtree使用簡(jiǎn)單,使用起來(lái)就是引入一個(gè)dtree.js,dtree.css和一些小圖片文件。.在需要顯示樹(shù)的地方,插入類似下面的代碼

    可以參照這里做些配置,觀看效果.可選的選項(xiàng)有folderLinks, useIcons, useLines, useSelection, useStatusText, closeSameLevel

    http://www.destroydrop.com/javascripts/tree/example/ 

    你可以放置radio或者checkbox在相應(yīng)的節(jié)點(diǎn)上,或者在節(jié)點(diǎn)上加上鏈接.

    posted @ 2008-02-17 10:35 binge 閱讀(1529) | 評(píng)論 (0)編輯 收藏

    用opencms java API獲取資源信息

    原文見(jiàn)

    http://blog.csdn.net/huabingl/archive/2008/02/12/2088711.aspx

    posted @ 2008-02-17 10:34 binge 閱讀(734) | 評(píng)論 (0)編輯 收藏

    opencms分頁(yè)

    opencms列表顯示
     先準(zhǔn)備要顯示的數(shù)據(jù)。比如在站點(diǎn)下建立一個(gè)sports目錄,里面以news的格式放入一些xmlpage.
      注意給這些xmlpage準(zhǔn)備好detail顯示頁(yè)面。
    <%@ taglib prefix="cms" uri=" <%@ page import="java.util.*"%>
    <%@ page import="org.opencms.jsp.*"%>

    <%
    String sPageIndex=request.getParameter("pageIndex");
    int iPageIndex=1;
    if(sPageIndex!=null){
    iPageIndex=Integer.parseInt(sPageIndex);
    }

     pageContext.setAttribute("pageIndex", iPageIndex+"");
    %>
    <cms:contentload collector="allInFolderDateReleasedDesc" param="/myfirstsite/sports/%(number)_news.html|news" pageIndex="%(pageContext.pageIndex)" pageSize="2">
    <cms:contentinfo var="contentInfo" scope="request" />
    <a href="<cms:link><cms:contentshow element="%(opencms.filename)"/></cms:link>" target=_blank><cms:contentshow element="Title"/> </a>
    <%out.println("---");%>
    </cms:contentload>
    <%
    CmsContentInfoBean info  = (CmsContentInfoBean)request.getAttribute("contentInfo");
    int totalNum=info.getResultSize();
    %>
    共<%=totalNum%>條數(shù)據(jù),當(dāng)前第<%=info.getPageIndex()%>/<%=info.getPageCount()%>
    <a href="list_taglib?pageIndex=<%=info.getPageNavStartIndex()%>">第一頁(yè)</a>
    <a href="list_taglib?pageIndex=<%=(info.getPageNavStartIndex()-1)>0?(info.getPageNavStartIndex()-1):1%>">上一頁(yè)</a>
    <a href="list_taglib?pageIndex=<%=(info.getPageNavStartIndex()+1)>info.getPageCount()?info.getPageCount():(info.getPageNavStartIndex()+1)%>">下一頁(yè)</a>
    <a href="list_taglib?pageIndex=<%=info.getPageNavEndIndex()%>">最后頁(yè)</a>
    上面的例子力求盡可能少的使用標(biāo)簽。主要使用了CmsContentInfoBean ,CmsJspXmlContentBean ,I_CmsXmlContentContainer(CmsJspTagContentLoad )等多個(gè)對(duì)象。分頁(yè)的關(guān)鍵在CmsContentInfoBean 和 CmsJspTagContentLoad的關(guān)系上。 

    參考資料:

    http://www.javaedu.com/bbs/viewthread?thread=128

    http://wangyi878750.blog.sohu.com/41725191.html

    http://l--w.blog.sohu.com/47996664.html

    http://wangyi878750.blog.sohu.com/41378072.html

     

    posted @ 2008-02-17 10:31 binge 閱讀(1637) | 評(píng)論 (0)編輯 收藏

    Ruby之Blocks&Iterator

    Ruby之Blocks,Iterator
    -------讀《Programming Ruby 2nd》

    posted @ 2007-08-09 10:22 binge 閱讀(360) | 評(píng)論 (0)編輯 收藏

    Ruby簡(jiǎn)介

    Ruby是”一種用于迅速和簡(jiǎn)便的面向?qū)ο缶幊痰慕忉屝阅_本語(yǔ)言”;這意味著什么?
    解釋性腳本語(yǔ)言:

    • 有直接呼叫系統(tǒng)調(diào)用的能力
    • 強(qiáng)大的字符串操作和正則表達(dá)式
    • 開(kāi)發(fā)中快速回饋

    迅速和簡(jiǎn)便:

    • 無(wú)需變量聲明
    • 變量無(wú)類型
    • 語(yǔ)法簡(jiǎn)單而堅(jiān)實(shí)
    • 自動(dòng)內(nèi)存管理

    面向?qū)ο缶幊?/p>

    • 任何事物都是一個(gè)對(duì)象
    • 類,繼承,方法,等等
    • 單態(tài)方法
    • 模塊糅合
    • 迭代器和閉包(closures)

    以及:

    • 多精度整數(shù)
    • 異常處理模式
    • 動(dòng)態(tài)裝載
    • 線程

    如果你對(duì)上面的那些概念還不熟悉,繼續(xù)讀,別擔(dān)心.Ruby的箴言是”迅速和簡(jiǎn)便”.

    posted @ 2007-08-02 10:16 binge 閱讀(444) | 評(píng)論 (0)編輯 收藏

    ruby日記

    ruby初體驗(yàn)
    參考網(wǎng)址:
    http://sitekreator.com/satishtalim/ruby_tools.html
    http://blog.linuxmine.com/23633/viewspace-5329

      ror  制作簡(jiǎn)單網(wǎng)頁(yè)
    helloworld達(dá)成
    (啟動(dòng)服務(wù)器的時(shí)候,錯(cuò)誤的直接切到script目錄去啟動(dòng),耽誤了不少時(shí)間)
    參考網(wǎng)址:
    http://www.javaeye.com/article/35929
    ror實(shí)現(xiàn)簡(jiǎn)單的mvc
    參考資料:
    http://www.onlamp.com/pub/a/onlamp/2007/01/05/revisiting-ruby-on-rails-revisited-2.html?page=1
    http://www.ibm.com/developerworks/cn/linux/l-rubyrails/   (最后的修改的 form標(biāo)簽應(yīng)該寫(xiě)成<%= start_form_tag :action => 'update', :id => @contact.id %>)
    ror作復(fù)雜的mvc
    制作中。。。。
    需要解決的問(wèn)題有:
    1,登陸以及session處理
    參考文檔:
    http://wiki.rubyonrails.org/rails/pages/UnderstandingSessions
    2,多表關(guān)聯(lián)以及復(fù)雜查詢
    參考文檔:
    http://tech.it168.com/j/d/2006-10-20/200610200913835_2.shtml
    3,分頁(yè)實(shí)現(xiàn)
    參考文檔:
    http://wiki.rubyonrails.com/rails/pages/HowtoPagination



     

    posted @ 2007-07-31 16:40 binge 閱讀(592) | 評(píng)論 (0)編輯 收藏

    javascript操作word控件

    <script language="javascript">
    //定義全局變量,用于清理工作
    var word;
    var doc;
    function editFile(){
    //調(diào)用word控件
     word= new ActiveXObject("Word.Application");
    //屏蔽“另存為”按鈕
     word.CommandBars("File").Controls(5).Enabled= false;
      word.CommandBars("File").Controls(5).visible= false;
    //屏蔽"另存為網(wǎng)頁(yè)"按鈕

     word.CommandBars("File").Controls(6).Enabled= false;
     word.CommandBars("File").Controls(6).visible= false;

     word.visible = true;
     // word.activate();
    try{
    //打開(kāi)文件
      doc=word.Documents.Open("  //痕跡保留
      word.ActiveDocument.TrackRevisions   =true; 
    //切換成web視圖
      word.ActiveDocument.ActiveWindow.View.Type=3
     
          }catch(e){
           alert(e.message);
          };  
    }
    function myfinalize(){
    //文檔保存
        doc.save();
    //文檔關(guān)閉
       doc.close();
    //把屏蔽的功能打開(kāi)
       word.CommandBars("File").Controls(5).Enabled= true;
      word.CommandBars("File").Controls(5).visible= true;
    //word退出
     word.quit();
     
    }
    //參考文檔
      
    http://bbs.hidotnet.com/712/ShowPost.aspx

    posted @ 2007-07-25 10:54 binge 閱讀(3163) | 評(píng)論 (0)編輯 收藏

    DB2

    原文:

    http://blog.csdn.net/huabingl/archive/2008/02/11/2088477.aspx

    posted @ 2007-07-09 16:20 binge 閱讀(340) | 評(píng)論 (0)編輯 收藏

    AXIS User Guide(1)

         摘要: AXIS User Guide(1)  閱讀全文

    posted @ 2007-01-03 20:54 binge 閱讀(1172) | 評(píng)論 (0)編輯 收藏

    Sliding into WebDAV

         摘要: Sliding into WebDAV  閱讀全文

    posted @ 2007-01-03 20:49 binge 閱讀(2421) | 評(píng)論 (0)編輯 收藏

    HibernateTemplate方法

         摘要: HibernateTemplate方法索引  閱讀全文

    posted @ 2006-12-26 15:47 binge 閱讀(4395) | 評(píng)論 (0)編輯 收藏

    小心對(duì)js函數(shù)命名,避免和它的內(nèi)置函數(shù)重名

    最近又遇到個(gè)對(duì)js取名不帥導(dǎo)致錯(cuò)誤的問(wèn)題,特開(kāi)此貼,以示警戒:
    不要把自己的js函數(shù)取成close(),open(),start()之類的名字!!

    window得resizeto和resizeby方法對(duì)模式窗口無(wú)效。

    posted @ 2006-12-10 13:25 binge 閱讀(719) | 評(píng)論 (0)編輯 收藏

    webdav使用指南

      最近研究了一下webdav,關(guān)于webdav的詳細(xì)信息可以在 google上搜索或者參看官方網(wǎng)站 筆者簡(jiǎn)單的嘗試了它下面的slide和mod_dav.
    slide是jakarta下面的子項(xiàng)目,分為服務(wù)端和客戶端.個(gè)人認(rèn)為服務(wù)端是專門為tomcat定做的一個(gè)webdav實(shí)現(xiàn).關(guān)于slide,javaeye上有些討論,可以參考
    http://www.javaeye.com/t/5267.html.本人涉入的不是很深,中文問(wèn)題讓我碰到了,slide提供2中存儲(chǔ)方式,文件形式和數(shù)據(jù)庫(kù)形式,限于時(shí)間,筆者沒(méi)有對(duì)數(shù)據(jù)庫(kù)形式進(jìn)行測(cè)試.slide的工作目錄默認(rèn)在服務(wù)器bin目錄下.
    用mod_dav來(lái)實(shí)現(xiàn)相比就簡(jiǎn)單多了,如果你熟悉apache httpserver,應(yīng)該很容易搞定.http://www.webdav.org/mod_dav/ 上的有部分資料.可以根據(jù)http://www.webdav.org/mod_dav/install.html 的講解來(lái)配置.apache server1.3以后(包括1.3)在發(fā)布的時(shí)候都自帶了mod_dav包.需要做的就是加載和配置它.
    LoadModule dav_module libexec/libdav.so
    AddModule mod_dav.c
    筆者在配置的時(shí)候由于沒(méi)有認(rèn)真看文檔,犯了個(gè)小小的錯(cuò)誤.所以注意下面的文字:
    "In the following example, the DAV lock database will be stored in the /usr/local/apache/var directory (which must be writable by the server process). The file's name will be DAVLock when mod_dav needs to create it.
    (actually, mod_dav will create one or more files using this file name plus an extension)

    DAVLockDB /usr/local/apache/var/DAVLock"
    然后你需要配置一個(gè)webdav的工作目錄,由于訪問(wèn)apache服務(wù)的用戶會(huì)默認(rèn)是nobody用戶,所以你至少得讓工作目錄對(duì)nobody可讀寫(xiě).在目錄的定義中加入DAV on這樣的屬性就 ok了
    eg:
    "Alias /pages /home/www/davhome
    <Location /pages>
        DAV On
    </Location>
    "
    測(cè)試webdav
    安裝完webdav后,你可以做簡(jiǎn)單的測(cè)試:
       IE瀏覽器-〉文件-〉打開(kāi),然后輸入配置的url,客戶端API.
    如果是 java可以 采用slide的客戶端.(php用戶咋辦?).
    這個(gè)最新的客戶端使用的是最新的jdom,注意哦..
    參考資料:
    http://www.uplinux.com/www/net/02/131.shtml

    posted @ 2006-12-10 12:40 binge 閱讀(6005) | 評(píng)論 (0)編輯 收藏

    mvnforum權(quán)限系統(tǒng)分析

    ?? mvnforum是一個(gè)開(kāi)源的論壇軟件.網(wǎng)址如下:
    http://sourceforge.net/projects/mvnforum/
    ?? 本文主要研究它的權(quán)限部分,以作為使用借鑒.
    ?? 這里有篇中文的文檔,以作參考:
    ? http://www.cn-java.com/target/news.php?news_id=3298


    權(quán)限部分的UML圖如下:
    ??

    數(shù)據(jù)流程:
    1,系統(tǒng)從OnlineUserManager這個(gè)入口進(jìn)入.這個(gè)部件有個(gè)Map用來(lái)存儲(chǔ)當(dāng)前的非過(guò)期用戶。OnlineUserManager會(huì)先根據(jù)當(dāng)前時(shí)間和最后一個(gè)用戶的請(qǐng)求時(shí)間做對(duì)比,檢查是否有刷新過(guò)期用戶的必要,如果超過(guò)所設(shè)置的時(shí)間,那么先更新Map。然后OnlineUserManager根據(jù)提供的用戶的 sessionid和username在這個(gè)Map中查找。如果找到,則刷新該用戶的最后一次訪問(wèn)時(shí)間;否則,OnlineUserManager調(diào)用OnlineUserFactory部件創(chuàng)建該OnlineUser,并把這個(gè)OnlineUser存入Map之中。
    判對(duì)用戶是否過(guò)期的原理是:從OnlineUser的OnlineUserAction中取出最后一次的訪問(wèn)時(shí)間和當(dāng)前時(shí)間做對(duì)比.
    2,OnlineUserFactory負(fù)責(zé)創(chuàng)建OnlineUser并為該OnlineUser提供完整的權(quán)限信息.OnlineUser包括3大部分信息,一部分是用戶的基本信息,一部分是用戶的權(quán)限信息,一部分是用戶的在線信息.在線信息由OnlineUserManager負(fù)責(zé)管理,其他2部分信息由OnlineUserFactory從持久層獲得.
    獲得權(quán)限信息并把它設(shè)置到OnlineUser部件上,提供給OnlineUserManager管理.
    3.CNMPermissionFactory類似我們常說(shuō)的service.主要負(fù)責(zé)和持久層通信,最終返回一個(gè)CNMPermission部件供OnlineUserFactory合成OnlineUser部件.在下面的章節(jié)里,筆者會(huì)對(duì)他細(xì)化討論.
    權(quán)限結(jié)構(gòu):
    用來(lái)實(shí)現(xiàn)用戶權(quán)限的主要的是CNMPermission接口和他是2個(gè)子類AbstractPermission和CNMPermissionImpl.CNMPermission接口負(fù)責(zé)定義權(quán)限有關(guān)的常量和對(duì)外API.AbstractPermission設(shè)置了保存權(quán)限信息的變量并實(shí)現(xiàn)了CNMPermission接口中定義的抽象方法,因此,筆者把這個(gè)抽象類叫做鑒權(quán)類.CNMPermissionImpl 則負(fù)責(zé)對(duì)AbstractPermission使用的變量進(jìn)行設(shè)值,因此,筆者稱之為賦權(quán)類.
    先看看AbstractPermission的結(jié)構(gòu)。這里涉及到這么幾個(gè)概念:全局權(quán)限,特定權(quán)限,單個(gè)權(quán)限,組合權(quán)限。
    全局權(quán)限用true/false來(lái)設(shè)置。
    特定權(quán)限是指某一個(gè)動(dòng)作所作用的不同的對(duì)象。比如:某用戶只能將寫(xiě)操作作用于1,2,4這3個(gè)論壇板塊之上。表示為這個(gè)特定權(quán)限內(nèi)部的ArrayList容器中只有1,2,4三個(gè)編號(hào)。
    單個(gè)權(quán)限是指單個(gè)動(dòng)作。比如讀操作。
    組合權(quán)限是為了方便設(shè)置提供的對(duì)單個(gè)權(quán)限的組合。比如對(duì)某用戶一次設(shè)置某板塊的“讀”和“發(fā)布”2種權(quán)限。
    前2種權(quán)限是一個(gè)緯度的劃分,后2個(gè)是另一個(gè)緯度的劃分。
    如何鑒權(quán)?
    鑒權(quán)的接口都會(huì)在CNMPermission中定義。對(duì)全局權(quán)限,直接返回對(duì)應(yīng)的標(biāo)志位的值,對(duì)于特定權(quán)限,則先判斷是否特定權(quán)限全開(kāi),否,則然后判斷其ArrayList中是否包含對(duì)應(yīng)的對(duì)象編號(hào)。
    如何賦權(quán)?
    這里要承接到上述數(shù)據(jù)流程的第三步。由CNMPermissionFactory根據(jù)一定先后循序(其實(shí)無(wú)關(guān)順序,因?yàn)椴捎玫臑檎娓采w原則,即持久層返回的權(quán)限都是真值,后面的真值對(duì)前面的真值可覆蓋)從持久層獲得所有的全局權(quán)限和特定權(quán)限。mvnforum只有用戶和角色2種概念(當(dāng)然也可以擴(kuò)展),因此它的順序是:用戶全局全縣-〉用戶特定權(quán)限-〉角色全局全縣-〉角色特定權(quán)限。當(dāng)然無(wú)論哪一部都是對(duì)同一個(gè)CNMPermission進(jìn)行操作。
    無(wú)論在設(shè)置全局權(quán)限還是特定權(quán)限的時(shí)候都可能會(huì)遇到所定義的組合權(quán)限。具體的組合權(quán)限拆分是由CNMPermissionImpl來(lái)做的.
    相關(guān)的表結(jié)構(gòu):
    ?? member表,存貯用戶基本信息。
    ?? membergroup ,存儲(chǔ)用戶和組(角色)的對(duì)應(yīng)關(guān)系。
    ?? groups表,存儲(chǔ)組/角色的基本信息
    ?? grouppermission,存儲(chǔ)組/角色的全局權(quán)限,字段為groupid permissionid
    ?? groupforum,存儲(chǔ)組/角色 的論壇權(quán)限, 字段為groupid ,forum,permissionid
    ?? memberpermission 存貯用戶的全局權(quán)限,字段為 memberid permissionid
    ?? memberforum 存貯用戶的論壇權(quán)限,字段為memberid ,forum,permissionid


    ? 修改于2006/12/16? 晚8時(shí)

    posted @ 2006-09-19 10:07 binge 閱讀(1545) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲国产区男人本色| 在线免费观看中文字幕| 羞羞视频在线观看免费| 亚洲一区二区三区在线观看蜜桃| 亚洲熟伦熟女新五十路熟妇| 麻豆国产精品入口免费观看| 51精品视频免费国产专区| 久久免费99精品国产自在现线| 亚洲欧美熟妇综合久久久久| 亚洲特级aaaaaa毛片| 亚洲精品无码av人在线观看| 亚洲精品动漫人成3d在线| 国产成人精品免费视频软件| 免费人成视频在线| 4399影视免费观看高清直播| 久久精品视频免费| 国产乱子伦精品免费视频| 青青草国产免费国产是公开| 亚洲AV无码一区二区大桥未久| 亚洲综合精品第一页| 亚洲人xxx日本人18| 亚洲国产中文在线二区三区免| 亚洲天堂一区二区| 亚洲日本一区二区| 久久99国产亚洲精品观看| 国产亚洲一区二区在线观看| 亚洲综合国产一区二区三区| 永久亚洲成a人片777777| 亚洲精品国产美女久久久| 亚洲人成伊人成综合网久久久| 91麻豆国产自产在线观看亚洲| 精品国产亚洲一区二区在线观看 | 人人狠狠综合久久亚洲高清| 午夜网站免费版在线观看| 麻豆国产人免费人成免费视频| 日本a级片免费看| 国产jizzjizz视频全部免费| 亚洲 另类 无码 在线| 又大又粗又爽a级毛片免费看| 亚洲精品无码日韩国产不卡?V| 在线A亚洲老鸭窝天堂|