﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-我心飞翔-随笔分类-职场生活</title><link>http://www.blogjava.net/parable-myth/category/12073.html</link><description>慢慢的度过</description><language>zh-cn</language><lastBuildDate>Sun, 02 Mar 2014 17:29:51 GMT</lastBuildDate><pubDate>Sun, 02 Mar 2014 17:29:51 GMT</pubDate><ttl>60</ttl><item><title>kettle ETL java 调用 kettle job 或 transfer</title><link>http://www.blogjava.net/parable-myth/archive/2014/03/02/410499.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Sun, 02 Mar 2014 00:20:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2014/03/02/410499.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/410499.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2014/03/02/410499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/410499.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/410499.html</trackback:ping><description><![CDATA[转自<br /><br /><a href="http://blog.csdn.net/chen978616649/article/details/9063695">http://blog.csdn.net/chen978616649/article/details/9063695<br /><br /><br /><p style="color: #333333; font-family: Arial; line-height: 26px;">代码如下：调用kettle 4.2版本</p><p style="color: #333333; font-family: Arial; line-height: 26px;"><br /></p><p style="color: #333333; font-family: Arial; line-height: 26px;">package test;<br /><br /><br />import org.apache.commons.lang.StringUtils;<br />import org.apache.commons.vfs.FileSelector;<br />import org.pentaho.di.core.KettleEnvironment;<br />import org.pentaho.di.core.database.DatabaseMeta;<br />import org.pentaho.di.core.exception.KettleException;<br />import org.pentaho.di.core.util.EnvUtil;<br />import org.pentaho.di.job.Job;<br />import org.pentaho.di.job.JobMeta;<br />import org.pentaho.di.repository.RepositoryDirectory;<br />import org.pentaho.di.repository.RepositoryDirectoryInterface;<br />import org.pentaho.di.repository.kdr.KettleDatabaseRepository;<br />import org.pentaho.di.repository.kdr.KettleDatabaseRepositoryMeta;<br />import org.pentaho.di.trans.Trans;<br />import org.pentaho.di.trans.TransMeta;<br /><br /><br />import com.longtech.configuration.BaseConfiguration;<br />import com.platform.common.util.LoggerUtil;<br /><br /><br />/**<br />&nbsp;*&nbsp;<br />&nbsp;* @Description: &nbsp;java调用kettle 数据库型资料库中的转换<br />&nbsp;* @author chen 此类是调用kettle 4.2版本的测试类<br />&nbsp;* @version 1.0,&nbsp;<br />&nbsp;* @date 2013-5-23 下午02:40:50<br />&nbsp;*/<br />public class ExecRepositoryTrans {<br />/**<br />* 本测试类慎用！！！！！！！<br />* @param args<br />*/<br />public static void main(String[] args) {<br />//D:\java\workspace\sics\src\config\kettle<br />String classesdir = BaseConfiguration.getString("classesdir");<br />String jobName = BaseConfiguration.getString("kettle.path.file");<br />if(StringUtils.isNotEmpty(jobName)){<br />LoggerUtil.info(ExecRepositoryTrans.class, "执行kettle job start-------------------");<br /><br />runJob(classesdir + jobName);<br /><br />LoggerUtil.info(ExecRepositoryTrans.class, "执行kettle job end -------------------");<br />}else{<br /><br />LoggerUtil.info(ExecRepositoryTrans.class, "请配置kettle.path.file job 的路径文件");<br />}<br /><br />}<br />/**<br />*java 调用kettle 转换&nbsp;<br />*/<br />public static void runTransfer(){<br />Trans trans=null; &nbsp;<br />FileSelector f = null;<br />try {<br />// 初始化 &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String fName= "D:\\kettle\\informix_to_am_4.ktr";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 转换元对象 &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;KettleEnvironment.init();//初始化<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;EnvUtil.environmentInit();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TransMeta transMeta = new TransMeta(fName);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 转换 &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; trans = new Trans(transMeta); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 执行转换 &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; trans.execute(null); &nbsp;&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 等待转换执行结束 &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; trans.waitUntilFinished(); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //抛出异常 &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(trans.getErrors()&gt;0){ &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw new Exception("There are errors during transformation exception!(传输过程中发生异常)"); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;<br />} catch (Exception e) {<br />e.printStackTrace();<br />}<br />}<br />/**<br />* java 调用 kettle 的job<br />* @param jobname 如： String fName= "D:\\kettle\\informix_to_am_4.ktr";<br />*/<br />public static void runJob(String jobname){ &nbsp;<br />try { &nbsp;&nbsp;<br />KettleEnvironment.init(); &nbsp;&nbsp;<br />//jobname 是Job脚本的路径及名称 &nbsp;&nbsp;<br />JobMeta jobMeta = new JobMeta(jobname, null); &nbsp;&nbsp;<br />Job job = new Job(null, jobMeta); &nbsp;&nbsp;<br />//向Job 脚本传递参数，脚本中获取参数值：${参数名} &nbsp;&nbsp;<br />//job.setVariable(paraname, paravalue); &nbsp;&nbsp;<br />&nbsp;job.start(); &nbsp;&nbsp;<br />&nbsp;job.waitUntilFinished(); &nbsp;&nbsp;<br />&nbsp;if (job.getErrors() &gt; 0) { &nbsp;&nbsp;<br />&nbsp;throw new Exception("There are errors during job exception!(执行job发生异常)"); &nbsp;<br />&nbsp;} &nbsp;&nbsp;<br />} catch (Exception e) { &nbsp;&nbsp;<br />e.printStackTrace();<br />} &nbsp;&nbsp;<br />}<br />/**<br />* 配置数据源 调用资源库中的相关job 、transfer<br />*/<br />public static void dbResource(){<br />String transName="t1"; &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp;try { &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;KettleEnvironment.init(); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DatabaseMeta dataMeta = new DatabaseMeta("KettleDBRep","MSSQL","Native","127.0.0.1","etl","1433","sa","bsoft"); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;KettleDatabaseRepositoryMeta repInfo = new KettleDatabaseRepositoryMeta(); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;repInfo.setConnection(dataMeta); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;KettleDatabaseRepository rep = new KettleDatabaseRepository(); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rep.init(repInfo); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rep.connect("admin", "admin"); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;RepositoryDirectoryInterface dir = new RepositoryDirectory(); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dir.setObjectId(rep.getRootDirectoryID()); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TransMeta tranMeta = rep.loadTransformation(rep.getTransformationID(transName, dir), null); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Trans trans = new Trans(tranMeta); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;trans.execute(null); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;trans.waitUntilFinished(); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp;} catch (KettleException e) { &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;e.printStackTrace(); &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp;} &nbsp;<br />}<br /><br /><br />}</p></a><img src ="http://www.blogjava.net/parable-myth/aggbug/410499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2014-03-02 08:20 <a href="http://www.blogjava.net/parable-myth/archive/2014/03/02/410499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转win8 64位+Oracle 11g 64位下使用PL/SQL Developer 的解决办法</title><link>http://www.blogjava.net/parable-myth/archive/2013/09/02/403545.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Mon, 02 Sep 2013 01:42:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2013/09/02/403545.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/403545.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2013/09/02/403545.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/403545.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/403545.html</trackback:ping><description><![CDATA[<span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1）安装Oracle 11g 64位</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">2）安装32位的Oracle客户端（ instantclient-basic-win32-11.2.0.1.0）</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">下载 instantclient-basic-win32-11.2.0.1.0.zip (一定得是32位的，不要下错了版本，Oracle官网有下载），将其解压至Oracle安装目录的Product下（本机命名为：instantclient_11_2）：D:\Oracle\app\YM\product\instantclient_11_2。</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">拷贝数据库安装根目录下的一个目录D:\Oracle\app\YM\product\11.2.0\dbhome_1\NETWORK到Oracle客户端目录下D:\Oracle\app\YM\product\instantclient_11_2（其实只需要 NETWORK\ADMIN\tnsnames.ora，最好是直接拷贝这个文件到D:\Oracle\app\YM\product\instantclient_11_2目录下）</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">3）安装PL/SQL Developer</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">安装 PL/SQL Developer，在perference-&gt;Connection里面设置OCI Library和Oracle_Home，例如本机设置为：</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">Oracle Home ：D:\Oracle\app\YM\product\instantclient_11_2</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">OCI Library ： D:\Oracle\app\YM\product\instantclient_11_2\oci.dll</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">4) 设置环境变量(修改PATH和TNS_ADMIN环境变量)</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">对于NLS_LANG环境变量, 最好设置成和数据库端一致, 首先从数据库端查询字符集信息:</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">SQL&gt; select userenv('language') nls_lang from dual;</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">NLS_LANG</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">----------------------------------------------------</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">SIMPLIFIED CHINESE_CHINA.ZHS16GBK</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">右击"我的电脑" - "属性" - "高级" - "环境变量" - "系统环境变量":</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1&gt;.选择"Path" - 点击"编辑", 把 "D:\Oracle\app\YM\product\instantclient_11_2;" 加入;</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">2&gt;.点击"新建", 变量名设置为"TNS_ADMIN", 变量值设置为"D:\Oracle\app\YM\product\instantclient_11_2;", 点击"确定";</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">3&gt;.点击"新建", 变量名设置为"NLS_LANG", 变量值设置为"SIMPLIFIED CHINESE_CHINA.ZHS16GBK", 点击"确定";</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">最后点击"确定"退出.</span><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/26px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">启动 PL/SQL Developer ，运行无问题。</span><img src ="http://www.blogjava.net/parable-myth/aggbug/403545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2013-09-02 09:42 <a href="http://www.blogjava.net/parable-myth/archive/2013/09/02/403545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Java 获取当前日期和时间</title><link>http://www.blogjava.net/parable-myth/archive/2013/01/17/394364.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Thu, 17 Jan 2013 10:47:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2013/01/17/394364.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/394364.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2013/01/17/394364.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/394364.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/394364.html</trackback:ping><description><![CDATA[<p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span>有两种方法：</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span>方法一：用java.util.Date类来实现，并结合java.text.DateFormat类来实现时间的格式化，看下面代码：</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span>import java.util.*;&nbsp;<br /></span><span>import java.text.*;<br /></span><span>//以下默认时间日期显示方式都是汉语语言方式<br /></span><span>//一般语言就默认汉语就可以了，时间日期的格式默认为MEDIUM风格，比如：2008-6-16 20:54:53<br /></span><span>//以下显示的日期时间都是再Date类的基础上的来的，还可以利用Calendar类来实现见类TestDate2.java<br /></span><span>public class TestDate {&nbsp;<br /></span><span>&nbsp;&nbsp; public static void main(String[] args) {&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date now = new Date();&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar cal = Calendar.getInstance();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateFormat d1 = DateFormat.getDateInstance(); //默认语言（汉语）下的默认风格（MEDIUM风格，比如：2008-6-16 20:54:53）<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str1 = d1.format(now);<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateFormat d2 = DateFormat.getDateTimeInstance();&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str2 = d2.format(now);&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateFormat d3 = DateFormat.getTimeInstance();&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str3 = d3.format(now);&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateFormat d4 = DateFormat.getInstance(); //使用SHORT风格显示日期和时间<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str4 = d4.format(now);</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateFormat d5 = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL); //显示日期，周，时间（精确到秒）<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str5 = d5.format(now);<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateFormat d6 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG); //显示日期。时间（精确到秒）<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str6 = d6.format(now);<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateFormat d7 = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT); //显示日期，时间（精确到分）<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str7 = d7.format(now);<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateFormat d8 = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM); //显示日期，时间（精确到分）<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str8 = d8.format(now);//与SHORT风格相比，这种方式最好用</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; ">&nbsp;</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><br /><span style="color: #3366ff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("用Date方式显示时间: " + now);//此方法显示的结果和Calendar.getInstance().getTime()一样<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("用DateFormat.getDateInstance()格式化时间后为：" + str1);<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("用DateFormat.getDateTimeInstance()格式化时间后为：" + str2);<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("用DateFormat.getTimeInstance()格式化时间后为：" + str3);<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("用DateFormat.getInstance()格式化时间后为：" + str4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("用DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL)格式化时间后为：" + str5);<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("用DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG)格式化时间后为：" + str6);<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("用DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT)格式化时间后为：" + str7);<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("用DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM)格式化时间后为：" + str8);<br /></span><span>&nbsp;&nbsp; }</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span>}</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span>运行结果：</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span>用Date方式显示时间: Mon Jun 16 20:54:53 CST 2008<br /></span><span>用DateFormat.getDateInstance()格式化时间后为：2008-6-16<br /></span><span>用DateFormat.getDateTimeInstance()格式化时间后为：2008-6-16 20:54:53<br /></span><span>用DateFormat.getTimeInstance()格式化时间后为：20:54:53<br /></span><span>用DateFormat.getInstance()格式化时间后为：08-6-16 下午8:54<br /></span><span>用DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL)格式化时间后为<br /></span><span>：2008年6月16日 星期一 下午08时54分53秒 CST<br /></span><span>用DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG)格式化时间后为<br /></span><span>：2008年6月16日 下午08时54分53秒<br /></span><span>用DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT)格式化时间后<br /></span><span>为：08-6-16 下午8:54<br /></span><span>用DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM)格式化时间<br /></span><span>后为：2008-6-16 20:54:53</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; ">&nbsp;</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span>方法二：用java.util.Calendar类来实现，看下面：</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span>import java.util.*;&nbsp;<br /></span><span>import java.text.*;<br /></span><span>//以下是利用Calendar类来实现日期时间的，和Date类相比较比较简单</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span>public class TestDate2 {&nbsp;<br /></span><span>&nbsp;&nbsp; public static void main(String[] args) {&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar ca = Calendar.getInstance();<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int year = ca.get(Calendar.YEAR);//获取年份<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int month=ca.get(Calendar.MONTH);//获取月份&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int day=ca.get(Calendar.DATE);//获取日<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int minute=ca.get(Calendar.MINUTE);//分&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int hour=ca.get(Calendar.HOUR);//小时&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int second=ca.get(Calendar.SECOND);//秒<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int WeekOfYear = ca.get(Calendar.DAY_OF_WEEK);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("用Calendar.getInstance().getTime()方式显示时间: " + ca.getTime());<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("用Calendar获得日期是：" + year +"年"+ month +"月"+ day + "日");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("用Calendar获得时间是：" + hour +"时"+ minute +"分"+ second +"秒");<br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(WeekOfYear);//显示今天是一周的第几天（我做的这个例子正好是周二，故结果显示2，如果你再周6运行，那么显示6）<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span>&nbsp;&nbsp; }</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span>}<br /></span><span>运行结果是：<br /></span><span>用Calendar.getInstance().getTime()方式显示时间: Mon Jun 16 21:54:21 CST 2008<br /></span><span>用Calendar获得日期是：2008年5月16日<br /></span><span>用Calendar获得时间是：9时54分21秒<br /></span><span>2</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><br /><span>总结：中的来说，方法二是最方便的，方法一显得分笨拙，不过看个人喜欢了。</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; ">&nbsp;</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span>转自：</span><a href="http://student.csdn.net/space.php?uid=122120&amp;do=blog&amp;id=14681" style="color: #336699; text-decoration: none; "><span>http://student.csdn.net/space.php?uid=122120&amp;do=blog&amp;id=14681</span></a></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; ">&nbsp;</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span>方法三：</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "></p><div style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><h3><span>SimpleDateFormat 24小时制时间显示</span></h3><span>关键字: java基础</span></div><div style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><p>&nbsp;</p><table border="0" cellspacing="3" cellpadding="0" summary="Chart shows pattern letters, date/time component, presentation, and examples."><tbody><tr><th align="left"><span>字母</span></th><th align="left"><span>日期或时间元素</span></th><th align="left"><span>表示</span></th><th align="left"><span>示例</span></th></tr><tr><td><code><span>G</span></code></td><td><span>Era 标志符</span></td><td><span>Text</span></td><td><code><span>AD</span></code></td></tr><tr><td><code><span>y</span></code></td><td><span>年</span></td><td><span>Year</span></td><td><code><span>1996</span></code><span>;&nbsp;</span><code><span>96</span></code></td></tr><tr><td><code><span>M</span></code></td><td><span>年中的月份</span></td><td><span>Month</span></td><td><code><span>July</span></code><span>;&nbsp;</span><code><span>Jul</span></code><span>;&nbsp;</span><code><span>07</span></code></td></tr><tr><td><code><span>w</span></code></td><td><span>年中的周数</span></td><td><span>Number</span></td><td><code><span>27</span></code></td></tr><tr><td><code><span>W</span></code></td><td><span>月份中的周数</span></td><td><span>Number</span></td><td><code><span>2</span></code></td></tr><tr><td><code><span>D</span></code></td><td><span>年中的天数</span></td><td><span>Number</span></td><td><code><span>189</span></code></td></tr><tr><td><code><span>d</span></code></td><td><span>月份中的天数</span></td><td><span>Number</span></td><td><code><span>10</span></code></td></tr><tr><td><code><span>F</span></code></td><td><span>月份中的星期</span></td><td><span>Number</span></td><td><code><span>2</span></code></td></tr><tr><td><code><span>E</span></code></td><td><span>星期中的天数</span></td><td><span>Text</span></td><td><code><span>Tuesday</span></code><span>;&nbsp;</span><code><span>Tue</span></code></td></tr><tr><td><code><span>a</span></code></td><td><span>Am/pm 标记</span></td><td><span>Text</span></td><td><code><span>PM</span></code></td></tr><tr><td><code><span>H</span></code></td><td><span>一天中的小时数（0-23）</span></td><td><span>Number</span></td><td><code><span>0</span></code></td></tr><tr><td><code><span>k</span></code></td><td><span>一天中的小时数（1-24）</span></td><td><span>Number</span></td><td><code><span>24</span></code></td></tr><tr><td><code><span>K</span></code></td><td><span>am/pm 中的小时数（0-11）</span></td><td><span>Number</span></td><td><code><span>0</span></code></td></tr><tr><td><code><span>h</span></code></td><td><span>am/pm 中的小时数（1-12）</span></td><td><span>Number</span></td><td><code><span>12</span></code></td></tr><tr><td><code><span>m</span></code></td><td><span>小时中的分钟数</span></td><td><span>Number</span></td><td><code><span>30</span></code></td></tr><tr><td><code><span>s</span></code></td><td><span>分钟中的秒数</span></td><td><span>Number</span></td><td><code><span>55</span></code></td></tr><tr><td><code><span>S</span></code></td><td><span>毫秒数</span></td><td><span>Number</span></td><td><code><span>978</span></code></td></tr><tr><td><code><span>z</span></code></td><td><span>时区</span></td><td><span>General time zone</span></td><td><code><span>Pacific Standard Time</span></code><span>;&nbsp;</span><code><span>PST</span></code><span>;&nbsp;</span><code><span>GMT-08:00</span></code></td></tr><tr><td><code><span>Z</span></code></td><td><span>时区</span></td><td><span>RFC 822 time zone</span></td><td><p><code><span>-0800</span></code></p><p>&nbsp;</p><p><br /></p></td></tr></tbody></table></div><div style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span>它有个优点就是支持两位月份，两位日期。带前缀0.</span></div><div style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><div><span>Date date = new Date();</span></div><div><span>SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm");</span></div><div><span>String sDateSuffix = dateformat.format(date);</span></div><div><span>System.out.println("[+]sDateSuffix:"+sDateSuffix);</span></div></div><img src ="http://www.blogjava.net/parable-myth/aggbug/394364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2013-01-17 18:47 <a href="http://www.blogjava.net/parable-myth/archive/2013/01/17/394364.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>清除目录下的SVN信息</title><link>http://www.blogjava.net/parable-myth/archive/2012/08/31/386680.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Fri, 31 Aug 2012 05:07:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2012/08/31/386680.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/386680.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2012/08/31/386680.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/386680.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/386680.html</trackback:ping><description><![CDATA[<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; text-align: left; background-color: #fffef7; ">今天想清除目录下的SVN信息，在网上找了找，说是有三种方法：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; text-align: left; background-color: #fffef7; ">一、在linux下&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />删除这些目录是很简单的，命令如下&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />find . -type d -name ".svn"|xargs rm -rf&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />或者&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />find . -type d -iname ".svn" -exec rm -rf {} \;&nbsp;&nbsp;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />二、在windows下用以下法子：&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />1、在项目平级的目录，执行dos命令：&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />xcopy project_dir project_dir_1 /s /i&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />2、或者在项目根目录执行以下dos命令&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn"&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />其实第二种方法可以用来干很多事的，比如把代码中的.svn替换为任意其他文件名并在硬盘根目录下执行，就可以从硬盘上删除所有的这个文件啦。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />3、添加注册表(亲自动手测试过)&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />可以将&#8220;快速删除SVN版本信息&#8221;命名增加到资源管理器的右键上，这样，鼠标点两下就能把选中目录下的所有.svn目录干掉了。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />代码为：&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />Windows Registry Editor Version 5.00&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />@="快速删除SVN版本信息"&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />@="cmd.exe /c D:\工具\批处理文件删除SVN版本信息.bat"&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />将这段代码保存为一个.reg文件，双击确认导入注册表中不完整，后来自己手工添加。注意：文件&#8220;批处理文件删除SVN版本信息.bat&#8221;不能放 在有空格的文件夹下，确认删除时请看一下当前目录不要删除不该删的目录下的SVN版本信息。不知道怎么改进&#8220;cmd.exe /c D:\工具\批处理文件删除SVN版本信息.bat&#8221;。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />批处理文件删除SVN版本信息.bat文件内容如下：&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />@echo off&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />echo ***********************************************************&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />echo 清除SVN版本信 息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />echo ***********************************************************&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />:start&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />::启动过程，切换目录&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />:set pwd=%cd%&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />:cd %1&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />echo 工作目录是：&amp; chdir&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />:input&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />::获取输入，根据输入进行处理&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />set source=:&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />set /p source=确定要清楚当前目录下的.svn信息吗？[Y/N/Q]&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />set "source=%source:"=%"&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />if "%source%"=="y" goto clean&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />if "%source%"=="Y" goto clean&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />if "%source%"=="n" goto noclean&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />if "%source%"=="N" goto noclean&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />if "%source%"=="q" goto end&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />if "%source%"=="Q" goto end&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />goto input&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />:clean&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />::主处理过程，执行清理工作&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />@echo on&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />@for /d /r %%c in (.svn) do @if exist %%c ( rd /s /q %%c &amp; echo&nbsp;&nbsp;&nbsp; 删除目录%%c)&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />@echo off&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />echo "当前目录下的svn信息已清除"&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />goto end&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />:noclean&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />::分支过程，取消清理工作&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />echo "svn信息清楚操作已取消"&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />goto end&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />:end&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />::退出程序&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />cd "%pwd%"&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />pause</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; text-align: left; background-color: #fffef7; "></p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; text-align: left; background-color: #fffef7; ">注：最后一种方法，如果出现错误，就打开注册表，找到对应的项，吧&#8220;cmd.exe /c D:\工具\批处理文件删除SVN版本信息.bat &#8220;直接写入注册表中即可使用</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; text-align: left; background-color: #fffef7; ">我只用了最后一种方法：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; text-align: left; background-color: #fffef7; ">报文件没有关联错误，找到这个注册表项：[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />写入：&#8220;cmd.exe /c D:\工具\批处理文件删除SVN版本信息.bat &#8220;，注意路径</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; text-align: left; background-color: #fffef7; ">还有一个要注意的：在使用的时候，不要在要清除的文件夹上右击，在要清除的文件夹里面的子文件夹上右击--》快速删除svn版本信息</p><img src ="http://www.blogjava.net/parable-myth/aggbug/386680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2012-08-31 13:07 <a href="http://www.blogjava.net/parable-myth/archive/2012/08/31/386680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下使用gzip压缩与解压文件</title><link>http://www.blogjava.net/parable-myth/archive/2011/12/04/365495.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Sun, 04 Dec 2011 02:44:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2011/12/04/365495.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/365495.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2011/12/04/365495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/365495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/365495.html</trackback:ping><description><![CDATA[<div><div id="blog_content">     <p><span style="line-height: 30px; font-family: Georgia,serif,sans-serif,Arial,Verdana,Helvetica; font-size: 16px;"> <p style="margin-top: 0.5em; margin-bottom: 0.9em;">Linux下gzip命令是用来压缩文件的。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间，还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式。据统计，gzip命令对文本文件有60%～70%的压缩率。</p> <p style="margin-top: 0.5em; margin-bottom: 0.9em;">gzip命令的格式是：</p> <blockquote style="padding: 0px 10px; margin: 1em 2em ! important; background-color: #eeeeee; font-style: italic; border: 1px solid #dddddd;"> <p style="width: inherit ! important; margin: 0px ! important;">gzip [option] [file]</p> </blockquote> <p style="margin-top: 0.5em; margin-bottom: 0.9em;">gzip很容易使用。如果想压缩某个文件或者磁带档案文件，可输入下面的内容：</p> <blockquote style="padding: 0px 10px; margin: 1em 2em ! important; background-color: #eeeeee; font-style: italic; border: 1px solid #dddddd;"> <p style="width: inherit ! important; margin: 0px ! important;">gzip mydir.tar</p> </blockquote> <p style="margin-top: 0.5em; margin-bottom: 0.9em;">在缺省的状态下，gzip  会压缩文件、再加上一个.gz扩展名，然后删除掉原来的文件。如果想解压缩文件，可以使用gzip的对应程序命令gunzip或者gzip命令的-d解压 缩参数。但是必须保证这个用于解压缩的文件有.gz(或者.Z、-gz、.z、-z、或者_z)扩展名，否则gzip命令和gunzip命令都会显示出错 信息。如果想使用自己的扩展名，可以使用-S后缀参数，如下所示：</p> <blockquote style="padding: 0px 10px; margin: 1em 2em ! important; background-color: #eeeeee; font-style: italic; border: 1px solid #dddddd;"> <p style="width: inherit ! important; margin: 0px ! important;">gzip -S .gzipped mydir.tar</p> </blockquote> <p style="margin-top: 0.5em; margin-bottom: 0.9em;">gzip  还可以处理用zip命令、compress命令和pack命令压缩的文件包。如果想在压缩或者解压缩的过程中看到更多的信息，可以使用-l列清单参数看到 文件在被压缩或解压缩的时候的文件长度。在前一个例子中，压缩完子目录mydir之后，可以使用gzip命令按照下面的方法得到有关的数据：</p> <blockquote style="padding: 0px 10px; margin: 1em 2em ! important; background-color: #eeeeee; font-style: italic; border: 1px solid #dddddd;"> <p style="width: inherit ! important; margin: 0px ! important;"># gzip -l mydir.tar.gz</p> <p style="width: inherit ! important; margin: 0px ! important;">compressed uncompr.ratio uncompressed_name<br />312 21330 98.2% mydir.tar</p> </blockquote> <p style="margin-top: 0.5em; margin-bottom: 0.9em;">此外，gzip还有一个很有用的参数-t，可以用来测试压缩文件的完整性。如果文件正常，gzip不会给出任何显示。如果想看到OK这两个字母，可以在测试某个文件时使用-tv参数。</p> </span></p>   </div></div><img src ="http://www.blogjava.net/parable-myth/aggbug/365495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2011-12-04 10:44 <a href="http://www.blogjava.net/parable-myth/archive/2011/12/04/365495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux 下ftp自动登录</title><link>http://www.blogjava.net/parable-myth/archive/2010/12/29/341858.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Wed, 29 Dec 2010 02:53:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/12/29/341858.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/341858.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/12/29/341858.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/341858.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/341858.html</trackback:ping><description><![CDATA[<p>Linux 下ftp自动登录&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
操作系统：linux<br />
说明：使用了expect，参数为ftp服务器地址和要下载的文件名<br />
参数：lindex $argv 0&nbsp; 读取ftp服务器ip地址<br />
&nbsp;&nbsp;&nbsp;&nbsp; lindex $argv 1&nbsp; 读取要下载的文件名<br />
编辑：<br />
#vi <a href="ftp://ftp.sh/">ftp.sh</a><br />
spawn ftp [lindex $argv 0]<br />
expect "Name (*):"<br />
send "anonymous\r"<br />
expect "Password:*"<br />
send "\r"<br />
expect "ftp&gt;"<br />
send "binary\r"<br />
expect "ftp&gt;"<br />
send "hash\r"<br />
expect "ftp&gt;"<br />
send "get [lindex $argv 1]\r"<br />
expect "* Transfer complete."<br />
send "exit\r"<br />
执行方法：expect <a href="ftp://ftp.sh/">ftp.sh</a> 服务器ip地址&nbsp; 文件名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （expect <a href="ftp://ftp.sh/">ftp.sh</a> 192.168.0.1 filename.txt ）<br />
&nbsp;<br />
扩展：可以根据需要把用户名和密码也作为参数输入里边，这个根据个人需求去做<br />
&nbsp;<br />
&nbsp;<br />
使用Shell脚本来实现FTP的自动上传下载<br />
1. FTP自动登录批量下载文件。 </p>
<p>#####从ftp服务器上的/home/data 到 本地的/home/databackup####</p>
<p>#!/bin/bash </p>
<p>ftp -n&lt;&lt;! </p>
<p>open 192.168.1.171</p>
<p>user guest 123456 </p>
<p>binary </p>
<p>cd /home/data </p>
<p>lcd /home/databackup </p>
<p>prompt </p>
<p>mget * </p>
<p>close </p>
<p>bye </p>
<p>!<br />
&nbsp;<br />
2. FTP自动登录上传文件。 </p>
<p>####本地的/home/databackup to ftp服务器上的/home/data####</p>
<p>#!/bin/bash </p>
<p>ftp -n&lt;&lt;! </p>
<p>open 192.168.1.171</p>
<p>user guest 123456 </p>
<p>binary </p>
<p>hash</p>
<p>cd /home/data </p>
<p>lcd /home/databackup </p>
<p>prompt </p>
<p>mput * </p>
<p>close </p>
<p>bye </p>
<p>!<br />
&nbsp;</p>
<p>&nbsp;<br />
3. FTP自动登录下载单个文件。 </p>
<p>####ftp服务器上下载/home/data/a.sh to local /home/databackup####</p>
<p>#!/bin/bash </p>
<p>ftp -n&lt;&lt;! </p>
<p>open 192.168.1.171</p>
<p>user guest 123456 </p>
<p>binary </p>
<p>cd /home/data </p>
<p>lcd /home/databackup </p>
<p>prompt </p>
<p>get a.sh a.sh </p>
<p>close </p>
<p>bye </p>
<p>!<br />
&nbsp;</p>
<p>4. FTP自动登录上传单个文件。 </p>
<p>####把本地/home/databachup/a.sh up ftp /home/databackup 下####</p>
<p>#!/bin/bash </p>
<p>ftp -n&lt;&lt;! </p>
<p>open 192.168.1.171</p>
<p>user guest 123456 </p>
<p>binary </p>
<p>cd /home/data </p>
<p>lcd /home/databackup </p>
<p>prompt </p>
<p>put a.sh a.sh </p>
<p>close </p>
<p>bye </p>
<p>!<br />
&nbsp;</p>
<p>使用.netrc文件方式自动登录</p>
在用户目录下下建.netrc的文件<br />
.netrc文件的内容如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; machine&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; host2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :host2作为登陆用的主机名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; login&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :ftp用户名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userpwd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : host2用户的口令<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; macdef&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :定义一个名为init的宏，它将在自动注册进程的最后被执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :文件以二进制传输<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /backup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :进入本地目录/backup<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /pub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :进入远程主机目录/pub<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mput&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :将/backup目录下的所有文件传输至远程主机<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bye&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :退出ftp<br />
并修改文件属性：$chmod 600 .netrc即该文件只能被该用户访问
<img src ="http://www.blogjava.net/parable-myth/aggbug/341858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-12-29 10:53 <a href="http://www.blogjava.net/parable-myth/archive/2010/12/29/341858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1.x防止重复提交</title><link>http://www.blogjava.net/parable-myth/archive/2010/12/23/341396.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Thu, 23 Dec 2010 07:44:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/12/23/341396.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/341396.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/12/23/341396.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/341396.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/341396.html</trackback:ping><description><![CDATA[http://lishuaishuai.javaeye.com/blog/789778
<img src ="http://www.blogjava.net/parable-myth/aggbug/341396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-12-23 15:44 <a href="http://www.blogjava.net/parable-myth/archive/2010/12/23/341396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#正则表达式小结 </title><link>http://www.blogjava.net/parable-myth/archive/2010/11/26/339109.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Fri, 26 Nov 2010 02:31:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/11/26/339109.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/339109.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/11/26/339109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/339109.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/339109.html</trackback:ping><description><![CDATA[<div>
<div>
<p>地址: <a href="http://www.cnblogs.com/maxianghui/archive/2006/05/11/397747.html">http://www.cnblogs.com/maxianghui/archive/2006/05/11/397747.html</a> </p>
<p>确实不错，感谢这位朋友 </p>
<p>只能输入数字："^[0-9]*$"。<br />
只能输入n位的数字："^"d{n}$"。<br />
只能输入至少n位的数字："^"d{n,}$"。<br />
只能输入m~n位的数字：。"^"d{m,n}$"<br />
只能输入零和非零开头的数字："^(0|[1-9][0-9]*)$"。<br />
只能输入有两位小数的正实数："^[0-9]+(.[0-9]{2})?$"。<br />
只能输入有1~3位小数的正实数："^[0-9]+(.[0-9]{1,3})?$"。<br />
只能输入非零的正整数："^"+?[1-9][0-9]*$"。<br />
只能输入非零的负整数："^"-[1-9][]0-9"*$。<br />
只能输入长度为3的字符："^.{3}$"。<br />
只能输入由26个英文字母组成的字符串："^[A-Za-z]+$"。<br />
只能输入由26个大写英文字母组成的字符串："^[A-Z]+$"。<br />
只能输入由26个小写英文字母组成的字符串："^[a-z]+$"。<br />
只能输入由数字和26个英文字母组成的字符串："^[A-Za-z0-9]+$"。<br />
只能输入由数字、26个英文字母或者下划线组成的字符串："^"w+$"。<br />
验证用户密码："^[a-zA-Z]"w{5,17}$"正确格式为：以字母开头，长度在6~18之间，只能包含字符、数字和下划线。<br />
验证是否含有^%&amp;',;=?$""等字符："[^%&amp;',;=?$"x22]+"。<br />
只能输入汉字："^["u4e00-"u9fa5]{0,}$"<br />
验证Email地址："^"w+([-+.]"w+)*@"w+([-.]"w+)*"."w+([-.]"w+)*$"。<br />
验证InternetURL："^<a href="http://%28[/">http://([/</a>"w-]+".)+["w-]+(/["w-./?%&amp;=]*)?$"。<br />
验证电话号码："^("("d{3,4}-)|"d{3.4}-)?"d{7,8}$"正确格式为："XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。<br />
验证身份证号（15位或18位数字）："^"d{15}|"d{18}$"。<br />
验证一年的12个月："^(0?[1-9]|1[0-2])$"正确格式为："01"～"09"和"1"～"12"。<br />
验证一个月的31天："^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为；"01"～"09"和"1"～"31"。 <br />
利用正则表达式限制网页表单里的文本框输入内容： </p>
<p>用正则表达式限制只能输入中文：onkeyup="value=value.replace(/[^"u4E00-"u9FA5]/g,'')"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^"u4E00-"u9FA5]/g,''))"
</p>
<p>用正则表达式限制只能输入全角字符：&nbsp;onkeyup="value=value.replace(/[^"uFF00-"uFFFF]
/g,'')"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^"uFF00-"uFFFF]/g,''))"
</p>
<p>用正则表达式限制只能输入数字：onkeyup="value=value.replace(/[^"d]/g,'')
"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^"d]/g,''))"
</p>
<p>用正则表达式限制只能输入数字和英文：onkeyup="value=value.replace(/["W]/g,'')
"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^"d]/g,''))"
</p>
<p>得用正则表达式从URL地址中提取文件名的javascript程序，如下结果为page1 </p>
<p>s="http://www.9499.net/page1.htm"<br />
s=s.replace(/(.*"/){0,}([^".]+).*/ig,"$2")<br />
alert(s) </p>
<p>匹配双字节字符(包括汉字在内)：[^"x00-"xff] </p>
<p>应用：计算字符串的长度（一个双字节字符长度计2，ASCII字符计1） </p>
<p>String.prototype.len=function(){return this.replace([^"x00-"xff]/g,"aa").length;} </p>
<p>匹配空行的正则表达式："n["s| ]*"r </p>
<p>匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;"/"1&gt;|&lt;(.*) "/&gt;/ </p>
<p>匹配首尾空格的正则表达式：(^"s*)|("s*$) </p>
<p>String.prototype.trim = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; return this.replace(/(^"s*)|("s*$)/g, "");<br />
} </p>
<p>利用正则表达式分解和转换IP地址： </p>
<p>下面是利用正则表达式匹配IP地址，并将IP地址转换成对应数值的Javascript程序： </p>
<p>function IP2V(ip)<br />
{<br />
&nbsp;re=/("d+)".("d+)".("d+)".("d+)/g&nbsp; //匹配IP地址的正则表达式<br />
if(re.test(ip))<br />
{<br />
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1<br />
}<br />
else<br />
{<br />
&nbsp;throw new Error("Not a valid IP address!")<br />
}<br />
} </p>
<p>不过上面的程序如果不用正则表达式，而直接用split函数来分解可能更简单，程序如下： </p>
<p>var ip="10.100.20.168"<br />
ip=ip.split(".")<br />
alert("IP值是："+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))<br />
符号解释： </p>
<p>字符 <br />
描述 </p>
<p>" <br />
将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如，'n' 匹配字符 "n"。'"n' 匹配一个换行符。序列 '""' 匹配 """ 而 ""(" 则匹配 "("。 </p>
<p>^ <br />
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '"n' 或 '"r' 之后的位置。 </p>
<p>$ <br />
匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性，$ 也匹配 '"n' 或 '"r' 之前的位置。 </p>
<p>* <br />
匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。 </p>
<p>+ <br />
匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。 </p>
<p>? <br />
匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。 </p>
<p>{n} <br />
n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。 </p>
<p>{n,} <br />
n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。 </p>
<p>{n,m} <br />
m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。例如，"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。 </p>
<p>? <br />
当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m})
后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如，对于字符串
"oooo"，'o+?' 将匹配单个 "o"，而 'o+' 将匹配所有 'o'。 </p>
<p>. <br />
匹配除 ""n" 之外的任何单个字符。要匹配包括 '"n' 在内的任何字符，请使用象 '[."n]' 的模式。 </p>
<p>(pattern) <br />
匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到，在VBScript 中使用 SubMatches 集合，在JScript 中则使用 $0&#8230;$9 属性。要匹配圆括号字符，请使用 '"(' 或 '")'。 </p>
<p>(?:pattern) <br />
匹配 pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。这在使用 "或"
字符 (|) 来组合一个模式的各个部分是很有用。例如， 'industr(?:y|ies) 就是一个比
'industry|industries' 更简略的表达式。 </p>
<p>(?=pattern) <br />
正向预查，在任何匹配 pattern
的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如，'Windows
(?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ，但不能匹配 "Windows 3.1"
中的
"Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始。 </p>
<p>(?!pattern) <br />
负向预查，在任何不匹配 pattern
的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如'Windows
(?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows"，但不能匹配 "Windows 2000"
中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始
</p>
<p>x|y <br />
匹配 x 或 y。例如，'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。 </p>
<p>[xyz] <br />
字符集合。匹配所包含的任意一个字符。例如， '[abc]' 可以匹配 "plain" 中的 'a'。 </p>
<p>[^xyz] <br />
负值字符集合。匹配未包含的任意字符。例如， '[^abc]' 可以匹配 "plain" 中的'p'。 </p>
<p>[a-z] <br />
字符范围。匹配指定范围内的任意字符。例如，'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。 </p>
<p>[^a-z] <br />
负值字符范围。匹配任何不在指定范围内的任意字符。例如，'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。 </p>
<p>"b <br />
匹配一个单词边界，也就是指单词和空格间的位置。例如， 'er"b' 可以匹配"never" 中的 'er'，但不能匹配 "verb" 中的 'er'。 </p>
<p>"B <br />
匹配非单词边界。'er"B' 能匹配 "verb" 中的 'er'，但不能匹配 "never" 中的 'er'。 </p>
<p>"cx <br />
匹配由 x 指明的控制字符。例如， "cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。 </p>
<p>"d <br />
匹配一个数字字符。等价于 [0-9]。 </p>
<p>"D <br />
匹配一个非数字字符。等价于 [^0-9]。 </p>
<p>"f <br />
匹配一个换页符。等价于 "x0c 和 "cL。 </p>
<p>"n <br />
匹配一个换行符。等价于 "x0a 和 "cJ。 </p>
<p>"r <br />
匹配一个回车符。等价于 "x0d 和 "cM。 </p>
<p>"s <br />
匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ "f"n"r"t"v]。 </p>
<p>"S <br />
匹配任何非空白字符。等价于 [^ "f"n"r"t"v]。 </p>
<p>"t <br />
匹配一个制表符。等价于 "x09 和 "cI。 </p>
<p>"v <br />
匹配一个垂直制表符。等价于 "x0b 和 "cK。 </p>
<p>"w <br />
匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。 </p>
<p>"W <br />
匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。 </p>
<p>"xn <br />
匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如，'"x41' 匹配 "A"。'"x041' 则等价于 '"x04' &amp; "1"。正则表达式中可以使用 ASCII 编码。. </p>
<p>"num <br />
匹配 num，其中 num 是一个正整数。对所获取的匹配的引用。例如，'(.)"1' 匹配两个连续的相同字符。 </p>
<p>"n <br />
标识一个八进制转义值或一个向后引用。如果 "n 之前至少 n 个获取的子表达式，则 n 为向后引用。否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。 </p>
<p>"nm <br />
标识一个八进制转义值或一个向后引用。如果 "nm 之前至少有 nm 个获得子表达式，则 nm 为向后引用。如果 "nm
之前至少有 n 个获取，则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足，若 n 和 m 均为八进制数字 (0-7)，则 "nm
将匹配八进制转义值 nm。 </p>
<p>"nml <br />
如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八进制转义值 nml。 </p>
<p>"un <br />
匹配 n，其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如， "u00A9 匹配版权符号 (?)。</p>
</div>
</div>
<img src ="http://www.blogjava.net/parable-myth/aggbug/339109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-11-26 10:31 <a href="http://www.blogjava.net/parable-myth/archive/2010/11/26/339109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbpm4 java.lang.LinkageError: loader constraint violation 包冲突</title><link>http://www.blogjava.net/parable-myth/archive/2010/11/17/338246.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Wed, 17 Nov 2010 04:52:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/11/17/338246.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/338246.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/11/17/338246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/338246.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/338246.html</trackback:ping><description><![CDATA[ <img src ="http://www.blogjava.net/parable-myth/aggbug/338246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-11-17 12:52 <a href="http://www.blogjava.net/parable-myth/archive/2010/11/17/338246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c#web定时任务</title><link>http://www.blogjava.net/parable-myth/archive/2010/11/11/337775.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Thu, 11 Nov 2010 01:22:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/11/11/337775.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/337775.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/11/11/337775.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/337775.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/337775.html</trackback:ping><description><![CDATA[<p>转自：http://www.programbbs.com/doc/3003.htm 另外可参考http://developer.51cto.com/art/200909/149829.htm<br />
</p>
<p>想在<a target="_self"><u><strong>Web</strong></u></a>中定时 处理某些任务吧？<span style="display: none;">ITPUB个人空间T�b}N9W8_
e]w;`8B</span><br />
可以在Global.asax 中定义，直接上例子：</p>
<div><span style="color: #000000;">&lt;</span><span style="color: #000000;">script&nbsp;runat</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;"><a target="_self"><u><strong>server</strong></u></a></span><span style="color: #800000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Application_Start(</span><span style="color: #0000ff;">object</span><span style="color: #000000;">&nbsp;sender,&nbsp;EventArgs&nbsp;e)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="display: none;">YN~MB
DdY.w `#D0</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;应用程序启动时</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Timers.Timer&nbsp;timer&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;System.Timers.Timer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;sTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DateTime.Now;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sHour&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sTime.Hour;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sMin&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sTime.Minute;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sSecond&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sTime.Second;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sHourInterval&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #800080;">15</span>&nbsp;<span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;sHour;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sSecondInterval&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sHourInterval&nbsp;</span><span style="color: #000000;">*</span>&nbsp;<span style="color: #800080;">60</span>&nbsp;<span style="color: #000000;">*</span>&nbsp;<span style="color: #800080;">60</span>&nbsp;<span style="color: #000000;">*</span>&nbsp;<span style="color: #800080;">1000</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">timer.Interval&nbsp;=&nbsp;1000*5;</span><span style="color: #008000;">//</span><span style="color: #008000;">5秒发送一次</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer.Interval&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sSecondInterval;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">timer.AutoReset;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer.Elapsed&nbsp;</span><span style="color: #000000;">+=</span>&nbsp;<span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;System.Timers.ElapsedEventHandler(timer_Elapsed);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer.Enabled&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #0000ff;">true</span><span style="color: #000000;">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;timer_Elapsed(</span><span style="color: #0000ff;">object</span><span style="color: #000000;">&nbsp;sender,&nbsp;System.Timers.ElapsedEventArgs&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;s_from&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #800000;">"</span><span style="color: #800000;">fengsheng@xxx.com</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;s_to&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #800000;">"</span><span style="color: #800000;">fengsheng@xxx.com</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;pwd&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #800000;">"</span><span style="color: #800000;">1234567</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br />
<span style="display: none;">ww"l9BF
?$^0</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;s_body&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #800000;">"</span><span style="color: #800000;">test</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;s_smtp&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #800000;">"</span><span style="color: #800000;">mail.xxx.com</span><span style="color: #800000;">"</span><span style="color: #000000;">;<span style="display: none;">ITPUB个人空间!V @-K*DR
xMJr</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;s_from.IndexOf(</span><span style="color: #800000;">"</span><span style="color: #800000;">@</span><span style="color: #800000;">"</span><span style="color: #000000;">);<span style="display: none;">ITPUB个人空间XI@A
L"?|</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;s_subjetc&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #800000;">"</span><span style="color: #800000;">test</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;username&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;s_from.Substring(</span><span style="color: #800080;">0</span><span style="color: #000000;">,&nbsp;i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Net.Mail.MailAddress&nbsp;from&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;System.Net.Mail.MailAddress(s_from);<span style="display: none;">ITPUB个人空间
dvT*IPZDs+I</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Net.Mail.MailAddress&nbsp;to&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;System.Net.Mail.MailAddress(s_to);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Net.Mail.MailMessage&nbsp;mailobj&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;System.Net.Mail.MailMessage(from,&nbsp;to);<br />
<span style="display: none;">QE.~
gN0W[0</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mailobj.Subject&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;s_subjetc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mailobj.Body&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;s_body;<span style="display: none;">ITPUB个人空间Z
FoC`'z LV</span><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mailobj.IsBodyHtml&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #0000ff;">true</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mailobj.BodyEncoding&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;System.Text.Encoding.GetEncoding(</span><span style="color: #800000;">"</span><span style="color: #800000;">GB2312</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mailobj.Priority&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;System.Net.Mail.MailPriority.High;<br />
<span style="display: none;">u8KJ#M
a0T	^0</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Net.Mail.SmtpClient&nbsp;smtp&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;System.Net.Mail.SmtpClient();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;smtp.Host&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;s_smtp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;smtp.UseDefaultCredentials&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #0000ff;">true</span><span style="color: #000000;">;<span style="display: none;">ITPUB个人空间*SL
m
K	Q f^}#G</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;smtp.Credentials&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;System.Net.NetworkCredential(username,&nbsp;pwd);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;smtp.Send(mailobj);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<span style="display: none;">ITPUB个人空间
sPP+Is/E</span><br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">script</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<span style="display: none;">
ui�g"z4"5o9kAzmo!p0</span></span></div>
<p>上面 是一个定时发邮件的小例子，一举两得，还给大家了一个发邮件的例子 ，呵呵<br />
建议最好是把需要启动的事项 做成 web Service 这样 应用范围会更广~</p>
<img src ="http://www.blogjava.net/parable-myth/aggbug/337775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-11-11 09:22 <a href="http://www.blogjava.net/parable-myth/archive/2010/11/11/337775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Integrating JDBC with Hibernate</title><link>http://www.blogjava.net/parable-myth/archive/2010/11/10/337728.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Wed, 10 Nov 2010 08:17:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/11/10/337728.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/337728.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/11/10/337728.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/337728.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/337728.html</trackback:ping><description><![CDATA[<div id="articleText">
<h2>Integrating JDBC with Hibernate</h2>
<p>from http://www.informit.com/guides/content.aspx?g=java&amp;seqNum=575<br />
</p>
<p>Last updated Jun 25, 2010.</p>
<p>One
of the powerful things about Hibernate is that you do not typically
need to manually write SQL: you build a domain model that represents
your data model in an object-oriented manner and then interact with your
domain model. This is the ideal, but sometimes you need to model a
legacy data model or a data model that is not object-oriented in nature,
which leads to either complicated Hibernate mappings or the inclusion
of manual SQL. When this occurs, you do not want to have to build
separate data access object classes but rather you would like to find a
way to seamlessly integrate SQL into your existing data access object
classes in a way that your consumers do not even realize that you're not
using Hibernate Query Language (HQL) under-the-hood.</p>
<p>Fortunately you do not need to jump through too many hoops to
integrate manual JDBC into your Hibernate classes, you just need to
perform the following steps:</p>
<ol>
    <li>Obtain access to your Hibernate's Session object</li>
    <li>Create a class that implements <tt>org.hibernate.jdbc.Work</tt>, or
    create an anonymous inner class that implements the Work interface, and
    implement the execute() method using the supplied Connection object to
    execute your SQL</li>
    <li>Pass the Work class to Hibernate's <tt>doWork()</tt> method, which in turn invokes your Work's execute() method</li>
</ol>
<p>Listings 1 and 2 illustrate how to use the Work interface to execute a simple SQL statement.</p>
<h4><em>Listing 1. MyDao.java</em></h4>
<pre>...<br />
public class MyDao <br />
{<br />
...<br />
public String getValue( long id )<br />
{<br />
// Create a SQL order of work, which we will use to execute a manual SQL statement<br />
MyWork myWork = new MyWork( id );<br />
<br />
// Gain access to the underlying Hibernate session<br />
Session session = getSessionFactory().openSession();<br />
<br />
// Ask the Hibernate session to execute the unit of work<br />
session.doWork( myWork );<br />
<br />
// Obtain the results of the unit of work<br />
return myWork.getValue();<br />
}<br />
..<br />
}</pre>
<p>Listing 1 defines a <tt>getValue()</tt> method that accepts an id and returns a String. It creates a new <tt>MyWork</tt> instance, passing it the id as an initialization parameter, locates a Hibernate Session, and passes the <tt>MyWork</tt> instance to the Sessions <tt>doWork()</tt> method. After the query is complete, it retrieves the value from the <tt>MyWork</tt> class.</p>
<p>The mechanism that you use to obtain a Hibernate Session will be
dependent on the technology with which you are building your data access
object. If you're using Spring by extending <tt>HibernateDaoSupport</tt>, you can invoke <tt>getSessionFactory().openSession()</tt> to create a new Session object. </p>
<p>Listing 2 shows the source code for the <tt>MyWork</tt> class.</p>
<h4><em>Listing 2. MyWork.java</em></h4>
<pre>public class MyWork implements Work<br />
{<br />
private long id;<br />
private String value;<br />
<br />
public MyWork( long id )<br />
{<br />
this.id = id;<br />
}<br />
<br />
public String getValue()<br />
{<br />
return value;<br />
}<br />
<br />
@Override<br />
public void execute( Connection connection ) throws SQLException<br />
{<br />
PreparedStatement ps = null;<br />
ResultSet rs = null;<br />
try<br />
{<br />
ps = connection.prepareStatement( "SELECT * FROM table WHERE id = ?" );<br />
ps.setLong( 1, id );<br />
rs = ps.executeQuery();<br />
while( rs.next() )  <br />
{<br />
value = rs.getString( 1 );<br />
}<br />
}<br />
catch( SQLException e ) { }<br />
finally  {<br />
if( rs != null )  <br />
{<br />
try {<br />
rs.close();<br />
}<br />
catch( Exception e ) {}<br />
}<br />
if( ps != null ) <br />
{<br />
try {<br />
ps.close();<br />
}<br />
catch( Exception e ) {}<br />
}<br />
}<br />
}<br />
}</pre>
<p>The <tt>MyWork</tt> class implements its data access logic in its <tt>execute()</tt> method. The execute() method is passed a <tt>java.sql.Connection</tt> object that you can use as you normally would to create a <tt>Statement</tt>, <tt>PreparedStatement</tt>, or <tt>CallableStatement.</tt> The <tt>doWork()</tt> method returns void, so it is up to you to develop a mechanism to return a value from your unit of work. </p>
<p>If you are executing SQL from which you do not necessarily need to
retrieve results, you can accomplish the same results by creating an
anonymous inner class:</p>
<pre>       // Gain access to the underlying Hibernate session<br />
Session session = getSessionFactory().openSession();<br />
<br />
// Ask the Hibernate session to execute the unit of work<br />
session.doWork( new Work() {<br />
@Override<br />
public void execute( Connection connection ) {<br />
// Implement your SQL here<br />
}<br />
} );</pre>
<p>In this example we create the Work() implementation in the doWork()
method invocation and override the execute() method. Depending on your
background this might look a bit strange, but once you get used to it,
this is a fairly elegant way to implement your solution because it
reduces the number of explicit classes you need to create and it couples
the logic being executed with the invocation of that logic. For
complicated cases you want to loosely couple things, but for a SQL
statement it is overkill to create additional classes if you do not need
to. The challenge here, however, is that if you need to obtain results
from the query, you're limited because the <tt>doWork()</tt> method returns void.</p>
<p>Hibernate offers a simple mechanism to execute SQL inside your
Hibernate data access object classes by defining a unit of work and
passing it to your Hibernate Session's <tt>doWork()</tt> method. You can define your unit of work explicitly by creating a class that implements <tt>org.hibernate.jdbc.Work</tt> or by creating an anonymous inner class that implements the <tt>Work</tt>
interface on-the-fly. The best solution, if you are building your
domain model from scratch, is to model your objects as simply as you can
(remember the KISS principle: keep it simple, stupid), but if you have
to create a domain model that does not lend itself easily to an
object-oriented representation then you can integrate manual SQL in this
manner.</p>
</div>
<img src ="http://www.blogjava.net/parable-myth/aggbug/337728.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-11-10 16:17 <a href="http://www.blogjava.net/parable-myth/archive/2010/11/10/337728.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate lock mode</title><link>http://www.blogjava.net/parable-myth/archive/2010/11/05/337351.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Fri, 05 Nov 2010 07:44:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/11/05/337351.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/337351.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/11/05/337351.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/337351.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/337351.html</trackback:ping><description><![CDATA[LockMode.NONE ：有缓存用缓存，没缓存则从数据库读 <br />
LockMode.READ ：直接从数据库读，不使用缓存数据 <br />
LockMode.WRITE ：在insert update数据的时候，HIBERNATE内部使用的。 <br />
以上3种均为HIBERNATE级别的锁，也就是缓存级别的锁。 <br />
<br />
下面2种为数据库级别的锁： <br />
LockMode.UPGRADE：相当于SQL语句select for update，被select的数据都被数据库锁住了，不能被其他事务修改。 <br />
LockMode. UPGRADE_NOWAIT ：是ORACLE数据库特有的select for update nowait<br />
<img src ="http://www.blogjava.net/parable-myth/aggbug/337351.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-11-05 15:44 <a href="http://www.blogjava.net/parable-myth/archive/2010/11/05/337351.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>select for update nowait 与 select for update 区别</title><link>http://www.blogjava.net/parable-myth/archive/2010/11/05/337350.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Fri, 05 Nov 2010 07:42:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/11/05/337350.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/337350.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/11/05/337350.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/337350.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/337350.html</trackback:ping><description><![CDATA[<div fc05="" fc11="" nbw-blog="" ztag="" js-fs2="">
<p>转自：http://blog.163.com/yiyun_8/blog/static/100336422201031505832337/<br />
</p>
<p>nowait的含义很多人都会误解为&#8220;不用等待，立即执行&#8221;。但实际上该关键字的含义是&#8220;不用等待，立即返回&#8221;<br />
如果当前请求的资源被其他会话锁定时，会发生阻塞，nowait可以避免这一阻塞，因为<br />
If another user is in the process of modifying that row, we will get an ORA‐00054<br />
Resource Busy error. We are blocked and must wait for the other user to finish with<br />
it.<br />
可以实验下，我用pl/sql developer锁定表game<br />
SQL&gt; select * from game where game_id =1;<br />
返回一条记录<br />
&nbsp;</p>
<p>SQL&gt; select * from game where game_id=1 for update nowait;<br />
select * from game where game_id=1 for update nowait<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br />
ERROR位于第1行:<br />
ORA-00054:资源正忙，要求指定NOWAIT<br />
使用NOWAIT关键字，会报ORA‐00054的错误<br />
&nbsp;</p>
<p>如何来查看是什么资源造成这样的情况呢？并且怎么解决呢？<br />
查看锁定的对象，用户和会话<br />
SQL&gt; select lo.oracle_username,do.object_name,s.logon_time,lo.process,s.sid as s<br />
ession_id<br />
&nbsp;2 from v$locked_object lo,v$session s,dba_objects do<br />
&nbsp;3 where lo.session_id = s.sid and do.object_id = lo.OBJECT_ID<br />
&nbsp;4 /<br />
ORACLE_USERNAME<br />
------------------------------<br />
OBJECT_NAME<br />
--------------------------------------------------------------------------------<br />
&nbsp;</p>
<p>LOGON_TIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROCESS&nbsp;&nbsp;&nbsp;&nbsp; SESSION_ID<br />
------------------- ------------ ----------<br />
NBA---用户名称<br />
GAME---操作的对象<br />
2009-08-04 10:55:15---登录的时间&nbsp;&nbsp;&nbsp;&nbsp; 840:5176&nbsp;&nbsp; 10<br />
&nbsp;</p>
<p>使用as sysdba<br />
根据sid查看具体的sql语句<br />
selectsql_textfromv$session a,v$sqltext_with_newlines b<br />
whereDECODE(a.sql_hash_value,0, prev_hash_value, sql_hash_value)=b.hash_value<br />
&nbsp;anda.sid=10;<br />
begin :id := sys.dbms_transaction.local_transaction_id; end;<br />
&nbsp;</p>
<p>kill session<br />
SQL&gt; select sid,serial# from v$session where sid =10;<br />
&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SID&nbsp;&nbsp; SERIAL#<br />
---------- ----------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 23<br />
SQL&gt; alter system kill session '10,23';<br />
&nbsp;</p>
<p>系统已更改。<br />
&nbsp;</p>
<p>select * from game where game_id=1 for update nowait;<br />
有数据返回了<br />
</p>
<p>当两个用户同时更新同一条记录是，&nbsp;使用<font face="Simsun">select for update，后执行者，会被阻塞，而使用<font face="Simsun">select for update&nbsp; nowait 则会抛出：ORA-00054 resource busy and acquire with NOWAIT specified 异常，告之用户这一行已经锁定。</font></font></p>
</div>
<img src ="http://www.blogjava.net/parable-myth/aggbug/337350.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-11-05 15:42 <a href="http://www.blogjava.net/parable-myth/archive/2010/11/05/337350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>org.springframework.orm.hibernate3 </title><link>http://www.blogjava.net/parable-myth/archive/2010/11/05/337315.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Fri, 05 Nov 2010 05:27:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/11/05/337315.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/337315.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/11/05/337315.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/337315.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/337315.html</trackback:ping><description><![CDATA[转：http://jyangzi5.javaeye.com/blog/588392<br />
最近在研究spring 2.5.6 hibernate3.3.1 时，hibernate.current_session_context_class这个配置默认是org.springframework.orm.hibernate3.SpringSessionContext，SpringSessionContext是Hibernate 3.1's CurrentSessionContext接口实现类。<br />
你可以打开日志观察后台信息<br />
hibernate.current_session_context_class=org.springframework.orm.hibernate3.SpringSessionContext<br />
<br />
<img src ="http://www.blogjava.net/parable-myth/aggbug/337315.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-11-05 13:27 <a href="http://www.blogjava.net/parable-myth/archive/2010/11/05/337315.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 if标签和枚举比较</title><link>http://www.blogjava.net/parable-myth/archive/2010/11/04/337236.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Thu, 04 Nov 2010 07:19:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/11/04/337236.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/337236.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/11/04/337236.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/337236.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/337236.html</trackback:ping><description><![CDATA[&lt;%@ page language="java" contentType="text/html; charset=UTF-8"<br />
&nbsp;pageEncoding="UTF-8"%&gt;<br />
&lt;%@taglib uri="/struts-tags" prefix="s"%&gt;<br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;<br />
&lt;title&gt;显示用户信息&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;s:iterator id="it" value="list" status="st"&gt;<br />
&nbsp;&lt;s:property value="username" /&gt;---&lt;s:property value="password" /&gt;--&lt;s:property<br />
&nbsp;&nbsp;value="gender" /&gt;-----&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; &lt;s:if test="gender.toString()==@cn.ssh.domain.Gender@MAN.toString()"&gt;男&lt;/s:if&gt;<br />
&nbsp;&lt;s:else&gt;女&lt;/s:else&gt;<br />
&nbsp;--<br />
&nbsp;&lt;s:if test="gender.toString()=='MAN'.toString()"&gt;男&lt;/s:if&gt;<br />
&nbsp;&lt;s:else&gt;女&lt;/s:else&gt;<br />
&nbsp;&lt;br&gt;<br />
list是action中的<br />
&lt;/s:iterator&gt;<br />
&lt;s:debug&gt;&lt;/s:debug&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt; <br />
<br />
也可以采用如下方式<br />
<br />
public enum Gender {<br />
&nbsp;MAN {<br />
&nbsp;&nbsp;public String getSex() {<br />
&nbsp;&nbsp;&nbsp;return "男";<br />
&nbsp;&nbsp;}<br />
&nbsp;},<br />
&nbsp;WOMEN{<br />
&nbsp;&nbsp;public String getSex() {<br />
&nbsp;&nbsp;&nbsp;return "女";<br />
&nbsp;&nbsp;}<br />
&nbsp;};<br />
}<br />
<br />
&lt;%@ page language="java" contentType="text/html; charset=UTF-8"<br />
&nbsp;pageEncoding="UTF-8"%&gt;<br />
&lt;%@taglib uri="/struts-tags" prefix="s"%&gt;<br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;<br />
&lt;title&gt;显示用户信息&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;s:iterator value="list"&gt;<br />
&nbsp;&lt;s:property value="username" /&gt;---&lt;s:property value="password" /&gt;--&lt;s:property value="gender.sex" /&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&lt;br&gt;<br />
&lt;/s:iterator&gt;<br />
&lt;s:debug&gt;&lt;/s:debug&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
<br />
struts2标签真是强大
<img src ="http://www.blogjava.net/parable-myth/aggbug/337236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-11-04 15:19 <a href="http://www.blogjava.net/parable-myth/archive/2010/11/04/337236.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 标签库讲解</title><link>http://www.blogjava.net/parable-myth/archive/2010/11/04/337235.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Thu, 04 Nov 2010 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/11/04/337235.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/337235.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/11/04/337235.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/337235.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/337235.html</trackback:ping><description><![CDATA[<div class="bct fc05 fc11 nbw-blog ztag js-fs2">
<p>转自：http://blog.163.com/hzd_love/blog/static/131999881201082111852520/<br />
要使用Struts2的标签,只需要在JSP页面添加如下一行定义即可：</p>
<p><strong><font color="#800080">&lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;</font></strong></p>
<p>struts2的标签共分为五大类：</p>
<p><strong><font color="#800080">一、逻辑控制标签</font></strong></p>
<p>用于进行逻辑控制输出。主要分以下几类：</p>
<p>1）<font color="#ff0000">条件标签</font>：用于执行基本的条件流转</p>
<p>&lt;s:if&gt;：拥有一个test属性,其表达式的值用来决定标签里内容是否显示。&lt;s:if test="#request.username=='hzd'"&gt;欢迎hzd&lt;/s:if&gt;</p>
<p>&lt;s:elseif&gt;：同上。</p>
<p>&lt;s:else&gt;</p>
<p>2）<font color="#ff0000">迭代标签</font>：用于遍历集合(java.util.Collection)或者枚举值(java.util.Iterator)类型的对象,<u><font color="#ff0000">value属性</font></u>表示集合或枚举对象,<u><font color="#ff0000">status属性</font></u>表示当前循环的对象,在循环体内部可以引用该对象的属性</p>
<p>&lt;s:iterator value="userList" status="user"&gt;</p>
<p>姓名：&lt;s:property value="user.userName" /&gt;</p>
<p>年龄：&lt;s:property value="user.age" /&gt;</p>
<p>&lt;/s:iterator&gt;</p>
<p>3）<font color="#ff0000">组合标签</font>：用于将多个枚举值对象进行叠加，形成一个新的枚举值列表</p>
<p>如将3个列表对象进行了组合，形成新的列表对象：</p>
<p>&lt;s:append var="newIteratorList"&gt;</p>
<p>&lt;s:param value="%{myList1}" /&gt;</p>
<p>&lt;s:param value="%{myList2}" /&gt;</p>
<p>&lt;s:param value="%{myList3}" /&gt;</p>
<p>&lt;/s:append&gt;</p>
<p>输出：</p>
<p>&lt;s:iterator value="%{#newIteratorList}"&gt;</p>
<p>&lt;s:property /&gt;</p>
<p>&lt;/s:iterator&gt;</p>
<p>4）<font color="#ff0000">分割标签</font>：用于将一个字符串进行分隔，产生一个枚举值列表</p>
<p>下面的代码将分隔为3个字符串，然后循环输出</p>
<p>&lt;s:generator val="%{'aaa,bbb,ccc'}"&gt;</p>
<p>&lt;s:iterator&gt;</p>
<p>&lt;s:property /&gt;</p>
<p>&lt;/s:iterator&gt;</p>
<p>&lt;/s:generator&gt;</p>
<p>5）<font color="#ff0000">合并标签</font>：用于将多个枚举值按照数组的索引位置进行合并</p>
<p>&lt;s:merge var="newMergeList"&gt;</p>
<p>&lt;s:param value="%{mylist1}"&gt;--设mylist1列表中有a,b,c三个元素</p>
<p>&lt;s:param value="%{mylist2}"&gt;--设mylist2列表中有1,2,3三个元素</p>
<p>&lt;/s:merge&gt;</p>
<p>合并后新的列表的元素及其顺序为：a,1,b,2,c,3</p>
<p>&lt;s:iterator value="%{#newMergeList}"&gt;</p>
<p>&lt;s:property /&gt;</p>
<p>&lt;/s:iterator&gt;</p>
<p>6）<font color="#ff0000">排序标签</font>：用于对一组枚举值进行排序，属性<u>comparator</u>指向一个继承自java.util.Comparator的比较器，该比较器可以是对应Action页面中的一个比较器变量,<u>source</u>指定要排序的列表对象</p>
<p>&lt;s:sort comparator="myComparator" source="myList"&gt;</p>
<p>&lt;s:iterator&gt;</p>
<p>&lt;s:property value="..."/&gt;</p>
<p>&lt;/s:iterator&gt;</p>
<p>&lt;/s:sort&gt;</p>
<p>7）<font color="#ff0000">子集标签</font>：用于取得一个枚举列表的子集，<u>source</u>用于指定检索的列表对象，<u>start</u>用于指定起始检索的索引位置，<u>count</u>用于指定检索的结果数量，<u>decider</u>属性必须是一个org.apache.struts2.util.SubsetIteratorFilter.Decider类的子类实例，用以指定检索的条件。例如在Action中提供了以下方法用来取得一个Decider对象：</p>
<p>public Decider getDecider()</p>
<p>{</p>
<p>return new Decider(){</p>
<p>public boolean decide(Object element) throws Exception{</p>
<p>int i=((Integer)element).intValue();</p>
<p>return (((i%2)==0)?true:false);</p>
<p>}</p>
<p>};</p>
<p>}</p>
<p>然后引用该对象筛选子集：</p>
<p>&lt;s:subset source="myList" decider="decider"&gt;</p>
<p>&lt;/s:subset&gt;</p>
<p>或者不使用Decider对象：</p>
<p>&lt;s:subset source="myList" count="13" start="3"&gt;</p>
<p>&lt;/s:subset&gt;</p>
<p>&nbsp;</p>
<p><strong><font color="#800080">二、数据输出标签</font></strong></p>
<p>数据输出标签用以输出页面中的元素、属性、隐含变量等，即包括静态文本的输出，也包括struts2集成的各种变量的输出。</p>
<p>1）<font color="#ff0000">链接标签</font>：用于创建一个&lt;a&gt;标签,<u>errorText</u>用于显示错误信息，<u>priInvokeJS</u>表示该链接执行时的javascript提示函数,<u>href</u>表示跳转地址.</p>
<p>&lt;s:a errorText="删除错误" preInvokeJS="confirm('确认删除?')" href="test.jsp"&gt;</p>
<p>&lt;img src="/image/delete.gif" /&gt;</p>
<p>&lt;/s:a&gt;</p>
<p>2）<font color="#ff0000">Action标签</font>：可以直接调用Action类中的函数,<u>前提是该Action类在struts.xml中有定义,name</u>属性用于指向<u>映射文件中配置的Action函数</u>,executeResult属性表示是否执行结果集的跳转</p>
<p>&lt;s:action name="LoginAction" executeResult="true" /&gt;--表示执行LoginAction的默认处理方法execute()</p>
<p>&lt;s:action name="LoginAction!login" executeResult="true" /&gt;--表示执行LoginAction的处理方法login()</p>
<p>3）<font color="#ff0000">JavaBean标签</font>：用于创建一个JavaBean对象，<u>name</u>表示JavaBean类全名，<u>var</u>表示变量的实例名，并可以包含<u>&lt;s:param</u>&gt;设置实例化输入参数</p>
<p>&lt;s:bean name="xxx,xxx,xxx" var="xxx"&gt;</p>
<p>&lt;s:param name="name" value="hzd" /&gt;--为该JavaBean的构造方法传递参数</p>
<p>&lt;/s:bean&gt;</p>
<p>4）<font color="#ff0000">日期标签</font>：用以输出一个格式化的日期对象，<u>name</u>表示要输出的对象，<u>format</u>表示输出的日期格式</p>
<p>&nbsp;&lt;s:date name="user.birthday" format="dd/MM/yyyy" /&gt;</p>
<p>&lt;s:date name="user.birthday" format="%{getText('some.i18n.key')}" /&gt;</p>
<p>&lt;s:date name="user.birthday" /&gt;--默认格式</p>
<p>5）<font color="#ff0000">调用标签</font>：用以输出页面的值栈调试信息，<font color="#ff0000">通常在进行程序调用时使用</font>，便于查找JSP页面中的错误</p>
<p>6）<font color="#ff0000">引用资源文件标签</font>：用于<font color="#ff0000">加载资源包到值栈,</font><font color="#000000">它可以允许<u>&lt;s:text&gt;</u>标签访问任何资源包的信息，而不只是当前action相关联的资源包。name属性用以指定资源包的类路径</font></p>
<p>如xxx.xxx.xxx.ApplicationMessages中定义了标签：HelloWord=欢迎您！</p>
<p>则可以这样引用：</p>
<p>&lt;s:i18n name="xxx.xxx.xxx.ApplilcationMessages"&gt;</p>
<p>&lt;s:text name="HelloWord" /&gt;</p>
<p>&lt;/s:i18n&gt;</p>
<p>7）<font color="#ff0000">包含页面标签</font>：用来包含一个Servlet的输出(Servlet或JSP页面)，使用<u>value</u>属性指定包含页名称,可以使用<u>&lt;s:param&gt;</u>传递参数给子页</p>
<p>&lt;s:include value="/test.jsp"&gt;</p>
<p>&lt;s:param name="username"&gt;hzd&lt;/s:param&gt;--参数username=hzd给test.jsp页面</p>
<p>&lt;/s:include&gt;</p>
<p>8）<font color="#ff0000">传递参数标签</font>：用来<font color="#ff0000">为其他标签提供参数</font>,所以一般是嵌套在其它标签的内部，<u>name</u>属性用来指定参数名称，<u>value</u>(可选)属性用来指定参数值</p>
<p>&lt;s:param name="username" value="hzd" /&gt;--这种方式的参数值会以String格式放入stack</p>
<p>&lt;s:param name="username"&gt;hzd&lt;/s:param&gt;--这种方式的参数值会以Object的格式放入stack</p>
<p>9）<font color="#ff0000">值栈标签</font>：用以加入一个值到值栈中</p>
<p>&lt;s:push value="user"&gt;</p>
<p>&lt;s:property value="name" /&gt;--为user指定name属性</p>
<p>&lt;s:property value="age" /&gt;--为user指定age属性</p>
<p>&lt;/s:push&gt;</p>
<p>10）<font color="#ff0000">变量赋值标签</font>：赋予变量一个特定范围内的值，<u>name</u>属性表示变量的名字，<u>scope</u>表示变量的作用域(application.session.request.page.action)，<u>value</u>变量的值</p>
<p>&lt;s:set&gt;</p>
<p>11）<font color="#ff0000">国际化标签</font>：用于输出国际化信息,<u>name</u>属性指定国际化资源文件中消息文本的key,可以与&lt;s:i18n&gt;标签结合使用</p>
<p>&lt;s:text name="HelloWord" /&gt;--它会按照一定的顺序查找资源文件,直到找到定义HellowWord标签的资源文件为止</p>
<p>12）<font color="#ff0000">链接标签</font>：用于创建一个URL链接，并可以通过&lt;s:param&gt;标签提供request参数</p>
<p>&lt;s:url id="url" value="/test.jsp"&gt;</p>
<p>&lt;s:param name="username"&gt;hzd&lt;/s:param&gt;</p>
<p>&lt;/s:url&gt;</p>
<p>13）<font color="#ff0000">属性标签</font>：用以输出<u>value</u>属性的值，并拥有一个<u>default</u>属性,在value对象不存在时显示。<u>escape</u>属性为true,来输出原始的HTML文本</p>
<p>&lt;s:property value="getText('some.key')"&gt;</p>
<p>&nbsp;</p>
<p><font color="#800080"><strong>三、HTML表单标签</strong></font></p>
<p>HTML标签都拥有以下3个设置样式的属性。</p>
<p>templateDir：执行模板路径</p>
<p>theme：指定主题名称，可选值包括simple、xhtml、ajax等</p>
<p>template：指定模板名称</p>
<p>使用HTML表单标签会生成大量格式化的HTML代码，这些代码是由struts2的模板生成的，这样的好处是可以让我们的jsp代码十分简单，只需要配置使用不同的主题模板，就可以显示不同的页面样式。</p>
<p>struts2默认提供了5种主题(在此不做详细介绍)：</p>
<p>simple主题：最简单的主题</p>
<p>XHTML主题：默认主题，使用常用的HTML技巧</p>
<p>CSS XHTML主题：使用CSS实现的XHTML主题</p>
<p>archive主题：使用文档生成主题</p>
<p>AJAX主题：基于AJAX实现的主题</p>
<p>通过在struts.properties文件中改变struts.ui.theme,struts.ui.templateDir,struts.ui.templateSuffix三个标签来自由切实可行换主题</p>
<p>由于HTML表单标签也不少,所以还是要用的时候在网上找吧...</p>
<p>&nbsp;<font color="#800080"><strong>四、HTML非表单标签</strong></font></p>
<p>主要用来输出各种错误和消息。</p>
<p>1）<font color="#ff0000">错误标签</font>：用以输出Action错误信息</p>
<p>&lt;s:actionerror /&gt;</p>
<p>2）<font color="#ff0000">消息标签</font>：用以输出Action普通消息</p>
<p>&lt;s:atcionmessage /&gt;</p>
<p>3）<font color="#ff0000">字段错误标签</font>：用以输出Action校验中<font color="#ff0000">某一个字段的错误信息</font>或所有字段的错误信息</p>
<p>&lt;s:fielderror /&gt;--输出所有字段的错误信息</p>
<p>&lt;s:fielderror&gt;</p>
<p>&lt;s:param&gt;username&lt;/s:param&gt;--输出字段username的错误信息</p>
<p>&lt;s:param&gt;password&lt;/s:param&gt;--输出字段password的错误信息</p>
<p>&lt;s:fielderror&gt;</p>
<p>4）<font color="#ff0000">DIV标签</font>：用以输出一个&lt;div&gt;标签</p>
<p>&nbsp;</p>
<p><font color="#800080"><strong>五、AJAX标签</strong></font></p>
<p>AJAX标签是struts2专门提供的一组进行AJAX操作的标签，在使用这些标签之前，需要在JSP页面中添加如下引用：</p>
<p><font color="#800080"><strong>&lt;%@ taglib prefix="sx" uri="/struts-dojo-tags"%&gt;</strong></font></p>
<p><font color="#000000">1）<font color="#ff0000">链接标签</font>：用于创建一个&lt;a&gt;链接，并且在单击该链接时执行异步的请求,该标签的url属性必须使用&lt;s:url/&gt;标签进行设置,<u>target</u>属性指向要被更新的页面组件,<u>showLoadingText</u>属性决定是否显示文本,<u>indicator</u>表示异步请求时要显示的图片</font></p>
<p>使用form标签：</p>
<p>&lt;s:div id="<font color="#ff0000">targetDiv</font>"&gt;</p>
<p>&lt;s:form action="LoginAction"&gt;</p>
<p>&lt;sx:a targets="<font color="#ff0000">targetDiv</font>"&nbsp;showLoadingText="false" indicator="loadingImage" /&gt;</p>
<p>&lt;/s:form&gt;</p>
<p>&lt;/s:div&gt;</p>
<p>使用url标签：</p>
<p>&lt;s:div id="<font color="#ff0000">targetDiv</font>"&gt;</p>
<p>&lt;s:url id="<font color="#ff00ff">ajaxTest</font>" value="/LoginAction.action"&gt;</p>
<p>&lt;sx:a targets="<font color="#ff0000">targetDiv</font>" href="%{<font color="#ff00ff">ajaxTest</font>}"&nbsp;showLoadingText="false" indicator="loadingImage" /&gt;</p>
<p>&lt;/s:div&gt;</p>
<p>2）<font color="#ff0000">自动完成标签</font>：是一个组合框组件,在文本框中输入文本，能够给出一个下拉的提示列表。<u>list</u>属性用以指定一个自动提示检索的列表集合(可以是Action中的List类型的属性)，<u>autoComplete</u>属性为true时表示进行自动提示</p>
<p>&lt;sx:autocompleter name="test" list="{'上海','湖南',广东}" autoCompleter="true" /&gt;</p>
<p>3）<font color="#ff0000">自动事件绑定标签</font>：该标签可以为多个对象的多个事件进行监听，并能够发送异步请求。<u>src</u>属性指定监听的对象源，<u>events</u>属性指定监听的事件类型(JavaScript事件),<u>target</u>属性指定异步返回内容填充的目标，<u>indicator</u>属性表示执行异步请求时显示的图片</p>
<p>&lt;s:div id="targetDiv"&gt;</p>
<p>&lt;s:form action="login"&gt;</p>
<p>&lt;s:submit id="<font color="#ff0000">bin</font>" /&gt;</p>
<p>&lt;s:bind src="<font color="#ff0000">bin</font>" <font color="#ff0000">events="onclick"</font> targets="targetDiv" showLoadingText="false" indicator="%{getText('loadingImage')}" /&gt;</p>
<p>&lt;/s:form&gt;</p>
<p>&lt;/s:div&gt;</p>
<p>4）<font color="#ff0000">日期选择标签</font>：用以弹出一个日期和时间的选择窗口，<u>displayFormat</u>属性指定要选择日期的格式,<u>name</u>表示当前组件的属性的对象,<u>value</u>表示默认值,<u>label</u>表示显示的文本</p>
<p>&lt;sx:datetimepicker name="order.date" label="Order Date" displayFormat="yyyy-MM-dd" value="%{'2006-01-01'}"&nbsp;/&gt;</p>
<p>5）<font color="#ff0000">树标签</font>：用以输出一个树形结构</p>
<p>&lt;sx:tree&gt;</p>
<p>6）<font color="#ff0000">Tab页标签</font>：使用AJAX的方式显示多个Tab页</p>
<p>&lt;s:tabbedpanel&gt;</p>
</div>
<img src ="http://www.blogjava.net/parable-myth/aggbug/337235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-11-04 15:17 <a href="http://www.blogjava.net/parable-myth/archive/2010/11/04/337235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 回调</title><link>http://www.blogjava.net/parable-myth/archive/2010/11/03/336907.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Wed, 03 Nov 2010 02:57:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/11/03/336907.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/336907.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/11/03/336907.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/336907.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/336907.html</trackback:ping><description><![CDATA[<div class="blog_content">
<p><span style="font-family: Arial,sans-serif,Helvetica,Tahoma; line-height: 18px;">
<p style="padding: 0px; margin: 0px;">回调函数还真有点像您随身带的BP机：告诉别人号码，在它有事情时Call您<br />
回调用于层间协作，上层将本层函数安装在下层，这个函数就是回调，而下层在一定条件下触发回调，例如作为一个驱动，是一个底层，他在收到一个数据时，除了完成本层的处理工作外，还将进行回调，将这个数据交给上层应用层来做进一步处理，这在分层的数据通信中很普遍。<br />
其
实回调和API非常接近，他们的共性都是跨层调用的函数。但区别是API是低层提供给高层的调用，一般这个函数对高层都是已知的；而回调正好相反，他是高
层提供给底层的调用，对于低层他是未知的，必须由高层进行安装，这个安装函数其实就是一个低层提供的API，安装后低层不知道这个回调的名字，但它通过一
个函数指针来保存这个回调，在需要调用时，只需引用这个函数指针和相关的参数指针。<br />
其实：回调就是该函数写在高层，低层通过一个函数指针保存这个函数，在某个事件的触发下，低层通过该函数指针调用高层那个函数。<br />
<br />
关于回调的总结：<br />
在Java中，通常就是编写另外一个类或类库的人规定一个接口，然后你来实现这个接口，然后把这个接口的一个对象作为参数传给别人的程序，别人的程序必要时就会通过那个接口来调用你编写的函数。</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="padding: 0px; margin: 0px;">下面使用java回调函数来实现一个测试函数运行时间的工具类：<br />
如果我们要测试一个类的方法的执行时间，通常我们会这样做：<br />
java 代码<br />
public class TestObject {&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; /**&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 一个用来被测试的方法，进行了一个比较耗时的循环&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; public static void testMethod(){&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0; i&lt;100000000; i++){&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; /**&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 一个简单的测试方法执行时间的方法&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; public void testTime(){&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long begin = System.currentTimeMillis();//测试起始时间&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testMethod();//测试方法&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long end = System.currentTimeMillis();//测试结束时间&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("[use time]:" + (end - begin));//打印使用时间&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; public static void main(String[] args) {&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TestObject test=new TestObject();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test.testTime();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;<br />
<br />
大家看到了testTime()方法，就只有"//测试方法"是需要改变的，下面我们来做一个函数实现相同功能但更灵活：<br />
首先定一个回调接口：<br />
java 代码<br />
public interface CallBack {&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; //执行回调操作的方法&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; void execute();&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;<br />
<br />
然后再写一个工具类：<br />
java 代码<br />
public class Tools {&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; /**&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 测试函数使用时间，通过定义CallBack接口的execute方法&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param callBack&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; public void testTime(CallBack callBack) {&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long begin = System.currentTimeMillis();//测试起始时间&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; callBack.execute();///进行回调操作&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long end = System.currentTimeMillis();//测试结束时间&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("[use time]:" + (end - begin));//打印使用时间&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; public static void main(String[] args) {&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tools tool = new Tools();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tool.testTime(new CallBack(){&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义execute方法&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void execute(){&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //这里可以加放一个或多个要测试运行时间的方法&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TestObject.testMethod();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
}</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="padding: 0px; margin: 0px;">通过上面的文字和代码我们可以理解了什么叫做java的回调。那么我们具体在什么时候使用回调函数呢？</p>
<p style="padding: 0px; margin: 0px;">在进行JDBC编程的时候，我们经常要写到try catch语句块，而如果采用回调技术，那么完全可以避免重复的去写，将自己的方法体使用一个回调接口的方法来实现，每次都传到同一个try catch当总，但是每一个方法的内容是不相同的。</p>
<p style="padding: 0px; margin: 0px;">再比如算法比较多的情况下，也可以采用这种实现模式来实现。最近看了SWT，发现里面好多的事件驱动都是采用回调来实现的。比如给按钮添加事件：</p>
<p style="padding: 0px; margin: 0px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Button okButton = createButton(buttons, "&amp;Ok", "Process input",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new MySelectionAdapter(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void widgetSelected(SelectionEvent e)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " + nameField.getText());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " + addrField.getText());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Phone number: " + phoneField.getText());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });</p>
<p style="padding: 0px; margin: 0px;">匿名内部类最常用的情况就是在回调当中的精彩表现。</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="padding: 0px; margin: 0px;">回调是一种双向调用模式，也就是说，被调用方在接口被调用时也会调用对方的接口.</p>
</span></p>
</div>
<img src ="http://www.blogjava.net/parable-myth/aggbug/336907.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-11-03 10:57 <a href="http://www.blogjava.net/parable-myth/archive/2010/11/03/336907.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbpm4.4安装（tomcat-mysql）</title><link>http://www.blogjava.net/parable-myth/archive/2010/10/29/336444.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Fri, 29 Oct 2010 02:03:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/10/29/336444.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/336444.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/10/29/336444.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/336444.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/336444.html</trackback:ping><description><![CDATA[转自http://blog.sina.com.cn/s/blog_4863d28a0100ky8r.html<br />
1.JBPM4.4下载(http://sourceforge.net/projects/jbpm)<br />
2.ant安装:jBPM下载包install目录中有一个ant的build.xml文件,使用ant
-p你可以看到所有的安装<br />
3. 安装数据库<br />
&nbsp;
<div id="sina_keyword_ad_area2" class="articalContent"><wbr>&nbsp;<wbr>&nbsp;<wbr>
1)MySQL中创建一个库，库名：jbpmdb<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
2)修改install"build.xml<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
&lt;!-- DEFAULT PROPERTY VALUES
--&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
&lt;property name="database" value="hsqldb"
/&gt;,value值更改为value="mysql"<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
3)修改"install"jdbc"mysql.properties中的数据库配置(有时候安装别的数据库时缺少相应的jar包,需要将相应的jar包copy到jbpm-4.4"lib目录下<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 4)ant
create.jbpm.schema<br />
4.安装服务器<br />
&nbsp;<wbr>&nbsp;<wbr> 1)ant install.tomcat<br />
&nbsp;<wbr>&nbsp;<wbr> 2)ant
install.jbpm.into.tomcat：把jBPM安装到tomcat中,这时候在jbpm-4.4目录下生成apache-tomcat-6.0.26<br />
&nbsp;<wbr>&nbsp;<wbr> 3)ant
load.example.identities：读取实例用户和用户组数据到mysql数据库.生成用户名与密码:<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
用户名&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 密码<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
alex&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
password<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
mike&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
password<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
peter&nbsp;<wbr>&nbsp;<wbr> password<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
mary&nbsp;<wbr>&nbsp;<wbr> password<br />
&nbsp;<wbr>&nbsp;<wbr> 4) 启动tomcat<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Signavio
web(web版流程设计器)地址http://localhost:8080/jbpmeditor/p/explorer(注意在IE7不行,firefox3可以)<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
jBPM控制台地址http://localhost:8080/jbpm-console
</div>
<img src ="http://www.blogjava.net/parable-myth/aggbug/336444.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-10-29 10:03 <a href="http://www.blogjava.net/parable-myth/archive/2010/10/29/336444.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbpm_spring</title><link>http://www.blogjava.net/parable-myth/archive/2010/10/29/336443.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Fri, 29 Oct 2010 02:00:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/10/29/336443.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/336443.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/10/29/336443.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/336443.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/336443.html</trackback:ping><description><![CDATA[http://bbs.chinaunix.net/thread-1754666-1-1.html<br />
<img src ="http://www.blogjava.net/parable-myth/aggbug/336443.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-10-29 10:00 <a href="http://www.blogjava.net/parable-myth/archive/2010/10/29/336443.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Form action defaulting to 'action' attribute's literal value</title><link>http://www.blogjava.net/parable-myth/archive/2010/10/28/336387.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Thu, 28 Oct 2010 07:50:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/10/28/336387.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/336387.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/10/28/336387.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/336387.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/336387.html</trackback:ping><description><![CDATA[在使用&lt;s:form&gt;标记时，发现控制台总是输出警告信息，
<p><font color="#f70909">警告信息内容如下：</font></p>
<p>警告: No configuration found for the specified act<wbr>ion: 'ShowMessage' in namespace: ''. Form act<wbr>ion defaulting to 'act<wbr>ion' attribute's literal value.<br />
2008-9-6 11:35:47 org.apache.struts2.components.Form evaluateExtraParamsServletRequest<br />
警告: No configuration found for the specified act<wbr>ion: 'ShowMessage' in namespace: ''. Form act<wbr>ion defaulting to 'act<wbr>ion' attribute's literal value.</p>
<p><font color="#ff6600">showmsg.jsp代码如下</font></p>
<p>&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;<br />
......<br />
&lt;div&gt;<br />
hello world<br />
&lt;s:form name="ShowMessage" method="post" act<wbr>ion="/hello/ShowMessage.act<wbr>ion" &gt;<br />
&lt;s:textfield label="user name" name="username"&gt;&lt;/s:textfield&gt;<br />
&lt;s:submit&gt;&lt;/s:submit&gt;<br />
&lt;/s:form&gt;<br />
&lt;/div&gt;<br />
......</p>
<p><font color="#00ccff">struts.xml配置如下：</font><br />
......<br />
&lt;struts&gt;<br />
&nbsp;&lt;package name="hello" extends="struts-default" namespace="/hello"&gt;<br />
&nbsp;&lt;act<wbr>ion name="ShowMessage" class="com.historycreator.strutstest.ShowMessage"&gt;<br />
&nbsp;&lt;result&gt;/digg/showmsg.jsp&lt;/result&gt;<br />
&nbsp;&lt;/act<wbr>ion&gt;<br />
&nbsp;&lt;/package&gt;<br />
&lt;/struts&gt;</p>
<p>打开showmsg.jsp页面时，就出现上述异常。尝试了各种配置和访问方法，均出现警告。搜索网络给出的答案几乎都说把&lt;s:form name="ShowMessage" method="post" act<wbr>ion="/hello/ShowMessage.act<wbr>ion" &gt;中的.act<wbr>ion去掉就可以解决了，做了测试，问题仍然没有解决。更有人让把&lt;s:去掉，不用tag，直接写&lt;form&gt;这个当然不会有问题，但是一会用标记，一会不用，很杂乱，并且不是解决问题的根本之道。</p>
<p><font color="#0099ff">解决方法：</font><br />
经过测试发现，是没有正确使用tag的原因，这种情况下，正确的写法应该是，&lt;s:form name="ShowMessage" method="post" act<wbr>ion="ShowMessage" namespace="/hello"&nbsp;&gt;<br />
</p>
<p><font color="#0000ff">原因分析：</font></p>
<p>因为开始使用的struts2标签(form)并未指定namespace属性。所以struts2会默认从根命名空间"/" 搜索act<wbr>ion '/hello/ShowMessage.act<wbr>ion'，如搜索不到则进入默认命名空间''搜索act<wbr>ion串，在默认命名空间中是肯定找不到自己定义的act<wbr>ion的，所以，struts2抛出一个警告信息。</p>
<p>现在我们指定了namespace为/hello，则struts2会直接在/hello命名空间寻找。可以想象，如果在这么命名空间里找不到请求的act<wbr>ion，也会抛出一条类似的信息。</p>
<p>注意，&lt;s:form name="ShowMessage" method="post" act<wbr>ion="ShowMessage" namespace="/hello"&nbsp;&gt;<br />
不能写成&lt;s:form name="ShowMessage" method="post" act<wbr>ion="ShowMessage.act<wbr>ion" namespace="/hello"&nbsp;&gt;</p>
<p>这样仍然有对应的警告信息，并且提交后出现无法访问的结果。因为没有ShowMessage.act<wbr>ion这样一个act<wbr>ion，这个.act<wbr>ion不能由我们手工添加，Struts2会自动为你完成这个工作，并且手工添加是不行的，就不必多此一举了。但是在其他的场合，比如使用超级链结，则可以加上这个.act<wbr>ion。</p>
<p>转载请注明 historycreator.com</p>
<img src ="http://www.blogjava.net/parable-myth/aggbug/336387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-10-28 15:50 <a href="http://www.blogjava.net/parable-myth/archive/2010/10/28/336387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2.2.1做例子的时候发现的问题，在此记录</title><link>http://www.blogjava.net/parable-myth/archive/2010/10/28/336368.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Thu, 28 Oct 2010 04:43:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/10/28/336368.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/336368.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/10/28/336368.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/336368.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/336368.html</trackback:ping><description><![CDATA[<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt; 原例子中没有这段，但我建xml文件的时候会有这段，运行时验证不好用，当把这段去掉后<br />
程序可以正常验证，我再加上后也可以正常验证，不知道什么缘故。<br />
&lt;!DOCTYPE validators PUBLIC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//OpenSymphony Group//XWork Validator 1.0.2//EN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"&gt;<br />
<br />
&lt;validators&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;field name="username"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field-validator type="requiredstring"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message key="requiredstring"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field-validator&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/field&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;field name="password"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field-validator type="requiredstring"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message key="requiredstring"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field-validator&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/field&gt;<br />
&lt;/validators&gt;<br />
<br />
<br />
<img src ="http://www.blogjava.net/parable-myth/aggbug/336368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-10-28 12:43 <a href="http://www.blogjava.net/parable-myth/archive/2010/10/28/336368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OGNL表达式struts2标签“%，#，$”</title><link>http://www.blogjava.net/parable-myth/archive/2010/10/28/336353.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Thu, 28 Oct 2010 02:25:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/10/28/336353.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/336353.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/10/28/336353.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/336353.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/336353.html</trackback:ping><description><![CDATA[<ol>
    <li><span><span>一、什么是OGNL，有什么特点？
    &nbsp;<wbr>&nbsp;<wbr></span></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>OGNL（Object-Graph&nbsp;<wbr>Navigation&nbsp;<wbr>Language），大概可以理解为：对象图形化导航语言。是一种可以方便地操作对象属性的开源表达式语言。OGNL有如下特点：&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span><font color="#c00000">1</font></span><span>、支持对象方法调用，形式如：objName.methodName()；
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span><font color="#c00000">2</font></span><span>、支持类静态的方法调用和值访问，表达式的格式为@[类全名（包括包路）]@[方法名&nbsp;<wbr>|&nbsp;<wbr>&nbsp;<wbr>值名]，例如：
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span><font color="#646464">@java</font></span><span>.lang.String</span><span><font color="#646464">@format</font></span><span>(</span><span><font color="#0000ff">'foo&nbsp;<wbr>%s'</font></span><span>,&nbsp;<wbr></span><span><font color="#0000ff">'bar'</font></span><span>)或</span><span><font color="#646464">@tutorial</font></span><span>.MyConstant</span><span><font color="#646464">@APP_NAME</font></span><span>；
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span><font color="#c00000">3</font></span><span>、支持赋值操作和表达式串联，例如：
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>price=</span><span><font color="#c00000">100</font></span><span>,&nbsp;<wbr>discount=</span><span><font color="#c00000">0.8</font></span><span>,&nbsp;<wbr>calculatePrice()，这个表达式会返回</span><span><font color="#c00000">80</font></span><span>；
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span><font color="#c00000">4</font></span><span>、访问OGNL上下文（OGNL&nbsp;<wbr>context）和ActionContext；
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span><font color="#c00000">5</font></span><span>、操作集合对象。
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>二、使用OGNL表达式
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>OGNL要结合struts标签来使用。由于比较灵活，也容易把人给弄晕，尤其是&#8220;%&#8221;、&#8220;#&#8221;、&#8220;$&#8221;这三个符号的使用。由于$广泛应用于EL中，这里重点写%和#符号的用法。
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span><font color="#c00000">1</font></span><span>、&#8220;#&#8221;符号有三种用途：
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>(</span><span><font color="#c00000">1</font></span><span>)、访问非根对象（struts中值栈为根对象）如OGNL上下文和Action上下文，#相当于ActionContext.getContext()；下表有几个ActionContext中有用的属性：
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>名称 &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>作用
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>例子
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>parameters
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>包含当前HTTP请求参数的Map
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>#parameters.id[</span><span><font color="#c00000">0</font></span><span>]作用相当于request.getParameter(</span><span><font color="#0000ff">"id"</font></span><span>)&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>request &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&nbsp;<wbr>包含当前HttpServletRequest的属性（attribute)的Map
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&nbsp;<wbr>#request.userName相当于request.getAttribute(</span><span><font color="#0000ff">"userName"</font></span><span>)&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>session &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>包含当前HttpSession的属性（attribute）的Map
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&nbsp;<wbr>#session.userName相当于session.getAttribute(</span><span><font color="#0000ff">"userName"</font></span><span>)&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>application
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>包含当前应用的ServletContext的属性（attribute）的Map
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&nbsp;<wbr>#application.userName相当于application.getAttribute(</span><span><font color="#0000ff">"userName"</font></span><span>)&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>注：attr&nbsp;<wbr>用于按request&nbsp;<wbr>&gt;&nbsp;<wbr>session&nbsp;<wbr>&gt;&nbsp;<wbr>application顺序访问其属性（attribute），#attr.userName相当于按顺序在以上三个范围（scope）内读取userName属性，直到找到为止。用于过滤和投影（projecting)集合，如books.{?#</span><span><strong><font color="#7f0055">this</font></strong></span><span>.price&lt;</span><span><font color="#c00000">100</font></span><span>}；构造Map，如#{</span><span><font color="#0000ff">'foo1'</font></span><span>:</span><span><font color="#0000ff">'bar1'</font></span><span>,&nbsp;<wbr></span><span><font color="#0000ff">'foo2'</font></span><span>:</span><span><font color="#0000ff">'bar2'</font></span><span>}。
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>(</span><span><font color="#c00000">2</font></span><span>)、用于过滤和投影（projecting)集合，如:&nbsp;<wbr>books.{?#</span><span><strong><font color="#7f0055">this</font></strong></span><span>.price&gt;</span><span><font color="#c00000">35</font></span><span>}&nbsp;<wbr>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>books.{?#</span><span><strong><font color="#7f0055">this</font></strong></span><span>.price&gt;</span><span><font color="#c00000">35</font></span><span>}
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>(</span><span><font color="#c00000">3</font></span><span>)、构造Map，如:&nbsp;<wbr>#{</span><span><font color="#0000ff">'foo1'</font></span><span>:</span><span><font color="#0000ff">'bar1'</font></span><span>,&nbsp;<wbr></span><span><font color="#0000ff">'foo2'</font></span><span>:</span><span><font color="#0000ff">'bar2'</font></span><span>}&nbsp;<wbr>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>#{</span><span><font color="#0000ff">'foo1'</font></span><span>:</span><span><font color="#0000ff">'bar1'</font></span><span>,&nbsp;<wbr></span><span><font color="#0000ff">'foo2'</font></span><span>:</span><span><font color="#0000ff">'bar2'</font></span><span>}这种方式常用在给radio或select、checkbox等标签赋值上。如果要在页面中取一个map的值可以这样写：&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&lt;s:property&nbsp;<wbr>value=</span><span><font color="#0000ff">"#myMap['foo1']"</font></span><span>/&gt;&nbsp;<wbr>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&lt;s:property&nbsp;<wbr>value=</span><span><font color="#0000ff">"#myMap['foo1']"</font></span><span>/&gt;
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span><font color="#c00000">2</font></span><span>、&#8220;%&#8221;符号的用途是在标签的属性值被理解为字符串类型时，告诉执行环境%{}里的是OGNL表达式。
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>这是一开始最让我不能理解的符号，原因是一些相关资源在表述时不太准备，经过一翻痛苦的探索，终于明白了它的用途。实际上就是让被理解为字符串的表达式，被真正当成ognl来执行。很有点类似javascript里面的eval_r()功能，例如&nbsp;<wbr>：
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>var&nbsp;<wbr>oDiv&nbsp;<wbr>=&nbsp;<wbr>eval_r(</span><span><font color="#0000ff">"document.all.div"</font></span><span>+index)&nbsp;<wbr>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>var&nbsp;<wbr>oDiv&nbsp;<wbr>=&nbsp;<wbr>eval_r(</span><span><font color="#0000ff">"document.all.div"</font></span><span>+index)
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>当index变量为</span><span><font color="#c00000">1</font></span><span>时，语句就会被当作var&nbsp;<wbr>oDiv&nbsp;<wbr>=&nbsp;<wbr>document.all.div1&nbsp;<wbr>&nbsp;<wbr>var&nbsp;<wbr>oDiv&nbsp;<wbr>=&nbsp;<wbr>document.all.div1来执行。%{}就是起这个作用。举例：&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&lt;s:set&nbsp;<wbr>name=</span><span><font color="#0000ff">"myMap"</font></span><span>&nbsp;<wbr>value=</span><span><font color="#0000ff">"#{'key1':'value1','key2':'value2'}"</font></span><span>/&gt;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&lt;s:property&nbsp;<wbr>value=</span><span><font color="#0000ff">"#myMap['key1']"</font></span><span>/&gt;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&lt;s:url&nbsp;<wbr>value=</span><span><font color="#0000ff">"#myMap['key1']"</font></span><span>&nbsp;<wbr>/&gt;&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&lt;s:set&nbsp;<wbr>name=</span><span><font color="#0000ff">"myMap"</font></span><span>&nbsp;<wbr>value=</span><span><font color="#0000ff">"#{'key1':'value1','key2':'value2'}"</font></span><span>/&gt;
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&lt;s:property&nbsp;<wbr>value=</span><span><font color="#0000ff">"#myMap['key1']"</font></span><span>/&gt;
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&lt;s:url&nbsp;<wbr>value=</span><span><font color="#0000ff">"#myMap['key1']"</font></span><span>/&gt;
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>上面的代码第</span><span><font color="#c00000">2</font></span><span>行会在页面上输出&#8220;value1&#8221;，而第</span><span><font color="#c00000">3</font></span><span>行则会输出</span><span><font color="#0000ff">"#myMap['key1']"</font></span><span>这么一个字符串。&nbsp;<wbr>如果将第</span><span><font color="#c00000">3</font></span><span>行改写成这样：&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&lt;s:url&nbsp;<wbr>value=</span><span><font color="#0000ff">"%{#myMap['key1']}"</font></span><span>/&gt;&nbsp;<wbr>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&lt;s:url&nbsp;<wbr>value=</span><span><font color="#0000ff">"%{#myMap['key1']}"</font></span><span>/&gt;
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>则输出为&#8220;value1&#8221;。
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>这说明struts2里不同的标签对ognl的表达式的理解是不一样的。如果当有的标签&#8220;看不懂&#8221;类似&#8220;#myMap[</span><span><font color="#0000ff">'key1'</font></span><span>]&#8221;的语句时，就要用%{}来把这括进去，&#8220;翻译&#8221;一下了。
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span><font color="#c00000">3</font></span><span>、&#8220;$&#8221;有两种用途
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>(</span><span><font color="#c00000">1</font></span><span>)、在国际化资源文件中，引用OGNL表达式。
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>(</span><span><font color="#c00000">2</font></span><span>)、在Struts&nbsp;<wbr></span><span><font color="#c00000">2</font></span><span>配置文件中，引用OGNL表达式：&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&lt;action&nbsp;<wbr>name=</span><span><font color="#0000ff">"saveUser"</font></span><span>&nbsp;<wbr></span><span><strong><font color="#7f0055">class</font></strong></span><span>=</span><span><font color="#0000ff">"userAction"</font></span><span>&nbsp;<wbr>method=</span><span><font color="#0000ff">"save"</font></span><span>&gt;
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&lt;result&nbsp;<wbr>type=</span><span><font color="#0000ff">"redirect"</font></span><span>&gt;listUser.action?msg=${msg}&lt;/result&gt;
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&lt;/action&gt;
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&lt;action&nbsp;<wbr>name=</span><span><font color="#0000ff">"saveUser"</font></span><span>&nbsp;<wbr></span><span><strong><font color="#7f0055">class</font></strong></span><span>=</span><span><font color="#0000ff">"userAction"</font></span><span>&nbsp;<wbr>method=</span><span><font color="#0000ff">"save"</font></span><span>&gt;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&lt;result&nbsp;<wbr>type=</span><span><font color="#0000ff">"redirect"</font></span><span>&gt;listUser.action?msg=${msg}&lt;/result&gt;
    &nbsp;<wbr>&nbsp;<wbr></span></li>
    <li><span>&nbsp;<wbr>&nbsp;<wbr></span></li>
    <li>
    <span>&lt;/action&gt;&nbsp;<wbr> <br />
    </span></li>
</ol>
<img src ="http://www.blogjava.net/parable-myth/aggbug/336353.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-10-28 10:25 <a href="http://www.blogjava.net/parable-myth/archive/2010/10/28/336353.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse修改启动参数</title><link>http://www.blogjava.net/parable-myth/archive/2010/10/27/336315.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Wed, 27 Oct 2010 12:04:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/10/27/336315.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/336315.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/10/27/336315.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/336315.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/336315.html</trackback:ping><description><![CDATA[在eclipse.ini中加入如下两个参数，这样在创建jsp文件的时候，默认编码就是UTF-8，创建类的时候author就会是ly，当然你可以自己修改。<br />
-Dfile.encoding=UTF-8<br />
-Duser.name=ly<br />
<img src ="http://www.blogjava.net/parable-myth/aggbug/336315.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-10-27 20:04 <a href="http://www.blogjava.net/parable-myth/archive/2010/10/27/336315.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delphi开发时经常会用到窗体全屏，现找到了解决办法记录一下</title><link>http://www.blogjava.net/parable-myth/archive/2010/09/15/332031.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Wed, 15 Sep 2010 01:20:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/09/15/332031.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/332031.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/09/15/332031.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/332031.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/332031.html</trackback:ping><description><![CDATA[procedure TFrm_Main.FormCreate(Sender: TObject);<br />
begin<br />
&nbsp; Frm_Main.Left := 0;<br />
&nbsp; Frm_Main.Top := 0;<br />
&nbsp; Frm_Main.windowstate := wsmaximized;<br />
&nbsp; SetWindowLong(Frm_Main.Handle, GWL_STYLE,<br />
&nbsp;&nbsp;&nbsp; GetWindowLong(Frm_Main.Handle, GWL_STYLE) and not WS_CAPTION);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //FForm.windowstate:=wsmaximized;<br />
&nbsp; Frm_Main.clientHeight := screen.Height;<br />
&nbsp; Frm_Main.Refresh;<br />
end;<br />
<br />
参考 http://www.cnblogs.com/uws2056/archive/2010/06/23/1763988.html<br />
<br />
<img src ="http://www.blogjava.net/parable-myth/aggbug/332031.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-09-15 09:20 <a href="http://www.blogjava.net/parable-myth/archive/2010/09/15/332031.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C# 获取数据库表信息与列信息的方法   GridView insert</title><link>http://www.blogjava.net/parable-myth/archive/2010/09/07/331320.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Tue, 07 Sep 2010 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/09/07/331320.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/331320.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/09/07/331320.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/331320.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/331320.html</trackback:ping><description><![CDATA[http://zrk526.blog.163.com/blog/static/1348415862010412111645876/<br />
<img src ="http://www.blogjava.net/parable-myth/aggbug/331320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-09-07 16:12 <a href="http://www.blogjava.net/parable-myth/archive/2010/09/07/331320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Delphi中开发使用多显示器的应用程序</title><link>http://www.blogjava.net/parable-myth/archive/2010/08/06/328116.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Fri, 06 Aug 2010 04:23:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/08/06/328116.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/328116.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/08/06/328116.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/328116.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/328116.html</trackback:ping><description><![CDATA[转自 http://www.huarw.com/program/Delphi/delphi013/200511/3407.html<br />
<img src ="http://www.blogjava.net/parable-myth/aggbug/328116.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-08-06 12:23 <a href="http://www.blogjava.net/parable-myth/archive/2010/08/06/328116.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delphi多显示器编程</title><link>http://www.blogjava.net/parable-myth/archive/2010/08/06/328102.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Fri, 06 Aug 2010 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/08/06/328102.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/328102.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/08/06/328102.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/328102.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/328102.html</trackback:ping><description><![CDATA[TScreen和TMonitor.<br />
这两者的区别在于TScreen代表的是一个虚拟的桌面,它可以拥有N个Monitor<br />
,也就是物理的显示器.<br />
<br />
这是大富翁上抄下来的代码
:-)<br />
<br />
//将一个窗体显示到指定的显示器上<br />
procedure SetWindowToMonitor(Form: TCustomForm;
//你想操作的窗体<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MonitorIndex, &nbsp; &nbsp; &nbsp;//你想要显示窗体的显示<br />
&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp;器索引， 0为主显示<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp;器，1为第二显示器<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;Left, Top: Integer //窗体在显示器上的位置<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );<br />
begin
&nbsp;<br />
&nbsp; if not Assigned(Form) then Exit;<br />
&nbsp; if MonitorIndex &gt;=
Screen.MonitorCount then Exit;<br />
&nbsp; with Screen do<br />
&nbsp; begin<br />
&nbsp; &nbsp; Inc(Left,
Monitors[MonitorIndex].Left);<br />
&nbsp; &nbsp; Inc(Top, Monitors[MonitorIndex].Top);<br />
&nbsp;
end;<br />
&nbsp; Form.SetBounds(Left, Top, Form.Width, Form.Height);<br />
end;
<img src ="http://www.blogjava.net/parable-myth/aggbug/328102.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-08-06 10:23 <a href="http://www.blogjava.net/parable-myth/archive/2010/08/06/328102.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Eclipse的Axis1.4插件开发Web Service及客户端</title><link>http://www.blogjava.net/parable-myth/archive/2010/08/03/327802.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Tue, 03 Aug 2010 03:09:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/08/03/327802.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/327802.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/08/03/327802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/327802.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/327802.html</trackback:ping><description><![CDATA[转自 http://blog.csdn.net/tsun7263/archive/2009/10/16/4677490.aspx<br />
所使用的Eclipse版本Eclipse JEE
3.3，JDK版本1.5，Tomcat6.0。在这个Eclipse版本里已集成了Axis1.4的插件，无需安装任何插件就可以开发Web
Service应用程序了，利用图形化的向导可以开发Web Service服务端和客户端程序。
<div class="para">&nbsp;&nbsp;&nbsp; 建立一个项目AxisServerDemo，写一个简单的类： </div>
<div class="code"><span style="background-color: rgb(192, 192, 192);">package
demo.axis; <br />
<br />
public class User <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;public String
sayHello(String userName) <br />
&nbsp;&nbsp;&nbsp;&nbsp;{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return "hello " +
userName; <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
} </span></div>
<div class="para">&nbsp;&nbsp;&nbsp; 下面用Axis向导把这个bean发布为Web Service： </div>
<div class="para">&nbsp;&nbsp;&nbsp; 1、选择File|New|Other，选择新建Web Service。 </div>
<div class="image" style="text-align: center;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tsun7263/EntryImages/20091015/createAxisWebService01_SelectCreateNewWebService633912417503930000.jpg" alt="" width="541" height="694" />
<div class="image_title" style="text-align: center;">图1&nbsp;&nbsp;选择新建Web Service</div>
</div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp;
2、在第一步的界面上点击&#8220;next&#8221;，出现一个界面： </div>
<div class="image" style="text-align: center;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tsun7263/EntryImages/20091015/createAxisWebService02_SelectClass633912417504867500.jpg" alt="" width="534" height="706" />
<div class="image_title">图2&nbsp;&nbsp;指定对哪个类生成Web Service</div>
</div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp; 点击&#8220;Web service Apache
Axis&#8221;，出现以下界面： </div>
<div class="image" style="text-align: center;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tsun7263/EntryImages/20091015/createAxisWebService03_SelectWebServiceRunTime633912417505648750.jpg" alt="" width="566" height="507" />
<div class="image_title">图3&nbsp; 选择Axis版本</div>
</div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp; 此处选择Apache Axis。 </div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp; 对图2界面上选择要生成的类，点击&#8220;next&#8221;。 </div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp; 3、选择要生成Web
Service的方法，如下图： </div>
<div class="image" style="text-align: center;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tsun7263/EntryImages/20091015/createAxisWebService04_SelectMethod633912420904867500.jpg" alt="" width="534" height="706" />
<div class="image_title">图4&nbsp; 选择要生成Web Service的方法</div>
</div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp; 4、在如下界面，启动应用服务器。 </div>
<div class="image" style="text-align: center;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tsun7263/EntryImages/20091015/createAxisWebService05_StartServer633912420905492500.jpg" alt="" width="542" height="706" />
<div class="image_title">图5&nbsp; 启动应用服务器</div>
</div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp; 在应用服务器启动后，点击&#8220;next&#8221;。 </div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp; 5、在Web
Service发布界面上，因为仅仅是一个测试，不选择发布，点击&#8220;finish&#8221;。 </div>
<div class="image" style="text-align: center;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tsun7263/EntryImages/20091015/createAxisWebService06_SelectPublish633912426935023750.jpg" alt="" width="611" height="706" />
<div class="image_title">图6&nbsp; 选择发布Web Service</div>
</div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp;
按步骤完成以后，会在项目中生成一些文件，web.xml也已被修改，在lib中会多出来几个.jar文件，最后目录结构如下： </div>
<div class="image" style="text-align: center;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tsun7263/EntryImages/20091015/createAxisWebService07_Result633912426935805000.jpg" alt="" width="260" height="478" />
<div class="image_title">图7&nbsp; 生成Web Service后的目录结构</div>
</div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp;
把项目部署到tomcat中，启动后在浏览器中输入&#8220;http://localhost:8080/AxisServerDemo/services
/User?wsdl&#8221;，能够看到xml格式wsdl就说明成功了。 </div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp; 刚才完成的Web
Service发布了一个简单的功能，如何利用它呢，利用这个功能的就是Web Service 客户端。下面利用Axis1.4插件自动生成访问Web
Service的代码。 </div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp;
新建一个项目AxisClientDemo，用以下步骤生成Web Service客户端代码： </div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp;
1、选择File|New|Other，选择新建Web Service Client。 </div>
<div class="image" style="text-align: center;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tsun7263/EntryImages/20091015/createAxisClient01_SelectCreateNewWebServiceClient.jpg" alt="" width="525" height="500" />
<div class="image_title">图8&nbsp; 选择新建Web Service Client</div>
</div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp; 2、在接下来的界面中，输入Web
Service所在的URL，此处是&#8220;http://localhost:8080/AxisServerDemo/services
/User?wsdl&#8221;。 </div>
<div class="image" style="text-align: center;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tsun7263/EntryImages/20091015/createAxisClient02_SelectWebService.jpg" alt="" width="595" height="500" />
<div class="image_title">图9&nbsp; 输入Web Service的wsdl所在的路径</div>
</div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp; 3、选择生成代码所在的路径。 </div>
<div class="image" style="text-align: center;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tsun7263/EntryImages/20091015/createAxisClient03_SelectGenerateProxy.jpg" alt="" width="595" height="500" />
<div class="image_title">图10&nbsp; 选择生成代码所在的路径</div>
</div>
<div class="para" style="text-align: left;">&nbsp;&nbsp;&nbsp;
4、点击&#8220;Finish&#8221;，就会生成几个java文件，lib目录下面会多出几个.jar文件。生成之后的代码结构如下： </div>
<div class="image" style="text-align: center;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tsun7263/EntryImages/20091015/createAxisClient04_Result.jpg" alt="" width="261" height="402" />
<div class="image_title">图11&nbsp; 生成Web Service客户端代码后的目录结构</div>
</div>
<div class="para">&nbsp;&nbsp;&nbsp; 为了测试Web Service客户端代码是否工作正常，在建立一个jsp文件： </div>
<div class="code"><span style="background-color: rgb(192, 192, 192);">&lt;%@&nbsp;page&nbsp;language="java"&nbsp;contentType="text/html;&nbsp;charset=UTF-8"
<br />
&nbsp;&nbsp;&nbsp;&nbsp;pageEncoding="UTF-8"%&gt; <br />
&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/html4/loose.dtd"&gt;
<br />
&lt;%@page&nbsp;import="demo.axis.User"%&gt; <br />
&lt;%@page&nbsp;import="demo.axis.UserProxy"%&gt;
<br />
&lt;html&gt; <br />
&lt;head&gt; <br />
&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=UTF-8"&gt;
<br />
&lt;title&gt;Insert&nbsp;title&nbsp;here&lt;/title&gt; <br />
&lt;/head&gt; <br />
&lt;body&gt;
<br />
&lt;form&nbsp;method="POST"&gt; <br />
&lt;input&nbsp;type="text"&nbsp;name="username"/&gt;
<br />
&lt;br/&gt; <br />
&lt;input&nbsp;type="submit"&nbsp;value="ok"/&gt; <br />
&lt;/form&gt;
<br />
&lt;% <br />
String&nbsp;userName&nbsp;=&nbsp;request.getParameter("username"); <br />
if&nbsp;(userName&nbsp;!=&nbsp;null&nbsp;&amp;&amp;&nbsp;!"".equals(userName))
<br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;new&nbsp;UserProxy(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;out.print(user.sayHello(userName));
<br />
} <br />
%&gt; <br />
&lt;/body&gt; <br />
&lt;/html&gt; </span></div>
<div class="para">&nbsp;&nbsp;&nbsp; 启动tomcat，在浏览器中运行上面的jsp文件，就可以看到效果了。 </div>
<img src ="http://www.blogjava.net/parable-myth/aggbug/327802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-08-03 11:09 <a href="http://www.blogjava.net/parable-myth/archive/2010/08/03/327802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简述MPEG动态图象压缩编码的运动补偿技术</title><link>http://www.blogjava.net/parable-myth/archive/2010/07/30/327533.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Fri, 30 Jul 2010 02:16:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/07/30/327533.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/327533.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/07/30/327533.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/327533.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/327533.html</trackback:ping><description><![CDATA[<span id="reply_content_67443724">
<pre>1 MPEG：<br />
<br />
<br />
<br />
MPEG是Motion Picture Experts Group 的缩写，它是视频编码格式中的一个大家族，也是我们平时所见到的最普遍的一种视频格式。从它衍生出来的格式非常多，包括以mpg、mpe、mpa、m15、m1v、mp2等等为后缀名的视频文件都是出自这一家族。MPEG格式包括MPEG视频、MPEG音频和MPEG系统（视频、音频同步）三个部分，MP3（MPEG-3）音频文件就是MPEG音频的一个典型应用，视频方面则包括MPEG-1、MPEG-2和MPEG4。<br />
<br />
<br />
<br />
MPEG-1压缩算法被广泛应用在 VCD 的制作和一些视频片段下载方面，其中最多的就是VCD——几乎所有VCD都是使用Mpeg-1格式压缩的（*.dat格式的文件）。MPEG-1的压缩算法可以把一部 120 分钟长的电影（原始视频文件）压缩到1.2 GB左右大小。利用这种压缩算法制成的文件格式一般为mpg和dat文件。<br />
<br />
<br />
<br />
MPEG-2压缩算法则应用在DVD的制作上（*.vob格式的文件），同时也在一些HDTV（高清晰电视广播）和一些高要求视频编辑、处理有相当的应用。使用MPEG-2的压缩算法制作一部 120 分钟长的电影（原始视频文件）在4GB到8GB大小左右，当然其图像质量方面的指标是MPEG-1所无法比拟的。利用这种压缩算法制成的文件格式一般为vob文件。<br />
<br />
<br />
<br />
MPEG-4是一种新的压缩算法，使用这种压缩算法可以将一部120分钟长的电影（原始视频文件）压缩至300MB左右。现在，MPEG的这种压缩算法被许多编码格式沿用，例如ASF、DivX、Xvid、mp4（Apple公司的mpeg-4编码格式）等等都采用了MPEG-4的压缩算法。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
2 AVI编码格式<br />
<br />
<br />
<br />
AVI是 Audio Video Interleave 的缩写，这种格式在微软WIN3.1 时代就已经出现了。它最直接的优点就是兼容好、调用方便而且图像质量好，因此也常常与DVD相并称。但它的缺点也是十分明显的：体积大。2小时影像的AVI文件的体积与MPEG-2相差无计，不过这只是针对标准分辨率而言的：根据不同的应用要求，AVI的分辨率可以随意调。窗口越大，文件的数据量也就越大。降低分辨率可以大幅减低它的体积，但图像质量就必然受损。与MPEG-2格式文件体积差不多的情况下，AVI格式的视频质量相对而言要差不少，但制作起来对电脑的配置要求不高，经常有人先录制好了AVI格式的视频，再转换为其他格式。<br />
<br />
<br />
<br />
这里简单提一下nAVI。nAVI是newAVI的缩写，这是一个名为 ShadowRealm 的地下组织发展起来的一种新视频格式。它是由 Microsoft ASF压缩算法的修改而来的（并不是想象中的AVI，视频格式追求的无非是压缩率和图像质量，所以 n AVI为了追求这个目标，改善了原始的ASF格式的一些不足，让nAVI可以拥有更高的帧率（frame rate）。当然，这是牺牲ASF的视频流特性作为代价的。概括来说，nAVI就是一种去掉视频流特性的改良型ASF格式。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
3 REAL VIDEO格式<br />
<br />
<br />
<br />
Real公司一开始定位的就是在视频流应用方面的，也可以说是视频流技术的始创者。它可以在用 56K MODEM 拨号上网的条件实现不间断的视频播放，当然，其图像质量和 MPEG2、DIVX 等相比确实要差好多。RM主要用于在低速率的网上实时传输视频的压缩格式，它同样具有小体积而又比较清晰的特点。RM文件的大小完全取决于制作时选择的压缩率。在2002年Real公司又推出了它的Real Video9编码方式，使用该技术同上一版相比，画质提高了30%。使用Real Video9编码格式的文件名后缀一般为rmvb，RMVB中的VB是VBR即Variable Bit Rate的缩写，中文是&#8220;可变比特率&#8221;。它比普通的RM文件有更高的压缩比（同样画质）和更好的画质（同样压缩比）。rmvb文件一般用realone播放器播放，当然也可以用安装了相应插件的realplay播放（不过播放的时候要将rmvb改成rm）。以前的real video文件名后缀多为RM、RA、RAM。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
4 ASF<br />
<br />
<br />
<br />
ASF是 Advanced Streaming format 的缩写，它是Windows Media技术的核心，采用的是MPEG-4压缩算法，由于它使用了 MPEG-4 的压缩算法，所以压缩率和图像的质量都很不错。因为 ASF 是以一个可以在网上即时观赏的视频&#8220;流&#8221;格式存在的，所以它的图像质量比 VCD 差一点点并不出奇，但比同是视频流格式的 RAM 格式要好。利用这种编码方式制成的文件名后缀一般为asf。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
5 Quicktime格式<br />
<br />
<br />
<br />
QuickTime（MOV）是Apple公司专有的一种视频格式。在开始一段时间里，他都是以qt或mov为扩展名的，使用他们自己的编码格式。但是自从MPEG4组织选择了Quicktime作为MPEG4的推荐文件格式以后，它们的mov文件就以mpg或mp4为其扩展名，并且采用了MPEG4压缩算法。Quicktime6将mp4文件作为它的第一选择，利用quicktime6可以制作出专业级质量的、ISO兼容的MPEG4音频和视频文件，而且这些文件也可以被任何兼容MPEG4的播放器播放。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
6 DivX<br />
<br />
<br />
<br />
DivX视频编码技术可以说是针对DVD而产生的，同时它也是为了打破 ASF 的种种约束而发展起来的。正如上面所提到的那样，它采用的是MPEG-4算法，这样以来，压缩一部DVD只需要2张VCD，而且播放这种编码，对机器的要求也不高。目前DivX有两个版本，第一个DivX版本以DivX3.11为例，而第二个版本就是后来的DivX5，但是实际上第二个编码格式的作者跟divx3.11的作者根本不是同一个人，这两种编码格式的设计思路也不同。所以，如果要解压缩按照DivX3.11编码的媒体文件时，最好采用DivX3.11的解码器，而不要用DivX5的解码器来解码。目前大部分的DivX视频采用的是.avi的文件后缀，当然也有以DivX和Div为后缀名的。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
7 Xvid格式<br />
<br />
<br />
<br />
Xvid编码格式是由一些精通视频编码的程序员（包括原DivX 3.11的开发者）设计开发出来的，它也是使用的MPEG4压缩算法。XviD这种全新的编码平台，实际上与DivX 5是属于同一技术核心，可解码几乎所有的DVDrip。这里需要解释一下DVDrip，DVDrip就是指的经过DivX技术压缩至原来DVD文件大小的1/10左右的媒体文件，其核心的技术主要分成三部分：用Mpeg4来进行视频压缩，用MP3或AC-3等压缩音频，同时结合字幕播放软件来外挂字幕。所以一般来说，你只要安装了Xvid解码器，你的机器就能播放所有的DivX媒体文件。目前用Xvid技术编码的文件大多以avi为扩展名。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
8 MPEG-4标准(ISO,1999)<br />
<br />
<br />
<br />
MPEG-4初衷是针对视频会议、可视电话的超低比特率编码的。但随着芯片性价比的提高使得基于软件平台的压缩编码具有实用的可能，且人们在对视频信息的应用需求从播放型逐渐转到基于内容的访问和操作型，所以它制定的新目标为支持多媒体应用（侧重于对多媒体信息内容的访问），可根据应用要求配置解码器。<br />
<br />
<br />
<br />
MPEG-4为了支持高效压缩、基于内容交互和基于内容分级扩展，引入了AVO(Audio/Video Object)的概念实现基于内容的表示方法。换句话说它就是围绕AV对象的编码、存储、传输和组合而制定的，它是第一个使用户在接收端对画面进行操作和交互访问的编码标准。<br />
<br />
<br />
<br />
MPEG-4提供自然和合成的音频、视频以及图形的基于对象的编码工具，它为多媒体数据压缩提供了一个更为广阔的平台，更注重于定义一种格式和框架，而不是具体的算法，这样可以建立一个更自由的通信和研发环境，可以在系统中加入许多新的算法，为使用计算机软件实现编码和解码提供更大的方便。它还可以将各种各样的多媒体技术充分运用在编码中，除包括压缩本身的一些工具、算法外，还包括图像分析和合成、计算机视觉、计算机图形学、虚拟现实和语音合成技术。但是由于&#8220;基于对象的编码&#8221;尚有技术障碍，在技术专利保护问题上迟迟难以找到有效的收费形式，因此该标准目前仍然没有得到普遍应用。</pre>
</span>
<img src ="http://www.blogjava.net/parable-myth/aggbug/327533.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-07-30 10:16 <a href="http://www.blogjava.net/parable-myth/archive/2010/07/30/327533.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在 Delphi7.0下安装DSPack</title><link>http://www.blogjava.net/parable-myth/archive/2010/07/27/327183.html</link><dc:creator>无声</dc:creator><author>无声</author><pubDate>Tue, 27 Jul 2010 00:57:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/archive/2010/07/27/327183.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/327183.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/archive/2010/07/27/327183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/327183.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/327183.html</trackback:ping><description><![CDATA[<p><strong>一、废话几句</strong></p>
<p>从去年年底起，有幸也转到了DirectShow方面开发。<br />
在论坛中也可以为一些初学者解答一些初级问题了</p>
<p>见论坛中有人分不清DirectShow为何物，在这，说明一下：<br />
DirectShow是DirectX中的一员。<br />
Dspack是
Delphi用于做DirectShow开发的一套(免费)控件。下载地址：<a href="http://www.progdigy.com/" target="_blank">http://www.progdigy.com/</a></p>
<p>如果是Win2k, 安装之前，必须先安装DirectX9.0(DSPack2.3.4默认支持DirectX9.0)。<br />
<br />
<strong>二、
在Delphi7.0下安装DSPack</strong></p>
<p>（又是废话，原本在DSPack控件中说明的很清楚了，就在这略翻译一下吧）<br />
</p>
<h3>Delphi 5,6 &amp; 7</h3>
<p>1 - Add this paths to your search directory: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;(DSPackDir)\src\Directx9 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - (DSPackDir)\src\DSPack <br />
译：添加查
询路径，否则在编译时发生找不到相关.dcu文件错误。操作：Delphi(菜单) Tools-&gt;Envioronment
Options-&gt;Library. 在Library Path处添加。</p>
<p>2 -&nbsp;Compile DirectX 9 Package (DirectX9_Dx.dpk)&nbsp;from the "packages"
directtory.<br />
译：编译DirectX9_Dx.dpr(x为Delphi版本号)，这个包只要编译就可以了。</p>
<p>3 - Compile DSPack Package (DSPack_Dx.dpk) from the "packages"
directory.<br />
译：编译DSPack_Dx.dpr(x为Delphi版本号)，这个包只要编译就可以了。</p>
<p>4- Install&nbsp;Design Package (DSPackDesign_Dx.dpk) from the "packages"
directory.<br />
译：编译并安装DSPackDesign_Dx.dpk(x为Delphi版本号)。</p>
到这里，安装已完成。在Delphi控件面板上就可以看到DSPack控件了
<img src ="http://www.blogjava.net/parable-myth/aggbug/327183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">无声</a> 2010-07-27 08:57 <a href="http://www.blogjava.net/parable-myth/archive/2010/07/27/327183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>