在路上...

BlogJava 首页 新随笔 联系 聚合 管理
  16 Posts :: 2 Stories :: 24 Comments :: 0 Trackbacks

2008年7月18日 #

首先,下载openssl安装,windows环境从http://www.openssl.org/related/binaries.html下载。
我这里测试下载的版本是:http://www.slproweb.com/download/Win32OpenSSL-0_9_8h.exe
安装完成之后,修改bin目录下面的openssl.cfg为openssl.cnf,在请求证书时需要用到这个配置文件,生成证书,为了方便,编写了下面的批处理文件,供参考:


@echo off
echo 
1.CA 创建一个 RSA 私用密钥
openssl genrsa 
-out %1.key 1024 

echo.
echo 
2.利用 CA 的 RSA 密钥创建一个自签署的 CA 证书(X.509结构)
openssl req 
-new -x509 -days 36500 -key %1.key -out %1.crt -subj /C=CN/ST=GuangDong/L=GuangZhou/O=SinoTech/OU=CA-SinoTech

echo.
echo 
3.CA 创建一个 服务端 RSA 私用密钥
openssl genrsa 
-out %2.key 1024 
echo.

echo 
4.创建服务端签署请求 CSR
openssl req 
-new -key %2.key -out %2.csr -subj "/C=CN/ST=GuangDong/L=GuangZhou/O=SinoTech/OU=Serv-SinoTech/CN=SinoTech Weblogic Server"

echo.
echo 
5.签署证书
rem 准备一些默认文件、目录,否则运行时会报错
if exist "%cd%\newcerts" goto got1
md newcerts
:got1

if exist "%cd%\index.txt" goto got2
echo tmp 
>_tmp
del _tmp 
>index.txt
:got2

if exist "%cd%\serial" goto got3
echo AD 
>serial
:got3

openssl ca 
-in %2.csr -out %2.crt -cert %1.crt -keyfile %1.key 
echo.
echo 处理完成
pause

运行批处理
genca.cmd [CA证书名] [服务端证书名]
例如genca.cmd ca server

通过上面命令,会生成server.crt,server.key,然后将上面参数加到tomcat的配置中就可以使用SSL连接方式访问网站应用了
<Connector 
           
port="8443" minSpareThreads="5" maxSpareThreads="75"
           enableLookups
="true" disableUploadTimeout="true" 
           acceptCount
="100"  maxThreads="200"
           scheme
="https" secure="true" SSLEnabled="true"
           SSLCertificateFile
="C:\apache-tomcat-6.0.16\conf\server.crt" 
           SSLCertificateKeyFile
="C:\apache-tomcat-6.0.16\conf\server.key"
           clientAuth
="false" sslProtocol="TLS"/>
posted @ 2008-07-18 12:40 在路上... 阅读(133) | 评论 (0)编辑 收藏

2008年6月21日 #

  个人知识管理的29个原则

1持续的学习成为个人生存和发展的基础。持续学习不一定能带来成功,但不学习一定失败; 

2信息和知识爆炸,在一段时间和时期内,学习的内容必须聚焦。起码要在一个领域内成为专家。 

3你应该学习的内容取决于你的价值观、特长、个性和目标。

4、你必须学会如何有效的评估信息和知识,所以你必须根据你的价值观、特长、个性和目标确立自己对信息和知识的“过滤器”;

5、人是知识获取的重要渠道,所以你应该知道谁最擅长什么?遇到问题时知道可以向谁学习和请教;

6、你牛了你的朋友也一定牛,建立人际资源的基础是自己的知识基础、个性和激情、自己优势的合理展示和帮助别人的意愿;

7、人际关系需要维护;捷径是找到那些愿意共享自己朋友资源的人,你也应该做这样的人;

8、信息如果不经过处理,不能称为知识。所以你存储的知识起码你应该简单看过、知道是在讲什么;

9、信息和知识存储前应该尽可能做规范化的工作,例如你做的摘要、感触、觉得最有价值的部分、将来能做什么用等等;

10、建立自己的分类字典,而不是每次想起什么就建立什么样的文件夹或者标签。分类字典,持之以恒坚持,适当调整;

11、知识存储中分类不宜过宽,过宽则等于没有分类;分类不宜过深,过深后你就不会再去看;

12、充分利用各种工具,尤其是web2.0工具做知识存储和获取工作;

13知识存储时适当共享,听取和收集别人的意见和建议;

14有意识的做知识显性化的工作,既方便知识传播也促进知识学习和建立人际网络;

15知识传播中必须考虑传播的方式和效率;

16不能用简单朴素的语言表述的知识证明你还没有深入理解;

17多用举例子、讲故事的方法传播你的知识、见解。这个过程是你对知识的再深化过程;

18你的知识传播的越广,你的影响力越大;

19你的目的决定了你知识利用的方式。如果目的是要写论文,则你的知识就是明确、简洁的表达;如果是想要在市场上销售,就必须产品化、规范化或者专利化;

20知识本身没有价值,只有被利用时才能展现其价值;

21知识必须跟任务、项目结合起来才能发挥作用;

22单独的一个主题的知识很难被很好的利用,所以你必须将你的知识融入团队中或者找到自己的合作伙伴;

23知识创新最简单的方法是总结和分析;

24知识创新是一种习惯;

25学习或者实践---总结----将总结出来的内容投入实践检验和请行家批评—继续总结和实践;

26不能光做,还要思考;

27个人竞争力的源泉不是你现在知道的或者掌握的,而是你选择方向和快速学习的能力,是你能够将知识用足用好的能力;

28环境造就人,太安逸的环境对个人的发展弊大于利。如果不能找到好的环境,那就自己给自己压力;

29、既要会做,也要会展示自己做的,要有树立个人品牌意识。

posted @ 2008-06-21 16:07 在路上... 阅读(88) | 评论 (0)编辑 收藏

2008年6月13日 #

一般的数据库中,DATE字段仅仅表示日期,不包括日期信息,而Oracle数据库中的DATE数据类型是包括日期、时间的,对于不同的Oracle jdbc驱动版本,对于该问题的处理都有些区别,如果你使用9i或者11g
的驱动程序,可能不会发现什么困惑,不幸的话,你使用Oracle10g的JDBC驱动,问题就来了,你会发现时间不见了
看下面的程序
• 表结构如下
create table t_test(
id int,
date1 date,
date2 timestamp,
primary key(id)
)

 1try {
 2            Class.forName("oracle.jdbc.OracleDriver");
 3            java.sql.Connection connection1 = DriverManager.getConnection("jdbc:oracle:thin:@192.168.8.200:1521:cdb""sysusr""sys");
 4            System.out.println(connection1);
 5            System.out.println(connection1.getMetaData().getDriverName()+" "+connection1.getMetaData().getDriverVersion());
 6            ResultSet rs = connection1.createStatement().executeQuery("select date1,date2 from t_test");
 7            rs.next();
 8             printInfo(rs,1);
 9            printInfo(rs,2);
10        }

11        catch (Exception exception1) {
12            exception1.printStackTrace();
13        }

14
15
16public static void printInfo(ResultSet rs,int i) throws SQLException{
17        ResultSetMetaData meta=rs.getMetaData();
18        System.out.printf("Colname=%s,Type=%s,TypeName=%s,val=[%s];\n",meta.getColumnName(i),meta.getColumnType(i),meta.getColumnTypeName(i),rs.getObject(i).toString());
19    }

• 如果使用9i或者11g的驱动连接数据库,返回结果如下:
9i数据库JDBC
oracle.jdbc.driver.OracleConnection@16930e2
Oracle JDBC driver 9.2.0.8.0
Colname=DATE1,Type=91,TypeName=DATE,val=[2008-06-13 13:48:21.0];
Colname=DATE2,Type=93,TypeName=TIMESTAMP,val=[oracle.sql.TIMESTAMP@18d107f];

11g数据库JDBC
oracle.jdbc.driver.T4CConnection@a61164
Oracle JDBC driver 11.1.0.6.0-Production+
Colname=DATE1,Type=93,TypeName=DATE,val=[2008-06-13 13:48:21.0];
Colname=DATE2,Type=93,TypeName=TIMESTAMP,val=[oracle.sql.TIMESTAMP@c4aad3];

如果使用10g JDBC驱动,结果如下:
oracle.jdbc.driver.T4CConnection@1bac748
Oracle JDBC driver 10.2.0.2.0
Colname=DATE1,Type=91,TypeName=DATE,val=[2008-06-13];
Colname=DATE2,Type=93,TypeName=TIMESTAMP,val=[oracle.sql.TIMESTAMP@b8df17];

结果是让人困惑,时间怎么不见了?

对于该问题,在Oracle的JDBC FAQ中有提到解决办法:
Prior to 9.2, the Oracle JDBC drivers mapped the DATE SQL type to java.sql.Timestamp. This made a certain amount of sense because the Oracle DATE SQL type contains both date and time information as does java.sql.Timestamp. The more obvious mapping to java.sql.Date was somewhat problematic as java.sql.Date does not include time information. It was also the case that the RDBMS did not support the TIMESTAMP SQL type, so there was no problem with mapping DATE to Timestamp. 

In 9.2 TIMESTAMP support was added to the RDBMS. The difference between DATE and TIMESTAMP is that TIMESTAMP includes nanoseconds and DATE does not. So, beginning in 9.2, DATE is mapped to Date and TIMESTAMP is mapped to Timestamp. Unfortunately if you were relying on DATE values to contain time information, there is a problem. 

There are several ways to address this problem: 

Alter your tables to use TIMESTAMP instead of DATE. This is probably rarely possible, but it is the best solution when it is. 

Alter your application to use defineColumnType to define the columns as TIMESTAMP rather than DATE. There are problems with this because you really don't want to use defineColumnType unless you have to (see What is defineColumnType and when should I use it?). 

Alter you application to use getTimestamp rather than getObject. This is a good solution when possible, however many applications contain generic code that relies on getObject, so it isn't always possible. 

Set the V8Compatible connection property. This tells the JDBC drivers to use the old mapping rather than the new one. You can set this flag either as a connection property or a system property. You set the connection property by adding it to the java.util.Properties object passed to DriverManager.getConnection or to OracleDataSource.setConnectionProperties. You set the system property by including a -D option in your java command line. 

  java -Doracle.jdbc.V8Compatible="true" MyApp


参照上面的解释,修改代码如下可以解决10g JDBC驱动的问题:
try {
            Class.forName(
"oracle.jdbc.OracleDriver");
            Properties prop
=new Properties();
            prop.setProperty(
"user","sysuser");
            prop.setProperty(
"password","sys");
            prop.setProperty(
"oracle.jdbc.V8Compatible","true");
            java.sql.Connection connection1 
= DriverManager.getConnection("jdbc:oracle:thin:@192.168.8.200:1521:cdb"
, prop);
            System.out.println(connection1);
            System.out.println(connection1.getMetaData().getDriverName()
+" "+connection1.getMetaData().getDriverVersion());
            ResultSet rs 
= connection1.createStatement().executeQuery("select date1,date2 from t_test");
            rs.next();
            printInfo(rs,
1);
            printInfo(rs,
2);
        }

        
catch (Exception exception1) {
            exception1.printStackTrace();
        }
或者在系统变量中使用参数-Doracle.jdbc.V8Compatible="true",例如
java -Doracle.jdbc.V8Compatible="true" MyApp

结果如下:
oracle.jdbc.driver.T4CConnection@9664a1
Oracle JDBC driver 10.2.0.2.0
Colname=DATE1,Type=93,TypeName=DATE,val=[2008-06-13 13:48:21.0];
Colname=DATE2,Type=93,TypeName=DATE,val=[oracle.sql.TIMESTAMP@1172e08];
posted @ 2008-06-13 14:19 在路上... 阅读(1302) | 评论 (4)编辑 收藏

2008年6月5日 #

众所周知,Oracle的数据库、中间件都可以在网上自由下载,没有任何license注册码的限制。
现在,Oracle以85亿美元收购了BEA,带来的最直接的好处是,以前严格保密的License文件现在都可以直接下载了。请看下面页面:
http://commerce.bea.com/products/all_products.jsp#WL

WebLogic Family License Keys
http://download2.bea.com/pub/license/All%20Products/BEA_WebLogic.zip

AquaLogic Family License Keys
http://download2.bea.com/pub/license/All%20Products/BEA_AquaLogic.zip

摘录部分内容如下:
========================================
    = Read Me -- BEA WebLogic License Keys =
    ========================================

Some BEA products require multiple license keys for full functionality, or use a license key which is not intuitively identified as being for that product.

Please refer to the legend below to determine which license keys are required for the BEA products you own.



BEA WebLogic Server Products (Product, Version, License ID/file)
================================================================

BEA WebLogic Server Advantage Edition    10.0 - 10.0mp1    LIC-WLSA10.txt
                    9.2 - 9.2mp3    LIC-WLSA92.txt
                    9.0        LIC-WLSA90.txt

BEA WebLogic Server Premium Edition    10.0 - 10.0mp1    LIC-WLSP10.txt
                    9.2 - 9.2mp3    LIC-WLSP92.txt
                    9.0        LIC-WLSP90.txt

BEA WebLogic Server SDK            10.x        LIC-WLSP10-DEV
                    9.2        LIC-WLSP92-DEV
                    9.1        LIC-WLSP91-DEV
                    9.0        LIC-WLSP90-DEV

BEA WebLogic Server Premium for Linux s/390 and z/Series
                    7.0sp1        LIC-WLS70-CLS-56

BEA WebLogic Server Mid-Market Edition    10.0 - 10.0mp1    LIC-WLS10-MME.txt
                    9.2 - 9.2mp3    LIC-WLS92-MME.txt


    
BEA WebLogic Platform Products (Product, Version, License ID/file)
==================================================================
                
BEA WebLogic Platform            10.2 ISV    LIC-PLAT102-ISVED
                    10.2        LIC-AUTONOMY

                            LIC-PORT102
                            
LIC-WLI102
                    9.2mp3 ISV    LIC-PLAT92-ISVED
                    9.2 - 9.2mp3    LIC-PFRM92.txt
                    8.1 - 8.1sp6    LIC-PFRM81-128.txt
                    7.0 - 7.0sp7    LIC-PFRM70-128.txt

<license
            
component="WebLogic"
            cpus
="unvalued"
            expiration
="never"
            ip
="any"
            licensee
="Customer"
            serial
="454493271161-2642447506228"
            type
="RTK"
            units
="unlimited"
            signature
="MCwCFHRYQyBkRqhyayiKQBDxfTq/bWfYAhQj+RMMeDMVxjiYhBaXuHobbHe/JA=="
        
/>

呵呵,都什么年代了,您还在Google、baidu中搜索“weblogic 破解”这样的关键字吗,用不着了。但是这并不意味着您可以免费使用这些产品,熟悉Oracle的人都知道,如果您想在企业级应用中部署这些产品,您还是得付money!
posted @ 2008-06-05 10:46 在路上... 阅读(2809) | 评论 (6)编辑 收藏

2008年6月3日 #

开发环境一直使用jdbc14.jar "Oracle JDBC Driver version - 9.0.2.0.0"版本连接Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 服务器,突然今天不能连接了,报错误如下:
java.sql.SQLException: 不能在 UTF8 和 UCS2 之间转换: failUTF8Conv
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:
134)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:
179)
        at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:
1130)
        at oracle.jdbc.dbaccess.DBConversion.failUTF8Conv(DBConversion.java:
2261
)
        at oracle.jdbc.dbaccess.DBConversion.utf8BytesToJavaChars(DBConversion.j
ava:
2061)
        at oracle.jdbc.dbaccess.DBConversion.utf8BytesToString(DBConversion.java
:
1976)
        at oracle.jdbc.dbaccess.DBConversion.CharBytesToString(DBConversion.java
:
543)
        at oracle.jdbc.ttc7.TTIoer.processWarning(TTIoer.java:
334)
        at oracle.jdbc.ttc7.O3log.receive2nd(O3log.java:
523)
        at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:
278)
        at oracle.jdbc.driver.OracleConnection.
<init>(OracleConnection.java:346)

        at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.ja
va:
468)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:
314)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at JDBC.main(JDBC.java:
9)
然后更换为Oracle  11g的驱动,可以正常连接了,但是会显示下面异常
javax.management.MalformedObjectNameException: Invalid character '
'
 in value part of property
at javax.management.ObjectName.construct(ObjectName.java:529)
at javax.management.ObjectName.
<init>(ObjectName.java:1304)
at oracle.jdbc.driver.OracleDriver.registerMBeans(OracleDriver.java:
303)
at oracle.jdbc.driver.OracleDriver$
1.run(OracleDriver.java:213)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.jdbc.driver.OracleDriver.
<clinit>(OracleDriver.java:209)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:
164)
采用9i驱动还碰到下面错误
java.sql.SQLException: 违反协议
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:
134)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:
179)
        at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:
1160)
        at oracle.jdbc.ttc7.O3log.receive2nd(O3log.java:
548)
        at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:
279)
        at oracle.jdbc.driver.OracleConnection.
<init>(OracleConnection.java:371)

        at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.ja
va:
551)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:
351)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
  • 最终查询资料,发现还是jdbc驱动问题,原因因该是与bug有关,因此从新从otn.oracle.com下载驱动升级解决问题。
    ojdbc6.jar的驱动版本可以运行java -jar ojdbc6.jar查看,如果是Oracle 11.1.0.6.0-Production+ JDBC 4.0 compiled with JDK6,带+号就是补丁版本,否则是没有打补丁的,仍然可能出错。
  • 我遇到的请况,采用10.2.0.4的jdbc驱动就没有问题了
  • oracle jdbc驱动下载地址如下:

Oracle Database 11g Release 1 (11.1.0.6) drivers
Oracle Database 10g Release 2 (10.2.0.4), (10.2.0.3), (10.2.0.2), (10.2.0.1.0) drivers
Oracle Database 10g (10.1.0.5), (10.1.0.4), (10.1.0.2.0) drivers
Oracle9i Release 2 (9.2.0.8), (9.2.0.5), (9.2.0.4), (9.2.0.3), & (9.2.0.1) drivers
Oracle9i Release 1 (9.0.1.4) & (9.0.1) drivers
Oracle8i Release 2 (8.1.7)

posted @ 2008-06-03 12:46 在路上... 阅读(496) | 评论 (0)编辑 收藏

2008年1月17日 #

1、首先到请下载最新版本的Java Service Wrapper,点我下载
2、准备如下文件,复制到test目录,这些文件可以从下载包中找到:
wrapper.dll
wrapper.exe
wrapper.jar
3、编写wrapper.conf,也放在同一级目录下面,内容如下

# Java Application完整路径
wrapper.java.command
=java

wrapper.java.mainclass
=org.tanukisoftware.wrapper.WrapperSimpleApp

#定义程序运行的classpath
wrapper.java.classpath
.1=wrapper.jar
wrapper.java.classpath
.2=[jar file/path]

# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path
.1=.

# Java Additional Parameters
#wrapper.java.additional
.1=

# Initial Java Heap Size (in MB)
#wrapper.java.initmemory
=3

# Maximum Java Heap Size (in MB)
#wrapper.java.maxmemory
=64

# 运行的Main Class
wrapper.app.parameter
.1=

wrapper.console.format
=PM
wrapper.console.loglevel
=INFO
wrapper.logfile
=Beanskt.log
wrapper.logfile.format
=LPTM
wrapper.logfile.loglevel
=INFO

wrapper.logfile.maxsize
=0
wrapper.logfile.maxfiles
=0
wrapper.syslog.loglevel
=NONE

#window服务配置
wrapper.console.title
=samplesvr
#服务名
wrapper.ntservice.name
=samplesvr

# 显示名称
wrapper.ntservice.displayname
= sample  Service

# 描述
wrapper.ntservice.description
=sample Service

# 依赖项
wrapper.ntservice.dependency
.1=

# 启动模式:  AUTO_START or DEMAND_START
wrapper.ntservice.starttype
=AUTO_START

# 是否交互.
wrapper.ntservice.interactive
=false


4、运行测试,安装服务
》测试运行是否正常
wrapper.exe -c wrapper.conf
》安装服务
wrapper.exe -i wrapper.conf
》卸载服务
wrapper.exe -r wrapper.conf
》启动
wrapper.exe -t wrapper.conf
》停止
wrapper.exe -p wrapper.conf




posted @ 2008-01-17 15:06 在路上... 阅读(1893) | 评论 (0)编辑 收藏

2007年10月22日 #

      称为是最好的JAVA IDE开发平台!包括:J2EE支持、Ant、JUnit、集成CVS。包含一个智能编辑器,代码辅助和增强的自动代码工具。可提高JAVA开发人员的效率。

   JetBrains已经发布了IntelliJ IDEA 7.0,IntelliJ IDEA 7里程碑1包括许多新的特性和提高,尤其是在对Java EE的支持上,包括Spring和Hibernate,代码分析,扩展版本控制支持,Rational ClearCase集成,增强了调试,代码查询,可用性和性能

   正使用IntelliJ IDEA 6.0的用户可以免费使用IntelliJ IDEA 7.0到2007年12月31号,评估用户可以从官方网站下载并有30天的免费试用期。

   IntelliJ IDEA 7.0的新特性包括:

   1.性能提高
   IDE的启动速度得到改善
   编辑JSP的速度加快
   更快的XML的格式化

   2.对Hibernate的支持
   代码助手

   3.对Spring的支持
   代码助手
   观察依赖的可视化图表
   专门的文件设置编辑器

   4.与Eclipse的协作能力
   导入(从现有的Eclipse工程中创建IntelliJ IDEA .iml和.ipr文件 )
   导出(从现有的IntelliJ IDEA .iml文件中创建Eclipse工程文件)
   同步

   5.版本控制
   支持Rational ClearCase

   6.JavaScript
   支持JSON文件类型
   JSDoc和DoJo样式类型注释提供了更准确的完成和参数类型信息
   JSDoc和DoJo样式注释的丰富文档
   JavaScript命名空间完成/验证

一份注册码如下,Enjoy!
=============================================================

user name:在路上...
License:12008-M3132-RY84C-0GSMK-V7TNK-33XV0
customer id:12008
product id:IDEA
license type:COMMERCIAL
major version:7
minor version:0
generationDate:Mon Oct 22 16:31:47 CST 2007
expirationDate:Sun Jan 20 16:31:47 CST 2008

 

posted @ 2007-10-22 16:35 在路上... 阅读(2030) | 评论 (0)编辑 收藏

2007年10月10日 #

一个典型应用中,使用delphi作为客户端,J2EE服务端,两者之间用XML作为数据交换,为了提高效率,对XML数据进行压缩,为此需要找到一种压缩/解压算法能够两个平台之间交互处理,使用ZLIB算法就是一个不错的解决方案。
1、JAVA实现
在JDK中,在java.util.zip包中已经内置了ZLIB的实现,示例代码如下:
 1//解压
 2    public String decompressData(String encdata) {
 3        try {
 4            ByteArrayOutputStream bos = new ByteArrayOutputStream();
 5            InflaterOutputStream zos = new InflaterOutputStream(bos);
 6            zos.write(convertFromBase64(encdata));
 7            zos.close();
 8            return new String(bos.toByteArray());
 9        }
 catch (Exception ex) {
10            ex.printStackTrace();
11            return "UNZIP_ERR";
12        }

13    }

14
15    //压缩
16    public String compressData(String data) {
17        try {
18            ByteArrayOutputStream bos = new ByteArrayOutputStream();
19            DeflaterOutputStream zos = new DeflaterOutputStream(bos);
20            zos.write(data.getBytes());
21            zos.close();
22            return new String(convertToBase64(bos.toByteArray()));
23        }
 catch (Exception ex) {
24            ex.printStackTrace();
25            return "ZIP_ERR";
26        }

27    }

2、DELPHI中的实现
在DELPHI中,有第3方的控件可以利用来实现压缩/解压,这里我们选择VCLZIP V3.04,可以从这里下载http://www.vclzip.net
为了提高通用性,我们可以编写一个标准的DLL,就可以在Win32平台随意调用了,关键代码如下:
function Cmip_CompressStr(txt: PChar): pchar; stdcall;
var
  zip: TVclZip;
  compr: 
string;
  data: PChar;
begin
  zip :
= TVclZip.Create(nil);
  compr :
= zip.ZLibCompressString(txt);
  data :
= pchar(Base64EncodeStr(compr));
  Result :
= StrNew(data);
  zip.Free
end;

function Cmip_DeCompressStr(txt: PChar): pchar; stdcall;
var
  zip: TVCLUnZip;