??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲熟女精品中文字幕,亚洲午夜精品一级在线播放放 ,亚洲乱亚洲乱妇无码http://m.tkk7.com/lcs/archive/2008/04/25/195835.htmllklkFri, 25 Apr 2008 01:46:00 GMThttp://m.tkk7.com/lcs/archive/2008/04/25/195835.htmlhttp://m.tkk7.com/lcs/comments/195835.htmlhttp://m.tkk7.com/lcs/archive/2008/04/25/195835.html#Feedback0http://m.tkk7.com/lcs/comments/commentRss/195835.htmlhttp://m.tkk7.com/lcs/services/trackbacks/195835.htmlhttp://x.discuz.net/183161/viewspace-16039.html


׃ MySQL 本n的读写及(qing)锁定机制{方面的原因Q与一些其他数据库软g一P在特D情况下的极为频J读写时Q或在服务器掉电(sh)、死机等情况下,相关的数据文件可能会(x)发生被损坏的情况Q通常可以采用以下的方式加以解冟?
.l0E-UQyEO0SupeSite/X-Space官方?Eh-S:Cn Nx gs(N
一:repair.php 修复工具
o^7rU V-uQ0Discuz! 自带?jin)一个?PHP ~写的数据表修复工具 repair.phpQ虚拟主机用户也可用。该工具位于软g包的 ./utilities 目录中,使用旉要上传到服务器上论坛目录Q注意不要连 ./utilities 目录一起上传,否则无法q行Q,
Sj;btNK9u0
1X"|4m&i?6Z v-NmV0upload.jpgSupeSite/X-Space官方?]] Jj.G"^
在浏览器q行后点M面的链接卛_
Rx(m-qy0SupeSite/X-Space官方?C3K{~ n%E)c-G"WB
run.jpgSupeSite/X-Space官方?_N'C _b
SupeSite/X-Space官方?q4l8l q u C%[K
修复以后如果出现下面的画面表CZ复成?!!SupeSite/X-Space官方?G iv`*X

aM@5A z n'\ ez*A0SupeSite/X-Space官方?L `C ZQF0s^-Y
result.jpg
'qb _H!Q4t)['^/e0q个工具能修复大多数常见的数据库错误Q尤其是错误号ؓ(f) 126?27 的错误,?145 错误也可修复Q同时能Ҏ(gu)据表在修复之后进行优化。如果一ơ修复不成功Q可以尝试多ơ,或将数据库重启后再试?
_~yFxm0
3P` w:e G9S,t2m)V0SupeSite/X-Space官方?G)Y+N$|:p[J-|*{I&c7e
SupeSite/X-Space官方?[@N*AfS
?:myisamchk 修复工具SupeSite/X-Space官方?E)?E/?F5S&o
MySQL 自带?jin)专门用h据表(g)查和修复的工具——myisamchkQ当 repair.php 多次修复均无法成功时Q可以在服务器终端?myisamchk q行修复。在 MySQL 的程序文件目录(见《数据备份与恢复》中的说明)(j)可以扑ֈq个工具?SupeSite/X-Space官方?k[n+Vq KYW

J6g;oB%fy;gG@0常用的修复命令ؓ(f) myisamchk -r 数据文g目录/数据表名.MYIQ如?-r 参数不能奏效Q可以先把数据文件备份(备䆾可用直接文件复制的方式Q详见《数据备份与恢复》中的说明)(j)后?-o 参数,如果-oq不可以的话,׃?f参数,如果q是无法修复,只有使用你的备䆾文g来恢复数据了(jin)!什??你没有备份文?img title="点击囄可在新窗口打开" style="cursor: pointer" src="http://www.discuz.net/images/smilies/shocked.gif" align="absMiddle" border="0" alt="" />那你坐到那里哭?!开个玩W?但是|站?qing)时的做备䆾实是很重要?其当有一定的规模以后,每天都做备䆾!!SupeSite/X-Space官方?^9I J n1?8f!j&w xp:}
下面说一下具体的步骤:SupeSite/X-Space官方?[#R"^w}
1.SupeSite/X-Space官方?r RG'^7^-t+XuO

gEVu7B} jK0cmd.jpgSupeSite/X-Space官方?r sFS(V.?rH
2.更改当前目录到mysql/bin下面,一般情况下只有在这个下面才能运行myisamchk命o(h)
;E-}&xJ ^n-V2Q9W#T0SupeSite/X-Space官方?L5I&ry R4y:j#}+w$[
SupeSite/X-Space官方?er5f/?8EB'q0m`
myisamchk.jpgSupeSite/X-Space官方?GN,}7f5C*V
3.修复的结?如果修复后的情况都如下图所C的?你就可以?成功?l箋开启你的网?q行?!SupeSite/X-Space官方?UncL.f4f+X t

_0O"}}&uY0}0|0SupeSite/X-Space官方?p'EwS6@#J L
theresult.jpgSupeSite/X-Space官方?u'?5U ~GK+Z6rU1E(t
4.别忘?jin)启动你的mysql,要不你的|站q是q行不v?
Dr3C1E}BR)e"X)G0SupeSite/X-Space官方?Kl.J:n4v+Ha
SupeSite/X-Space官方?x$[/Vh^
startmysql.jpg
](e1O{+B5E-s1}!f0ps:下面l的一个是linux下面的修复方?和上面的基本相同.只是linux下面关闭和启动mysql的方法和windows的不?一般情况下linux?br /> O3o0].S2EE S0SupeSite/X-Space官方?@7Dy o!R G$u Y
CODE:
/etc/init.d/mysql stop  service mysqld stop /etc/init.d/mysql start service mysqld start
来关闭和启动mysql
f^Zi!y3v1S0
nB\aV&N0SupeSite/X-Space官方?x!@S"CH0c:`%b:S
linux.jpg
&j%r.O8~.^E w0o1R0
{&y7`'P9s"TG0另外 MySQL 官方文档中还提供?jin)针对上面操作均无法奏效时的?gu)办法Q如先清I重建数据表Q然后再用备份的数据文g覆盖{,q种特别复杂的情는户通常不会(x)到Q因此这里不再做q于深入的研I?SupeSite/X-Space官方?kH,M:It.s3nD
SupeSite/X-Space官方?ry O:D.x A|
?数据表经常性损坏的解决Ҏ(gu)SupeSite/X-Space官方?W"Y$}y)B3O^

#DJu*ET\ AN5N0--------------------------------------------------------------------------------SupeSite/X-Space官方?U3m]5uOD-O6kD
SupeSite/X-Space官方?|gj%s8G8fr6j
首先L(fng)认在服务器硬件不存在问题Q如内存工作不稳定、散热条件不好等Q,且用中的操作系l版本也没有相关?BUG 报告或升U补丁。这U情况下Q如果数据库仍出现经常性的损坏Q请(g)查是?MySQL 的编译方式或参数存在问题。通常情况下用官Ҏ(gu)供的~译好的版本是比较稳定的Q可以长期用。如果?zhn)钟爱自行~译相关E序Q请认(zhn)的语言~译器(?gccQ和配置的相兛_数没有导致不E_的因素。同Ӟ盘分区满也可能是导致数据表l常性损坏的原因。网上提供了(jin)一些问题的处理Ҏ(gu)Q英文)(j)Q需要时可多参考,qҎ(gu)的具体服务器环境制定解决Ҏ(gu)?/font>


lk 2008-04-25 09:46 发表评论
]]>
如何修复损坏的MySQL数据表[转]http://m.tkk7.com/lcs/archive/2008/04/25/195829.htmllklkFri, 25 Apr 2008 01:42:00 GMThttp://m.tkk7.com/lcs/archive/2008/04/25/195829.htmlhttp://m.tkk7.com/lcs/comments/195829.htmlhttp://m.tkk7.com/lcs/archive/2008/04/25/195829.html#Feedback0http://m.tkk7.com/lcs/comments/commentRss/195829.htmlhttp://m.tkk7.com/lcs/services/trackbacks/195829.html原文地址Q?font style="background-color: #dee0fe">http://www.3v.org.cn/article.asp?id=164

?/font>于断甉|非正常关导致MySQL数据库出现错误是非常常见的问题。有两种Ҏ(gu)Q一U方法用mysql的check table和repair table 的sql语句Q另一U方法是使用MySQL提供的多个myisamchk, isamchk数据(g)恢复工兗前者用v来比较简ѝ推荐用?br />
1. check table ?nbsp;repair table
登陆mysql l端Q?br /> mysql -uxxxxx -p dbname
> check table tabTest;
如果出现的结果说Status是OKQ则不用修复Q如果有ErrorQ可以用Q?br /> > repair table tabTest;
q行修复Q修复之后可以在用check table命o(h)来进行检查。在新版本的phpMyAdmin里面也可以用check/repair的功能?br />
2. myisamchk, isamchk
其中myisamchk适用于MYISAMcd的数据表Q而isamchk适用于ISAMcd的数据表。这两条命o(h)的主要参数相同,一般新的系l都使用MYISAM作ؓ(f)~省的数据表cdQ这里以myisamchkZ子进行说明。当发现某个数据表出现问题时可以使用Q?br />
myisamchk tablename.MYI

q行(g),如果需要修复的话,可以使用Q?br />
myisamchk -of tablename.MYI

关于myisamchk的详l参数说明,可以参见它的使用帮助。需要注意的时在q行修改时必ȝ保MySQL服务器没有访问这个数据表Q保险的情况下是最好在q行(g)时把MySQL服务器Shutdown掉?br />
Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q?br />
另外可以把下面的命o(h)攑֜你的rc.local里面启动MySQL服务器前Q?br />
[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI

其中?tmp/mysql.sock是MySQL监听的Sock文g位置Q对于用RPM安装的用户应该是/var/lib/mysql/mysql.sockQ对于用源码安装则?tmp/mysql.sock可以Ҏ(gu)自己的实际情况进行变_(d)而pathtochk则是myisamchk所在的位置QDATA_DIR是你的MySQL数据库存攄位置?br />
需要注意的Ӟ如果你打把q条命o(h)攑֜你的rc.local里面Q必ȝ认在执行q条指o(h)时MySQL服务器必L有启动! 

(g)修复所有数据库(?
mysqlcheck -A -o -r -p 
---------------------------------------------------------------------------------


CZ:
mysql> check table tabFTPAccountInstances;



lk 2008-04-25 09:42 发表评论
]]>什么是SOAPhttp://m.tkk7.com/lcs/archive/2008/04/24/195607.htmllklkThu, 24 Apr 2008 07:49:00 GMThttp://m.tkk7.com/lcs/archive/2008/04/24/195607.htmlhttp://m.tkk7.com/lcs/comments/195607.htmlhttp://m.tkk7.com/lcs/archive/2008/04/24/195607.html#Feedback0http://m.tkk7.com/lcs/comments/commentRss/195607.htmlhttp://m.tkk7.com/lcs/services/trackbacks/195607.html
它包括四个部分:(x)
SOAP装(envelop)Q封装定义了(jin)一个描q消息中的内Ҏ(gu)什么,是谁发送的Q谁应当接受q处理它以及(qing)如何处理它们的框Ӟ
SOAP~码规则Qencoding rulesQ,用于表示应用E序需要用的数据cd的实?
SOAP RPC表示(RPC representation)Q表CE过E调用和应答的协?
SOAPl定QbindingQ,使用底层协议交换信息?

  虽然q四个部分都作ؓ(f)SOAP的一部分Q作Z个整体定义的Q但他们在功能上是相交的、彼此独立的。特别的Q信和~码规则是被定义在不同的XML命名I间(namespace)中,q样使得定义更加单?


========另一个解?=========
单对象访问协议(SOAPQ是一U轻量的、简单的、基于XML的协议,它被设计成在WEB上交换结构化的和固化的信息。SOAP可以和现存的许多因特|协议和格式l合使用Q包括超文本传输协议QHTTPQ,单邮件传输协议(SMTPQ,多用途网际邮件扩充协议(MIMEQ。它q支持从消息 pȝ到远E过E调用(RPCQ等大量的应用程序?nbsp;  
    
 SOAP   包括三个部分Q?nbsp;    
    
SOAP   装Q它定义?jin)一个框Ӟ该框架描qC(jin)消息中的内容是什么,谁应当处理它以及(qing)它是可选的q是必须的?nbsp;    
SOAP   ~码规则Q它定义?jin)一U序列化的机Ӟ用于交换应用E序所定义的数据类型的实例?nbsp;    
SOAP   RPC   表示Q它定义?jin)用于表CE过E调用和应答的协定?br />
SOAP   消息基本上是从发送端到接收端的单向传输,但它们常常结合v来执行类gh/应答的模式。所有的SOAP消息都?  XML   ~码。一?  SOAP   消息是一个包含有一个必需?  SOAP   的封装包Q一个可选的   SOAP   标头和一个必需?  SOAP   体块?  XML   文档? 
   
    ?  SOAP   l定?  HTTP   提供?jin)同时利?  SOAP   的样式和分散的灵zL的特点以及(qing)   HTTP   的丰富的特征库的优点。在   HTTP   上传?  SOAP   q不是说   SOAP   ?x)覆盖现有?  HTTP   语义Q而是   HTTP   上的   SOAP   语义?x)自然的映射?  HTTP   语义。在使用   HTTP   作ؓ(f)协议l定?nobr oncontextmenu="return false;" onmousemove="kwM(5);" id="clickeyekey5" onmouseover="kwE(event,5, this);" style="background: url(http://control.clickeye.com.cn/images/line5.gif) repeat-x 50% bottom; padding-bottom: 2px; color: #6600ff" onclick="return kwC(event,5)" onmouseout="kwL(event,this)" target="_blank">场合中,   RPC   h映射?  HTTP   h上,?  RPC   应答映射?  HTTP   应答。然而,?  RPC   上?  SOAP   q不仅限?  HTTP   协议l定?nbsp;   


lk 2008-04-24 15:49 发表评论
]]>
jsp昄word、excelhttp://m.tkk7.com/lcs/archive/2008/04/23/194980.htmllklkWed, 23 Apr 2008 03:32:00 GMThttp://m.tkk7.com/lcs/archive/2008/04/23/194980.htmlhttp://m.tkk7.com/lcs/comments/194980.htmlhttp://m.tkk7.com/lcs/archive/2008/04/23/194980.html#Feedback0http://m.tkk7.com/lcs/comments/commentRss/194980.htmlhttp://m.tkk7.com/lcs/services/trackbacks/194980.html
word面只要在jsp头设|如下指令:(x)
<%@page contentType="application/msword;charset=GBK" %>

excel如下Q?br /> <%@page contentType="application/vnd.ms-excel;charset=GBK" %>


lk 2008-04-23 11:32 发表评论
]]>
Ant入门教程http://m.tkk7.com/lcs/archive/2008/04/21/194534.htmllklkMon, 21 Apr 2008 08:19:00 GMThttp://m.tkk7.com/lcs/archive/2008/04/21/194534.htmlhttp://m.tkk7.com/lcs/comments/194534.htmlhttp://m.tkk7.com/lcs/archive/2008/04/21/194534.html#Feedback0http://m.tkk7.com/lcs/comments/commentRss/194534.htmlhttp://m.tkk7.com/lcs/services/trackbacks/194534.html
本内容包含了(jin)Ant的历史简要介l,Ant的功能以?qing)Ant框架的介l,q对下蝲安装使用Antq行?jin)示例介l,同时通过一个JavaE序讲解?jin)Ant的基本用方法?br />

1.       Ant介:(x)q里引用Ant帮助文档中对Ant的介l:(x)

     Apache Ant是一个基于Java的构建工兗从理论上讲Q也是一U类gMake的工P只是去除?jin)Make工具的缺炏V?/div>
    
      既然已经有了(jin)make, gnumake, nmake, jam以及(qing)其他的构件工PZ么还要Ant呢?因ؓ(f)Ant的早期开发者发现所有以上这些工具都或多或少的有一些局限性,使得在跨q_开发Y件成为困难。类gMake的工具都是传l的ZShell?-首先q行依赖性检查,然后执行命o(h)。这意味着你可以轻易的通过使用或者编写程序来扩展q些工具Q以满不同的^台。当?dng)q也意味着你将局限于特定的^収ͼ臛_可以说局限于特定cd的^収ͼ例如QUnixq_?br />                                                                                       

    同时QMake文g也有一些先天的~陷。好多h都会(x)遇到恐怖的tab问题。Ant的最初开发者多ơ说“我的命o(h)不能执行因ؓ(f)我在tab前面加了(jin)一个空|”。一些工具如Jam一定程序上解决?jin)这个问题,但仍有其它的格式问题?br />

    Ant与从Z命o(h)的那些扩展开来的那些工具不同QAnt是由javacL展的。不用编写shell命o(h)Q而是配置ZXML的文Ӟ形成多个d的目标配|树(wi)。每一个Q务都是通过一个实C(jin)一个规定接口的javacLq行的?/div>
    ant~少?jin)一些直接执行shell命o(h)的能力,如find . -name foo -exec rm {}Q但它给用户提供?jin)跨q_的能力,可以在Q何地方工作。实际上QAnt也提供了(jin)命o(h)execute用来执行shell命o(h),q就是它的Q务,它允许执行基于操作系l的命o(h)?br />

    单的_(d)Ant是一个基于JavaQƈ且主要用于Java工程的构建工兗Ant本意是Another Neat Tool,也就是另一U整z的工具Q取首字W就是Ant?br />

构徏工具是Z(jin)减少重复工作而生的?br />

2.       Ant的一些核?j)概念?x)
XML:构徏文g是以XML文g来描q的Q采?/span>XML格式有很多好处。这里就不一一列D?/span>
陈述式语法:(x)构徏文g短小_?zhn)Q且易于理解?/div>
每个构徏文g包含一个工E?/span>(project)?/span>
每个工程包含若干个目?/span>(target)?/span>
目标可以依赖于其他的目标(depends)?/span>
目标包含d(task)?/span>
易于使用Java语言增加新的d---易于扩展Q自定义Q?/span>
3.       Antl构Q?/span>
Ant的结构如下图所C:(x)


构徏文g的概念视图:(x)工程包含一个目标的集合。在每个目标里是d的声明,它们是对
Ant用于构徏该目标的行ؓ(f)说明。目标生成一个依赖关pd表来声明该目标的依赖关系。当执行一个目标时Q必d执行它们依赖的目标?/span>
 
例子Q一个典型的构徏文gQ?/span>
<?xml version="1.0" ?>
<project name="OurProject" default="deploy">
<target name="init">
<mkdir dir="build/classes" />
<mkdir dir="dist" />
</target>
<target name="compile" depends="init" >
<javac srcdir="src" destdir="build/classes"/>
</target>
<target name="doc" depends="init" >
<javadoc destdir="build/classes" sourcepath="src" packagenames="org.*" />
</target>
<target name="deploy" depends="compile,doc" >
    <jar destfile="dist/project.jar" basedir="build/classes"/>
         <ftp server="" userid="" password="">
     <fileset dir="dist"/>
</ftp>
</target>
</project>
 
该构E如下:(x)
pȝ初始?、编?nbsp; 2、生成JAVADOC   4、打?nbsp; 5、上传到FTPQ其中后两步l合C起叫部v?/div>
 
执行时输出如下:(x)
> ant -propertyfile ftp.properties
Buildfile: build.xml
init:
[mkdir] Created dir: /home/ant/Projects/OurProject/build/classes
[mkdir] Created dir: /home/ant/Projects/OurProject/dist
compile:
[javac] Compiling 1 source file to /home/ant/Projects/OurProject/build/
classes
doc:
[javadoc] Generating Javadoc
[javadoc] Javadoc execution
[javadoc] Loading source files for package org.example.antbook.lesson1...
[javadoc] Constructing Javadoc information...
[javadoc] Building tree for all the packages and classes...
[javadoc] Building index for all the packages and classes...
[javadoc] Building index for all classes...
deploy:
[jar] Building jar: /home/ant/Projects/OurProject/dist/project.jar
[ftp] sending files
[ftp] 1 files sent
BUILD SUCCESSFUL
Total time: 5 seconds.

在执行时使用命o(h)行参C传入一个属性文Ӟ属性文件中包含q接FTP服务器用的服务器名Q用户名Q用户密码来l?span style="color: red">Ҏ(gu)用?/span>
q个例子很好的展CZ(jin)Ant的一些基本要素:(x)目标依赖、特性的使用、编译、文档生成、JAR打包Qtar,Zip,WAR,EAR{)(j)Q最后是部v?/div>
 
Ant的简单Q?<mkdir>)都是由Javacd来实现相应的功能。而一些复杂的d<ftp>?lt;junit>q需要第三方库的支持?/div>
 
    Ant的一个强大之处:(x)它总能工作。只要正的指定构徏文gQAntp计算出目标的依赖性,q且按照正确的顺序调用目标。目标通过d按序执行Q而Q务自w处理其文g依赖性以?qing)实际的操作来完成工作。因为每个Q务通常都是在高层陈qͼ所以一两行XML语句l常已l够描qCQ务的内容?/div>
 
4.   下蝲q安?/strong>Ant
     使用Ant前提条gQ系l中已经安装JDK以及(qing)Ant。在文档~写之时QAnt的最新版本是Ant 1.7,但是Z(jin)E_性,本文档用版本ؓ(f)Ant 1.6.5.
首先下蝲AntQ到apache软g|站http://www.apache.org/?/div>
其次Q解压羃文gQ放到指定的pȝ目录中,例如C:\Ant?/div>
再次Q将其添加到pathQ以便从命o(h)行用?一些IDEQ例如Eclipse可以不需要设|path,而通过IDE相关讄Antd到path中?
再次Q设|一些环境变量指向JDK以及(qing)ANT?/div>
最后,d需要的可选库?/div>
 
在Windows安装q程Q以W者的安装q程ZQ?/div>
    下蝲apache-ant-1.6.5-bin.zip到本地硬盘,解压~之后将文g夹命名ؓ(f)Ant,攑֜C:\Ant中。这个目录就是Antȝ录?/div>
应该主目录中的bin目录d到path属性中Q这样就可以在命令行中调用ant命o(h)QANT_HOME是批处理文g所在目录的上目录。最好明设定?/div>
现在许多工具已经集成?jin)特定版本?/span>AntQ一些操作系l甚至默认的已经安装?/span>Ant。所以,你的pȝ中可能已l安装了(jin)Ant?/span>
首先可以通过q行以下命o(h)Q?br /> ant -version
?br /> ant -diagnostics
来确定。我们推荐?zhn)不设|CLASSPATH来运行Ant命o(h)。如果Q何版本的Ant可以从CLASSPATH加蝲 Q这时就?x)由于加载?jin)不兼容的c而生许多错误?/div>
 
一些其他问题请参阅Ant的FAQ讄?/div>
正常情况下,执行ant ?Cversion卛_昄Ant版本Q则说明安装配制成功Q?/div>

 
5.       q行W一个构建文Ӟ(x)
首先创徏一个Java工程Q名为AntProjectQ工E中源文件和目标文g是分开的,分别为文件夹src和bin,然后创徏一个JavacLӞcd?/div>
com.neusoft.test.AntTestQ只是ؓ(f)?jin)测试,所以类的内容很单:(x)
package com.neusoft.test;
/**
 *This is just a test class.
 */
public class AntTest{
      public static void main(String[] args){
           for(int i=0;i<args.length;i++){
                 System.out.println(args[i]);
           }
      }
}
 
然后我们在工E的路径下面建立一个构建文?/strong>build.xmlQ内容如下:(x)
<?xml version="1.0" ?>
<project name="structured" default="archive" >
<target name="init">
<mkdir dir="build/classes" />
<mkdir dir="dist" />
</target>
<target name="compile" depends="init" >
  <javac srcdir="src" destdir="build/classes"/>
</target>
<target name="archive" depends="compile" >
<jar destfile="dist/project.jar"
basedir="build/classes" />
</target>
<target name="clean" depends="init">
<delete dir="build" />
<delete dir="dist" />
</target>
</project>
构徏文g说明如下图:(x)


关于XML的知识,请参考其他书c,q里不做介绍?/div>
以上创徏完成后,目录l构如下图:(x)


 
     Ant构徏文gL有一?lt;project>元素做ؓ(f)根元素,它有两个属性,name和defaultQ?lt;target>元素?lt;project>元素的子元素Q可以有多个Q它有两个属性,name和dependsQ?lt;target>元素包含的元素就是一些Q务元素?br />
<target>可以由命令行q行昄的调用,也可以在内部使用如可以直接调用ant init、ant compile{。如果不写参敎ͼ则默认的build文g是build.xmlQ默认的目标?lt;project>的default属性定义的目标。目标的名称是唯一的,可以是Q意字W串?/div>
 
下面我们先运行一下这个Ant构徏Q再讲解其他的内容,q入工程目录Q执?/div>
ant
q里q当于执行默认的目标,也就?lt;project name="structured" default="archive" >中的archive目标?/div>

 
q里说明?jin)首先初始化创徏两个目录Q然后编译了(jin)一个JAVA文gQ然后进行了(jin)打包的操作?/div>
 
q里讲解一下如果构建失败了(jin)怎么办?
首先有可能是XML语法书写不正??lt;target>写成<targe>)Q或者在d执行q程中出C(jin)错误(.java文g中包含编译错?Q或者Q务名UC写错??lt;javac>写成<javacc>){等Q这些都不是Ant的错误,不需要填写Bug Report。写XML时一定要l心(j)Q一些IDE已经有验证功能,可以很好的防止书写的错误?/div>
 
出现错误Ӟ可以使用
ant ?Cverbose
或?/div>
ant ?Cdebug来获取更加详l的构徏信息Q以解决问题?/div>
下图是用ant ?Cverbose时的输出Q用ant ?Cdebug获取比q更详细的信息,q里׃举例?jin)?/div>

 
本例中直接用了(jin)软g工程中的构徏l构Q用src作ؓ(f)源文件目录,build/class作ؓ(f)中间生成文gQ以dist作ؓ(f)可发布文件。在最后把一些可执行文g可以攑֜bin目录中。此时目录结构如下图所C:(x)

 
我们需要一U办法来定某些d先执行,而有些Q务后执行Q比如必d~译Q才能执行程序或者打包。我们在声明目标的时候,在其依赖属性中列出其依赖关p:(x)
<target name="compile" depends="init" >
<target name="archive" depends="compile" >
<target name="clean" depends="init">
如果一个目标依赖与多个其他目标Q需要将它们都写C赖属性中Q例如:(x)
depents=”compile,test”。在我们的构ZQarchive依赖于init和compileQ但是我们不需要去写,因ؓ(f)compile已经依赖于init?jin)。即QAnt的依赖关pL传递的Q但不是自反的?/div>


如果在执行过E中两个目标׃n同一个目标,则先导目标只被执行一ơ?/div>
可以通过指定目标来运行构建:(x)
例如执行完ant后,可以执行ant clean来清理构建:(x)

 
ant{h(hun)于ant archive
ant init
ant clean
ant compile
ant archive
ant clean archive
 
当构建完成一ơ以后,再次执行构徏?x)发生什么呢Q?/strong>

 
W二ơ执行构建时只花?sQ相比第一ơ的4s。ƈ且没有Q何一个目标表C做?jin)Q何工作?/div>
原因如下Q所有的d都检查了(jin)它们的依赖关p:(x)
<mkdir>没有创徏目录因ؓ(f)已经存在
<javac>比较?jin)源文g和类文g的时间戳
<jar>比较?jin)要被加入文件与已经存在文g的时?/div>
只有更新的时候才q行d执行?/div>
 
Ant如何处理命o(h)行上的多个目标?
执行ant compile archive?x)怎么P
先实验一下:(x)

 
Ant依次执行每个目标和其依赖目标Q即Ant的执行顺序是init compile init compile archiveQ虽然这L(fng)h增加?jin)额外的工作Q但是通过上面的执行过E就?x)发玎ͼ׃其依赖性检查的LQ第二次的init和compileq未真正的执行,执行旉与直接执行archive的时间是一L(fng)?/div>
 
q行E序Q?/strong>
普通执行该cȝҎ(gu)是:(x)
java ?Ccp build/class com.neusoft.test.AntTest args1 args2
而我们用Ant的Q务来执行它仅仅需要增加一个Q务,好处在于Q?/div>
让用于执行的目标依赖与编译的目标Q确保运行最新版?/div>
易于传递复杂参?/div>
讄classpath更方?/div>
在Ant自n的JVM中运行,载入更快
增加一个新的目标:(x)
<target name="execute" depends="compile">
<java classname="com.neusoft.test.AntTest"
classpath="build/classes">
<arg value="a"/>
<arg value="b"/>
<arg file="."/>
</java>
</target>
 
最后一个参数是file=”.”Q表CZ入的参数是一个目录,为文件绝对\径?/div>
q行该目标,输出如下Q?/div>

 
Ant命o(h)行选项Q?/div>
 
请参阅相x册进行查询相关选项的功能?/div>
 
当有多个构徏文gӞ可以指定构徏文gQ?/strong>
ant ?Cbuildfile build.xml compile
来表C执行build.xmlq个构徏文g中的compile目标?/div>
 
控制提供的信息量Q?/div>
ant ?Cquiet:安静(rn)模式Q不l出M输出?/div>

 
ant ?Cemacs:单模式,不显CZQ务名U?/div>

 
ant ?Cprojecthelp:获取目信息?/div>

 
最l的构徏文gQ添加了(jin)description属性?/strong>
<?xml version="1.0" ?>
<project name="secondbuild" default="execute" >
<description>Compiles and runs a simple program</description>
<target name="init">
<mkdir dir="build/classes" />
<mkdir dir="dist" />
</target>
<target name="compile" depends="init"
description="Compiles the source code">
<javac srcdir="src" destdir="build/classes"/>
</target>
<target name="archive" depends="compile"
description="Creates the JAR file">
<jar destfile="dist/project.jar" basedir="build/classes"/>
</target>
<target name="clean" depends="init"
description="Removes the temporary directories used">
<delete dir="build" />
<delete dir="dist" />
</target>
<target name="execute" depends="compile"
description="Runs the program">
<echo level="warning" message="running" />
<java classname="org.example.antbook.lesson1.Main"
classpath="build/classes">
<arg value="a"/>
<arg value="b"/>
<arg file="."/>
</java>
</target>

</project>



lk 2008-04-21 16:19 发表评论
]]>java加密解密http://m.tkk7.com/lcs/archive/2008/04/14/192833.htmllklkMon, 14 Apr 2008 08:14:00 GMThttp://m.tkk7.com/lcs/archive/2008/04/14/192833.htmlhttp://m.tkk7.com/lcs/comments/192833.htmlhttp://m.tkk7.com/lcs/archive/2008/04/14/192833.html#Feedback0http://m.tkk7.com/lcs/comments/commentRss/192833.htmlhttp://m.tkk7.com/lcs/services/trackbacks/192833.html
import java.security.*;
import javax.crypto.*;
public class Crypt {

  
private static String Algorithm="DES"//定义 加密法,可用 DES,DESede,Blowfish

  
static boolean debug = false;

  
static{
    Security.addProvider(
new com.sun.crypto.provider.SunJCE());
  }


  
//生成密钥, 注意此步骤时间比较长
  public static byte[] getKey() throws Exception{
    KeyGenerator keygen 
= KeyGenerator.getInstance(Algorithm);
    SecretKey deskey 
= keygen.generateKey();
    
if (debug)
      System.out.println(
"生成密钥:"+byte2hex(deskey.getEncoded()));
    
return deskey.getEncoded();
  }


  
//加密
  public static byte[] encode(byte[] input,byte[] key) throws Exception{
    SecretKey deskey 
= new javax.crypto.spec.SecretKeySpec(key,Algorithm);
    
if (debug){
      System.out.println(
"加密前的二进?"+byte2hex(input));
      System.out.println(
"加密前的字符?"+new String(input));
    }

    Cipher c1 
= Cipher.getInstance(Algorithm);
    c1.init(Cipher.ENCRYPT_MODE,deskey);
    
byte[] cipherByte=c1.doFinal(input);
    
if (debug)
      System.out.println(
"加密后的二进?"+byte2hex(cipherByte));
    
return cipherByte;
  }


  
//解密
  public static byte[] decode(byte[] input,byte[] key) throws Exception{
    SecretKey deskey 
= new javax.crypto.spec.SecretKeySpec(key,Algorithm);
    
if (debug)
      System.out.println(
"解密前的信息:"+byte2hex(input));
    Cipher c1 
= Cipher.getInstance(Algorithm);
    c1.init(Cipher.DECRYPT_MODE,deskey);
    
byte[] clearByte=c1.doFinal(input);
    
if (debug){
      System.out.println(
"解密后的二进?"+byte2hex(clearByte));
      System.out.println(
"解密后的字符?"+(new String(clearByte)));
    }

    
return clearByte;
  }


  
//md5()信息摘要, 不可?/span>
  public static byte[] md5(byte[] input) throws Exception{
    java.security.MessageDigest alg
=java.security.MessageDigest.getInstance("MD5"); //or "SHA-1"
    if (debug){
      System.out.println(
"摘要前的二进?"+byte2hex(input));
      System.out.println(
"摘要前的字符?"+new String(input));
    }

    alg.update(input);
    
byte[] digest = alg.digest();
    
if (debug)
      System.out.println(
"摘要后的二进?"+byte2hex(digest));
    
return digest;
  }


  
//字节码{换成16q制字符?/span>
  public static String byte2hex(byte[] b) {
    String hs
="";
    String stmp
="";
    
for (int n=0;n<b.length;n++){
      stmp
=(java.lang.Integer.toHexString(b[n] & 0XFF));
      
if (stmp.length()==1)
        hs
=hs+"0"+stmp;
      
else hs=hs+stmp;
        
if (n<b.length-1)  
            hs
=hs+":";
      }

//      System.out.println("hs="+hs);
    return hs.toUpperCase();
  }


  
public static void main(String[] args) throws Exception{
    debug 
= true;
//    byte[] key = getKey();
    byte[] key = "好好学习(fn)".getBytes();
    decode(encode(
"试加密".getBytes(),key),key);
//    md5("试加密".getBytes());
    md5("A".getBytes());
  }

}


lk 2008-04-14 16:14 发表评论
]]>
[JS]Cookie_N之?http://m.tkk7.com/lcs/archive/2008/04/10/191866.htmllklkThu, 10 Apr 2008 07:03:00 GMThttp://m.tkk7.com/lcs/archive/2008/04/10/191866.htmlhttp://m.tkk7.com/lcs/comments/191866.htmlhttp://m.tkk7.com/lcs/archive/2008/04/10/191866.html#Feedback0http://m.tkk7.com/lcs/comments/commentRss/191866.htmlhttp://m.tkk7.com/lcs/services/trackbacks/191866.html [JS]Cookie_N之? www.fh888.com 2006-9-17 16:25:00 发布QCary
媒体Qwww.JustDN.org  作者:(x)Jim Park <!—CookiesQ有些h喜欢它们Q有些h憎恨它们。但是,很少有h真正知道如何使用它们。现在你可以成ؓ(f)数Z的成员-可以自傲的Cookie 大师?->

如果你象作者一栯性不好,那么你可能根本记不住Z的名字。我遇到人时Q多半只是点点头Q问?#8220;吃了(jin)嘛!”Q而且期望问候到此ؓ(f)止。如果还需要表CZ什么,那么我就得求助于一些狡猄技巧,好让我能惛_Ҏ(gu)谁。比如胡扯v一些和Ҏ(gu)有关的hQ不他们之间关pdq,只要能避免不记得Ҏ(gu)名字的尴就好:(x) “你隔壁邻居的侄子的可爱小狗迈菲斯Ҏ(gu)么P”通过q个Ҏ(gu)Q我希望能让Ҏ(gu)感到Q我实很重视他Q她Q,甚至q记得这些琐事,虽然实际上连名字都忘C(jin)。但是,不是我不重视Q而是我的记忆力实在是p糕Q而且要记住的名字又实在太多。如果我能给每个|cookiesQ那么我׃?x)再犯这U记忆力问题?jin)?br />
在这文章里Q我们要学习(fn)Q?br />
1. 什么是 Cookies?
2. Cookie 的构?br /> 3. 操纵 Cookies
4. Cookie 怪兽

什么是Cookies?

你会(x)问,什么是cookies? cookie 是浏览器保存在用戯机上的量数据。它与特定的WEB|WEB站点兌hQ自动地在WEB览器和W(xu)EB服务器之间传递?br />
比如Q如果你q行的是Windows操作pȝQ用Internet Explorer上网Q那么你?x)发现在你?#8220;Windows”目录下面有一个子目录Q叫?#8220;Temporary Internet Files”。如果你有空看看q个目录Q就?x)发现里面有一些文Ӟ文g名称看v来就象电(sh)子邮件地址。比如在我机器上的这个目录里Q就?“jim@support.microsoft.com”q样的文件。这是一个cookie 文gQ这个文件从哪来呢?猜一猜,它来自微软的支持站点。顺便说一句,q不是我的电(sh)子邮件地址Q特此澄清?br />
对于理l小的、不重要的、不想保存在中央数据库里的细节信息,Cookies 是个很不错的Ҏ(gu)。(q不是说大家的名字不重要。)(j)比如Q目前网站上不断增长的自定义服务Q可以ؓ(f)每个用户定制他们要看的内宏V如果你设计的就是这样一个站点,那么你怎么来管理这L(fng)信息Q一个用户喜Ƣ绿色的菜单条,而另一个喜Ƣ红色的。确实是个篏人的问题。不q,q样的信息,可以很安全地记录到cookieQƈ保存在用L(fng)计算ZQ而你自己的数据库I间可以留给更长久更有意义的数据?br />
FYI: Cookies 对于安全用途,通常很有用。我不想在此p一问题q于深入Q只是提供一个示例,可以看到如何使用在一D|间之后过期的cookies来保证站点安全:(x)

1. 使用用户名和口o(h)Q通过 SSL d?br /> 2. 在服务器的数据库里检查用户名和口令。如果登录成功,建立一个当前时间标{消息摘要 (比如 MD5) Qƈ把它保存在cookie和服务器数据库里。把用户的登录时间保存在服务器数据库里面的用戯录里?br /> 3. 在进行每个安全事务时Q用户处于登录状态的M事务Q,把cookie的消息摘要和保存在服务器数据库里的摘要进行比较,如果比较p|Q就把用户引导到d界面?br /> 4. 如果W?步检查通过Q那么检查当前时间和d旉之音l过的时间是否超q允许的旉长度。如果用户已l超Ӟ那么把用户引到d界面?br /> 5. 如果W?步和W?步都通过?jin),那么把登录时间重新设|成当前旉Q允怺务发生。那些需要你d的安全站点,可能多数使用的都是和q里介绍的类似的Ҏ(gu)?br /> Cookie的构?br />
Cookies最初设计时Q是Z(jin)CGI~程。但是,我们也可以用Javascript脚本来操Ucookies。在本文里,我们演C如何用Javascript脚本来操Ucookies?如果有需求,我可能会(x)在以后的文章里介l如何用Perlq行cookie理。但是如果实在等不得Q那么我现在教你一手:(x)仔细看看CGI.pm。在q个CGI包里有一个cookie()函数Q可以用它徏立cookie。但是,q是让我们先来介lcookies的本质?br />
在Javascript脚本里,一个cookie 实际是一个字W串属性。当你读取cookie的值时Q就得到一个字W串Q里面当前WEB用的所有cookies的名U和倹{每个cookie除了(jin)name名称和valueD两个属性以外,q有四个属性。这些属性是Q?expiresq期旉?path路径?domain域、以?secure安全?br />
Expires – q期旉。指定cookie的生命期。具体是值是q期日期。如果想让cookie的存在期限超q当前浏览器?x)话旉Q就必须使用q个属性。当q了(jin)到期日期Ӟ览器就可以删除cookie文gQ没有Q何媄(jing)响?br />
Path – 路径。指定与cookie兌的WEBc(din)值可以是一个目录,或者是一个\径。如果http://www.zdnet.com/devhead/index.html 建立?jin)一个cookieQ那么在http://www.zdnet.com/devhead/目录里的所有页面,以及(qing)该目录下面Q何子目录里的面都可以访问这个cookie。这是_(d)在http://www.zdnet.com/devhead/stories/articles 里的M面都可以访问http://www.zdnet.com/devhead/index.html建立的cookie。但是,如果http://www.zdnet.com/zdnn/ 需要访问http://www.zdnet.com/devhead/index.html讄的cookesQ该怎么办?q时Q我们要把cookies 的path属性设|成“/”。在指定路径的时候,凡是来自同一服务器,URL里有相同路径的所有WEB面都可以共享cookies。现在看另一个例子:(x)如果惌 http://www.zdnet.com/devhead/filters/ 和http://www.zdnet.com/devhead/stories/׃ncookiesQ就要把path设成“/devhead”?br />
Domain – 域。指定关联的WEB服务器或域。值是域名Q比如zdnet.com。这是对path路径属性的一个g伸。如果我们想?catalog.mycompany.com 能够讉Kshoppingcart.mycompany.com讄的cookiesQ该怎么? 我们可以把domain属性设|成“mycompany.com”Qƈ把path属性设|成“/”。FYIQ不能把cookies域属性设|成与设|它的服务器的所在域不同的倹{?br />
Secure – 安全。指定cookie的值通过|络如何在用户和W(xu)EB服务器之间传递。这个属性的值或者是“secure”Q或者ؓ(f)I。缺省情况下Q该属性ؓ(f)I,也就是用不安全的HTTPq接传递数据。如果一?cookie 标记为secureQ那么,它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。不q,讄?jin)secure属性不代表其他Z能看C机器本地保存的cookie。换句话_(d)把cookie讄为secureQ只保证cookie与WEB服务器之间的数据传输q程加密Q而保存在本地的cookie文gq不加密。如果想让本地cookie也加密,得自己加密数据?br />



操纵Cookies

误住,cookie是文档的一个字W串属性。要保存cookieQ只要徏立一个字W串Q格式是name=<value>Q名Uͼ|(j)Q然后把文档?document.cookie 讄成与它相{即可。比如,假设想保存表单接收到的用户名Q那么代码看hpq样Q?br />
document.cookie = "username" + escape(form.username.value);

在这里,使用 escape() 函数非常重要Q因为cookie值里可能包含分号、逗号或者空根{这是_(d)在读取cookie值时Q必M用对应的unescape()函数lD码?br />
我们当然q得介绍cookie的四个属性。这些属性用下面的格式加到字W串值后面:(x)

name=<value>[; expires=<date>][; domain=<domain>][; path=<path>][; secure]

名称=<?gt;[; expires=<日期>][; domain=<?gt;][; path=<路径>][; 安全]

<value>, <date>, <domain> ?<path> 应当用对应的值替换?lt;date> 应当使用GMT格式Q可以用Javascript脚本语言的日期类Date?toGMTString() Ҏ(gu)得到q一GMT格式的日期倹{方括号代表q项是可选的。比如在 [; secure]两边的方括号代表要想把cookie讄成安全的Q就需要把"; secure" 加到cookie字符串值的后面。如?; secure" 没有加到cookie字符串后面,那么q个cookie是不安全的。不要把括?lt;> 和方括号[] 加到cookie里(除非它们是某些值的内容Q。设|属性时Q不限属性,可以用Q何顺序设|?br />
下面是一个例子,在这个例子里Qcookie "username" 被设|成?5分钟之后q期Q可以被服务器上的所有目录访问,可以?mydomain.com"域里的所有服务器讉KQ安全状态ؓ(f)安全?br />
// Date() 的构造器讄以毫Uؓ(f)单位
// .getTime() Ҏ(gu)q回旉Q单位ؓ(f)毫秒
// 所以要讄15分钟到期Q要?0000毫秒?5分钟
var expiration = new Date((new Date()).getTime() + 15 * 60000);
document.cookie = "username=" + escape(form.username.value)+ "; expires ="
+ expiration.toGMTString() + "; path=" + "/" + "; _
domain=" + "mydomain.com" + "; secure";

dcookies值有点象个小把戏Q因Z一ơ就得到?jin)属于当前文档的所有cookies?br />
// 下面q个语句d?jin)属于当前文档的所有cookies
var allcookies = document.cookie;

现在Q我们得解析allcookies变量里的不同cookiesQ找到感兴趣的指定cookie。这个工作很单,因ؓ(f)我们可以利用Javascript语言提供的扩展字W串支持?br />
如果我们对前面分配的cookie "username" 感兴,可以用下面的脚本来读取它的倹{?br />
// 我们定义一个函敎ͼ用来d特定的cookie倹{?br /> function getCookie(cookie_name)
?br /> var allcookies = document.cookie;
var cookie_pos = allcookies.indexOf(cookie_name);

// 如果扑ֈ?jin)?ch)引,׃表cookie存在Q?br /> // 反之Q就说明不存在?br /> if (cookie_pos != -1)
?br /> // 把cookie_pos攑֜值的开始,只要l值加1卛_?br /> cookie_pos += cookie_name.length + 1;
var cookie_end = allcookies.indexOf(";", cookie_pos);

if (cookie_end == -1)
?br /> cookie_end = allcookies.length;
?br />
var value = unescape(allcookies.substring(cookie_pos, cookie_end));
?br />
return value;
?br />
// 调用函数
var cookie_val = getCookie("username");

上面例程里的 cookie_val 变量可以用来生成动态内容,或者发送给服务器端CGI脚本q行处理。现在你知道?jin)用Javascript脚本操纵cookies的基本方法。但是,如果你跟我一P那么我们要做的第一件事Q就是徏立一些接口函敎ͼ把cookies处理上的ȝ(ch)隐藏h。不q,在你开始编E之前,E候片刅R这些工作,早就有h替你做好?jin)。你要做的,只是到哪Lq些接口函数而已?br />
比如Q在David Flangan的Javascript: The Definitive Guide 3rd Ed.q本书里Q可以找到很好的cookie应用cR你也可以在Oreilly的WEB站点上找到这本书里的例子。本文最后的链接列表里,有一些访问这些cookieCZ的直接链接?br />


Cookies 怪兽

因ؓ(f)某些原因Cookies 的名声很不好。许多h利用cookies做一些卑鄙的事情Q比如流量分析、点击跟t。Cookies 也不是非常安全,特别是没有secure属性的cookies。不q,即你用?jin)安全的cookiesQ如果你和别人共用计机Q比如在|吧Q那么别人就可以H探计算机硬盘上未加密保存的cookie文gQ也有可能H取你的敏感信息。所以,如果你是一个WEB开发h员,那么你要认真考虑q些问题。不要滥用cookies。不要把用户可能认ؓ(f)是敏感的数据保存在cookies里。如果把用户的社?x)保险号、信用卡L(fng)保存在cookie里,{于把这些敏感信息放在窗L(fng)下,无异于把用户投到极大危险之中。一个好的原则是Q如果你不想陌生Z(jin)解你的这些信息,那就不要把它们保存在cookies里?br />
另外Qcookiesq有一些实际的限制。Cookies保留在计机上,不跟着用户走。如果用h换计机Q那么新计算机无法得到原来的cookie。甚至用户在同一台计机上用不同浏览器Q也得不到原来的cookieQNetscape 不能dInternet Explorer 的cookies?br />
q有Q用户也不愿意接受cookies。所以不要以为所有的览器都能接受你发出的cookies。如果浏览器不接受cookiesQ你要保证自qWEB站点不致因此而崩溃或中断?br />
另外WEB 览器能保留的cookies不一定能过300个。也没有标准规定览器什么时候、怎么样作废cookies。所以达到限制时Q浏览器能够有效地随机删除cookies。浏览器保留的来自一个WEB服务器上的cookiesQ不过20个,每个cookie的数据(包括名称和|(j)Q不过4K字节?不过Q本文里的cookie寸没问题,它只占了(jin)12 K字节Q保存在3? cookies里?

而言之,注意保持cookie单。不要依赖cookies的存在,不要在每个cookie里保存太多信息。不要保存太多的cookes。但是,抛除q些限制Q在技巧高的WEB理员手里,cookie的概忉|一个有用的工具?br />
外部链接
每个 Javascript E序员都应当有一份JavascriptQ?David Flanagan 的The Definitive Guide?q本书里扑ֈcookie cME可以帮助你把不止一个变量编码到单一的cookieQ克服掉“每个WEB服务?0 个cookies的限?#8221;。请点击q个链接下蝲该例E,ftp://ftp.oreilly.com/pub/examples/nutshell/javascript/?br />
转自Q?font style="background-color: #dee0fe">http://www.fh888.com/showfile.html?projectid=5&username=cary&articleid=8C17CE3AA29B4479805CB416B9ADF89F

lk 2008-04-10 15:03 发表评论
]]>
java?lt; E >< T >< ? >< A >< U >q都是什么意?http://m.tkk7.com/lcs/archive/2008/04/08/191523.htmllklkTue, 08 Apr 2008 08:07:00 GMThttp://m.tkk7.com/lcs/archive/2008/04/08/191523.htmlhttp://m.tkk7.com/lcs/comments/191523.htmlhttp://m.tkk7.com/lcs/archive/2008/04/08/191523.html#Feedback0http://m.tkk7.com/lcs/comments/commentRss/191523.htmlhttp://m.tkk7.com/lcs/services/trackbacks/191523.html从JDK5.0开始出现的泛型QGenericsQ功能。泛型提供编译时期的(g)查,不会(x)对象置于某个容器而失dcd?

http://www.onjava.com/pub/a/onjava/excerpt/javaian5_chap04/index.html

q个是JDK   1.5   的新Ҏ(gu)?br /> 举个例子?nbsp; 
一个列表中加入3个数字,然后从列表中取出作合计的操作?

JDK   1.4   的时?
List   testList   =   new   ArrayList();
testList.add(new   Integer(100));
testList.add(new   Integer(200));
testList.add(new   Integer(300));
int   result   =   0;
for(int   i   =   0;   i   <   testList.size();   i   ++)   {
        //   q里从列表中取数据时Q需要强制{换?
        result   +=   (Integer)testList.get(i).intValue();
}
System.out.println(result);


JDK   1.5   的时?
List <Integer>   testList   =   new   ArrayList <Integer> ();
//   注意QJDK1.5?nbsp;  int   ?nbsp;  100Q能够自动的转换?nbsp;  Integer   cd。不强制要求   new   Integer(100)
testList.add(100);
testList.add(200);
testList.add(300);
int   result   =   0;
for(int   i   =   0;   i   <   testList.size();   i   ++)   {
        //   q里从列表中取数据时Q不需要强制{换?
        result   +=   testList.get(i).intValue();
}
System.out.println(result);



lk 2008-04-08 16:07 发表评论
]]>
JUnit最?jng)_?/title><link>http://m.tkk7.com/lcs/archive/2008/03/31/189806.html</link><dc:creator>lk</dc:creator><author>lk</author><pubDate>Mon, 31 Mar 2008 08:38:00 GMT</pubDate><guid>http://m.tkk7.com/lcs/archive/2008/03/31/189806.html</guid><wfw:comment>http://m.tkk7.com/lcs/comments/189806.html</wfw:comment><comments>http://m.tkk7.com/lcs/archive/2008/03/31/189806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/lcs/comments/commentRss/189806.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/lcs/services/trackbacks/189806.html</trackback:ping><description><![CDATA[<p><font style="background-color: #dee0fe">JUnit是什么? </font></p> <p><font style="background-color: #dee0fe">cherami</font></p> <font style="background-color: #dee0fe"> <p><br /> JUnit是一个开发源代码的Java试框架Q用于编写和q行可重复的试。他是用于单元测试框架体pxUnit的一个实例(用于java语言Q。它包括以下Ҏ(gu):(x)<br /> 1、用于测试期望结果的断言QAssertionQ?br /> 2、用于共享共同测试数据的试工具<br /> 3、用于方便的l织和运行测试的试套g<br /> 4、图形和文本的测试运行器</p> <p>JUnit最初是由Erich GammaQGoF之一Q和Kent BeckQxp和refactor的先׃一Q编写的. </p> <p>需要说明的是junit一般是用来q行单元试的,因此需要了(jin)解被试代码的内部结构(x谓的白盒试Q,另外junit是在xp~程和重构(refactorQ中被极力推荐用的工具Q因为在实现自动单元试的情况下可以大大的提高开发的效率Q但是实际上~写试代码也是需要耗费很多的时间和_֊的,那么使用q个东东好处到底在哪里呢Q笔者认为是q样的:(x)<br /> 1、对于xp~程而言Q要求在~写代码之前先写试Q这样可以强制你在写代码之前好好的思考代码(Ҏ(gu)Q的功能和逻辑Q否则编写的代码很不E_Q那么你需要同时维护测试代码和实际代码Q这个工作量׃(x)大大增加。因此在xp~程中,基本q程是这L(fng)Q构思-》编写测试代码-》编写代码-》测试,而且~写试和编写代码都是增量式的,写一Ҏ(gu)一点,在编写以后的代码中如果发现问题可以较块的q踪到问题的原因Q减回归错误的U错隑ֺ<br /> 2、对于重构而言Q其好处和xp~程中是cM的,因ؓ(f)重构也是要求改一Ҏ(gu)一点,减少回归错误造成的时间消耗?br /> 3、对于非以上两种情况Q我们在开发的时候用junit写一些适当的测试也是有必要的,因ؓ(f)一般我们也是需要编写测试的代码的,可能原来不是使用的junitQ如果用junitQ而且针对接口Q方法)(j)~写试代码?x)减以后的l护工作Q例如以后对Ҏ(gu)内部的修改(q个是相当于重构的工作?jin)?j)。另外就是因为junit有断a功能Q如果测试结果不通过?x)告诉我们那个测试不通过Qؓ(f)什么,而如果是想以前的一般做法是写一些测试代码看其输出结果,然后再由自己来判断结果用正,使用junit的好处就是这个结果是否正的判断是它来完成的Q我们只需要看看它告诉我们l果是否正确可以了(jin)Q在一般情况下?x)大大提高效率?/p> <p><br /> JUnit入门 </p> <p>cherami 整理 </p> <p><br /> 安装JUnit</p> <p>安装很简单,先到以下地址下蝲一个最新的zip包:(x)<br /> http://download.sourceforge.net/junit/<br /> 下蝲完以后解压羃C喜欢的目录下Q假设是JUNIT_HOMEQ然后将JUNIT_HOME下的junit.jar包加C的系l的CLASSPATH环境变量中,对于IDE环境Q对于需要用到的junit的项目增加到l(f)ib中,其设|不同的IDE有不同的讄Q这里不多讲?/p> <p><br /> 如何使用JUnit写测试?</p> <p>最单的范例如下Q?br /> 1、创Z个TestCase的子c? <br /> package junitfaq;</p> <p>import java.util.*;<br /> import junit.framework.*;</p> <p>public class SimpleTest extends TestCase {</p> <p>public SimpleTest(String name) {<br /> super(name);<br /> }</p> <p><br /> 2、写一个测试方法断a期望的结果:(x)<br /> public void testEmptyCollection() {<br /> Collection collection = new ArrayList();<br /> assertTrue(collection.isEmpty());<br /> }<br /> 注意QJUnit推荐的做法是以test作ؓ(f)待测试的Ҏ(gu)的开_(d)q样q些Ҏ(gu)可以被自动找到ƈ被测试?/p> <p>3、写一个suite()Ҏ(gu)Q它?x)用反动态的创徏一个包含所有的testXxxxҎ(gu)的测试套Ӟ(x)<br /> public static Test suite() {<br /> return new TestSuite(SimpleTest.class);<br /> }</p> <p>4、写一个main()Ҏ(gu)以文本运行器的方式方便的q行试Q?br /> public static void main(String args[]) {<br /> junit.textui.TestRunner.run(suite());<br /> }<br /> }</p> <p>5、运行测试:(x)<br /> 以文本方式运行:(x)<br /> java junitfaq.SimpleTest </p> <p>通过的测试结果是Q?/p> <p>.<br /> Time: 0</p> <p>OK (1 tests)</p> <p>Time上的点表示试个数Q如果测试通过则显COK。否则在点的后Ҏ(gu)上FQ表C试p|?br /> 每次的测试结果都应该是OK的,q样才能说明试是成功的Q如果不成功p马上Ҏ(gu)提示信息q行修正?jin)?br /> 如果JUnit报告?jin)测试没有成功,它?x)区分p|QfailuresQ和错误QerrorsQ。失败是你的代码中的assertҎ(gu)p|引v的;而错误则是代码异常引L(fng)Q例如ArrayIndexOutOfBoundsException?</p> <p><br /> 以图形方式运行:(x)</p> <p>java junit.swingui.TestRunner junitfaq.SimpleTest </p> <p>通过的测试结果在囑Ş界面的绿色条部分?/p> <p> </p> <p>以上是最单的试样例Q在实际的测试中我们试某个cȝ功能是常帔R要执行一些共同的操作Q完成以后需要销毁所占用的资源(例如|络q接、数据库q接Q关闭打开的文件等Q,TestCasecȝ我们提供?jin)setUpҎ(gu)和tearDownҎ(gu)QsetUpҎ(gu)的内容在试你编写的TestCase子类的每个testXxxxҎ(gu)之前都会(x)q行Q而tearDownҎ(gu)的内容在每个testXxxxҎ(gu)l束以后都会(x)执行。这个既׃n?jin)初始化代码Q又消除?jin)各个测试代码之间可能生的怺影响?</p> <p>JUnit最?jng)_?</p> <p> </p> <p>Martin Fowler说过Q?#8220;当你试图打印输出一些信息或调试一个表辑ּӞ写一些测试代码来替代那些传统的方法?#8221;一开始,你会(x)发现你L要创Z些新的FixtureQ而且试g使你的编E速度慢了(jin)下来。然而不久之后,你会(x)发现你重复用相同的FixtureQ而且新的试通常只涉?qing)添加一个新的测试方法?nbsp; </p> <p>你可能会(x)写许多测试代码,但你很快׃(x)发现你设惛_的测试只有一部分是真正有用的。你所需要的试是那些会(x)p|的测试,即那些你认ؓ(f)不会(x)p|的测试,或你认ؓ(f)应该p|却成功的试?</p> <p>我们前面提到q测试是一个不?x)中断的q程。一旦你有了(jin)一个测试,你就要一直确保其正常工作Q以(g)验你所加入的新的工作代码。不要每隔几天或最后才q行试Q每天你都应该运行一下测试代码。这U投资很,但可以确保你得到可以信赖的工作代码。你的返工率降低?jin),你?x)有更多的旉~写工作代码?</p> <p>不要认ؓ(f)压力大,׃写测试代码。相反编写测试代码会(x)使你的压力逐渐减轻Q应为通过~写试代码Q你对类的行为有?jin)确切的认识。你?x)更快地~写出有效率地工作代码?/p> <p>下面是一些具体的~写试代码的技巧或较好的实跉|法:(x) </p> <p>1. 不要用TestCase的构造函数初始化FixtureQ而要用setUp()和tearDown()Ҏ(gu)?</p> <p>2. 不要依赖或假定测试运行的序Q因为JUnit利用Vector保存?gu)试?gu)。所以不同的q_?x)按不同的顺序从Vector中取出测试方法?</p> <p>3. 避免~写有副作用的TestCase。例如:(x)如果随后的测试依赖于某些特定的交易数据,׃要提交交易数据。简单的?x)滚可以?jin)?</p> <p>4. 当承一个测试类Ӟ记得调用父类的setUp()和tearDown()Ҏ(gu)?</p> <p>5. 测试代码和工作代码攑֜一P一边同步编译和更新。(使用Ant中有支持junit的task.Q?</p> <p>6. 试cd试Ҏ(gu)应该有一致的命名Ҏ(gu)。如在工作类名前加上test从而Ş成测试类名?</p> <p>7. 保试与时间无养I不要依赖使用q期的数据进行测试。导致在随后的维护过E中很难重现试?</p> <p>8. 如果你编写的软g面向国际?jng)场Q编写测试时要考虑国际化的因素。不要仅用母语的Localeq行试?</p> <p>9. 可能地利用JUnit提供地assert/failҎ(gu)以及(qing)异常处理的方法,可以使代码更为简z?br />  <br /> 10.试要尽可能地小Q执行速度快?/p> <p><br /> JUnit和antl合 </p> <p>cherami 转脓(chung)</p> <p><br /> ant 提供?jin)两?target Q?junit ?junitreport <br /> q行所?试用例 Qƈ生成 html 格式的报?<br /> 具体操作如下Q?</p> <p>1.?junit.jar 攑֜ ANT_HOME\lib 目录?<br /> 2.修改 build.xml Q加入如?内容Q?</p> <p><br /> <property name="report" value="report" /> <target name="junitreport" depends="clean, compile"> <junit printsummary="on" fork="true" haltonfailure="false" failureproperty="tests.failed" showoutput="true"> <classpath refid="myclasspath"/> <formatter type="xml"/> <batchtest todir="${report}"> <fileset dir="${build}"> <include name="**/*Test.*"/> </fileset> </batchtest> </junit> <junitreport todir="${report}"> <fileset dir="${report}"> <include name="TEST-*.xml"/> </fileset> <report format="frames" todir="${report}"/> </junitreport> <fail if="tests.failed"> --------------------------------------------------------- One or more tests failed, check the report for detail... --------------------------------------------------------- </fail> </target> </p> <p>q行 q个 target Qant ?x)运行每?TestCase <br /> ?report 目录下就有了(jin) 很多 TEST*.xml ?一些网?<br /> 打开 report 目录下的 index.html 可以看到很直观的测试运行报告,一目了(jin)然?</p> <p><br /> 本文来自: 中国自学~程|?www.zxbc.cn) 详细出处参考:(x)http://www.zxbc.cn/html/rjgc/1414044315681.htm</font></p> <img src ="http://m.tkk7.com/lcs/aggbug/189806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/lcs/" target="_blank">lk</a> 2008-03-31 16:38 <a href="http://m.tkk7.com/lcs/archive/2008/03/31/189806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://blblkj.com" target="_blank">ҸŮˬ߳Ƭ</a>| <a href="http://zjtuntex.com" target="_blank">޿Ļ</a>| <a href="http://81am.com" target="_blank">ַѹۿ </a>| <a href="http://4466n.com" target="_blank">պƵѿ</a>| <a href="http://ywgj50225.com" target="_blank">һƬѿ</a>| <a href="http://wkk3.com" target="_blank">a vרav</a>| <a href="http://am3736.com" target="_blank">պһ</a>| <a href="http://se969.com" target="_blank">þþþAVƬ</a>| <a href="http://zisewang.com" target="_blank">1234</a>| <a href="http://tskes.com" target="_blank">޾ƷAVƬ</a>| <a href="http://8xjr.com" target="_blank">ƷƷŮ߹ۿ </a>| <a href="http://sewuji.com" target="_blank">һ߹ۿ</a>| <a href="http://13813855.com" target="_blank">ۺһպ</a>| <a href="http://billtsssrvp.com" target="_blank">ëƬ쿴</a>| <a href="http://3c3w.com" target="_blank">AVƬ߹ۿ</a>| <a href="http://whdy888.com" target="_blank">ëƬڵ߳</a>| <a href="http://cc19123.com" target="_blank">ûվɫƵ</a>| <a href="http://zj1069.com" target="_blank">ĻƵ</a>| <a href="http://yisaoma.com" target="_blank">޹Ʒ߹ۿ</a>| <a href="http://199291.com" target="_blank">ĻþþƷA </a>| <a href="http://wwwkk2347.com" target="_blank">2021ھƷþþþþ</a>| <a href="http://udlmw.com" target="_blank">Ƶ88</a>| <a href="http://sijep.com" target="_blank">Ʒ_˳</a>| <a href="http://199044.com" target="_blank">޹Ʒþþþ</a>| <a href="http://yese889.com" target="_blank">רһ·߶</a>| <a href="http://wjjccw.com" target="_blank">һһ</a>| <a href="http://fense1.com " target="_blank">þþþƷƵ</a>| <a href="http://2h6m.com" target="_blank">õĻ2019</a>| <a href="http://hqwgg.com" target="_blank">޾Ʒһ</a>| <a href="http://www-135888.com" target="_blank">޾Ʒ߹ۿ</a>| <a href="http://caoliusq1024.com" target="_blank">޹˱ɫ</a>| <a href="http://gzqhit.com" target="_blank">ĻƵ</a>| <a href="http://jimeng-99.com" target="_blank">þþþþƵ</a>| <a href="http://928348.com" target="_blank">Ļ뱬av</a>| <a href="http://by23336.com" target="_blank">޹Ʒۺϸר</a>| <a href="http://by33321.com" target="_blank">˹ѳƵ</a>| <a href="http://szzdjl.com" target="_blank">91Ƶ߹ۿѴȫ</a>| <a href="http://jaubus.com" target="_blank">˳ۺ7777</a>| <a href="http://https357171.com" target="_blank">һ</a>| <a href="http://8b22.com" target="_blank">һëƬ</a>| <a href="http://hongyue8.com" target="_blank">ѿƷ3aƵƵ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>