|
2006年9月19日
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
服務(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);
發(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>
注意,這樣配置需要作必要的安全配置
原文見(jiàn):
http://blog.csdn.net/huabingl/archive/2008/02/12/2089145.aspx
說(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)上加上鏈接.
原文見(jiàn)
http://blog.csdn.net/huabingl/archive/2008/02/12/2088711.aspx
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
Ruby之Blocks,Iterator -------讀《Programming Ruby 2nd》
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)便”.
<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
原文:
http://blog.csdn.net/huabingl/archive/2008/02/11/2088477.aspx
摘要: AXIS User Guide(1) 閱讀全文
摘要: Sliding into WebDAV 閱讀全文
摘要: HibernateTemplate方法索引 閱讀全文
最近又遇到個(gè)對(duì)js取名不帥導(dǎo)致錯(cuò)誤的問(wèn)題,特開(kāi)此貼,以示警戒: 不要把自己的js函數(shù)取成close(),open(),start()之類的名字!!
window得resizeto和resizeby方法對(duì)模式窗口無(wú)效。
最近研究了一下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
?? 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í)
|