|
2006年9月19日
System.getProperty()参数大全
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
服务类型
在axis中有4中服务类型
RPC服务采用soap rpc的标准,and also the SOAP "section 5" encoding.
Document 服务没有采用任何编码(所以你在组装时不会看到复杂对象的序列化以及soap-style数组),但是仍然作了xml和java对象的互映射。
Wrapped服务和Document服务类似
Message 服务接受和返回soap Envelope中的任意的xml而不需要mapping/data得榜定。如果你想处理来自外部的原始的xml,可以采用Message 服务。
RPC服务
这个服务是axis默认的服务。我们在前面的例子中写的就是rpc服务。<service ... provider="java:RPC"> 。rpc服务遵从soap rpc规范和编码规则,意味着来自rpc服务的xml将类似上面例子中的“echoString”--每个rpc调用被模块化为一个外部元素,匹配操作名称,并包含了很多内部元素,每一个都是操作的一个参数。axis将把这些xml转化为java对象,配送给你得服务,并将序列化来自服务的java对象为xml.因为rpc服务默认采用soap section 5规则,对象将会通过"multi-ref" 序列化来编码。
Document / Wrapped 服务
这2个服务很类似,都不需要用soap编码来处理数据。他就是一个普通的xml格式。无论哪种情况,axis还是对他们做了xml到java得榜定,所以你最终处理的还是java对象,而不是xml结构的字符串。
下面的例子来说明他们2个之间的区别。
<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>
相关的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>
对于一个document服务来说,他将对应到这样的方法
public void method(PurchaseOrder po)
换句话说,整个PurchaseOrder元素将被处理为一个单一的对象,包含3个属性。
而对于wrapped服务来说,他对应于下面的方法
public void purchaseOrder(String item, int quantity, String description)
注意到,在wrapped中,PurchaseOrder元素被映射为代表了一个方法。他的参数就是他的那些元素。
他们在wsdd得使用如下
<service ... style="document"> for document style
<service ... style="wrapped"> for wrapped style
Message 服务
当你需要处理纯xml而不是java对象时,你将会用到这种服务。
message服务的方法有4中签名
public Element [] method(Element [] bodies);
public SOAPBodyElement [] method (SOAPBodyElement [] bodies);
public Document method(Document body);
public void method(SOAPEnvelope req, SOAPEnvelope resp);
发布service
有2种发布方式,一种是实例发布,一种是描述符发布
实例发布很简单
把我们的java源文件拷贝到axis目录下,改扩展名为jws
然后就可以直接访问了,例如:
java samples.userguide.example2.CalcClient -p8080 add 2 5
他将调用add方法,传递的2个变量分别为2和5。
很显然,第一种方法有很多弊端,比如需要源文件,不能有包路径等等
描述符发布
一个最简单的例子如下:
<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>
一个服务是一个targeted chain ,可能包含下面的一些或者全部:请求Handler,pivot Handler 支点Handler,响应Handler。支点hander在服务中叫做provider,在例子中我们的provider是java:RPC,他被axis内嵌,代表了Java RPC service,具体的类是org.apache.axis.providers.java.RPCProvider.
我们告诉RPCProvider 我们要调用的服务MyService,并以参数的形式告诉他具体的目标以及可以被调用的方法。
我们也可以给我们要调用的对象设置作用范围scope,和servlet的scope一样,有request,session,application.
我们需要把这个描述符定义的内容告诉应用服务器才能真正提供我们需要的服务。
如果已经部署axis到tomcat,我们可以这样发布
org.apache.axis.client.AdminClient deploy.wsdd
这样我们的服务就可以通过soap来访问了
测试一下
java samples.userguide.example3.Client
-lhttp://localhost:8080/axis/services/MyService "test me!"
可以通过下面来查看所有已经部署的服务
java org.apache.axis.client.AdminClient list
来看看更进一步的应用,使用一下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>
这个例子会在客户端掉用LogTestService的时候,先调用samples.userguide.example4.LogHandler作记录操作
远程管理
默认状态下,axis只允许在axis部署的机器上使用管理请求,如果希望在其他的机器上进行管理操作可以参照下面的例子
<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>
注意,这样配置需要作必要的安全配置
原文见:
http://blog.csdn.net/huabingl/archive/2008/02/12/2089145.aspx
说dtree是使用最广泛的目录树javascript应该也不为过.这得意于他简单的使用方式和良好的结构.
可能这里是他最早的发源地之一http://www.destroydrop.com/javascripts/tree/
上面有他的示例和api文档.
dtree使用简单,使用起来就是引入一个dtree.js,dtree.css和一些小图片文件。.在需要显示树的地方,插入类似下面的代码
可以参照这里做些配置,观看效果.可选的选项有folderLinks, useIcons, useLines, useSelection, useStatusText, closeSameLevel
http://www.destroydrop.com/javascripts/tree/example/
你可以放置radio或者checkbox在相应的节点上,或者在节点上加上链接.
原文见
http://blog.csdn.net/huabingl/archive/2008/02/12/2088711.aspx
opencms列表显示
先准备要显示的数据。比如在站点下建立一个sports目录,里面以news的格式放入一些xmlpage.
注意给这些xmlpage准备好detail显示页面。
<%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %>
<%@ 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%>条数据,当前第<%=info.getPageIndex()%>/<%=info.getPageCount()%>
<a href="list_taglib?pageIndex=<%=info.getPageNavStartIndex()%>">第一页</a>
<a href="list_taglib?pageIndex=<%=(info.getPageNavStartIndex()-1)>0?(info.getPageNavStartIndex()-1):1%>">上一页</a>
<a href="list_taglib?pageIndex=<%=(info.getPageNavStartIndex()+1)>info.getPageCount()?info.getPageCount():(info.getPageNavStartIndex()+1)%>">下一页</a>
<a href="list_taglib?pageIndex=<%=info.getPageNavEndIndex()%>">最后页</a>
上面的例子力求尽可能少的使用标签。主要使用了CmsContentInfoBean ,CmsJspXmlContentBean ,I_CmsXmlContentContainer(CmsJspTagContentLoad )等多个对象。分页的关键在CmsContentInfoBean 和 CmsJspTagContentLoad的关系上。
参考资料:
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是”一种用于迅速和简便的面向对象编程的解释性脚本语言”;这意味着什么? 解释性脚本语言:
- 有直接呼叫系统调用的能力
- 强大的字符串操作和正则表达式
- 开发中快速回馈
迅速和简便:
- 无需变量声明
- 变量无类型
- 语法简单而坚实
- 自动内存管理
面向对象编程
- 任何事物都是一个对象
- 类,继承,方法,等等
- 单态方法
- 模块糅合
- 迭代器和闭包(closures)
以及:
如果你对上面的那些概念还不熟悉,继续读,别担心.Ruby的箴言是”迅速和简便”.
<script language="javascript"> //定义全局变量,用于清理工作 var word; var doc; function editFile(){ //调用word控件 word= new ActiveXObject("Word.Application"); //屏蔽“另存为”按钮 word.CommandBars("File").Controls(5).Enabled= false; word.CommandBars("File").Controls(5).visible= false; //屏蔽"另存为网页"按钮
word.CommandBars("File").Controls(6).Enabled= false; word.CommandBars("File").Controls(6).visible= false;
word.visible = true; // word.activate(); try{ //打开文件 doc=word.Documents.Open("http://212312.doc"); //痕迹保留 word.ActiveDocument.TrackRevisions =true; //切换成web视图 word.ActiveDocument.ActiveWindow.View.Type=3 }catch(e){ alert(e.message); }; } function myfinalize(){ //文档保存 doc.save(); //文档关闭 doc.close(); //把屏蔽的功能打开 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方法索引 阅读全文
最近又遇到个对js取名不帅导致错误的问题,特开此贴,以示警戒: 不要把自己的js函数取成close(),open(),start()之类的名字!!
window得resizeto和resizeby方法对模式窗口无效。
最近研究了一下webdav,关于webdav的详细信息可以在 google上搜索或者参看官方网站http://www.webdav.org. "WebDAV stands for "Web-based Distributed Authoring and Versioning". It is a set of extensions to the HTTP protocol which allows users to collaboratively edit and manage files on remote web servers. " 笔者简单的尝试了它下面的slide和mod_dav. slide是jakarta下面的子项目,分为服务端和客户端.个人认为服务端是专门为tomcat定做的一个webdav实现.关于slide,javaeye上有些讨论,可以参考http://www.javaeye.com/t/5267.html.本人涉入的不是很深,中文问题让我碰到了,slide提供2中存储方式,文件形式和数据库形式,限于时间,笔者没有对数据库形式进行测试.slide的工作目录默认在服务器bin目录下. 用mod_dav来实现相比就简单多了,如果你熟悉apache httpserver,应该很容易搞定.http://www.webdav.org/mod_dav/ 上的有部分资料.可以根据http://www.webdav.org/mod_dav/install.html 的讲解来配置.apache server1.3以后(包括1.3)在发布的时候都自带了mod_dav包.需要做的就是加载和配置它. LoadModule dav_module libexec/libdav.so AddModule mod_dav.c 笔者在配置的时候由于没有认真看文档,犯了个小小的错误.所以注意下面的文字: "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" 然后你需要配置一个webdav的工作目录,由于访问apache服务的用户会默认是nobody用户,所以你至少得让工作目录对nobody可读写.在目录的定义中加入DAV on这样的属性就 ok了 eg: "Alias /pages /home/www/davhome <Location /pages> DAV On </Location> " 测试webdav 安装完webdav后,你可以做简单的测试: IE浏览器-〉文件-〉打开,然后输入配置的url,http://127.0.0.1/pages,选上"以Web文件夹方式打开".可以看到效果。 客户端API. 如果是 java可以 采用slide的客户端.(php用户咋办?). 这个最新的客户端使用的是最新的jdom,注意哦.. 参考资料: http://www.uplinux.com/www/net/02/131.shtml
mvnforum是一个开源的论坛软件.网址如下: http://sourceforge.net/projects/mvnforum/ 本文主要研究它的权限部分,以作为使用借鉴. 这里有篇中文的文档,以作参考: http://www.cn-java.com/target/news.php?news_id=3298
权限部分的UML图如下:
数据流程: 1,系统从OnlineUserManager这个入口进入.这个部件有个Map用来存储当前的非过期用户。OnlineUserManager会先根据当前时间和最后一个用户的请求时间做对比,检查是否有刷新过期用户的必要,如果超过所设置的时间,那么先更新Map。然后OnlineUserManager根据提供的用户的 sessionid和username在这个Map中查找。如果找到,则刷新该用户的最后一次访问时间;否则,OnlineUserManager调用OnlineUserFactory部件创建该OnlineUser,并把这个OnlineUser存入Map之中。 判对用户是否过期的原理是:从OnlineUser的OnlineUserAction中取出最后一次的访问时间和当前时间做对比. 2,OnlineUserFactory负责创建OnlineUser并为该OnlineUser提供完整的权限信息.OnlineUser包括3大部分信息,一部分是用户的基本信息,一部分是用户的权限信息,一部分是用户的在线信息.在线信息由OnlineUserManager负责管理,其他2部分信息由OnlineUserFactory从持久层获得. 获得权限信息并把它设置到OnlineUser部件上,提供给OnlineUserManager管理. 3.CNMPermissionFactory类似我们常说的service.主要负责和持久层通信,最终返回一个CNMPermission部件供OnlineUserFactory合成OnlineUser部件.在下面的章节里,笔者会对他细化讨论. 权限结构: 用来实现用户权限的主要的是CNMPermission接口和他是2个子类AbstractPermission和CNMPermissionImpl.CNMPermission接口负责定义权限有关的常量和对外API.AbstractPermission设置了保存权限信息的变量并实现了CNMPermission接口中定义的抽象方法,因此,笔者把这个抽象类叫做鉴权类.CNMPermissionImpl 则负责对AbstractPermission使用的变量进行设值,因此,笔者称之为赋权类. 先看看AbstractPermission的结构。这里涉及到这么几个概念:全局权限,特定权限,单个权限,组合权限。 全局权限用true/false来设置。 特定权限是指某一个动作所作用的不同的对象。比如:某用户只能将写操作作用于1,2,4这3个论坛板块之上。表示为这个特定权限内部的ArrayList容器中只有1,2,4三个编号。 单个权限是指单个动作。比如读操作。 组合权限是为了方便设置提供的对单个权限的组合。比如对某用户一次设置某板块的“读”和“发布”2种权限。 前2种权限是一个纬度的划分,后2个是另一个纬度的划分。 如何鉴权? 鉴权的接口都会在CNMPermission中定义。对全局权限,直接返回对应的标志位的值,对于特定权限,则先判断是否特定权限全开,否,则然后判断其ArrayList中是否包含对应的对象编号。 如何赋权? 这里要承接到上述数据流程的第三步。由CNMPermissionFactory根据一定先后循序(其实无关顺序,因为采用的为真覆盖原则,即持久层返回的权限都是真值,后面的真值对前面的真值可覆盖)从持久层获得所有的全局权限和特定权限。mvnforum只有用户和角色2种概念(当然也可以扩展),因此它的顺序是:用户全局全县-〉用户特定权限-〉角色全局全县-〉角色特定权限。当然无论哪一部都是对同一个CNMPermission进行操作。 无论在设置全局权限还是特定权限的时候都可能会遇到所定义的组合权限。具体的组合权限拆分是由CNMPermissionImpl来做的. 相关的表结构: member表,存贮用户基本信息。 membergroup ,存储用户和组(角色)的对应关系。 groups表,存储组/角色的基本信息 grouppermission,存储组/角色的全局权限,字段为groupid permissionid groupforum,存储组/角色 的论坛权限, 字段为groupid ,forum,permissionid memberpermission 存贮用户的全局权限,字段为 memberid permissionid memberforum 存贮用户的论坛权限,字段为memberid ,forum,permissionid
修改于2006/12/16 晚8时
|