??xml version="1.0" encoding="utf-8" standalone="yes"?> 1.下蝲Q?br />spring-beandoc-0.7.0: 参考:(x) http://opensource.atlassian.com/confluence/spring/display/BDOC/Home
http://www.graphviz.org/pub/graphviz/ARCHIVE/graphviz-2.8.exe
2.安装Q解压spring-beandoc-0.7.0.tgz和apache-ant-1.6.5-bin.zip到d:/Java/ 3.到D:\java\spring-beandoc-0.7.0\src\org\springframework\beandoc\output\i18n?br />增加中文资源文glabels_zh.properties Q然后对照翻译, i18n-generated=beandoc \u751F\u6210\u4E86 #----------------------------------------- 再到D:\java\spring-beandoc-0.7.0\下运行build.bat?/p>
4.到D:\java\spring-beandoc-0.7.0\samples\ W?0行改为:(x)i18n.locale=zh 5.清空 D:\java\spring-beandoc-0.7.0\samples\jpetstore?D:\java\spring-beandoc-0.7.0\samples\petclinic,复制spring配置文g 6.然后q行D:\java\spring-beandoc-0.7.0\samples\runbeandoc-cli.bat 7.然后打开D:\java\spring-beandoc-0.7.0\target\sample-output\index.html. (lizongbo原创Q{载请注明出处? 1. org.apache.xmlrpc.XmlRpc.setDebug(true);可以打开调试模式Q可以看C些详l的xmlrpc解析处理日志?br />2. 不支持gؓ(f)nullQ支持的javacd为:(x)Integer,Boolean,String,Double,java.util.Date(支持其子c?,byte[],java.util.Vector,java.util.Hashtable
3. 使用ssl遇到的问?
C .jsolait的xmlrpc库是javascript的操作xmlrpc的,非常? var xmlrpc=null; q回l果里如果只有一个|可以直接在用rsltQ如果有多个| D . 调试xmlrpc,有一个非怼U的工P(x) ~点,只能够连接类?http://lizongbo.com/xmlrpc的Endpoint (lizongbo原创Q{载请注明出处? public int getFirstIndexForCurrentPage() { /** 在近量不改动现有代码的基上来使用displaytagl合数据库分? 1.先设|总页? <% 2.配置displaytag?两个属性:(x)partialList="true" size="totalNum" 3.在jsp中获得翻信息的代码Q?/P>
<% 下面代码是取得翻| //如果没有为table讄 id那么p写成ParamEncoder(null); //see: http://displaytag.sourceforge.net/11/displaytag/apidocs/org/displaytag/tags/TableTagParameters.html %> 当然也可以通过实现 org.displaytag.pagination.PaginatedList接口来完成这个要求?BR>更多信息Q请参考:(x)
http://618119.com
新的blog rss订阅地址Q?http://feed.feedsky.com/lizongbo
从最早的 http://blog.csdn.net/lizongbo,
?http://blog.donews.com/lizongbo
再到http://www.aygfsteel.com/lizongbo
现在l于拥有自己的域名和独立的blog了?nbsp; 阅读全文
]]>
主菜?-〉工?->文本导入器?br />
选择文本文gQ进行相关配|,可以生成一个导入数据的配置文g?br />
保存?xxx.def
h为:(x)
ID=Import Definition
Version=1
Header=False
SingleLineRecord=True
QuoteChar="
TableOwner=SMK
OracleTable=ZNEW20070109
OverwriteDuplicates=True
CommitCount=100
EmptyTable=False
[ODBC]
DSN=
UserName=
Command=
Kind=0
[Fields]
Field=0
FieldStart=0
FieldStartValue=0
FieldEnd=2
FieldEndValue=,
OracleSQL=
OracleField=FTRANSACTIONID (VARCHAR2)
OracleType=0
ODBCField=
ODBCFieldNo=0
ODBCType=0
ODBCCType=0
ODBCLength=0
OracleParamNo=0
Field=1
FieldStart=0
FieldStartValue=0
FieldEnd=2
FieldEndValue=,
OracleSQL=
OracleField=FFEETERMINAL (VARCHAR2)
OracleType=0
ODBCField=
ODBCFieldNo=0
ODBCType=0
ODBCCType=0
ODBCLength=0
OracleParamNo=0
Field=2
FieldStart=0
FieldStartValue=0
FieldEnd=2
FieldEndValue=,
OracleSQL=
OracleField=FDESTADDR (VARCHAR2)
OracleType=0
ODBCField=
ODBCFieldNo=0
ODBCType=0
ODBCCType=0
ODBCLength=0
OracleParamNo=0
Field=3
FieldStart=0
FieldStartValue=0
FieldEnd=2
FieldEndValue=,
OracleSQL=to_date('#', 'yyMMddHH24MISS')
OracleField=FSUBMITTIME (DATE)
OracleType=2
ODBCField=
ODBCFieldNo=0
ODBCType=0
ODBCCType=0
ODBCLength=0
OracleParamNo=0
Field=4
FieldStart=0
FieldStartValue=0
FieldEnd=2
FieldEndValue=,
OracleSQL=to_date('#', 'yyMMddHH24MISS')
OracleField=FDELIVERTIME (DATE)
OracleType=2
ODBCField=
ODBCFieldNo=0
ODBCType=0
ODBCCType=0
ODBCLength=0
OracleParamNo=0
]]>
Spring BeanDoc 是一个根据spring的bean配置文g生成文档的工兗?/p>
http://opensource.atlassian.com/confluence/spring/download/attachments/993/spring-beandoc-0.7.0.tgz?version=1
graphviz-2.8:
参考:(x) http://www.graphviz.org/Download_windows.php
apache-ant-1.6.5:
http://www.eu.apache.org/dist/ant/binaries/apache-ant-1.6.5-bin.zip
讄环境变量Q?br />ANT_HOME=D:\java\apache-ant-1.6.5
Path=D:\jdk1.5.0_06\bin;D:\java\apache-ant-1.6.5\bin;........
q行graphviz-2.8.exeQ安装到D:\Programs\ATT?/p>
#-----------------------------------------
# @since 1.0
i18n-filelist=files making up this application context
i18n-description=\u63CF\u8FF0
i18n-attributes=\u5C5E\u6027
i18n-constructorargs=\u6784\u9020\u53C2\u6570
i18n-allTitle=\u6240\u6709 Beans
i18n-summaryTitle=beans\u6458\u8981
i18n-detailTitle=beans\u8BE6\u60C5
i18n-innerbean=\u533F\u540D\u5185\u90E8bean
i18n-home=\u9996\u9875
i18n-summary=\u6458\u8981
i18n-detail=\u8BE6\u60C5
i18n-abstractbean=\u62BD\u8C61 bean
i18n-deps=\u4F9D\u8D56, \u5C5E\u6027\u503C \u548C \u65B9\u6CD5 \u6CE8\u5165
i18n-backtotop=\u9000\u56DE\u5230\u9876\u90E8
i18n-name=\u540D\u5B57
i18n-bean=bean
i18n-argtypes=\u53C2\u6570\u7C7B\u578B
~辑beandoc.propertiesQ?/p>
W?0行改为:(x)compiler.dotExe=d:/Programs/ATT/GraphViz/bin/dot.exe
到D:\java\spring-beandoc-0.7.0\samples\jpetstore
需要带参数Q?br />D:\java\SPRING~1.0\samples>runbeandoc-cli.bat beandoc.properties
可以看到生成好的文档了?br />
]]>
通过使用blogjava和codelphi的blog的体?x)?br />参考的.text的样子,军_照虎ȝ自己写一个?br />目前已经完成大部分功能?br />
通过http://222.66.24.243/webblog/debug/init.jspq个地址自动dQ然后进行blog理?br />
?http://222.66.24.243/webblog/u/demouser 察看效果?br />
前台界面使用了jstl和oscache标签。开发时间大U一个星?br />后台界面Q采用的ajax的方式。开发时间大U两个星期?br />面风格样式主题照搬的codelphi的blog?br />
׃现在数据量小Q现在执行一个页面的旉大约?00毫秒Q在oscache~存之后?0毫秒?br />暂时q推断不了数据量大了之后?x)不会(x)出现csdn和donews那样的性能问题?br />׃寚w面缓存的旉是一个小Ӟ只在回复文章的时候做了即时刷新缓存?br />因此其它地方的修改,需要过D|间才能够看到效果?br />
Ƣ迎大家帮忙试QƈƢ迎在此发表意见?br />
]]>
]]>
]]>
因此自己整理如下Q?br />
先下?
http://surfnet.dl.sourceforge.net/sourceforge/proxool/proxool-0.9.0RC2.zip
web.xml
-------------------------
<servlet>
<servlet-name>proxoolServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/proxool.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>proxooladmin</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>proxooladmin</servlet-name>
<url-pattern>/proxooladmin</url-pattern>
</servlet-mapping>
-------------------------
proxool.xml
-------------------------
<?xml version="1.0" encoding="UTF-8"?>
<proxool-config>
<proxool>
<alias>blogdb</alias>
<driver-url>jdbc:oracle:thin:@127.0.0.1:1521:ORADB</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="lizongbo"/>
<property name="password" value="password"/>
</driver-properties>
<maximum-connection-count>10</maximum-connection-count>
<house-keeping-test-sql>select 1 from dual</house-keeping-test-sql>
</proxool>
</proxool-config>
spring里:(x)
两种配置Q?br />a: <!-- 与上面的proxool以及(qing)web.xml里结合?->
<bean id="mainDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.logicalcobwebs.proxool.ProxoolDriver</value>
</property>
<property name="url">
<value>proxool.blogdb</value>
</property>
</bean>
b:<!-- 单独的类似dbcp的?->
<bean id="mainDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method="close">
<property name="driver">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="driverUrl">
<value>jdbc:oracle:thin:lizongbo/password@127.0.0.1:1521:ORADB</value>
<!--用户名和密码写在一h调用成功,不然?x)?调用无效的参?错误Q下面设|用户名和密码的property好像是无效的Q其它数据库也是q样
比如mysql的也要把用户名和密码写在url里:(x)<property name="driverUrl" value="jdbc:mysql://localhost:3306/blogdb?user=lizongbo&password=lizongbo" />
-->
</property>
<property name="user"> <!-- 必须在这里也讄Q但?proxool却不使用它,或许是个bug-->
<value>lizongbo</value>
</property>
<property name="password"> <!-- 必须在这里也讄Q但?proxool却不使用它,或许是个bug-->
<value>lizongbo</value>
</property>
<property name="alias">
<value>lizongbo</value>
</property>
<property name="houseKeepingSleepTime">
<value>90000</value>
</property>
<property name="prototypeCount">
<value>5</value>
</property>
<property name="maximumConnectionCount">
<value>100</value>
</property>
<property name="minimumConnectionCount">
<value>10</value>
</property>
<property name="trace">
<value>true</value>
</property>
<property name="verbose">
<value>true</value>
</property>
</bean>
]]>
1. 手工对字W串~码解码的方法ؓ(f)Q?br />java.net.URLEncoder.encode("试","UTF-8");
java.net.URLDecoder.decode("%E6%B5%8B%E8%AF%95%26%3Faaa","UTF-8");
q个Ҏ(gu)适用于自׃原始字符串中q行解码处理?br />
2. tomcat服务器的处理url~码的方?
修改tomcat的server.xml增加指定的编码,以代替tomcat默认的ISO-8859-1?br />需要增加的参数为:(x)URIEncodingQ?br />比如下面的例子是制定解码使用UTF-8Q?br /><Connector port="8080"
maxThreads="800" minSpareThreads="25" maxSpareThreads="100"
enableLookups="false" redirectPort="8443" acceptCount="0"
debug="0" connectionTimeout="20000" URIEncoding="UTF-8"
disableUploadTimeout="true" />
如果用到了apache与tomcat 的整合,则还需?
<Connector port="8009" URIEncoding="UTF-8"
enableLookups="false" redirectPort="8443" debug="0"
protocol="AJP/1.3" maxThreads="1100" minSpareThreads="25" maxSpareThreads="100" acceptCount="0"/>
Q这个方法最单方便,但是使用q种的方法之后,代码中就不需要也能有new String(strvalue.getBytes("ISO8859-1","GBK"); q样的处理方式)
3.对于已经部v的系l,可能已经有其他同事对~码使用?br />new String(strvalue.getBytes("ISO8859-1","GBK");
q样的方法作了处理,q个时候用第二种Ҏ(gu)可能会(x)影响到其它模块的正常使用Q?br />
因此Q我们可以自己重新解析queryString我封装了几个Ҏ(gu)。用重新封装的Ҏ(gu)可以在不影响原来pȝ的情况下Q正的获得参数?br />
装的代码如下,供大家参考:(x)
/**
* 从请求的url字符串中解析参数Q当request.getParameterValues()取得的参数值编码g正确的时候可以用该Ҏ(gu)
* @param request HttpServletRequest
* @param paramName String
* @return String[] q回多个同参数名的?br />*/
public static String[] getParamsFromQueryString(HttpServletRequest request,
String paramName) {
return getParamsFromQueryString(request.getQueryString(), paramName);
}
/**
* 从请求的url字符串中解析参数Q当request.getParameterValues()取得的参数值编码g正确的时候可以用该Ҏ(gu)
* @param request HttpServletRequest
* @param paramName String
* @return String[]
*/
public static String getParameterFromQueryString(HttpServletRequest request,
String paramName) {
return getParameterFromQueryString(request.getQueryString(), paramName);
}
/**
* 从请求的url字符串中解析参数Q当request.getParameter()取得的参数值编码g正确的时候可以用该Ҏ(gu)
* @param queryString String
* @param paramName String
* @return String 只返回一个?br />*/
public static String getParameterFromQueryString(String queryString,
String paramName) {
String[] s = getParamsFromQueryString(queryString, paramName);
if (s != null && s.length >= 1) {
return s[0];
}
return null;
}
/**
* 从请求的url字符串中解析参数Q当request.getParameter()取得的参数值编码g正确的时候可以用该Ҏ(gu)
* @param queryString String
* @param paramName String
* @return String[] q回多个同参数名的?br />*/
public static String[] getParamsFromQueryString(String queryString,
String paramName) {
if (paramName == null || paramName.length() < 1 || paramName == null ||
paramName.length() < 1) {
return new String[0];
}
List rsl = new ArrayList();
String params[] = queryString.split("&");
for (int i = 0; i < params.length; i++) {
// System.out.println(params[i]);
if (params[i] != null && params[i].startsWith(paramName + "=")) {
try {
rsl.add(java.net.URLDecoder.decode(params[i].substring(paramName.
length() +
1), "UTF-8")); //Ҏ(gu)需要修改自p使用的编码?br />}
catch (UnsupportedEncodingException ex) {
}
}
}
return (String[]) rsl.toArray(new String[0]);
}
public static void main(String[] args) {
//该例子演C码?br />//jsp和servlet中调?br />// System.out.println(getParameterFromQueryString(request.getQueryString(), "q"));
//该例子示意的是gogole的url中的queryString?br />System.out.println(getParameterFromQueryString(
"hl=zh-CN&newwindow=1&q=%E6%B5%8B%E8%AF%95%26%3Faaa&meta=", "q"));
}
]]>
A. java操作xmlrpc.
可以使用 apache xmlrpc http://ws.apache.org/xmlrpc/
(http://ws.apache.org/xmlrpc/types.html apache xmlrpc 对javacd作了扩展Q但是如果要考虑其它~程语言的调用,不徏议用扩展的cd)
B. delphi操作xmlrpc的库是delphixml-rpcQ?a >http://sourceforge.net/projects/delphixml-rpc/
(|上有h提到qcodepunkQ但是现在已l无法下?http://www.codepunk.com/xmlrpc1_7_6.zip ,参考:(x)http://www.delphibbs.com/keylife/iblog_comment.asp?xid=870)
于是选择了delphixml-rpc,实际使用中遇C下一些问题,
1.汉字处理的问题?delphi作客L(fng), java作服务端,产生
Hello, 你好 , test  汉字"不能够{换成"Hello, 你好 , test 汉字"
的问? 解决Ҏ(gu)如下:
xmlrpcparser
1554行,
CHRҎ(gu)widechar
如下:
THEN CurContent := CurContent + widechar (StrToIntDef ('$'+Copy (Name, 3, MaxInt), 32))
ELSE CurContent := CurContent + widechar (StrToIntDef (Copy (Name, 2, MaxInt), 32));
对于sf上最新的xmlrpc?则需要修改LibxmlPraser.pas对应地方的代?
2.I字W串Q非nullQ的解析问题?br />java 的代码:(x) Hashtable struct = new Hashtable();
struct.put("type", new Integer(0));
struct.put ("id", "0"); //如果q样?struct.put("id", ""); ,׃(x)Dl构体错?,取不到第一?struct
解决办法Q通过一个约定的字符东ynil”来表示I字W串?/p>
tomcat?ssl配置?
<Connector port="8083"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="conf/ca/.keystore"
keystorePass="password">
</Connector>
而delphi的xmlrpc调用?x)出问?因此需要修Ҏ(gu)代码:
在XmlRpcClient.pas的第321行之后加上下面两行代?
IdSSLIOHandlerSocket.SSLOptions.Mode := sslmUnassigned;
IdSSLIOHandlerSocket.SSLOptions.Method := sslvTLSv1;
(如果tomcat使用了apr,则ssl配置是不一L(fng)Q这U情况下的delphi调用Q我们没试q?
4.qDl构体解析失?br />
如果l构体的string里有不可识别的字W,?x)导致结构体解析p|Q?br />因此Q在传输的内容ؓ(f)不可预见的情况下Q比如用户发送的千奇百怪的短消息)Q?br />用byte传送(实际工作中遇到这L(fng)情况qȝ出来的。)
服务?Qstruct.put ("msg", "试短消?); ---> struct.put ("msgbyte", "试短消?.getBytes());
客户端delphi代码改用asBase64strҎ(gu)来还原ؓ(f)string.
(以上均是实际工作中遇到的问题?)
多个参数的调用可以放在一个数l,也可以分别传?同jdk1.5的可变参?Variable Arguments)?br />如果只传一个参敎ͼ而这个参数是个数l,需要这样写Q?/p>
try{
var xmlrpc = importModule("xmlrpc");
}catch(e){
reportException(e);
throw "importing of xmlrpc module failed.";
}
var addr = "http://lizongbo:808/lizongbo/xmlrpc";
var methods = ["lizongbo.testOneArray"];
var rslt;
var params = new Array();
params[0] = "0311112";
params[1] = "awsasaas";
params[2] = "awsasaas";
try{
var service = new xmlrpc.ServiceProxy(addr, methods);
rslt = service.lzbrpc.testOneArray([params]);//用中括号括v来,否则?x)被解析Z个传入参数的调用
///service.lzbrpc.testOneArray(params) {同于service.lzbrpc.testOneArray(params[0],params[1],params[2]);
比如下面q个l构体, 则可以用rslt.flag,rslt.info,rslt.struct.version来分别得到对应的倹{?br /> Q符合domQ?br />// var str="" + rslt.flag+' xx '+rslt.info+' yy '+rslt.struct.version ;
// 或者var str="" + rslt['flag']+' xx '+rslt['info']+' yy '+rslt['struct']['version'];
//得到的结果是"1 xx 成功 yy 123.beta "
参?Q?http://www.aygfsteel.com/mstar/archive/2005/06/07/5657.aspx
http://torrez.net/projects/konstructor/Konstructor.exe
来自:
http://torrez.net/archives/xmlrpc_request_builder.php
不支持https,也不支持?0外的其它端口
]]>
http://www.aygfsteel.com/zJun/archive/2006/02/27/32723.html
后来下蝲源代码下来找C修改bug的地斏V?BR>q把代码发到 displaytag的jira里了Q具体地址在:(x)
http://jira.codehaus.org/browse/DISPL-303 Q有人已l提交这个bug了)
org.displaytag.pagination.SmartListHelper.java
把下面两个方法的代码改写如下Q?/P>
return (this.currentPage - 1) * this.pageSize;
}
* Returns the index into the master list of the last object that should appear on the current page that the user is
* viewing.
* @return int
*/
protected int getLastIndexForCurrentPage() {
if (this.partialList) {
return (getFirstIndexForCurrentPage()) +
Math.min(this.pageSize - 1, this.fullList.size() - 1);
} else {
return getLastIndexForPage(this.currentPage);
}
}
Z记录 displaytag 1.1 使用Partial Lists大数据量分页的例子:(x)
Integer totalNum = new Integer(919);
request.setAttribute("totalNum",totalNum);//讄总记录条?BR>%>
比如Q?BR> <display:table id="testtbid" name="requestScope.testlist" pagesize="20" partialList="true" size="totalNum">
String rpname = new org.displaytag.util.ParamEncoder("testtbid")
.encodeParameterName(
org.displaytag.tags.TableTagParameters.PARAMETER_PAGE);
System.out.println("当前|Q? + rpname + " = " +
request.getParameter(rpname));
//然后Ҏ(gu)当前|M数据库中取出相应数据?/P>
表格分页D条里的分链接个数默认是8个,可以通过下面的代码来更改
//?lt;display:table>标签?BR> <display:setProperty name="paging.banner.group_size" value="20"/>
//</display:table>
http://displaytag.sourceforge.net/11/tut_externalSortAndPage.html
利用内置el在displaytag里显Ccheckbox非常单:(x)
<display:column title='select User' >
<input type="checkbox" name="firstName" value="{testtbid.name}" />${testtbid.name}
</display:column>
]]>
java.util.ConcurrentModificationException q个异常?BR>Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:787)
at java.util.HashMap$KeyIterator.next(HashMap.java:823)
解决办法如下Q?/P>
import java.util.*;
public class TestMap {
public TestMap() {
}
public static void main(String[] args) {
java.util.Map m = new java.util.HashMap();
m.put("aaa", "lizongbo ");
m.put("bbb", " lizongbo");
m.put("ccc", "lizongbo ");
m.put("ddd", " lizongbo");
m.put("eee", "lizongbo");
m.put("fff", "lizongbo");
m.put("ggg", "lizongbo");
m.put("adads", "lizongbo");
m.put("dffd", "lizongbo");
m.put("dcxv", "lizongbo");
m.put("lizongbo", "lizongbo");
m.put("ert", "lizongbo");
m.put("544", "lizongbo ");
Iterator iterator = m.keySet().iterator();
while (iterator.hasNext()) {
String sessionId = (String) iterator.next();
if ("ggg".equals(sessionId) || "lizongbo".equals(sessionId) ||
"544".equals(sessionId)) {
iterator.remove(); //q行代码是关键?BR> m.remove(sessionId);
}
}
System.out.println(m.get("ggg"));
System.out.println(m.get("lizongbo"));
System.out.println(m.get("544"));
}
相关参考:(x) http://ldfren.bosinet.com/archives/113.html
http://gceclub.sun.com.cn/yuanchuang/week-14/iterator.html