2009年7月16日星期四

终于又可以上blogger了

我的tor,呵呵,听好用的。。。 继续记录我的生活。。。

2009年5月19日星期二

DIV+CSS网页布局常用的方法与技巧

DIV+CSS网页布局常用的方法与技巧


CSS布局常用的方法

  float:none|left|right
  取值:
  none:默认值。对象不飘浮
  left:文本流向对象的右边
  right:文本流向对象的左边

  它是怎样工作的,看个一行两列的例子

  xhtml代码:
  Example Source Code

  <div id="wrap">
  <div id="column1">这里是第一列</div>
  <div id="column2">这里是第二列</div>
  <div class="clear"></div> /*这是违背web标准意图的,只是想说明在它下面的元素需要清除浮动*/
  </div>

  CSS代码:
  Example Source Code

  #wrap{width:100;height:auto;}
  #column1{float:left;width:40;}
  #column2{float:right;width:60;}
  .clear{clear:both;}


  position:static|absolute|fixed|relative

  取值:
  static:�默认值。无特殊定位,对象遵循HTML定位规则
  absolute:�将对象从文档流中拖出,使用left,right,top,bottom等属性相对于其最接近的一个最有定位设置的父对象进行绝对定位。如果不存在这样的父对象,则依据body对象。而其层叠通过z-index属性定义
  fixed:�未支持。对象定位遵从绝对(absolute)方式。但是要遵守一些规范
  relative:�对象不可层叠,但将依据left,right,top,bottom等属性在正常文档流中偏移位置

  它来实现一行两列的例子

  xhtml代码:
  Example Source Code

  <div id="wrap">
  <div id="column1">这里是第一列</div>
  <div id="column2">这里是第二列</div>
  </div>

  CSS代码:
  Example Source Code [www.52css.com]
  #wrap{position:relative;/*相对定位*/width:770px;}
  #column1{position:absolute;top:0;left:0;width:300px;}
  #column2{position:absolute;top:0;right:0;width:470px;}

  他们的区别在哪?

  显然,float是相对定位的,会随着浏览器的大小和分辨率的变化而改变,而position就不行了,所以一般情况下还是float布局!

CSS常用布局实例

  单行一列
  Example Source Code

  body{margin:0px;padding:0px;text-align:center;}
  #content{margin-left:auto;margin-right:auto;width:400px;}

  两行一列
  Example Source Code

  body{margin:0px;padding:0px;text-align:center;}
  #content-top{margin-left:auto;margin-right:auto;width:400px;}
  #content-end{margin-left:auto;margin-right:auto;width:400px;}

  三行一列
  Example Source Code

  body{margin:0px;padding:0px;text-align:center;}
  #content-top{margin-left:auto;margin-right:auto;width:400px;width:370px;}
  #content-mid{margin-left:auto;margin-right:auto;width:400px;}
  #content-end{margin-left:auto;margin-right:auto;width:400px;}

  单行两列
  Example Source Code

  #bodycenter{width:700px;margin-right:auto;margin-left:auto;overflow:auto;}
  #bodycenter#dv1{float:left;width:280px;}
  #bodycenter#dv2{float:right;width:420px;}

  两行两列
  Example Source Code

  #header{width:700px;margin-right:auto;margin-left:auto;overflow:auto;}
  #bodycenter{width:700px;margin-right:auto;margin-left:auto;overflow:auto;}
  #bodycenter#dv1{float:left;width:280px;}
  #bodycenter#dv2{float:right;width:420px;}

  三行两列
  Example Source Code

  #header{width:700px;margin-right:auto;margin-left:auto;}
  #bodycenter{width:700px;margin-right:auto;margin-left:auto;}
  #bodycenter#dv1{float:left;width:280px;}
  #bodycenter#dv2{float:right;width:420px;}
  #footer{width:700px;margin-right:auto;margin-left:auto;overflow:auto;clear:both;}

  单行三列
  绝对定位

  Example Source Code

  #left{position:absolute;top:0px;left:0px;width:120px;}
  #middle{margin:0px190px0px190px;}
  #right{position:absolute;top:0px;right:0px;width:120px;}

  float定位一
  xhtml代码:
  Example Source Code

  <div id="wrap">
  <div id="column">
  <div id="column1">这里是第一列</div>
  <div id="column2">这里是第二列</div>
  <div class="clear"></div>/*用法web标准不建议,但是记住下面元素需要清除浮动*/
  </div>
  <divid="column3">这里是第三列</div>
  <divclass="clear"></div>/*用法web标准不建议,但是记住下面元素需要清除浮动*/
  </div>


  CSS代码:
  Example Source Code

  #wrap{width:100;height:auto;}
  #column{float:left;width:60;}
  #column1{float:left;width:30;}
  #column2{float:right;width:30;}
  #column3{float:right;width:40;}
  .clear{clear:both;}

  float定位二

  xhtml代码
  Example Source Code

  <div id="center"class="column">
  <h1>Thisisthemaincontent.</h1>
  </div>
  <div id="left"class="column">
  <h2>Thisistheleftsidebar.</h2>
  </div>
  <div id="right"class="column">
  <h2>Thisistherightsidebar.</h2>
  </div>

  CSS代码:
  Example Source Code

  body{
  margin:0;
  padding-left:200px;/*LCfullwidth*/
  padding-right:190px;/*RCfullwidth CCpadding*/
  min-width:200px;/*LCfullwidth CCpadding*/
  }
  .column{
  position:relative;
  float:left;
  }
  #center{
  width:100;
  }
  #left{
  width:200px;/*LCwidth*/
  right:200px;/*LCfullwidth*/
  margin-left:-100;
  }
  #right{
  width:190px;/*RCwidth*/
  margin-right:-100;
  }
--
道不远人,人自远。

设计时如何把握网页布局

设计时如何把握网页布局

最开始,网页呈现在你面前的时侯,它就好像一张白纸, 它需要你任意挥洒你的设计才思。在开始的时侯,你需要明白,虽然你能控制一切你所能控制的东西,但假如你知道什么是一种约定俗成的标准或者说大多数访问者 的浏览习惯,那么你可以在此基础上加上自己的东西。你当然也可以创造出自己的设计方案,但如果你是初学者,那么最好明白网页布局的基本概念。

1.页面尺寸

由于页面尺寸和显示器大小及分辨率有关系,网页的局限性就在于你无法突破显示器的范围,而且 因为浏览器也将占去不少空间,留下给你的页面范围变得越来越小。一般分辨率在800x600的情况下,页面的显示尺寸为:780x428个象素;分辨率在 640x480的情况下,页面的显示尺寸为:620X311个象素;分辨率在1024X768的情况下,页面的显示尺寸为:1007x600。从以上数据 可以看出,分辨率越高页面尺寸越大。

浏览器的工具栏也是影响页面尺寸的原因。一般目前的浏览器的工具栏都可以取消或者增加,那么当你显示全部的工具栏时,和关闭全部工具栏时,页面的尺寸是不一样的。

在网页设计过程中,向下拖动页面是惟一给网页增加更多内容(尺寸)的方法。但我想提醒大家除非你能肯定站点的内容能吸引大家拖动,否则不要让访问者拖动页面超过三屏。如果需要在同一页面显示超过三屏的内容,那么你最好能在上面做上页面内部连接,方便访问者浏览。

2.整体造型

什么是造型,造型就是创造出来的物体形象。这里是指页面的整体形象,这种形象应该是一个整体,图形与文本的接合应该是层叠有序。虽然,显示器和浏览器都是矩形,但对于页面的造型,你可以充分运用自然界中的其它形状以及它们的组合:矩形,圆形,三角形,菱形等。

对于不同的形状,它们所代表的意义是不同的。比如矩形代表着正式,规则,你注意到很多ICP 和政府网页都是以矩形为整体造型;圆形带表着柔和,团结,温暖,安全等,许多时尚站点喜欢以圆形为页面整体造型;三角形代表着力量,权威,牢固,侵略等, 许多大型的商业站点为显示它的权威性常以三角形为页面整体造型;菱形代表着平衡,协调,公平,一些交友站点常运用菱形作为页面整体造型。虽然不同形状带表 着不同意义,但目前的网页制作多数是接合多个图形加以设计,在这其中某种图形的构图比例可能占的多一些。

3.页头

页头又可称之为页眉,页眉的作用是定义页面的主题。比如一个站点的名字多数都显示在页眉里。这样,访问者能很快知道这个站点是什么内容。页头是整个页面设计的关键,它将牵涉到下面的更多设计和整个页面的协调性。页头常放置站点名字的图片和公司标志以及旗帜广告。

4.文本

文本在页面中出现都数以行或者块(段落)出现,它们的摆放位置决定者整个页面布局的可视性。在过去因为页面制作技术的局限,文本放置的位置的灵活性非常小,而随着DHTML的兴起,文本已经可以按照自己的要求放置到页面的任何位置。

5.页脚

页脚和页头相呼应。页头是放置站点主题的地方,而页脚是放置制作者或者公司信息的地方。你能看到,许多制作信息都是放置在页脚的。

6.图片

图片和文本是网页的两大构成元素,却一不可。如何处理好图片和文本的位置成了整个页面布局的关键。而你的布局思维也将体现在这里。

7.多媒体

除了文本和图片,还有声音,动画,视频等等其它媒体。虽然它们不是经常能被利用到,但随着动态网页的兴起,它们在网页布局上也将变得更重要。



--
道不远人,人自远。

2009年5月14日星期四

centos 感觉不错~

晚上刻碟安装了centos5.3,用起来感觉真的不错哈!哈哈~ 输入法有点弱。其他的开发环境的配置暂时没去动他,我想不会太难的!明天去买书学习学习下!对自己投资吧!

--
道不远人,人自远。

2009年5月13日星期三

几种主流语言的泛型比较

几种主流语言的泛型比较
    第一种支持泛型的语言是ADA(一种Pascal语言的后代,差不多是军方的专用语言).而把泛型发扬光大的的是C++(主要是借助泛型实现的模板).
    作为一种提高代码重用的技术,泛型被越来越多的语言所支持.
    java,C#,Delphi都开始先后支持了泛型技术.我就在这里比较和评论一下C++,java,C#,Delphi几种泛型技术的特点.
   
                  实现时机 是否会生成参考类    效率       约束                     兼容性           泛型运行时信息            
    C++            编译时         会              高       基本算没有                  好               基本算没有
                                                     
    Java           编译时         不会            高       有                               好                 很弱
   
   
    C#             运行时         不会           一般     有                              一般                强
   
   
    Delphi         编译时         会              高       有                                好                  强
   
先从实现的时机是否生成参考类来说.
C++主要是通过源代码替换机制来实现泛型的.也就是说C++的泛型和宏差不多. 也就是说会为每个泛型实例生成参考类.
Java主要是通过编译器把泛型类全部变成object来实现的.而泛型类的方法是编译通过打包等技术进行类型转换的.例如List<T>实际上永远都是List<object>,不会生成新的参考类.
C#则主要是通过在虚拟机中加入泛型技术来达到对泛型的支持的.List<T>在虚拟机中只是List<T>.不会生成参考类. 只有在JIT编译的时候才会生成参考类的机器代码.当然T的类型不一样具体在虚拟机中的实现也不一样.当T是值类型的时候会生成参考类.但我们这里主要讨 论大部分情况,.NET中多数情况下用引用类型的时候多得多.
Delphi在编译角度讲则更像C++,是通过代码替换机制生成参考类来实现泛型的.但Delphi的类型限制更严格.没有指定类型的约束的时候是不允许使用特定的方法或者操作符等的.具体在后面的约束中讲.  


效率方面
C++的效率就高一些.编译期间生成原生代码效率和正常手写代码一样高.
java的效率也比较高.生成的代码和手写代码几乎也是一样的.但打包拆包的类型转换会影响一点效率.
C#编译速度就快一些.但执行的时候要JIT编译器来处理泛型.会在一定程度上影响执行效率.
Delphi和C++相似.效率也是很高的.  

约束
C++的模板约束能力比较差.相当于没有.主要是通过代码替换.替换后的代码能便通过就通过了.通不过就报编译错误.不过未来的C++0X标准加入了模板约束.
Java通过编译器保证泛型的约束.
C#通过运行时检查来保证约束.
Delphi通过编译器来保证泛型约束.

兼容性.
C++没有虚拟机,原生代码基本不存在兼容性问题.
java是通过编译器把所有类型都换成object.虚拟机都不用改,和旧的虚拟机完全兼容.兼容性非常好.
C#因为是要虚拟机支持的,所以再旧的.NET Frame虚拟机上不能执行新的泛型代码.
Delphi和C++类似,都是原生代码.所以基本不存在兼容问题.

泛型运行时信息.
C++本身运行时信息就弱的可怜.加之泛型利用代码替换的技术实现,所以基本不具有泛型技术的运行时信息.
Java虽然通过把所有的类型都替换成object实现了良好的兼容性,也有泛型的约束,但是却带来了无法获取运行时信息的难题.因为在Java虚拟机看来都是object,没有分别.
C#虽然通过虚拟机技术支持泛型带来兼容性不好的问题.但是运行时信息却及其强.
Delphi虽然实现技术和C++类似,因为有泛型约束,并且不是象java那样靠虚拟机执行无法区分object.所以Delphi的泛型对运行时信息一点都没有影响.



--
道不远人,人自远。

2009年5月12日星期二

OpenCms 启动指导

OpenCms 启动指导

1. 启动MySQL 服务进程。
2. tomcat/bin/找到startup.bat, 双击该命令启动Tomcat 服务。
3. 手工启动Apache 服务(如果您安装了IIS之类的)。
4. 访问URL:http://localhost,进入默认站点的首页。
5. 访问URL:http://localhost/system/login/,进入工作区的登录页面。
6. 在登录页面输入用户名Admin 和密码admin(密码第一个字符小写),进入工作区。

--
道不远人,人自远。

集成Apache、Tomcat 和OpenCms 的意义

1) OpenCms 的所有静态资源(如图片或二进制文件)将有Apache 管理并对外提供服务,提
高了站点的整体性能。

2) OpenCms 中的动态资源将由Tomcat 管理,使Tomcat 从处理静态资源中解放出来。

3)可以去掉地址中的两个opencms 部分。

--
道不远人,人自远。

2009年5月10日星期日

正则表达式语言元素(9)

下表列出了用于修改正则表达式的子表达式。

构造 定义

(? imnsx - imnsx )

对诸如不区分大小写这样的选项进行设置或禁用以使其在模式中间打开或关闭。有关特定选项的信息,请参见正则表达式选项。在封闭组结束之前,选项更改将一直有效。请参见有关分组构造(?imnsx-imnsx: ) 的信息,它是一个更为巧妙的形式。

(?# )

插入到正则表达式内部的内联注释。该注释在第一个右括号字符处终止。

# [至行尾]

X 模式注释。该注释以非转义的 # 开头,并继续到行的结尾。(请注意,必须激活 x 选项或 RegexOptions.IgnorePatternWhitespace 枚举选项才能识别此类注释。)



--
道不远人,人自远。

正则表达式语言元素(8)

替换构造

下表列出了用于修改正则表达式以允许进行二者之一/或匹配的特殊字符。

替换构造 定义

|

与以 |(竖线)字符分隔的术语中的任何一项匹配;例如, cat|dog|tiger。使用最左侧的成功匹配。

(?( 表达式 )yes|no)

如果表达式在此位置匹配,则与"yes"部分匹配;否则,与"no"部分匹配。"no"部分可省略。表达式可以是任何有效的子表达式,但它将变为零宽度断言,因此该语法等效于 (?(?=expression)yes|no)。请注意,如果表达式是命名组的名称或捕获组编号,则替换构造将解释为捕获测试(在本表的下一行对此进行了描述)。若要避免在这些情况下产生混淆,则可以显式拼出内部 (?=expression)

(?( name )yes|no)

如果命名捕获字符串有匹配,则与"yes"部分匹配;否则,与"no"部分匹配。"no"部分可省略。如果给定的名称不与此表达式中使用的捕获组的名称或编号对应,则替换构造将解释为表达式测试(在本表的上一行进行了描述)。



--
道不远人,人自远。

正则表达式语言元素(7)

下表列出了用于将后向引用修饰符添加到正则表达式中的可选参数。

后向引用构造 定义

\ 数字

后向引用。例如,(\w)\1 查找双写的单词字符。

\k<name>

命名后向引用。例如,(?<char>\w)\k<char> 查找双写的单词字符。表达式 (?<43>\w)\43 执行同样的操作。可以使用单引号替代尖括号,例如 \k'char'

请注意八进制转义代码和使用相同表示法的 \number 后向引用之间的多义性。有关正则表达式引擎如何解析多义性的详细信息,请参见反向引用



--
道不远人,人自远。

正则表达式语言元素(6)

分组构造描述了正则表达式的子表达式,通常用于捕获输入字符串的子字符串。下表描述了正则表达式分组构造。

分组构造 说明

( 子表达式 )

捕获匹配的子表达式(或非捕获组;有关更多信息,请参见正则表达式选项中的 ExplicitCapture 选项)。使用 () 的捕获基于左括号按顺序从 1 开始自动编号。捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的文本。

(?< name > 子表达式)

将匹配的子表达式捕获到一个组名称或编号名称中。用于 name 的字符串不得包含任何标点符号,并且不能以数字开头。可以使用单引号替代尖括号,例如 (?'name')

(?< name1 - name2 > 子表达式)

(平衡组定义。)删除先前定义的 name2 组的定义,并在 name1 组中存储先前定义的 name2 组和当前组之间的间隔。如果未定义 name2 组,则匹配将回溯。由于删除 name2 的最后一个定义会显示 name2 的先前定义,因此该构造允许将 name2 组的捕获堆栈用作计数器,用于跟踪嵌套构造(如括号)。在此构造中,name1 是可选的。可以使用单引号替代尖括号,例如 (?'name1-name2')

有关更多信息,请参见本主题中的示例

(?: 子表达式)

(非捕获组。)不捕获由子表达式匹配的子字符串。

(?imnsx-imnsx: 子表达式)

应用或禁用子表达式中指定的选项。例如,(?i-s: ) 将打开不区分大小写并禁用单行模式。有关更多信息,请参见正则表达式选项

(?= 子表达式)

(零宽度正预测先行断言。)仅当子表达式在此位置的右侧匹配时才继续匹配。例如,\w+(?=\d) 与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯。

(?! 子表达式)

(零宽度负预测先行断言。)仅当子表达式不在此位置的右侧匹配时才继续匹配。例如,\b(?!un)\w+\b 与不以 un 开头的单词匹配。

(?<= 子表达式)

(零宽度正回顾后发断言。)仅当子表达式在此位置的左侧匹配时才继续匹配。例如,(?<=19)99 与跟在 19 后面的 99 的实例匹配。此构造不会回溯。

(?<! 子表达式)

(零宽度负回顾后发断言。)仅当子表达式不在此位置的左侧匹配时才继续匹配。

(?> 子表达式)

(非回溯子表达式(也称为"贪婪"子表达式)。)该子表达式仅完全匹配一次,然后就不会逐段参与回溯了。(也就是说,该子表达式仅与可由该子表达式单独匹配的字符串匹配。)

默认情况下,如果匹配未成功,回溯会搜索其他可能的匹配。如果已知无法成功回溯,可以使用非回溯子表达式避免不必要的搜索,从而提高性能。

命名捕获基于左括号按从左到右的顺序依次编号(与非命名捕获类似),但在对所有非命名捕获进行计数之后才开始对命名捕获编号。例如,模式 ((?<One>abc)/d+)?(?<Two>xyz)(.*) 按编号和名称产生下列捕获组。(编号为 0 的第一个捕获总是指整个模式)。

编号 名称 模式

0

0(默认名称)

((?<One>abc)/d+)?(?<Two>xyz)(.*)

1

1(默认名称)

((?<One>abc)/d+)

2

2(默认名称)

(.*)

3

1

(?<One>abc)

4

2

(?<Two>xyz)

平衡组定义示例


下 面的代码示例演示使用平衡组定义匹配输入字符串中的左右尖括号 (<>)。在该示例中,像使用堆栈那样使用 Open 组和 Close 组的捕获集合来跟踪尖括号配对:将所捕获的各左尖括号放入 Open 组的捕获集合中;将所捕获的各右尖括号放入 Close 组的捕获集合中;平衡组定义确保每个左尖括号均有一个匹配的右尖括号。

Visual Basic
' This code example demonstrates using the balancing group definition feature of 
' regular expressions to match balanced left angle bracket (<) and right angle
' bracket (>) characters in a string.

Imports System
Imports System.Text.RegularExpressions

Class Sample
Public Shared Sub Main()
'
' The following expression matches all balanced left and right angle brackets(<>).
' The expression:
' 1) Matches and discards zero or more non-angle bracket characters.
' 2) Matches zero or more of:
' 2a) One or more of:
' 2a1) A group named "Open" that matches a left angle bracket, followed by zero
' or more non-angle bracket characters.
' "Open" essentially counts the number of left angle brackets.
' 2b) One or more of:
' 2b1) A balancing group named "Close" that matches a right angle bracket,
' followed by zero or more non-angle bracket characters.
' "Close" essentially counts the number of right angle brackets.
' 3) If the "Open" group contains an unaccounted for left angle bracket, the
' entire regular expression fails.
'
Dim pattern As String = "^[^<>]*" & _
"(" + "((?'Open'<)[^<>]*)+" & _
"((?'Close-Open'>)[^<>]*)+" + ")*" & _
"(?(Open)(?!))$"
Dim input As String = "<abc><mno<xyz>>"
'
Dim m As Match = Regex.Match(input, pattern)
If m.Success = True Then
Console.WriteLine("Input: ""{0}"" " & vbCrLf & "Match: ""{1}""", _
input, m)
Else
Console.WriteLine("Match failed.")
End If
End Sub 'Main
End Class 'Sample

'This code example produces the following results:
'
'Input: "<abc><mno<xyz>>"
'Match: "<abc><mno<xyz>>"
'
// This code example demonstrates using the balancing group definition feature of 
// regular expressions to match balanced left angle bracket (<) and right angle
// bracket (>) characters in a string.

using System;
using System.Text.RegularExpressions;

class Sample
{
public static void Main()
{
/*
The following expression matches all balanced left and right angle brackets(<>).
The expression:
1) Matches and discards zero or more non-angle bracket characters.
2) Matches zero or more of:
2a) One or more of:
2a1) A group named "Open" that matches a left angle bracket, followed by zero
or more non-angle bracket characters.
"Open" essentially counts the number of left angle brackets.
2b) One or more of:
2b1) A balancing group named "Close" that matches a right angle bracket,
followed by zero or more non-angle bracket characters.
"Close" essentially counts the number of right angle brackets.
3) If the "Open" group contains an unaccounted for left angle bracket, the
entire regular expression fails.
*/

string pattern = "^[^<>]*" +
"(" +
"((?'Open'<)[^<>]*)+" +
"((?'Close-Open'>)[^<>]*)+" +
")*" +
"(?(Open)(?!))$";
string input = "<abc><mno<xyz>>";
//
Match m = Regex.Match(input, pattern);
if (m.Success == true)
Console.WriteLine("Input: \"{0}\" \nMatch: \"{1}\"", input, m);
else
Console.WriteLine("Match failed.");
}
}

/*
This code example produces the following results:

Input: "<abc><mno<xyz>>"
Match: "<abc><mno<xyz>>"

*/



--
道不远人,人自远。

正则表达式语言元素(5)

限定符将可选数量的数据添加到正则表达式。限定符表达式应用于紧挨着它前面的字符、组或字符类。.NET Framework 正则表达式支持最小匹配 (lazy) 限定符。

下表描述了影响匹配的元字符。数量 nm 是整数常数。

限定符 说明

*

指定零个或更多个匹配;例如 \w*(abc)*。等效于 {0,}

+

指定一个或多个匹配;例如 \w+(abc)+。等效于 {1,}

?

指定零个或一个匹配;例如 \w?(abc)?。等效于 {0,1}

{ n }

指定恰好 n 个匹配;例如 (pizza){2}

{ n ,}

指定至少 n 个匹配;例如 (abc){2,}

{ n , m }

指定至少 n 个但不多于 m 个匹配。

*?

指定尽可能少地使用重复的第一个匹配(等效于 lazy *)。

+?

指定尽可能少地使用重复但至少使用一次(等效于 lazy +)。

??

指定使用零次重复(如有可能)或一次重复 (lazy ?)。

{ n }?

等效于 {n} (lazy {n})。

{ n ,}?

指定尽可能少地使用重复但至少使用 n 次 (lazy {n,})。

{ n , m }?

指定介于 n 次和 m 次之间、尽可能少地使用重复 (lazy {n,m})。



--
道不远人,人自远。

正则表达式语言元素(4)

原子零宽度断言

下表中描述的元字符不会使引擎在字符串中前进或使用字符。它们只是根据字符串中的当前位置使匹配成功或失败。例如,^ 指定当前位置在行或字符串的开头。因此,正则表达式 ^FTP 只会返回那些在行的开头出现的字符串"FTP"的匹配项。

断言 说明

^

指定匹配必须出现在字符串的开头或行的开头。有关更多信息,请参见正则表达式选项中的 Multiline 选项。

$

指定匹配必须出现在以下位置:字符串结尾、字符串结尾处的 \n 之前或行的结尾。有关更多信息,请参见正则表达式选项中的 Multiline 选项。

\A

指定匹配必须出现在字符串的开头(忽略 Multiline 选项)。

\Z

指定匹配必须出现在字符串的结尾或字符串结尾处的 \n 之前(忽略 Multiline 选项)。

\z

指定匹配必须出现在字符串的结尾(忽略 Multiline 选项)。

\G

指定匹配必须出现在上一个匹配结束的地方。与 Match.NextMatch() 一起使用时,此断言确保所有匹配都是连续的。

\b

指定匹配必须出现在 \w(字母数字)和 \W(非字母数字)字符之间的边界上。匹配必须出现在单词边界上(即出现在由任何非字母数字字符分隔的单词中第一个或最后一个字符上)。匹配也可以出现在字符串结尾处的单词边界上。

\B

指定匹配不得出现在 \b 边界上。



--
道不远人,人自远。

正则表达式语言元素(3)

可以使用影响匹配行为的选项修改正则表达式模式。可以通过下列两种基本方法之一设置正则表达式选项:可以在 Regex (pattern, options) 构造函数中的 options 参数中指定,其中 optionsRegexOptions 枚举值的按位"或"组合;也可以使用内联 (?imnsx-imnsx:) 分组构造或 (?imnsx-imnsx) 其他构造在正则表达式模式内设置它们。

在内联选项构造中,一个选项或一组选项前面的减号 (-) 用于关闭这些选项。例如,内联构造 (?ix-ms) 将打开 IgnoreCaseIgnorePatternWhiteSpace 选项而关闭 MultilineSingleline 选项。默认情况下,关闭所有正则表达式选项。

下表列出了 RegexOptions 枚举的成员以及等效的内联选项字符。请注意,选项 RightToLeftCompiled 只适用于表达式整体而不允许内联。(它们只能在 Regex 构造函数的 options 参数中指定。)选项 NoneECMAScript 不允许内联。

RegexOption 成员 内联字符 说明

None

N/A

指定不设置任何选项。

IgnoreCase

i

指定不区分大小写的匹配。

Multiline

m

指定多行模式。更改 ^$ 的含义,以使它们分别与任何行的开头和结尾匹配,而不只是与整个字符串的开头和结尾匹配。

ExplicitCapture

n

指定唯一有效的捕获是显式命名或编号的 (?<name>…) 形式的组。这允许圆括号充当非捕获组,从而避免了由 (?:…) 导致的语法上的笨拙。

Compiled

N/A

指定正则表达式将被编译为程序集。生成该正则表达式的 Microsoft 中间语言 (MSIL) 代码;以较长的启动时间为代价,得到更快的执行速度。

Singleline

s

指定单行模式。更改句点字符 (.) 的含义,以使它与每个字符(而不是除 \n 之外的所有字符)匹配。

IgnorePatternWhitespace

x

指定从模式中排除非转义空白并启用数字符号 (#) 后面的注释。(有关转义空白字符的列表,请参见字符转义。)请注意,空白永远不会从字符类中消除。

RightToLeft

N/A

指 定搜索是从右向左而不是从左向右进行的。具有此选项的正则表达式将移动到起始位置的左边而不是右边。(因此,起始位置应指定为字符串的结尾而不是开头。) 为了避免构造具有无限循环的正则表达式的可能性,此选项不能在中流指定。但是,(?<) 回顾后发构造提供了可用作子表达式的类似替代物。

RightToLeft 只更改搜索方向。它不会反转所搜索的子字符串。预测先行回顾后发断言不改变:预测先行向右搜索;回顾后发向左搜索。

ECMAScript

N/A

指定已为表达式启用了符合 ECMAScript 的行为。此选项仅可与 IgnoreCaseMultiline 标志一起使用。将 ECMAScript 同任何其他标志一起使用将导致异常。

CultureInvariant

N/A

指定忽略语言中的区域性差异。有关更多信息,请参见在 RegularExpressions 命名空间中执行不区分区域性的操作



--
道不远人,人自远。

正则表达式语言元素(2)

只在替换模式中允许替换。对于正则表达式中的类似功能,使用后向引用(如 \1)。有关后向引用的详细信息,请参见反向引用和后向引用构造。

字符转义和替换是在替换模式中识别的唯一的特殊构造。下面几部分描述的所有语法构造只允许出现在正则表达式中;替换模式中不识别它们。例如,替换模式 a*${txt}b 会插入字符串"a*",该字符串后跟按 txt 捕获组匹配的子字符串,该子字符串后跟字符串"b"(如果有)。在替换模式中,* 字符不会识别为元字符。与此类似,在正则表达式匹配模式中不识别 $ 模式。在正则表达式中,$ 指定字符串的结尾。

下表显示如何定义命名并编号的替换模式。

字符 说明

$ 数字

替换按组号 number(十进制)匹配的最后一个子字符串。

${ name }

替换由 (?<name> ) 组匹配的最后一个子字符串。

$$

替换单个"$"字符。

$&

替换完全匹配本身的一个副本。

$`

替换匹配前的输入字符串的所有文本。

$'

替换匹配后的输入字符串的所有文本。

$+

替换最后捕获的组。

$_

替换整个输入字符串。



--
道不远人,人自远。

正则表达式语言元素(1)

.NET Framework SDK 提供了大量的正则表达式工具,使您能够高效地创建、比较和修改字符串,以及迅速地分析大量文本和数据以搜索、移除和替换文本模式。

大多数重要的正则表达式语言运算符都是非转义的单个字符。转义符 \(单个反斜杠)通知正则表达式分析器反斜杠后面的字符不是运算符。例如,分析器将星号 (*) 视为重复限定符,而将后跟星号的反斜杠 (\*) 视为 Unicode 字符 002A。

下表中列出的字符转义在正则表达式和替换模式中都会被识别。

转义符 说明

一般字符

除 .$ ^ { [ ( | ) * + ? \ 外,其他字符与自身匹配。

\a

与响铃(警报)\u0007 匹配。

\b

如果在 [] 字符类中,则与退格符 \u0008 匹配;如果不是这种情况,请参见本表后面的“注意”部分。

\t

与 Tab 符 \u0009 匹配。

\r

与回车符 \u000D 匹配。

\v

与垂直 Tab 符 \u000B 匹配。

\f

与换页符 \u000C 匹配。

\n

与换行符 \u000A 匹配。

\e

与 Esc 符 \u001B 匹配。

\040

将 ASCII 字符匹配为八进制数(最多三位);如果没有前导零的数字只有一位数或者与捕获组号相对应,则该数字为后向引用。(有关更多信息,请参见反向引用。)例如,字符 \040 表示空格。

\x20

使用十六进制表示形式(恰好两位)与 ASCII 字符匹配。

\cC

与 ASCII 控制字符匹配;例如,\cC 为 Ctrl-C。

\u0020

使用十六进制表示形式(恰好四位)与 Unicode 字符匹配。

Note注意

.NET Framework 不支持用于指定 Unicode 的 Perl 5 字符转义。Perl 5 字符转义的格式是 \x{####…},其中“####…”是十六进制数字的序列。应改为使用本行中描述的 .NET Framework 字符转义。

\

在后面带有不识别为转义符的字符时,与该字符匹配。例如,\*\x2A 相同。

Note注意

转义字符 \b 是一个特例。在正则表达式中,\b 表示单词边界(在 \w\W 之间),不过,在 [] 字符类中,\b 表示退格符。在替换模式中,\b 始终表示退格符。


--
道不远人,人自远。

代码生成工具CodeSmith与SmartCode学习

   近段时间学习了代码生成工具,一是CodeSmith,二是SmartCode。
总的来说个人比较倾向于SmartCode,因为其是开源的,并且附带了很多的可以直接使用的模板,也有视频演示视频。学习起来非常的轻松!而CodeSmith是商业的,虽然有破解的,但是就是用不太习惯,codeSmith是基于asp.net的语法编写template的,习惯了codebind模式后,现在直接写<%%>感觉不是太习惯。SmartCode直接采用lib的方式编写模板,使用的时候添加assembly就可以了,对习惯了编写后台的人比较适合点。
  使用代码生成器可以提高效率,一般是对这套代码模式非常清楚又不想重复的做体力活,那么他们是你的选择。同时呢,你可以看他们的模板特别是smartcode的,可以学习到一些设计的思想哈。这些都算是经验的总结吧!

--
道不远人,人自远。

2009年5月9日星期六

必须勤奋些

最近把hibernate文档又看了一遍,果然比第一次看的时候理解更深些,还看了教程,总算有个入门吧,暂时告一段落吧!
想看看web service 和 spring 相关的东西。加油!
现在白天搞 .net ,晚上搞 java 。 有点不连续。 自己得抓紧,得勤奋些,不聪明的人只能这样了。
坚持,坚持,保持耐心,拥有希望!

Hibernate简要笔记

1.
mysql engine:innoDb 支持事务, 其他的有些不支持事务,在Hibernate中默认事务是不开启的和jdbc

相反,所以如果数据不支持引擎,对hibernate来说插入数据都是有效的。

2.
save 与 persist。 没开事务的时候 persist不会插入(insert)数据。

3.
update,没记录时会抛异常

4.
transient:数据库里没相应记录与之对应,new出来的,没id值
persistent:数据库里有相应记录与之对应,并与session关联,有id值
detached:数据库里没相应记录与之对应,但是没有session与之关联,有id值

看图。

5.
hibernate查询的方式:

1)HQL

2)Criteria

6.
java实体类或属性名与数据库关键字冲突问题。
1)改表名
2)表名加反引号 ` , 字段名
3)表名加 [] 括起来 , 我自己摸索出来的。

7.
hql 命名参数, 把 name=? 代替 为 name=:name  ,这样不需要 依赖于顺序了

8.
many to one: 基于对象建模,对象

one to many: set<对象> 使用泛型,配置的 one-to-many中需要配置class属性

one to one :foreign,constrained约束

many to many: 转成 2个 one to many的,连接表。性能问题。

component: 组件

9.
集合:PersitentSet。

10.
cascade :用来说明当对主对象进行某种操作是否对其关联的从对象也做类似的操作
        none、all、save-update、delete、lock、refresh、evict、replicate、
        persist、merge、delete-orphan。一般不在 many to many,mang ot one中设置级联
    ,在one ot one 和 one to many 中设置。
       级联一般配置在 set list 等 中。
        在one的一端!!!
inverse :表示是是否放弃维护关联关系。one to many 维护关联关系就是更新外键,
        many to many 维护关联关系就是在中间表(关联表)增减记录

           在父对象的一端或者one的一端放弃 维护关联关系(true)。关系由多的一段维护。
           对象模型关联的设置。
           可以提升性能。

           在list 和 array中不能出现 invers属性。有序的集合必须维护关系。
           多的一端不能设置inverse属性。

11.
继承映射。三种策略,或者四种。

1)一张表一个继承树,效率高,增加子类需修改表结构,子表字段不能非空字段
    subclass。子类
    discriminator。鉴别器。
2)每个类一张表,一个父表,多个字表。
    joined - subclass 。table。 key 外键。
3) 1)2)混合使用,join
4)每个类都有一张独立表。

    union - subclass。
12.懒加载, 提高性能
1)
load 方法。 懒加载。 lazy,load。

asm,cglib,不能是final的 ,如果是的话,lazy 失效。

Hibrenate.initialize(Class claaz);
2)one to one ,lazy(主对象不会出现,从对象出现)
   a。lazy!=false,
   b。constrained = true // 从对象
   c。fetch = select
分多次查询,即在需要的时候查询,fetch如果为join的话,lazy就失效了。
访问的时候就查询。

相关的属性什么时候查询。

3)one to many ,many to mangy , lazy
  a。lazy!=false
  b。fetch = select

4)many to one。lazy 缺省是lazy的
  a。lazy!=false
  b。fetch = select

5)懒加载对象都是代理对象,getId,getClass不会触发懒加载,Initialize(proxy)方法

13.
Cache分析。。
1)session里有cache,session不关闭,2次同一个get。session生命周期比较短,起缓存作用比较小
   save update load CreateQuery(不行), 清理,clear(全部) evict(一条)。
   一级缓存没有限制。大数据量很容易内存溢出。
2)sessionFactory里也有,二级缓存,配置文件配置。

   cache.use_second_level_cache : true.
   cache.provider: class(HashTable,OSCache,Ehcache,TreeCache,SwarmCache)
   OsCache 配置文件。
 
  每一个类需要缓存的设置:
  cfg中: class cache, usage:read only ,  read write, nonstrict-read-write,

transactional。
  hbm中:Cache。命中率,session。clear()清除一级缓存

3)打开统计信息:
   generate_staticstics : true.

   或得统计信息:SessionFactory。getStastics()返回的是Statistics类里面有不少描述信息;

   清理   evict()
 
  CreateQuery :难以利用缓存。命中率低。

14.
分布式缓存,集群。,读取快,更新慢。

OScache支持。

中央缓存。更新快,读取慢,memcache

数据缓存的条件。
a。读取的次数大于修改的次数。
b。数据量不能太大
c。对数据有独享的控制权
d。可以容忍出现无效的数据


15.
事务相关。

JDBC事务一个数据库,JTA事务-分布式事务-跨数据库,JTA容器。

JNDI:类似注册表。

事务边界:事务开始,事务提交,事务回滚。

16.
opensessionInView
    页面渲染的时候,session能够打开
    Servlet Filter 里使用Session, getLocalSession
ThreadLocal 局部线程变量

要从SessionFactory中获得GetCucrrentSession的话需要配置
current_Session_context_class。否则会异常。
值为thread(ThreadLocal)或者jta(jta事务管理器)。


17.
乐观锁:hibernate用version和timestamp控制实现
悲观锁:数据库实现

18.
Session是非线程安全的。周期短,尽量晚的获取,尽量早的释放。他代表一个数据库连接。
SessionFactory是线程安全的。一个数据库对应一个SessionFactory,周期长。


19.
flush:一级缓存和数据库同步


20.

HQL:
查询多个对象,返回的是对象。要返回多个列,返回Object[]。


根据ID查询时,get、load查询和CreateQuery(不能利用缓存)的差别:性能~~


21.

N+1查询:iterator。
懒加载:fetch-》join,利用缓存。



detachedCriteria:离线查询,动态SQL。

22.
监听器。
拦截器与事件:Interceptor接口。

实现接口,
cfg,里配置even

推荐用 监听器。

23.
(1)使用sql,不用hql。
Query createSQLQuery(String).操作的是表,跟平时操作sql一样。

返回的是对象。

(2)使用Query节点,属性 name(可以放在class里面也可以放在外面,在里面的时候需要加上包的全路径

名),,即命名查询。把hql,放到hbm。xml文件里统一管理。
类似ibatis。

Query getNamedQuery(String name);

(3)
sql-query节点。里面使用的是sql。

24.
保存Domain对象,可以用Map代替。将对象转为xml。


25.
Best practice。

不适合的场景:
1)OLAP,一查询为主,相反适合OLTP
2)关系模型设计不合理的,
3)数据量巨大,性能要求苛刻。

1)细粒度设计持久类 component
2)id
3)每个持久类一个映射文件
4)映射文件作为资源加载
5)自然组件,覆盖hascode,equal
6)考虑把查询串发在hbm。xml配置文件里。
7)少用?多用变量名
8)不要自己管理jdbc 连接。
9)考虑使用自定义类型,UserType
10)性能瓶颈使用硬编码的jdbc实现
11)session flush 成本比较高,尽量不手动管理。交给hibernate
12)在三层架构中使用托管对象 detached object
13)在2层结构中,考虑使用长 持久上下文
14)不要把异常看成可恢复的,catch 回滚是,必须throw出来,让上层调用者知道。
15)对于关联有限考虑lazy fetching。
16)避免open session in view 的问题。
17)考虑把hibernate 代码从业务逻辑代码中抽象出来。
18)不要使用怪异的连接映射
19)偏爱双向关联。单项管理更难查询???

--自助者天助之--

--
道不远人,人自远。

2009年5月7日星期四

人体24小时状态热图

时间 身体状况 适宜的活动
1∶00 人体进入浅睡眠阶段,易醒,对痛觉特别敏感。 睡眠休息
2∶00 体内大部分器官处于一天中工作最慢的时刻。而肝脏却在紧张地工作,为人体排毒。
3∶00 全身处于休息状态,肌肉完全放松。
4∶00 血压最低,人体脑部供血最少。所以,此时老年人容易发生心脑血管意外。
5∶00 经历了一定时间的睡眠,人体得到了充分休息。此时起床,显得精神饱满。 起床(如果可以)
6∶00 血压开始升高,心跳也逐渐加快。 起床、锻炼、日计划
7∶00 体温开始上升,人体免疫力最强。 创造性的工作
8∶00 皮肤有毒物质排除殆尽,性激素含量最高。
9∶00 皮肤痛觉降低。此时是就医注射的好时机。 完成工作任务
10∶00 精力充沛,最适宜工作。
11∶00 精力最旺盛,人体不易感觉疲劳。
12∶00 经历了一个上午的工作,人体需要休息。 整理、总结
13∶00 此时胃液分泌最多,胃肠加紧工作,适宜进餐,人体稍感疲乏,需要短时间的休息。 午餐
14∶00 人体应激能力下降,全身反应迟钝。 午睡
15∶00 体温最高,工作能力开始恢复。 执行工作任务
16∶00 血糖升高,脸部最红。
17∶00 工作效率最高,肺部呼吸运动最活跃,适宜进行体育锻炼 体育锻炼
18∶00 人体痛觉再度降低。 休息
19∶00 血压略有升高。此时,人们情绪最不稳定。 晚餐
20∶00 记忆力最强,大脑反应异常迅速。 阅读、学习
21∶00 脑神经反应活跃,适宜学习和记忆。 个人爱好
22∶00 呼吸开始减慢,体温逐渐下降。
23∶00 机体功能处于休息状态,一天的疲劳开始缓解。 整理、总结,睡眠休息
24∶00 进入睡眠状态,充分恢复体能。 睡眠休息

外语!外语!

  外语!外语!我要重试学习的激情!今天又受打击了!555~~~


  计划!计划!一定要执行!


  耐心!耐心!保持信心!

  
  继续奋斗!继续找!

2009年5月6日星期三

Invist-.net O/R mapper - code generator(.net o/r 映射 代码生成器)

无意间在http://visualstudiogallery.com上看到了Vs 2008的一个插件 - Invist - http://www.invist.net/。
上有详细介绍和文档说明。首先下了软件,然后看了视频演示。再打开vs2008,操作了一遍感觉很爽哦~ 不到一瞬间,数据访问层最垃圾的事情基本都解决了哈! cool!!! 明天再仔细研究下,看看是否可以用与企业开发中,看看性能如何!!!

mark!

2009年4月25日星期六

hibernate3-双向关联-inverse属性

以下摘自:hibernate3.3文档:
inverse映射属性究竟表示什么呢?对于你和Java来说,一个双向关联仅仅是在两端简单地正确设置引用。然而,Hibernate并没有足够的信息去正确地执行INSERT和UPDATE语句(以避免违反数据库约束),所以它需要一些帮助来正确的处理双向关联。把关联的一端设置为inverse将告诉Hibernate忽略关联的这一端,把这端看成是另外一端的一个镜象(mirror)。这就是所需的全部信息,Hibernate利用这些信息来处理把一个有向导航模型转移到数据库schema时的所有问题。你只需要记住这个直观的规则:所有的双向关联需要有一端被设置为inverse。在一对多关联中它必须是代表多(many)的那端。而在多对多(many-to-many)关联中,你可以任意选取一端,因为两端之间并没有差别。

HSqlDb很好的东东

有了它在开发的使用不用太多的关心数据库的东西了,也就是说你开发的机器不用装什么数据库如oracle、ms server等了。特别在脆弱的笔记本上运行的时候!

2009年4月21日星期二

jetty6开发环境配置

白天工作忙于asp.net网站的事情的,晚上继续学习可爱的java。今晚的主题是jetty6开发环境的配置问题。大家知道jetty是类似tomcat的web服务器,不过jetty提供给我们的是几个jar文件,启动速度比tomcat快,主要用用与快速开发环境中。
首先下载了最新的jetty包,解压之,然后分别在eclipse3.4和myeclipse7.1中配置好了环境。在MyEclipse中配置比较简单,主要在Server Config 里配置好Jetty的路径 就好,这个和tomcat一样的。在Eclipse中,在一个具体java project中,首先需要添加必须的jar文件,为了方便我就全把jetty-home/lib下的包全加了,初次是使用jetty,先这样了。然后再run config里new 一个 java application 设置名字jetty6,设置Main cliass : org.mortbay.xml.XmlConfiguration。并勾上其下面第一个选项。然后再Agrement里设置好参数:etc/jetty.xml ,他表示Main class启动是需要的参数,etc/jetty.xml 是jetty启动的主要参数。里面可以配置默认端口等。再修改work directory 为jetty home 即可。点击run 即可启动jetty!
防止遗忘或者再次遇到类似问题,所以记录之!

jquery form 学习

总感觉自己学的不够,虽然只用jquery就能实现jquery form的功能,但是惰性指示我自己,使用简单的方法达到同样的目的 。今天 用 jquery form 做了个无刷新的分页的例子,并用到了网站中。我总在想我引入那么多js文件,只是为了那个一个功能到底值不值?文件还要下载啊,如果都写在页面里有太混。或者用成熟的技术是个保证并能提高开发的效率。这可能是最大的益处。

2009年4月17日星期五

jquery1.3 中文参考学以致用中。。。

jquery1.3 中文参考学以致用中。。。

好东西,自然大家都喜欢!

加油!

2009年4月16日星期四

2009年4月14日星期二

Freemarker基本语法学习

freemaker的基本语法:
<# ... > 中存放所有freemaker的内容,之外的内容全部原样输出。
<@ ... /> 是函数调用
两个定界符内的内容中,第一个符号表示指令或者函数名,其后的跟随参数。freemaker提供的控制包括如下:
<#if condition><#elseif condition><#else> 条件判断
<#list hash_or_seq as var> 遍历hash表或者collection(freemaker称作sequence)的成员
<#macro name param1 param2 ... ><#nested param> 宏,无返回参数
<#function name param1 param2><#return val> 函数,有返回参数
var?member_function(...) 用函数对var进行转换,freemaker称为build-ins。实际内部实现类似member_function(var, ...)
stringA[M .. N] 取子字符串,类似substring(stringA, M, N)
{key:value, key2:value2 ...} 直接定义一个hash表
[item0, item1, item2 ...] 直接定义一个序列
hash0[key0] 存取hash表中key对应的元素
seq0[5] 存取序列指定下标的元素
<@function1 param0 param1 ... /> 调用函数function1
<@macro0 param0 param1 ; nest_param0 nest_param1 ...> nest_body < /@macro> 调用宏,并处理宏的嵌套
<#assign var = value > 定义变量并初始化
<#local var = value> 在 macro 或者 function 中定义局部变量并初始化
<#global var = value > 定义全局变量并初始化
${var} 输出并替换为表达式的值
<#visit xmlnode> 调用macro匹配xmlnode本身及其子节点
<#recurse xmlnode> 调用macro匹配xmlnode的子节点

2009年4月9日星期四

Eclipse Project Reference用来做jar包集中管理

在je上看到了一片这样的文章。
http://www.javaeye.com/wiki/struts2/1321-struts2-development-environment-to-build
深有感触,故记之。

FreeMarker学习中。。。

先看了manual,在跑了跑example里的简单例子。。。


还没感觉到他的强大。具体实践中验证之。。。

深夜安静的时候听【古典曲集】让人亢奋

下面是曲目:
#EXTM3U
#EXTINF:0,01.柴可夫斯基-第一钢琴协奏曲:第一乐章.flac
01.柴可夫斯基-第一钢琴协奏曲:第一乐章.flac

#EXTINF:0,02.约翰.施特劳斯-闲聊波尔卡舞曲.flac
02.约翰.施特劳斯-闲聊波尔卡舞曲.flac

#EXTINF:0,03.威尔第-茶花女(选段):饮酒歌.flac
03.威尔第-茶花女(选段):饮酒歌.flac

#EXTINF:0,04.维瓦尔第-四季之春天.flac
04.维瓦尔第-四季之春天.flac

#EXTINF:0,05.门德尔松-仲夏夜之梦.结婚进行曲.flac
05.门德尔松-仲夏夜之梦.结婚进行曲.flac

#EXTINF:0,06.柴可夫斯基-天鹅湖(序曲).flac
06.柴可夫斯基-天鹅湖(序曲).flac

#EXTINF:0,07.莫扎特-四十号交响曲.flac
07.莫扎特-四十号交响曲.flac

#EXTINF:0,08.贝多芬-第九交响曲(合唱)欢乐颂.flac
08.贝多芬-第九交响曲(合唱)欢乐颂.flac

#EXTINF:0,09.罗西尼-威廉退尔序曲.flac
09.罗西尼-威廉退尔序曲.flac

#EXTINF:0,10.比才-第一卡门组曲.flac
10.比才-第一卡门组曲.flac

#EXTINF:0,11.柯夫-布兰之歌.flac
11.柯夫-布兰之歌.flac

#EXTINF:0,12.德沃夏克-自新大陆交响曲,第一乐章.flac
12.德沃夏克-自新大陆交响曲,第一乐章.flac

#EXTINF:0,13.贝多芬-悲怆钢琴奏鸣曲.flac
13.贝多芬-悲怆钢琴奏鸣曲.flac

#EXTINF:0,14.贝多芬-月光钢琴奏鸣曲.flac
14.贝多芬-月光钢琴奏鸣曲.flac

#EXTINF:0,15.约翰.施特劳斯-蓝色多瑙河.flac
15.约翰.施特劳斯-蓝色多瑙河.flac

#EXTINF:0,16.贝多芬-第五交响曲(命运).第一乐章.flac
16.贝多芬-第五交响曲(命运).第一乐章.flac

#EXTINF:0,17.拉威尔-波利舞曲.flac
17.拉威尔-波利舞曲.flac

#EXTINF:0,18.柴可夫斯基-1812.序曲.flac
18.柴可夫斯基-1812.序曲.flac

2009年4月4日星期六

Hibernate Tools3.2.4使用

安装了Eclipse Hibernate Tools的插件,对已经设计好的数据库来说,个人感觉从数据库生成hbm.xml,DAO,POJO等是比较合理的,个人也觉得这样比较合适。
费了点周折,认识了几个单词,搞定了mysql,sql server,oracle9i自动生成的问题。感觉生成的代码很傻的,感觉不太符合平时的要求,一般怎么改才合适呢?值得继续研究!另外,那些配置文件的含义,还是迷糊。。。
一周过去了,对hibernate的映像今天是最满意的,头几天看reference看的晕了。
实战中找感觉。。。
加油!!!

2009年4月3日星期五

Hibernate继续学习中

Hibernate继续学习中,我一定要把Hibernate驯服!!!
慢慢找到感觉!!!
加油!

mysql5修改root密码

在客户端命令行进入或者在path中设置了mysql路径。

1.
win + R
cmd
C:\> mysql -u root -p (旧密码)
mysql>use mysql
mysql> update user set password=password('新密码') where user='root';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 2 Changed: 0 Warnings: 0
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql>quit

2.
win + R
cmd

mysql -u root -p新密码

2009年4月1日星期三

Hibernate怎么看着那么迷糊

Hibernate怎么感觉那么难?那么一堆的配置,看着都晕头转向。。。 看hibernate reference 实在太累了。。。
俺该怎么学???

2009年3月30日星期一

Hibernate持久化一个pojo类的一般原则

1.实现一个默认的即无参数的构造器
2.提供一个标识属性
3.使用非final的类
4.为持久化字段声明访问器和是否可变的标志

2009年3月26日星期四

用Ibator生成的SalMap与spring集成时的问题

第一、我很傻不知道spring2.5与ibatis2.3集成时,不知道要加ibatis的jar包进去,导致一个异常半小时才觉悟解决好。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlMapClient' defined in file [E:\WorkSpace\ibator\dataAccessContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: com/ibatis/common/xml/NodeletException

我还debug了呢,以为发现了spring的bug,汗。。。。。

第二、用ibator生成的sqlmap,假设在namespace为account的情况下,下面所有的sql , select,insert,etc 的id 都会加上 account.****。 Junit4测试的时候报异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlMapClient' defined in file [E:\WorkSpace\ibator\dataAccessContext.xml]:
Invocation of init method failed; nested exception is org.springframework.core.NestedIOException:
Failed to parse config resource: file [E:\WorkSpace\ibator\sql-map-config.xml];
nested exception is com.ibatis.common.xml.NodeletException: Error parsing XML.
Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'.
Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.
Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/select'.
Cause: java.lang.RuntimeException: Could not find SQL statement to include with refid 'account.ibatorgenerated_Example_Where_Clause'

本以为Ibator是完全可以信赖的,看上去也没什么不对,AccountDaoImpl里面的也对应的很好,是不是ibatis里面那个地方可以设置呢?
在这里我就把namespace,account. 全部删掉,修改AccountDaoImpl。测试后全绿的!

JavaScript - Working with Database

After reading this coding, you will know the following facts.

1. How to connect the database in JavaScript
2. How to use the ADODB.Recordset in JavaScript

As I already put the details comments in coding, I hope you will find it useful.

You can download the sourcecode and MSAccess database from this link.

http://michaelsync.net/demo/JavaScriptDatabaseSrc.zip

引用:
http://michaelsync.net/2006/06/14/javascript-working-with-database

javeScript操作数据库代码片段

use the javascript to operate database (sql or access)

there are the code snippet:
var rsTopTen
var strInner
var strCntInner
var ConnectionString
rsTopTen = new ActiveXObject("ADODB.Recordset");

// Build the connection string
//
// ConnectionString Format below:
//ConnectionString = "DRIVER=SQL Server;SERVER=MySQLServer;CATALOG=MyDatabase;UID=USERID;PWD=Password";
//
// for SQL 7.0:
//ConnectionString = "DRIVER=SQL Server;SERVER=TopTen;CATALOG=TopTen;UID=TopTen;PWD=TopTen";
//
// for Access Database (on Server):
//ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=\\\\demwwwdev01\\develop\\im\\security\\TopTen.mdb";
//
// for Access Database (on local drive):
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=C:\\TopTen\\TopTen.mdb";

// Build a SQL statement
strSQL = "SELECT TopTenName, TopTenCount FROM TopTen ORDER BY TopTenCount DESC";

// Open the recordset
rsTopTen.Open(strSQL, ConnectionString, 3,1,1);

// Loop through the Recordset
while(!rsTopTen.EOF)
{
//写出.......
}


引用:
http://metababy.blogspot.com/2009/03/use-javascript-to-operate-database-sql.html

2009年3月25日星期三

使用Ibator自动生成sqlmap配置文件、dto类、dao类

一些资源:
1.帮助文档
http://ibatis.apache.org/docs/tools/ibator/

2.找不到jdbc的异常处理
http://www.eclipse-plugins.info/eclipse/plugin_comments.jsp;jsessionid=6FDA6B5047854C57C42A0252F2D36A3E?id=1253

3.示例

http://ibatis.apache.org/docs/tools/ibator/configreference/xmlconfig.html

4.一点和Abator的小历史

Ibator was originally named "Abator", but the name was changed as the result of a federal trade registration dispute.

2009年3月24日星期二

研究ibatis的jgamestore

正在进行中,自己也打算将以前做的asp.net 的网站用java做一次。因为熟悉业务,我想会很快的。。。 以后慢慢会尝试不同的技术,希望能在不同技术框架不同数据库能方便切换。。。

2009年3月23日星期一

ibatis的dao framework

dao.xml

The element ---> SqlMapConfig.xml

The element

The element
  EXTERNAL
  HIBERNATE
  JDBC
  JTA
  OJB
  SQLMAP(the most common choice)
  TOPLINK

The DAO elements (interface and implementation.)

ibatis的cache model

Cache model tag attributes

id
type (MEMORY[WEAK,SOFT,STRONG],FIFO,LRU,OSCACHE)
readOnly
serialize

Cache flushing

flushOnExecute
flushInterval(hours,minutes,seconds,milliseconds)

ibatis动态Sql

dynamic 

Binary dynamic tags
isEqual
isNotEqual
isGreaterThan
isGreaterEqual
isLessThan
isLessEqual

Binary tag attributes
property
prepend
open
close
removeFirstPrepend
compareProperty
compareValue

Unary tag attributes
property
prepend
open
close
removeFirstPrepend

Unary tags
isPropertyAvailable
isNotPropertyAvailable
isNull
isNotNull
isEmpty
isNotEmpty

Parameter tags
prepend
open
close
removeFirstPrepend

Parameter tags
isParameterPresent
isNotParameterPresent

The tag attributes
property
prepend
open
close
conjunction
removeFirstPrepend

开启ibatis的Lazy loading

在SqlMapConfig.xml设置节点的lazyLoadingEnabled为true, 如果你想使用cglib做lazyloading的话,需要把cglib的包放在classpath下,并且设置节点的enhancementEnabled属性为true。

2009年3月22日星期日

ibatis学习

ibatis学习了几个小时,感觉入手比较快,不用写关闭打开等代码。编写代码的人可以比较集中精力的关注sql的逻辑。比起jdbc确实显得开发高效多了,程序员似乎变傻了喔~
ibatis是懒人用的~ 呵呵。。。
jdbc是勤快的人想完全控制sql的人用的。。。

至于什么时候用,action的书里写的很清楚的。 当然跟项目的具体技术架构和需求也有很大的关系,毕竟是架构师和项目经理的事情。 俺学习学习,算过了。。

晚上继续看ibatis in actioan。 E文的看的好慢。。。 orz!

2009年3月20日星期五

Reading ibatis in action!

Reading ibatis in action! Reading ibatis in action! Reading ibatis in action!

2009年3月19日星期四

学习SpringMVC一步一步

昨天还有今天对着文档整好了SpringMVC的例子!
我的感觉是用她提供的框架开发是比较方便的。首先是一个jsp,利用里面的标签,发送一个请求过来,然后交给Controller,Controller负责接收请求,调用后面的服务,并返回一个ModelAndView。这些服务初始化工作交给spring,需要在applicationContext.xml等。还有一些配置文件如××-servlert.xml,jdbc.properties等。
最赞的是,build.xml几乎是自动的编译,部署,测试,建库。。。我很欣赏这点。前两天也捣鼓了下maven2,感觉不太适合现在的情况。
又是一天过去了。。。

明天计划好好Spring其他方面的整合,慢慢理解spring!

2009年3月17日星期二

没题目~

今天终于浏览玩spring-reference,下午在wtp中部署jpetstore,死活跑不起来。。。

后来下了一本Eclipse Web Tool Platform:.... 的电子书,对着书上做很快跑起来来了一个简单的Servlet。以前很是讨厌web.xml那些配置文件,不过现在看来有wtp的帮助,配置都可以自动生成,还是挺方便!

看着看到了 Apache Derby ,也是第一次接触。。。 打开 http://db.apache.org/derby/ 里面瞧了瞧,开始学学。。


每天都在想做点什么,或者写点什么。。。

每天都在思考是广泛学习,还是深入研究。。。

现在还是浑浑噩噩,何时是个头?

我是一只小小鸟,好像飞不出企业的手心~ 或许他需要点勇气。。。

2009年3月16日星期一

IIS6配置Gzip

再网上找到IIS6配置Gzip的文章,照做。重启后发现:the process cannot access the file because it is being used by another process.
netstat -an, 发现是迅雷5占用了80端口,kill thunder5.exe
重启IIS6, OK!

2009年3月15日星期日

还是Adobe Reader 好!

比较了下Adobe Reader 9.1 和 Foxit Reader 3.0 发现 Adobe对中文的显示更加清楚~ 所以还是用回Adobe的吧!

2009年3月13日星期五

晚上用JProfile做了点性能方面的分析

结果很吃惊,性能的瓶颈在xml的读写上。。。 orz。。。

安装EMS Sql Manager 2008 for Oracle

开始安装了EMS Sql Manager 2008 for Oracle,老是链接不上服务器。查看文档后,说明需要安装Oracle客户端。。。 安装好后,顺利链接上!
为什么不先看看文档呢?
偷懒往往更加得不偿失啊!

安装Oracle9i2出现的意外

老是提示 登录台出现异常,请检查源和目标。google了下,发现是以前安装过Oracle客户端,删除注册表中oracle子项,安装ok!

2分钟电话面试:又一次经验!

下午收到××科技的电话。对方先简要的介绍了下,然后直接问你英语听说能力怎么样?这一下就提到我伤心处了。 我很诚实的说我读写能力还行,听说能力稍差。 我问主要做什么,对方是说欧美业务。 对再问我现在做什么,是做.net 还是java,b/s还是c/s? 2分钟多点,快速的结束了。 对方很礼貌的说你的简历已经被他们“收藏”了! 圝~~~ 安慰我~ 自知之明yeah!
没办法,英语是老问题了。。。 我改花时间练练口语吗?

2009年3月12日星期四

Tomcat6中war自动部署原理



unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">


Note: unpackWARs="true"代表自动解压。autoDeploy="true"代表自动部署。

Tomcat6部署Spring-Jpetstore

1.按先前文章介绍安装好Tomcat6,
2.spring包中example/jpetstore下运行warfile.bat.
3.将生成的jpetstore.war拷贝到tomcat/webapp/下
4.重启tomcat6,webapp下自动多了一个名字为jpetstore的文件夹,即我们的宠物网站,
5.按先前介绍的安装好的mysql5.1,在sql manager 2007中,新建一jpetstore的数据库,运行mysql脚本
6.将mysql的jdbc的驱动拷贝到/webapp/jpetstore/WEB-INF/lib/下,并修改/webapp/jpetstore/WEB-INF/下的jdbc.properties文件,修改为符合mysql的要求。
例如:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/jpetstore
jdbc.username=root
jdbc.password=123456
7.重启Tomcat6,在浏览器中输入http://localhost:8080/jpetstore/

这就好了。

Tomcat6 zip 版安装

以前用过Tomcat5,今天在学习spring的时候想看看jpetstore,所以下在了一个Tomcat6zip版配置了下。
简单的说,
1.先设置好java_home,
2.在tomcat_home下bin目录下:
1)运行startup.bat 启动tomcat6,
2)运行shutdown.bat 退出tomcat6,
3)运行service.bat install tomcat6 安装服务名为tomcat6的Windows服务,
4) 运行service.bat romove tomcat6 删除服务名为tomcat6的Windows服务,
5) ctrl + r , 输入 services.msc , 可以看到 Apache Tomcat 的服务名,
6) 其他设置参考tomcat文档。
7) 桌面快捷方式:startup.bat 和 shutdowt.bat。

2009年3月11日星期三

忙碌的一天

一早收到美工美眉(没见过,希望是吧)做的页面效果图,并和小罗同志讨论了我们想法。中午修改发送了修改意见给美工~ 到下午3点时候做好了另一个项目用于演示的Flex客户端,服务器是以web Service的形式发布,Flex客户端是基于HttpService形式。做了简要的功能测试及边界测试后,打到Svn上,Flex告一段落。我的感觉是Flex是很美好的,可是我机器太慢了,cpu老是100%。。。 4点开始,上传上传小罗通知修改好的代码~ 继续奋斗哦!

2009年3月9日星期一

MySQL:简单字符集操作

1.查看默认字符集、排序方式
mysql> show variables like
-> 'character%';
+--------------------------+---------------------------------------------------+

| Variable_name | Value |

+--------------------------+---------------------------------------------------+

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_filesystem | binary |

| character_set_results | utf8 |

| character_set_server | utf8 |

| character_set_system | utf8 |

| character_sets_dir | D:\DevSoft\MySQL\MySQL Server 5.1\share\charsets\ |

mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+

2.修改默认字符集
mysql> SET character_set_client = utf8 ;
mysql> SET character_set_connection = utf8 ;
mysql> SET character_set_database = utf8 ;
mysql> SET character_set_results = utf8 ;
mysql> SET character_set_server = utf8 ;

mysql> SET collation_connection = utf8 ;
mysql> SET collation_database = utf8 ;
mysql> SET collation_server = utf8 ;

MySQL:无法远程登入MySQL Server(is not allowed to connect to this MySQL server)解决

如果你想连接你的mysql的时候发生这个错误:

ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL server

解决方法:
1。 改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"

mysql -u root -pvmwaremysql>use mysql;mysql>update user set host = '%' where user = 'root';mysql>select host, user from user;

2. 授权法。例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.10.40.54' IDENTIFIED BY '123456' WITH GRANT OPTION;

http://till.javaeye.com/blog/115659
http://www.webasp.net/article/21/20985_print.htm

我是用图形界面的SQL Manager中修改的!

获得mysql版本号

mysql> select version();
+------------------+
| version() |
+------------------+
| 5.1.32-community |
+------------------+
1 row in set (0.03 sec)

2009年3月6日星期五

试用wireshark,分析网络数据包

看了DW下的必备的java资源列表只工具篇中的介绍认识了wireshark,网络包跟踪工具。
WireShark (以前一般称为 Ethereal)使程序员可以查看网络上传播的内容,让他们有机会检查正在网络上传播的内容是否合适,而那些 合适的内容(比如敏感信息和明文密码)没有出现在网路上。呵呵,第一次听说这工具,以前只知道wincpap。。。 哈哈 , 我的工具箱又强大了!

安装了FLEX3 Eclipse插件

安装了FLEX3 Eclipse插件,yeah! 可以做flex 开发咯!!!Come on Baby!

Spring:IOC容器-依赖

1.注入依赖
1)构造器注入
1)构造器参数解析
2)构造器参数类型匹配
3)构造参数索引
2) Setter注入
3)一个替代构造器的方法,采用static工厂方法返回对象实例

2. 依赖配置详解
1)直接变量(基本类型、Strings类型等。)
2)idref元素,提供错误验证功能。local。。。
3) 引用其它的bean(协作者)。ref bean, ref local。
4)内部bean,内部bean中的scope标记及idname属性将被忽略。内部bean总是匿名的且它们总是prototype模式的。同时将内部bean注入到包含该内部bean之外的bean是可能的。
5)集合。元素。
6)集合的合并。parent-style和child-style。父子集合元素合并后的值就是子集合中的最终结果,而且子集合中的元素值将覆盖父集全中对应的值。merge 属性。
7)强类型集合(仅适用于Java5+)。
8) Nulls。
9)
XML配置文件的简写及其他
1)XML-based configuration metadata shortcuts
2) 使用p名称空间配置属性。p 表示属性。。。
10)组合属性名称。属性的属性的属性。。。
3. 使用depends-on 依赖关系不是太直接。。。 多个时候 “ , ”
4.延迟初始化bean。bean - lazy-init。beans - default-lazy-init
5.自动装配(autowire)协作者。自动装配(autowire)。
1)
Autowiring modes:no,byName,byType,constructor,autodetect。
2)如果直接使用propertyconstructor-arg注入依赖的话,那么将总是覆盖自动装配。
3)优点:a.自动装配能显著减少配置的数量,b.自动装配可以使配置与java代码同步更新
4) 缺点:a.装配不明确可能出现难以预料的结果,对象之间的关联关系也不再能清晰的进行文档化,b.对于那些根据Spring配置文件生成文档的工具来说,自动装配将会使这些工具没法生成依赖信息。
5) 将bean排除在自动装配之外.a.bean中autowire-candidate属性可被设为false.b.元素的'default-autowire-candidates'属性中进行设置
6.
依赖检查.
1)在bean定义中为dependency-check属性
2)依赖检查方式:none,simple,object,all.
7.方法注入
1)放弃控制反转。通过实现BeanFactoryAware接口让bean A能够感知bean 容器,并且在需要的时候通过使用getBean("B")方式向容器请求一个新的bean B实例。耦合高,不推荐。
2)Lookup方法注入。
Lookup方法注入利用了容器的覆盖受容器管理的bean方法的能力,从而返回指定名字的bean实例。 Lookup方法注入适用于原型bean。Lookup方法注入的内部机制是Spring利用了CGLIB库在运行时生成二进制代码功能,通过动态创建Lookup方法bean的子类而达到复写Lookup方法的目的。(需要CGLIB支持,子类化的类不能是final的,要覆盖的方法也不能是final的,不能是序列化的(serialized)。)
3)自定义方法的替代方案。当使用基于XML配置元数据文件时,可以在bean定义中使用replaced-method元素来达到用另一个方法来取代已有方法的目的.在元素内可包含一个或多个元素

2009年3月5日星期四

Eclipse3.4.1安装SpringIDE

用eclipse提供的在线软件包更新器成功安装了SpringIDE2.2.1.(在www.springide.org上找到更新链接!)耗时半个小时吧。

Spring:IOC容器 - 基本原理(容器和bean)

1.BeanFactory还是ApplicatonContext?
答:BeanFactory接口擅长于处理bean的初始化和配置,提供了配制框架及基本功能;ApplicationContextBeanFactory的扩展,功能得到了进一步增强,比如更易 与Spring AOP集成、资源处理(国际化处理)、事件传递及各种不同应用层的context实现 (如针对web应用的WebApplicationContext)。简而言之,一般把ApplicationContext接 口作为首选。

2.
为什么使用bean?

答:使用'bean'这个名字而不是'组件'(component)'对象'(object)的动机 源于Spring框架本身(它产生的部分原因就是对Enterprise Java Beans复杂性的一次解构)。

3.多种资源加载配置元数据

答:Spring IoC容器可以通过多种途径来加载配置元数据,比如本地文件系统、Java CLASSPATH等。Resource抽象机制。

4.怎么实例化容器?

答:ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] {"services.xml", "daos.xml"});

// an ApplicationContext is also a BeanFactory (via inheritance)
BeanFactory factory = context;

XML配置元数据的结构:相对路径

5.bean的在Spring IOC 容器中怎么定义的?
答:bean定义由BeanDefinition 对象来表示。包括全限定类名、bean行为的定义、对其他bean的引用、
创建bean实例时的其他配置设置。他们被映射为中的properties:
class-类名,name-名字,scope-作用域,constructor arguments - 构造器参数,properties - 属性,autowiring mode
自动装配,dependency checking mode - 依赖检查,lazy-initialization mode - 初始化延迟,
initialization method - 初始化方法, destruction method - 析构方法。

6.bean的命名、 bean的别名?
答:bean的命名采用标准的Java命名约定,即小写字母开头,首字母大写间隔 的命名方式。如accountManageraccountService
userDaologinController,等等。
xml配置别名

7.实例化bean的方式?
答:
1)用构造器来实例化。
IoC容器不仅限于管理JavaBean,它可以管理任意 的类。
2)使用静态工厂方法实例化。
createInstance()必须是一个static方法。
3)使用实例工厂方法实例化。

8.使用容器

从本质上讲,BeanFactory仅仅只是一个 维护bean定义以及相互依赖关系的高级工厂接口。通过BeanFactory 我们可以访问bean定义。下面的例子创建了一个bean工厂,此工厂 将从xml文件中读取bean定义:

Resource res = new FileSystemResource("beans.xml"); BeanFactory factory = new XmlBeanFactory(res);

基本上就这些了,接着使用getBean(String) 方法就可以取得bean的实例;BeanFactory 提供的方法极其简单。 BeanFactory接口提供 了非常多的方法,但是对于我们的应用来说,最好永远不要调用它们,当然也包括 使用getBean(String)方法,这样可以避免我们对 Spring API的依赖。

2009年3月4日星期三

Eclipse3.4.1下安装Findbugs和subclipse(SVN for eclipse)

Eclipse3.4.1下安装Findbugs和subclipse(SVN for eclipse)

安装Subclipse(SVN):

Eclipse 3.4菜单->Help->Software Updates...->选择Available Software

点击“Add Sites...”按钮,分别添加两个站点:
http://download.eclipse.org/technology/subversive/0.7/update-site/

http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/

然后勾选以下选项,然后点击“Install...”安装,必成功:
http://download.eclipse.org/technology/subversive/0.7/update-site/
--Subversive Integration Plug-in's
--Subversive SVN Intergration for the Mylyn Project

http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/
--Subersive SVN Connectors
--JavaHL 1.5.0 Connector
--Native JavaHL 1.5 Win32
--Subversive SVN Connectors
--SVNKit 1.1.7 Implementation

安装Findbugs-1.3.8:

方法同上:

只是更新链接不同:

FindBugs Eclipse update sites:

http://findbugs.cs.umd.edu/eclipse/

Only provides official releases of FindBugs.

http://findbugs.cs.umd.edu/eclips-candidate/

Provides official releases and release candidates of FindBugs.

http://findbugs.cs.umd.edu/eclipse-daily/

Provides the daily build of FindBugs. No testing other than that it compiles.

(from Findbugs 在线手册)

EMS SQL Manager 2007 for MySQL安装试用

软件首页:
http://sqlmanager.net/
下载地址,及破解文件:
http://skywq.com/searchcn.asp?keyword=sql+manager&searchtj=name&x=0&y=0

先安装了最新的mysql5.1,再安装sql manager 2007,在应用破解文件。一切都很顺利,用起来很方便。。。

推荐不喜欢敲命令行的朋友使用哦。

2009年3月2日星期一

JProfiler5.2.1试用

安装使用了JProfiler5.2.1试用版,通过看demo视频和文档,学会了基本的设置,并且保存了看到的资料到skydrive中以备以后查看。。。
JProfiler确实很强大,我打算用到我们的服务器性能测试中去,我想一定会有很大的帮助的。

附资料链接:
英文帮助文档:
http://cid-976e63db5ed0bfb6.skydrive.live.com/self.aspx/.Public/jprofiler/JProfiler%20Reference%20Manual.pdf

jprofiler集成tomcat的demo
http://cid-976e63db5ed0bfb6.skydrive.live.com/self.aspx/.Public/jprofiler/jprofiler%7C_demo%7C_1.rar

官方session设置demo
http://cid-976e63db5ed0bfb6.skydrive.live.com/self.aspx/.Public/jprofiler/jprofiler%7C_demo%7C_config.swf

官方jporfilerOverView Demo
http://cid-976e63db5ed0bfb6.skydrive.live.com/self.aspx/.Public/jprofiler/jprofiler%7C_demo%7C_overview.swf

安装文件with jre
http://cid-976e63db5ed0bfb6.skydrive.live.com/self.aspx/.Public/jprofiler/jprofiler%7C_windows%7C_5%7C_2%7C_1%7C_with%7C_jre.exe

crack for jprofiler 5.1.2(没成功)
http://cid-976e63db5ed0bfb6.skydrive.live.com/self.aspx/.Public/jprofiler/JProfilter.512crack.zip

2009年2月24日星期二

关于oracle rownum的知识汇总

1.

http://rake.itpub.net/post/4038/27463

得到前n条记录

直接选择前n条记录。

select * from table_name where rownum<=n; 直接选择前10条记录。

(或是rownum <>或是rownum != n+1)

选出前n条记录后再排序

select * from table_name where rownum<=n order by field_name;

选出前n条最大的记录。(先排序,再选择)

select * from (select * from table_name order by field_name desc)

where rownum <=n ;

得到最后n条记录

注意:因为rownum是不能用大于号来和数字比较的。 rownum > n 是无效的。

方法一:集合之差

很慢

select * from table_name

minus

select * from table_name

where rownum <= (select count(*)-n from table_name);

order by filed_name

(先选再排序)

方法二:子查询

较快

select *

from ( select rownum id,t.* from table_name t)

where id >(select count(*)-10 from table_name);

得到表的nm条记录

select * from (select rownum id,t.* from table_name

where ……

and rownum <= m order by field_name)

where id > n;

(先选再排序再选)

要先排序再选则须用select嵌套,内层排序外层选。

取得某列中第n大的行

使用dense_rank()函数

select column_name from

(select table_name.*,dense_rank() over (order by column_name desc) rank from table_name)

where rank = &N

关于rownum

rownum是随着结果集生成的,一旦生成,就不会变化了;同时,生成的结果是依次递加的,没有1就永远不会有2


2.

对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。
举例说明:
例如表:student(学生)表,表结构为:
ID    char(6)      --学号
name    VARCHAR2(10)   --姓名
create table student (ID char(6), name VARCHAR2(100));
insert into sale values('200001',‘张一’);
insert into sale values('200002',‘王二’);
insert into sale values('200003',‘李三’);
insert into sale values('200004',‘赵四’);
commit;

(1) rownum 对于等于某值的查询条件
如 果希望找到学生表中第一条学生的信息,可以使用rownum=1作为条件。但是想找到学生表中第二条学生的信息,使用rownum=2结果查不到数据。因 为rownum都是从1开始,但是1以上的自然数在rownum做等于判断是时认为都是false条件,所以无法查到rownum = n(n>1的自然数)。
SQL> select rownum,id,name from student where rownum=1;(可以用在限制返回记录条数的地方,保证不出错,如:隐式游标)
SQL> select rownum,id,name from student where rownum=1;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
1 200001 张一
SQL> select rownum,id,name from student where rownum =2;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------

(2)rownum对于大于某值的查询条件
如果想找到从第二行记录以后的记录,当使用rownum>2是查不出记录的,原因是由于rownum是一个总是从1开始的伪列,Oracle 认为rownum> n(n>1的自然数)这种条件依旧不成立,所以查不到记录
SQL> select rownum,id,name from student where rownum >2;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
那如何才能找到第二行以后的记录呀。可以使用以下的子查询方法来解决。注意子查询中的rownum必须要有别名,否则还是不会查出记录来,这是因为rownum不是某个表的列,如果不起别名的话,无法知道rownum是子查询的列还是主查询的列。
SQL>select * from(select rownum no ,id,name from student) where no>2;
NO ID NAME
---------- ------ ---------------------------------------------------
3 200003 李三
4 200004 赵四
SQL> select * from(select rownum,id,name from student)where rownum>2;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------

(3)rownum对于小于某值的查询条件
如果想找到第三条记录以前的记录,当使用rownum<3是能得到两条记录的。显然rownum对于rownum1的自然数)的条件认为是成立的,所以可以找到记录。
SQL> select rownum,id,name from student where rownum <3;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
1 200001 张一
2 200002 王二
综 上几种情况,可能有时候需要查询rownum在某区间的数据,那怎么办呀从上可以看出rownum对小于某值的查询条件是人为true的,rownum对 于大于某值的查询条件直接认为是false的,但是可以间接的让它转为认为是true的。那就必须使用子查询。例如要查询rownum在第二行到第三行之 间的数据,包括第二行和第三行数据,那么我们只能写以下语句,先让它返回小于等于三的记录行,然后在主查询中判断新的rownum的别名列大于等于二的记 录行。但是这样的操作会在大数据集中影响速度。
SQL> select * from (select rownum no,id,name from student where rownum<=3 ) where no >=2;
NO ID NAME
---------- ------ ---------------------------------------------------
2 200002 王二
3 200003 李三

(4)rownum和排序
Oracle中的rownum的是在取数据的时候产生的序号,所以想对指定排序的数据去指定的rowmun行数据就必须注意了。
SQL> select rownum ,id,name from student order by name;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
3 200003 李三
2 200002 王二
1 200001 张一
4 200004 赵四
可以看出,rownum并不是按照name列来生成的序号。系统是按照记录插入时的顺序给记录排的号,rowid也是顺序分配的。为了解决这个问题,必须使用子查询
SQL> select rownum ,id,name from (select * from student order by name);
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
1 200003 李三
2 200002 王二
3 200001 张一
4 200004 赵四
这样就成了按name排序,并且用rownum标出正确序号(有小到大)
笔者在工作中有一上百万条记录的表,在jsp页面中需对该表进行分页显示, 便考虑用rownum来作,下面是具体方法(每页
显示20条):
“select * from tabname where rownum<20 order by name" 但却发现oracle却不能按自己的意愿来执行,而是先随便
取20条记录,然后再 order by,后经咨询oracle,说rownum确实就这样,想用的话,只能用子查询 来实现先排序,后
rownum,方法如下:
"select * from (select * from tabname order by name) where rownum<20",但这样一来,效率会较低很多。
后经笔者试验,只需在order by 的字段上加主键或索引即可让oracle先按 该字段排序,然后再rownum;方法不变:
“select * from tabname where rownum<20>

取得某列中第N大的行

select column_name from
(select table_name.*,dense_rank() over (order by column desc) rank from table_name)
where rank = &N;
 假如要返回前5条记录:

  select * from tablename where rownum<6;(或是rownum <= 5 或是rownum != 6)
假如要返回第5-9条记录:

select * from tablename
where …
and rownum<10
minus
select * from tablename
where …
and rownum<5
order by name
选出结果后用name排序显示结果。(先选再排序)

注意:只能用以上符号(<、<=、!=)。

select * from tablename where rownum != 10;返回的是前9条记录。
不能用:>,>=,=,Between...and。由于rownum是一个总是从1开始的伪列,Oracle 认为这种条件 不成立,查不到记录.

另外,这个方法更快:

select * from (
select rownum r,a from yourtable
where rownum <= 20
order by name )
where r > 10
这样取出第11-20条记录!(先选再排序再选)

要先排序再选则须用select嵌套:内层排序外层选。
rownum是随着结果集生成的,一旦生成,就不会变化了;同时,生成的结果是依次递加的,没有1就永远不会有2!
rownum 是在 查询集合产生的过程中产生的伪列,并且如果where条件中存在 rownum 条件的话,则:

1: 假如 判定条件是常量,则:
只能 rownum = 1, <= 大于1 的自然数, = 大于1 的数是没有结果的, 大于一个数也是没有结果的
即 当出现一个 rownum 不满足条件的时候则 查询结束   this is stop key!

2: 当判定值不是常量的时候
若条件是 = var , 则只有当 var 为1 的时候才满足条件,这个时候不存在 stop key ,必须进行 full scan ,对每个满足其他where条件的数据进行判定
选出一行后才能去选rownum=2的行……


3.

对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<、<=、!=),并非说用>,& gt;=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid 可有些不一样,下面以例子说明

假设某个表 t1(c1) 有 20 条记录

如果用 select rownum,c1 from t1 where rownum < 10, 只要是用小于号,查出来的结果很容易地与一般理解在概念上能达成一致,应该不会有任何疑问的。

可如果用 select rownum,c1 from t1 where rownum > 10 (如果写下这样的查询语句,这时候在您的头脑中应该是想得到表中后面10条记录),你就会发现,显示出来的结果要让您失望了,也许您还会怀疑是不谁删了一 些记录,然后查看记录数,仍然是 20 条啊?那问题是出在哪呢?

先好好理解 rownum 的意义吧。因为ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简单的说 rownum 是对符合条件结果的序列号。它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值。所以您没办法期望得到下面的结果集:

11 aaaaaaaa
12 bbbbbbb
13 ccccccc
.................

rownum >10 没有记录,因为第一条不满足去掉的话,第二条的ROWNUM又成了1,所以永远没有满足条件的记录。或者可以这样理解:

ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如果 你用>,>=,=,between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下 条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。

有了以上从不同方面建立起来的对 rownum 的概念,那我们可以来认识使用 rownum 的几种现像

1. select rownum,c1 from t1 where rownum != 10 为何是返回前9条数据呢?它与 select rownum,c1 from tablename where rownum < 10 返回的结果集是一样的呢?
因为是在查询到结果集后,显示完第 9 条记录后,之后的记录也都是 != 10,或者 >=10,所以只显示前面9条记录。也可以这样理解,rownum 为9后的记录的 rownum为10,因条件为 !=10,所以去掉,其后记录补上,rownum又是10,也去掉,如果下去也就只会显示前面9条记录了

2. 为什么 rownum >1 时查不到一条记录,而 rownum >0 或 rownum >=1 却总显示所以的记录
因为 rownum 是在查询到的结果集后加上去的,它总是从1开始

3. 为什么 between 1 and 10 或者 between 0 and 10 能查到结果,而用 between 2 and 10 却得不到结果
原因同上一样,因为 rownum 总是从 1 开始

从上可以看出,任何时候想把 rownum = 1 这条记录抛弃是不对的,它在结果集中是不可或缺的,少了rownum=1 就像空中楼阁一般不能存在,所以你的 rownum 条件要包含到 1

但如果就是想要用 rownum > 10 这种条件的话话就要用嵌套语句,把 rownum 先生成,然后对他进行查询。
select *
from (selet rownum as rn,t1.* from a where ...)
where rn >10

一般代码中对结果集进行分页就是这么干的。

另外:rowid 与 rownum 虽都被称为伪列,但它们的存在方式是不一样的,rowid 可以说是物理存在的,表示记录在表空间中的唯一位置ID,在DB中唯一。只要记录没被搬动过,rowid是不变的。rowid 相对于表来说又像表中的一般列,所以以 rowid 为条件就不会有 rownum那些情况发生。
另外还要注意:rownum不能以任何基表的名称作为前缀。