??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲黄色免费网址,亚洲区日韩精品中文字幕,亚洲激情黄色小说http://m.tkk7.com/oaixgnaw/archive/2007/01/29/96627.html?/dc:creator>?/author>Mon, 29 Jan 2007 15:14:00 GMThttp://m.tkk7.com/oaixgnaw/archive/2007/01/29/96627.htmlhttp://m.tkk7.com/oaixgnaw/comments/96627.htmlhttp://m.tkk7.com/oaixgnaw/archive/2007/01/29/96627.html#Feedback0http://m.tkk7.com/oaixgnaw/comments/commentRss/96627.htmlhttp://m.tkk7.com/oaixgnaw/services/trackbacks/96627.html  开发h员行走Unix的随w四?/a>

   作者:(x)江南白衣Q原文出处:(x) http://blog.csdn.net/calvinxiu/archive/2007/01/27/1495778.aspxQ{载请保留出处?/p>

    Unixpȝ永远只会(x)来多Q开发h员就没必要特意学?fn)它们的安装、配|和理?jin),全部交l集成h员吧?br />    但开发h员行CUnix之间Q依然有四样东西要熟l?/p>

    一、VI

    虽然Unix上的文本~辑器已l越来越好用Q但不在Console前面Q网速也不够qXWindows的时候,q是要依赖VI?br />    回想VI的时代背景,发现VI对开发h员已l周到得谱?jin),热键多到你双手不键盘就能完成大半编辑工作?br />    自己制作一张自p为有用,但又l常忘记的命令的sheetQ拿?gu)试的力气把它背熟?/p>

    二、文本处?/h2>

       开发h员在Unix下干得最多的除了(jin)Make和除Bug外,大概是处理日志文g、业务文件进行查错和l计?jin)?br />     只会(x)more和grep是不够的Q开发老手?x)把awk,sed,grep,sort,uniq,wc,head,tailq些文本处理命o(h)Q通过道玩具式的拆卸DQ最后完成一件原本以为非~写大段代码不可的工作。周到的参数讑֮Q让人再一ơ感叚w个简单的q代Q这样复杂到极致的设?......怪不得《Unix ~程艺术》的作者有那么?jing)傲的自觉?/p>

     比如车东的每月访问TOP10 l计脚本Q?/p>

awk -F ' t' '{ print   $ 4 }' 2004_2 . txt| grep chedong . com / tech / | uniq -c| sort  -rn|head - 10  
  • awk -F '\t' ?004_2.txt讉KU录文gQ用TAB分割Q打印第4?
  • grep chedong.com/tech 只列出chedong.com/techW记目录下的文档
  • uniq -c 汇总计?
  • sort -rn 按数值排?
  • head -10 TOP 10

    三、Bash Shell ~程

    ~程是开发h员的天赋本能Q不Z么语aQ看看参考手册应该就能上手?/p>

    ?a >Bash新手指南中文?/a>Q一份写l新手看的包含很多老手知识的指南?/p>

    四、Make与AutoMake

    用过Java的Ant后,惌vMakep得很?ch),很厌倦。dq是?x)的Q见GNU Make 3.8.0 中文手册    

     不过即make已经_N到变态,每个人写出来的MakeFileq是千奇百怪,再看看开源项目们个个都是automake+autoconf?jin),我们自己也长q一点吧。手工编写MakeFile.amQ让auotomake变成MakeFile.inQ再让用?/configure 生成最l的MakeFile?br />    
    生成的MakeFile既能跨越q_Q又是标准的写法Q最重要的是Q编写MakeFile.am的工作量比MakeFile多?jin),只要单的定义目标文gQ先要处理的子目录,需要的源文Ӟ头文件与库文件就可以?jin)。如果看完下面两还是不懂,直接看ACE里的Makefile.am懂?jin)?/p>

    入门文章Q?a >使用AutoMakeL生成Makefile 
    q阶文章Q?a href="javascript:void(0);/*1169901219468*/">IBM DW:?/a>?autoconf ?automake 生成 Makefile 文g
    完整的免费电(sh)子书Q?a >GNU Autoconf, Automake and Libtool

    另外QACE里还贡献?jin)一个更厉害?a >MPC(Makefile, Project, and Workspace Creator )Q  自动的生成?jin)MakeFile.am或者VC的项目文件?br />

    附录AQ我的VI易忘命o(h)手册

    上下左右Q?/strong>
    ctrl+u/d 上下半屏Qctrl+f/b,上下一?br />    H/G屏幕?文章?Q?/$ 行首行末
   
    增删改:(x)
    yy/dd 复制/删除 一行,p/PQ将yy/dd的内容paste出来
    I/A 在行?末添加, o/O 开新行Qd0/d$ 删除到行首,行末
    u:undo

    查:(x)
    ? 向前查找Q?n/N 重复上一ơ查?/p>

附录B: 文本处理命o(h)结

   awkQ?/strong>处理l构化的文本(每行以固定符号分成若q列)Q提取打印某些字D,如:(x)
    ls -l|awk '{print $1}'  --ls-ll果的第一列打印出?br />    awk -F":" '{print $1"  "$6}' /etc/passwd Q将?分割?etc/passwd文g的第1Q?列打印出来,中间以空格分开
    详见IBM DW中国的AWK实例(?? ?Bash新手指南中文版第6?/a>?/p>

    grepQ?/strong>qo(h)Q大家用得最多的命o(h)Q支持正则表辑ּ。参数有Q?br />    -i忽略大小写,-n昄line numberQ?c l计在每个文件的出现ơ数Q?l只显C符合的文g的名字?/p>

    sedQ?/strong>编辑器Q主要用于替换,如:(x)
    sed -e '1,10s/foo/bar/g' myfile2.txt ??0行的文本中的foo 替换成bar,s代表替换,g代表全局替换
    支持正则的替换字W串Q可以只替换某个范围内的内容?br />    用法不算?详见
IBM DW中国的Sed实例(???Bash新手指南中文版第5?/a>?br />    
    sortQ?/strong>排序Q参数有Q?br />    -r逆序, -n 数字比较 , -M 日历比较 Feb,Dec, -f 忽略大小?br />    同样支持l构化文Ӟ?br />    sort -t : -k 1,1 /etc/passwdQ以: 分割,只按W?列排?br />    sort -t : -k 1,1 -k2.2,3.4 /etc/passwd Q以:分割,先按W?列排?再按W?列的W二个字W到W?列的W?个字W排序?/p>

    uniqQ?/strong>去除重复行?br />    除了(jin)正常用法外,q有-cl计重复ơ数Q和-u Q唯一Q和 -d Q重复)(j)两个参数,只显C唯一的和重复的行?/p>

    wcQ?/strong> l计?br />    -l ?-m 字符,-w 单词

PS:以下文字不算字数 
     一个多月没有更新博客了(jin)Q因为公叔R调了(jin)新部门,很多东西要学?fn)。太久没试过华丽的在上班旉Q在工作中,在同事们w上学到q么多东西了(jin)Q很是开?j)?br />     下周开始爆发更新?/p>



]]>
Java环境讄、HelloWorld例子、Ant环境?qing)运?http://m.tkk7.com/oaixgnaw/archive/2007/01/17/94402.html?/dc:creator>?/author>Wed, 17 Jan 2007 04:56:00 GMThttp://m.tkk7.com/oaixgnaw/archive/2007/01/17/94402.htmlhttp://m.tkk7.com/oaixgnaw/comments/94402.htmlhttp://m.tkk7.com/oaixgnaw/archive/2007/01/17/94402.html#Feedback0http://m.tkk7.com/oaixgnaw/comments/commentRss/94402.htmlhttp://m.tkk7.com/oaixgnaw/services/trackbacks/94402.html一D|间不用JavaQ经常忘C些烦(ch)琐的讄Q特意写此文档备案?br />
-------------
java环境讄
-------------

在环境变量中讄以下三个变量Q?br />JAVA_HOME=C:\j2sdk1.4.1 //可以改ؓ(f)相应的目?br />CLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar
PATH=%JAVA_HOME%\bin;%PATH%

然后在命令行输入java -version命o(h)Q如果出?br />java version "1.4.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-b21)
Java HotSpot(TM) Client VM (build 1.4.1-b21, mixed mode)
则说明已l配|成功!

HelloWorld.java源程序如下:(x)
public class HelloWorld{ 
 public static void main(String[] args) {  
  System.out.println("Hello World!"); 
  }
}

在命令行执行javac HelloWorld.java
如果没有输出M信息则说明编译成功?/p>

在命令行q行java HelloWorldQ输出:(x)
Hello World!
代表成功执行?jin)javaE序?/p>

-----------------
初学者常犯的错误
-----------------

1. q行Ӟ带了(jin).class后缀
如果你试图用如下命令:(x)
E:\java\src>java HelloWorld.class
pȝ?x)误认?f)你运行的是HelloWorld包下的名为class的类文gQ会(x)到系l的CLASSPATH下(一般都包括当前目录Q企囑֯找HelloWorld.class.classq样的类Q这L(fng)cd然不存在?jin);q且也不可能存在Q因为class是关键字Q不能作Z个类的名字。所以会(x)报如下错误信息:(x)
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class

2. 文g名大写错误
对于像Windowsq样的系l,~译时可以不兛_(j)大小写。比如编译HelloWorld.javaӞ也可以用:(x)
E:\java\src>javac helloworld.java
也可以编译通过Q但产生的类文g仍然是和源文件相W的QHelloWorld.class?br />但在q行时一定要注意大小写,比如试图使用如下命o(h)q行Q?br />E:\java\src>java helloworld
报cM?中的错误Q?br />Exception in thread "main" java.lang.NoClassDefFoundError: helloworld (wrong name: HelloWorld)


----------------------------
包含包层ơ的HelloWorld.java
----------------------------

比如上面的HelloWorld.java修改如下Q?br />package org.javaresearch;
public class HelloWorld{
public static void main(String[] args) {
System.out.println("Hello World!"); 
}
}

~译时有两种Ҏ(gu)

1. 直接~译
E:\java\src>javac HelloWorld.java
此时在当前目录下输出HelloWorld.class。此Ӟq行不能使用上面相同的方法,使用Q?br />E:\java\src>java HelloWorld
q行Ӟ出现如下错误Q?br />Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: org/javaresearch/HelloWorld)
从上q错误信息你也可以看刎ͼpȝ可以扑ֈHelloWorldc(因ؓ(f)当前路径包含在CLASSPATH中,具体Z么会(x)提示wrong nameQ有兴趣的朋友参见Java语言规范Q,但这个类属于org.javaresearch包。所以,你要做的是按照上述包层ơ,相应的创建目录层ơ,把上面生成的HelloWorld.class攑ֈE:\java\src\org\javaresearch\目录下。运行:(x)
E:\java\src >java org.javaresearch.HelloWorld
pȝ打印出:(x)
Hello World!
q儿要注意的是,不能使用java org\javaresearch\HelloWorld来运行,此时同样?x)出现如下错误?x)
Exception in thread "main" java.lang.NoClassDefFoundError:org\javaresearch\HelloWorld (wrong name: org/javaresearch/HelloWorld)

2. 使用 -d <directory>~译选项
是不是觉得上面的~译Ҏ(gu)有点ȝ(ch)Q能不能自动在当前\径(或Q意指定的路径Q下生成包层ơ呢Q有Q?d <directory>~译选项p做到?br />E:\java\src >javac -d . HelloWorld.java
此时Q在当前目录下就生成?jin)一个org\javaresearch目录Qƈ且输出的.class文g也在里面。运行:(x)
E:\java\src >java org.javaresearch.HelloWorld
pȝ打印QHello World!
如果你想把生成的cL仉中存攑֜一个目录中Q比如:(x)E:\java\classes下,那么你首先创个目录,然后~译Ӟ(x)
E:\java\src >javac -d E:\java\classes HelloWorld.java
可以把生成的类文g攑ֈE:\java\classes目录下,q且按照包层ơ相应的创徏目录路径。你可以在E:\java\classes\org\javaresearch下找到HelloWorld.class文g。此时用如下命令可以正运行(注意如果要用到其它类Q请在CLASSPATH中设好)(j)Q?br />E:\java\classes >java org.javaresearch.HelloWorld

或者你可以在E:\java目录下面q行以下命o(h)来执?br />E:\java >java -classpath .\classes org.javaresearch.HelloWorld
使用java?classpath参数可以一些目录加入类路径

-------------------
打包jar文g
-------------------
可以把一个包内的所有class文g打包Z个jar文gQ便于存攑֒q行。以上文的org.javaresearch包ؓ(f)例,其打包命令如下:(x)
E:\java\classes >jar cvf wxb.jar org
?x)生成一个wxb.jar文gQ将其中META-INF\MANIFEST.MF文g中添加如下一行:(x)
Main-Class: org.javaresearch.HelloWorld
保存jar文g?/p>

或者首先创建ƈ~辑一个MANIFEST.MF文gQ其内容如下Q?br />Manifest-Version: 1.0
Created-By: 1.4.1 (Sun Microsystems Inc.)
Main-Class: org.javaresearch.HelloWorld
其保存到classes目录?br />然后其一h包到jar文g中,打包命o(h)如下Q?br />E:\java\classes >jar cvfm wxb.jar MANIFEST.MF org

-------------
q行jar文g
-------------
在命令行中输入如下命令即可:(x)
E:\java\classes >java -jar wxb.jar
输出为:(x)
Hello World!

------------------------
用Ant来编译运行javaE序
------------------------
首先安装AntQ步骤很单:(x)
1.Ant压羃包解压到一个目录,例如D:\Ant1.5.2Q?br />2.在环境变量中d以下变量Q?br />ANT_HOME=D:\Ant1.5.2  //可以改ؓ(f)相应的目?br />3.修改Path环境变量
PATH=%ANT_HOME%\bin;%PATH%

最后给Z(jin)一个Ant的build.xml文gQ运行ant卛_完成所有以上的~译和运行过E,其build文g如下Q?br /><project name="HelloWorld" default="jar" basedir=".">
    <description>
        building HelloWorld!
    </description>
  <!-- set global properties for this build -->
  <property name="src" location="src"/>
  <property name="build" location="classes"/>
  <property name="dist"  location="dist"/>
  <property name="user.name" value="Wang Xuebin"/>

  <target name="init">
    <!-- Create the time stamp -->
    <tstamp/>
    <!-- Create the classes directory structure used by compile -->
    <mkdir dir="${build}"/>
  </target>

  <target name="build" depends="init"  description="build the source code" >
    <!-- Compile the java code from ${src} into ${build} -->
    <javac srcdir="${src}" destdir="${build}"/>
  </target>

  <target name="jar" depends="build"
        description="generate the distribution" >
    <!-- Create the distribution directory -->
    <mkdir dir="${dist}/lib"/>

    <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
  <jar destfile="${dist}/HelloWorld-${DSTAMP}.jar" basedir="${build}">
   <manifest>
    <attribute name="Built-By" value="${user.name}"/>
    <attribute name="Main-Class" value="org.javaresearch.HelloWorld"/>
   </manifest>
  </jar> 
 </target>
 
  <target name="run" depends="build" description="run HelloWorld">
    <java classpath="${build}" classname="org.javaresearch.HelloWorld"></java>
  </target>

  <target name="runjar" depends="jar" description="run HelloWorld in jar file">
         <java jar="${dist}/HelloWorld-${DSTAMP}.jar"
           fork="true"
           failonerror="true"
           maxmemory="128m"
           >
         <arg value="-h"/>
         <classpath>
           <pathelement location="${dist}/HelloWorld-${DSTAMP}.jar"/>
           <pathelement path="${java.class.path}"/>
         </classpath>
       </java>
  </target>
 
  <target name="clean"
        description="clean up" >
    <!-- Delete the ${build} and ${dist} directory trees -->
    <delete dir="${build}"/>
    <delete dir="${dist}"/>
  </target>
</project>



]]>
Java jdbc数据库连接池ȝ! http://m.tkk7.com/oaixgnaw/archive/2007/01/17/94401.html?/dc:creator>?/author>Wed, 17 Jan 2007 04:55:00 GMThttp://m.tkk7.com/oaixgnaw/archive/2007/01/17/94401.htmlhttp://m.tkk7.com/oaixgnaw/comments/94401.htmlhttp://m.tkk7.com/oaixgnaw/archive/2007/01/17/94401.html#Feedback0http://m.tkk7.com/oaixgnaw/comments/commentRss/94401.htmlhttp://m.tkk7.com/oaixgnaw/services/trackbacks/94401.html Java jdbc数据库连接池ȝ! 1. 引言

  q年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普?qing),计算?/p>

  应用E序已从传统的桌面应用{到Web应用。基于B/SQBrowser/ServerQ架构的3层开发模式逐渐取代C/SQClient/ServerQ架构的开发模式,成ؓ(f)开发企业应用和电(sh)子商务普遍采用的技术。在Web应用开发的早期Q主要用的技术是CGIH?a target="_blank">ASPH?a target="_blank">PHP{。之后,Sun公司推出?jin)基?a target="_blank">Java语言的Servlet+Jsp+JavaBean技术。相比传l的开发技术,它具有跨q_H?a target="_blank">安全H有效﹑可移植等Ҏ(gu),q其更便于使用和开发?/p>

  Java应用E序讉K数据?/font>的基本原?/p>

  在Java语言中,JDBCQJava DataBase ConnectionQ是应用E序与数据库沟通的桥梁,

  即Java语言通过JDBC技术访问数据库。JDBC是一U“开䏀的Ҏ(gu)Q它为数据库应用开发h员﹑数据库前台工具开发h员提供了(jin)一U标准的应用E序设计接口Q开发h员可以用UJava语言~写完整的数据库应用E序。JDBC提供两种APIQ分别是面向开发h员的API和面向底层的JDBC驱动E序APIQ底层主要通过直接的JDBC驱动和JDBC-ODBC桥驱动实C数据库的q接?/p>

  一般来_(d)Java应用E序讉K数据库的q程Q如?所C)(j)是:(x)

  ①装载数据库驱动E序Q?/p>

  ②通过JDBC建立数据库连接;

  ③访问数据库Q执行SQL语句Q?/p>

  ④断开数据库连接?/p>


? Java数据库访问机?/div>
  JDBC作ؓ(f)一U数据库讉K技术,h单易用的优点。但使用q种模式q行W(xu)eb应用
  E序开发,存在很多问题Q首先,每一ơWebh都要建立一ơ数据库q接。徏立连接是一个费时的zdQ每ơ都得花?.05s?s的时_(d)而且pȝq要分配内存资源。这个时间对于一ơ或几次数据库操作,或许感觉不出pȝ有多大的开销。可是对于现在的Web应用Q尤其是大型?sh)子商?a target="_blank">|站Q同时有几百人甚臛_千h在线是很正常的事。在q种情况下,频繁的进行数据库q接操作势必占用很多的系l资源,|站的响应速度必定下降Q严重的甚至?x)造成服务器的崩溃。不是危a耸听Q这是制约某些?sh)子商务|站发展的技术瓶颈问题。其ơ,对于每一ơ数据库q接Q用完后都得断开。否则,如果E序出现异常而未能关闭,会(x)D数据库系l中的内存泄漏,最l将不得不重启数据库。还有,q种开发不能控制被创徏的连接对象数Q系l资源会(x)被毫无顾?qing)的分配出去Q如q接q多Q也可能D内存泄漏Q服务器崩溃?/div>
 
  数据库连接池Qconnection poolQ的工作原理
  1、基本概念及(qing)原理
׃面的分析可以看出Q问题的Ҏ(gu)在于对数据?/font>q接资源的低效管理。我们知道,
  对于׃n资源Q有一个很著名?a target="_blank">设计模式Q资源池QResource PoolQ。该模式正是Z(jin)解决资源的频J分配﹑释放所造成的问题。ؓ(f)解决上述问题Q可以采用数据库q接池技术。数据库q接池的基本思想是为数据库q接建立一个“缓冲池”。预先在~冲池中攑օ一定数量的q接Q当需要徏立数据库q接Ӟ只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过讑֮q接池最大连接数来防止系l无的与数据库q接。更为重要的是我们可以通过q接池的理机制监视数据库的q接的数量﹑使用情况Qؓ(f)pȝ开发﹑试?qing)性能调整提供依据。连接池的基本工作原理见下图2?/div>

? q接池的基本工作原理
  2、服务器自带的连接池
  JDBC的API中没有提供连接池的方法。一些大型的WEB应用服务器如BEA的WebLogic和IBM的WebSphere{提供了(jin)q接池的机制Q但是必L其第三方的专用类Ҏ(gu)支持q接池的用法?/div>
  q接池关键问题分?/div>
  1、ƈ发问?/div>
  Z(jin)使连接管理服务具有最大的通用性,必须考虑多线E环境,卛_ƈ发问题。这个问题相Ҏ(gu)较好解决Q因?a target="_blank">Java语言自n提供?jin)对q发理的支持,使用synchronized关键字即可确保线E是同步的。用方法ؓ(f)直接在类Ҏ(gu)前面加上synchronized关键字,如:(x)
public synchronized Connection getConnectionQ)(j)
  2、多数据库服务器和多用户
  对于大型的企业应用Q常帔R要同时连接不同的数据库(如连?a target="_blank">Oracle?a target="_blank">SybaseQ。如何连接不同的数据库呢Q我们采用的{略是:(x)设计一个符合单例模式的q接池管理类Q在q接池管理类的唯一实例被创建时d一个资源文Ӟ其中资源文g中存攄多个数据库的url地址Q?lt;poolName.url>Q﹑用户名(<poolName.user>Q﹑密码Q?lt;poolName.password>Q等信息。如tx.url=192.168.1.123:5000/tx_itQtx.user=cylQtx.password=123456。根据资源文件提供的信息Q创建多个连接池cȝ实例Q每一个实例都是一个特定数据库的连接池。连接池理cd例ؓ(f)每个q接池实例取一个名字,通过不同的名字来理不同的连接池?/div>
  对于同一个数据库有多个用户用不同的名称和密码访问的情况Q也可以通过资源文g处理Q即在资源文件中讄多个h相同url地址Q但h不同用户名和密码的数据库q接信息?/div>
  3、事务处?/div>
  我们知道Q事务具有原子性,此时要求Ҏ(gu)据库的操作符合“ALL-ALL-NOTHING”原?卛_于一lSQL语句要么全做Q要么全不做?br />?a target="_blank">Java语言中,ConnectioncLw提供了(jin)对事务的支持Q可以通过讄Connection的AutoCommit属性ؓ(f)false,然后昑ּ的调用commit或rollbackҎ(gu)来实现。但要高效的q行Connection复用Q就必须提供相应的事务支持机制。可采用每一个事务独占一个连接来实现Q这U方法可以大大降低事务管理的复杂性?
  4、连接池的分配与释放
  q接池的分配与释放,对系l的性能有很大的影响。合理的分配与释放,可以提高q接的复用度Q从而降低徏立新q接的开销Q同时还可以加快用户的访问速度?/div>
  对于q接的管理可使用I闲池。即把已l创Z未分配出去的连接按创徏旉存放C个空闲池中。每当用戯求一个连接时Q系l首先检查空闲池内有没有I闲q接。如果有把建立旉最长(通过容器的顺序存攑֮玎ͼ(j)的那个连接分配给他(实际是先做连接是否有效的判断Q如果可用就分配l用P如不可用把q个q接从空闲池删掉Q重新检空闲池是否q有q接Q;如果没有则检查当前所开q接池是否达到连接池所允许的最大连接数QmaxConnQ?如果没有辑ֈQ就新徏一个连接,如果已经辑ֈQ就{待一定的旉QtimeoutQ。如果在{待的时间内有连接被释放出来可以把q个q接分配l等待的用户Q如果等待时间超q预定时间timeout,则返回空|nullQ。系l对已经分配出去正在使用的连接只做计敎ͼ当用完后再q还l空闲池。对于空闲连接的状态,可开辟专门的U程定时(g),q样?x)花费一定的pȝ开销Q但可以保证较快的响应速度。也可采取不开辟专门线E,只是在分配前(g)的Ҏ(gu)?/div>
  5、连接池的配|与l护
  q接池中到底应该攄多少q接Q才能ɾpȝ的性能最佻Ipȝ可采取设|最连接数QminConnQ和最大连接数QmaxConnQ来控制q接池中的连接。最连接数是系l启动时q接池所创徏的连接数。如果创多,则系l启动就慢,但创建后pȝ的响应速度?x)很快;如果创徏q少Q则pȝ启动的很快,响应h却慢。这P可以在开发时Q设|较?yu)的最连接数Q开发v来会(x)快,而在pȝ实际使用时设|较大的Q因样对讉K客户来说速度?x)快些。最大连接数是连接池中允许连接的最大数目,具体讄多少Q要看系l的讉K量,可通过反复试Q找到最佳点?/div>
  如何保q接池中的最连接数呢?有动态和?rn)态两U策略。动态即每隔一定时间就对连接池q行(g),如果发现q接数量于最连接数Q则补充相应数量的新q接,以保证连接池的正常运转。静(rn)态是发现I闲q接不够时再L查?br />q接池的实现
  1、连接池模型
  本文讨论的连接池包括一个连接池c(DBConnectionPoolQ和一个连接池理c(DBConnetionPoolManagerQ和一个配|文件操作类(ParseDSConfig)。连接池cLҎ(gu)一数据?/font>所有连接的“缓冲池”,主要实现以下功能Q①从连接池获取或创建可用连接;②用完毕之后,把连接返q给q接池;③在pȝ关闭前,断开所有连接ƈ释放q接占用的系l资源;④还能够处理无效q接Q原来登Cؓ(f)可用的连接,׃某种原因不再可用Q如时Q通讯问题Q,q能够限制连接池中的q接L不低于某个预定值和不超q某个预定倹{?5)当多数据库时,且数据库是动态增加的?会(x)加到配置文g中?/div>
  q接池管理类是连接池cȝ外覆c(wrapperQ?W合单例模式Q即pȝ中只能有一个连接池理cȝ实例。其主要用于对多个连接池对象的管理,h以下功能Q①装蝲q注册特定数据库的JDBC驱动E序Q②Ҏ(gu)属性文件给定的信息Q创接池对象Q③为方便管理多个连接池对象Qؓ(f)每一个连接池对象取一个名字,实现q接池名字与其实例之间的映射Q④跟踪客户使用q接情况Q以侉K要是关闭q接释放资源。连接池理cȝ引入主要是ؓ(f)?jin)方便对多个q接池的使用和管理,如系l需要连接不同的数据库,或连接相同的数据库但׃安全性问题,需要不同的用户使用不同的名U和密码?br />         2、连接池实现(l过本h改版,可以适用多数据库cd的应用以?qing)一U数据库cd多个数据库且数据  库的数量可以动态增加的应用E序)
         1),DBConnectionPool.java   数据库连接池c?br />         2),DBConnectionManager .java   数据库管理类
         3),DSConfigBean .java                单个数据库连接信息Bean
         4),ParseDSConfig.java                操作?q个'?包括不同的数据库和同一U数据库有多个数据库)
                                                            数据 配置文gxml
         5),ds.config.xml                           数据库配|文件xml
         原代码如? 
        DBConnectionPool.java  
        ----------------------------------------------------------
      /**
 * 数据库连接池c?br /> */
package com.chunkyo.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Timer;
/**
 * @author chenyanlin
 *
 */
public class DBConnectionPool implements TimerListener {
 private Connection con=null;
 private int inUsed=0;    //使用的连接数
 private ArrayList freeConnections = new ArrayList();//容器Q空闲连?br /> private int minConn;     //最连接数
 private int maxConn;     //最大连?br /> private String name;     //q接池名?br /> private String password; //密码
 private String url;      //数据库连接地址
 private String driver;   //驱动
 private String user;     //用户?br /> public Timer timer;      //定时
 /**
  *
  */
 public DBConnectionPool() {
  // TODO Auto-generated constructor stub
 }
 /**
  * 创徏q接?br />  * @param driver
  * @param name
  * @param URL
  * @param user
  * @param password
  * @param maxConn
  */
 public DBConnectionPool(String name, String driver,String URL, String user, String password, int maxConn)
 {
  this.name=name;
  this.driver=driver;
  this.url=URL;
  this.user=user;
  this.password=password;
  this.maxConn=maxConn;
 }
 /**
  * 用完Q释放连?br />  * @param con
  */
 public synchronized void freeConnection(Connection con)
 {
  this.freeConnections.add(con);//d到空闲连接的末尾
  this.inUsed--;
 }
 /**
  * timeout  Ҏ(gu)timeout得到q接
  * @param timeout
  * @return
  */
 public synchronized Connection getConnection(long timeout)
 {
  Connection con=null;
  if(this.freeConnections.size()>0)
  {
   con=(Connection)this.freeConnections.get(0);
   if(con==null)con=getConnection(timeout); //l箋获得q接
  }
  else
  {
   con=newConnection(); //新徏q接
  }
  if(this.maxConn==0||this.maxConn<this.inUsed)
  {
   con=null;//辑ֈ最大连接数Q暂时不能获得连接了(jin)?br />  }
  if(con!=null)
  {
   this.inUsed++;
  }
  return con;
 }
 /**
  *
  * 从连接池里得到连?br />  * @return
  */
 public synchronized Connection getConnection()
 {
  Connection con=null;
  if(this.freeConnections.size()>0)
  {
   con=(Connection)this.freeConnections.get(0);
   this.freeConnections.remove(0);//如果q接分配出去?jin),׃I闲q接里删?br />   if(con==null)con=getConnection(); //l箋获得q接
  }
  else
  {
   con=newConnection(); //新徏q接
  }
  if(this.maxConn==0||this.maxConn<this.inUsed)
  {
   con=null;//{待 过最大连接时
  }
  if(con!=null)
  {
   this.inUsed++;
   System.out.println("得到 "+this.name+" 的连接,现有"+inUsed+"个连接在使用!");
  }
  return con;
 }
 /**
  *释放全部q接
  *
  */
 public synchronized void release()
 {
  I(yng)terator allConns=this.freeConnections.iterator();
  while(allConns.hasNext())
  {
   Connection con=(Connection)allConns.next();
   try
   {
    con.close();
   }
   catch(SQLException e)
   {
    e.printStackTrace();
   }
   
  }
  this.freeConnections.clear();
   
 }
 /**
  * 创徏新连?br />  * @return
  */
 private Connection newConnection()
 {
  try {
   Class.forName(driver);
   con=DriverManager.getConnection(url, user, password);
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   System.out.println("sorry can't find db driver!");
  } catch (SQLException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
   System.out.println("sorry can't create Connection!");
  }
  return con;
  
 }
 /**
  * 定时处理函数
  */
 public synchronized void TimerEvent()
 {
     //暂时q没有实C后会(x)加上?br /> }
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
 }
 /**
  * @return the driver
  */
 public String getDriver() {
  return driver;
 }
 /**
  * @param driver the driver to set
  */
 public void setDriver(String driver) {
  this.driver = driver;
 }
 /**
  * @return the maxConn
  */
 public int getMaxConn() {
  return maxConn;
 }
 /**
  * @param maxConn the maxConn to set
  */
 public void setMaxConn(int maxConn) {
  this.maxConn = maxConn;
 }
 /**
  * @return the minConn
  */
 public int getMinConn() {
  return minConn;
 }
 /**
  * @param minConn the minConn to set
  */
 public void setMinConn(int minConn) {
  this.minConn = minConn;
 }
 /**
  * @return the name
  */
 public String getName() {
  return name;
 }
 /**
  * @param name the name to set
  */
 public void setName(String name) {
  this.name = name;
 }
 /**
  * @return the password
  */
 public String getPassword() {
  return password;
 }
 /**
  * @param password the password to set
  */
 public void setPassword(String password) {
  this.password = password;
 }
 /**
  * @return the url
  */
 public String getUrl() {
  return url;
 }
 /**
  * @param url the url to set
  */
 public void setUrl(String url) {
  this.url = url;
 }
 /**
  * @return the user
  */
 public String getUser() {
  return user;
 }
 /**
  * @param user the user to set
  */
 public void setUser(String user) {
  this.user = user;
 }
}

-------------------------------------------
 DBConnectionManager .java
------------------------------------------
/**
 * 数据库连接池理c?br /> */
package com.chunkyo.db;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Properties;
import java.util.Vector;
/**
 * @author chenyanlin
 *
 */
public class DBConnectionManager {
 static private DBConnectionManager instance;//唯一数据库连接池理实例c?br /> static private int clients;                 //客户q接?br /> private Vector drivers  = new Vector();//驱动信息
 private Hashtable pools=new Hashtable();//q接?br /> 
 /**
  * 实例化管理类
  */
 public DBConnectionManager() {
  // TODO Auto-generated constructor stub
  this.init();
 }
 /**
  * 得到唯一实例理c?br />  * @return
  */
 static synchronized public DBConnectionManager getInstance()
 {
  if(instance==null)
  {
   instance=new DBConnectionManager();
  }
  return instance;
  
 }
 /**
  * 释放q接
  * @param name
  * @param con
  */
 public void freeConnection(String name, Connection con)
 {
  DBConnectionPool pool=(DBConnectionPool)pools.get(name);//Ҏ(gu)关键名字得到q接?br />  if(pool!=null)
  pool.freeConnection(con);//释放q接
 }
 /**
  * 得到一个连接根据连接池的名字name
  * @param name
  * @return
  */
 public Connection getConnection(String name)
 {
  DBConnectionPool pool=null;
  Connection con=null;
  pool=(DBConnectionPool)pools.get(name);//从名字中获取q接?br />  con=pool.getConnection();//从选定的连接池中获得连?br />  if(con!=null)
  System.out.println("得到q接。。?);
  return con;
 }
 /**
  * 得到一个连接,Ҏ(gu)q接池的名字和等待时?br />  * @param name
  * @param time
  * @return
  */
 public Connection getConnection(String name, long timeout)
 {
  DBConnectionPool pool=null;
  Connection con=null;
  pool=(DBConnectionPool)pools.get(name);//从名字中获取q接?br />  con=pool.getConnection(timeout);//从选定的连接池中获得连?br />  System.out.println("得到q接。。?);
  return con;
 }
 /**
  * 释放所有连?br />  */
 public synchronized void release()
 {
  Enumeration allpools=pools.elements();
  while(allpools.hasMoreElements())
  {
   DBConnectionPool pool=(DBConnectionPool)allpools.nextElement();
   if(pool!=null)pool.release();
  }
  pools.clear();
 }
 /**
  * 创徏q接?br />  * @param props
  */
 private void createPools(DSConfigBean dsb)
 {
  DBConnectionPool dbpool=new DBConnectionPool();
  dbpool.setName(dsb.getName());
  dbpool.setDriver(dsb.getDriver());
  dbpool.setUrl(dsb.getUrl());
  dbpool.setUser(dsb.getUsername());
  dbpool.setPassword(dsb.getPassword());
  dbpool.setMaxConn(dsb.getMaxconn());
  System.out.println("ioio:"+dsb.getMaxconn());
  pools.put(dsb.getName(), dbpool);
 }
 /**
  * 初始化连接池的参?br />  */
 private void init()
 {
  //加蝲驱动E序
  this.loadDrivers();
  //创徏q接?br />  I(yng)terator alldriver=drivers.iterator();
  while(alldriver.hasNext())
  {
   this.createPools((DSConfigBean)alldriver.next());
   System.out.println("创徏q接池。。?);
   
  }
  System.out.println("创徏q接池完毕。。?);
 }
 /**
  * 加蝲驱动E序
  * @param props
  */
 private void loadDrivers()
 {
  ParseDSConfig pd=new ParseDSConfig();
 //d数据库配|文?br />  drivers=pd.readConfigInfo("ds.config.xml");
  System.out.println("加蝲驱动E序。。?);
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
 }
}
----------------------------------------
DSConfigBean.java
----------------------------------------
/**
 * 配置文gBeanc?br /> */
package com.chunkyo.db;
/**
 * @author chenyanlin
 *
 */
public class DSConfigBean {
 private String type     =""; //数据库类?br /> private String name     =""; //q接池名?br /> private String driver   =""; //数据库驱?br /> private String url      =""; //数据库url
 private String username =""; //用户?br /> private String password =""; //密码
 private int maxconn  =0; //最大连接数
 /**
  *
  */
 public DSConfigBean() {
  // TODO Auto-generated constructor stub
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
 }
 /**
  * @return the driver
  */
 public String getDriver() {
  return driver;
 }
 /**
  * @param driver the driver to set
  */
 public void setDriver(String driver) {
  this.driver = driver;
 }
 /**
  * @return the maxconn
  */
 public int getMaxconn() {
  return maxconn;
 }
 /**
  * @param maxconn the maxconn to set
  */
 public void setMaxconn(int maxconn) {
  this.maxconn = maxconn;
 }
 /**
  * @return the name
  */
 public String getName() {
  return name;
 }
 /**
  * @param name the name to set
  */
 public void setName(String name) {
  this.name = name;
 }
 /**
  * @return the password
  */
 public String getPassword() {
  return password;
 }
 /**
  * @param password the password to set
  */
 public void setPassword(String password) {
  this.password = password;
 }
 /**
  * @return the type
  */
 public String getType() {
  return type;
 }
 /**
  * @param type the type to set
  */
 public void setType(String type) {
  this.type = type;
 }
 /**
  * @return the url
  */
 public String getUrl() {
  return url;
 }
 /**
  * @param url the url to set
  */
 public void setUrl(String url) {
  this.url = url;
 }
 /**
  * @return the username
  */
 public String getUsername() {
  return username;
 }
 /**
  * @param username the username to set
  */
 public void setUsername(String username) {
  this.username = username;
 }
}
-----------------------------------------------------
ParseDSConfig.java
-----------------------------------------------------
/**
 * 操作配置文gc?读??修改 删除{操?
 */
package com.chunkyo.db;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Vector;
import java.util.Iterator;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
/**
 * @author chenyanlin
 *
 */
public class ParseDSConfig {
 /**
  * 构造函?br />  */
 public ParseDSConfig() {
  // TODO Auto-generated constructor stub
 }
 /**
  * dxml配置文g
  * @param path
  * @return
  */
 public Vector readConfigInfo(String path)
 {
  String rpath=this.getClass().getResource("").getPath().substring(1)+path;
  Vector dsConfig=null;
  FileInputStream fi = null;
  try
  {
   fi=new FileInputStream(rpath);//d路径文g
   dsConfig=new Vector();
   SAXBuilder sb=new SAXBuilder();
   Document doc=sb.build(fi);
   Element root=doc.getRootElement();
   List pools=root.getChildren();
   Element pool=null;
   I(yng)terator allPool=pools.iterator();
   while(allPool.hasNext())
   {
    pool=(Element)allPool.next();
    DSConfigBean dscBean=new DSConfigBean();
    dscBean.setType(pool.getChild("type").getText());
    dscBean.setName(pool.getChild("name").getText());
    System.out.println(dscBean.getName());
    dscBean.setDriver(pool.getChild("driver").getText());
    dscBean.setUrl(pool.getChild("url").getText());
    dscBean.setUsername(pool.getChild("username").getText());
    dscBean.setPassword(pool.getChild("password").getText());
    dscBean.setMaxconn(Integer.parseInt(pool.getChild("maxconn").getText()));
    dsConfig.add(dscBean);
   }
   
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (JDOMException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  finally
  {
   try {
    fi.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  
  return dsConfig;
 }
/**
 *修改配置文g 没时间写 q段旉再脓(chung)上去 其实一L(fng)
 */
 public void modifyConfigInfo(String path,DSConfigBean dsb) throws Exception
 {
  String rpath=this.getClass().getResource("").getPath().substring(1)+path;
  FileInputStream fi=null; //d
  FileOutputStream fo=null; //写入
  
 }
/**
 *增加配置文g
 *
 */
 public void addConfigInfo(String path,DSConfigBean dsb)
 {
  String rpath=this.getClass().getResource("").getPath().substring(1)+path;
  FileInputStream fi=null;
  FileOutputStream fo=null;
  try
  {
   fi=new FileInputStream(rpath);//dxml?br />   
   SAXBuilder sb=new SAXBuilder();
   
   Document doc=sb.build(fi); //得到xml
   Element root=doc.getRootElement();
   List pools=root.getChildren();//得到xml子树(wi)
   
   Element newpool=new Element("pool"); //创徏新连接池
   
   Element pooltype=new Element("type"); //讄q接池类?br />   pooltype.setText(dsb.getType());
   newpool.addContent(pooltype);
   
   Element poolname=new Element("name");//讄q接池名?br />   poolname.setText(dsb.getName());
   newpool.addContent(poolname);
   
   Element pooldriver=new Element("driver"); //讄q接池驱?br />   pooldriver.addContent(dsb.getDriver());
   newpool.addContent(pooldriver);
   
   Element poolurl=new Element("url");//讄q接池url
   poolurl.setText(dsb.getUrl());
   newpool.addContent(poolurl);
   
   Element poolusername=new Element("username");//讄q接池用户名
   poolusername.setText(dsb.getUsername());
   newpool.addContent(poolusername);
   
   Element poolpassword=new Element("password");//讄q接池密?br />   poolpassword.setText(dsb.getPassword());
   newpool.addContent(poolpassword);
   
   Element poolmaxconn=new Element("maxconn");//讄q接池最大连?br />   poolmaxconn.setText(String.valueOf(dsb.getMaxconn()));
   newpool.addContent(poolmaxconn);
   pools.add(newpool);//childd到root
   Format format = Format.getPrettyFormat();
      format.setIndent("");
      format.setEncoding("utf-8");
      XMLOutputter outp = new XMLOutputter(format);
      fo = new FileOutputStream(rpath);
      outp.output(doc, fo);
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (JDOMException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  finally
  {
   
  }
 }
 /**
  *删除配置文g
  */
 public void delConfigInfo(String path,String name)
 {
  String rpath=this.getClass().getResource("").getPath().substring(1)+path;
  FileInputStream fi = null;
  FileOutputStream fo=null;
  try
  {
   fi=new FileInputStream(rpath);//d路径文g
   SAXBuilder sb=new SAXBuilder();
   Document doc=sb.build(fi);
   Element root=doc.getRootElement();
   List pools=root.getChildren();
   Element pool=null;
   I(yng)terator allPool=pools.iterator();
   while(allPool.hasNext())
   {
    pool=(Element)allPool.next();
    if(pool.getChild("name").getText().equals(name))
    {
     pools.remove(pool);
     break;
    }
   }
   Format format = Format.getPrettyFormat();
      format.setIndent("");
      format.setEncoding("utf-8");
      XMLOutputter outp = new XMLOutputter(format);
      fo = new FileOutputStream(rpath);
      outp.output(doc, fo);
   
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (JDOMException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  finally
  {
   try {
    fi.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }
 /**
  * @param args
  * @throws Exception
  */
 public static void main(String[] args) throws Exception {
  // TODO Auto-generated method stub
  ParseDSConfig pd=new ParseDSConfig();
  String path="ds.config.xml";
  pd.readConfigInfo(path);
  //pd.delConfigInfo(path, "tj012006");
  DSConfigBean dsb=new DSConfigBean();
  dsb.setType("oracle");
  dsb.setName("yyy004");
  dsb.setDriver("org.oracle.jdbc");
  dsb.setUrl("jdbc:oracle://localhost");
  dsb.setUsername("sa");
  dsb.setPassword("");
  dsb.setMaxconn(1000);
  pd.addConfigInfo(path, dsb);
  pd.delConfigInfo(path, "yyy001");
 }
}

--------------------------------------
ds.config.xml   配置文g
--------------------------------------


<ds-config>
<pool>
<type>mysql</type>
<name>user</name>
<driver>com.mysql.jdbc.driver</driver>
<url>jdbc:mysql://localhost:3306/user</url>
<username>sa</username>
<password>123456</password>
<maxconn>100</maxconn>
</pool>
<pool>
<type>mysql</type>
<name>user2</name>
<driver>com.mysql.jdbc.driver</driver>
<url>jdbc:mysql://localhost:3306/user2</url>
<username>sa</username>
<password>1234</password>
<maxconn>10</maxconn>
</pool>
<pool>
<type>sql2000</type>
<name>books</name>
<driver>com.microsoft.sqlserver.driver</driver>
<url>jdbc:sqlserver://localhost:1433/books:databasename=books</url>
<username>sa</username>
<password></password>
<maxconn>100</maxconn>
</pool>
</ds-config>


3. q接池的使用
  1。Connection的获得和释放
  DBConnectionManager   connectionMan=DBConnectionManager .getInstance();//得到唯一实例
   //得到q接
   String name="mysql";//从上下文得到你要讉K的数据库的名?br />   Connection  con=connectionMan.getConnection(name);
  //使用
  。。。。。。?br />  // 使用完毕
 connectionMan.freeConnection(name,con);//释放Q但q未断开q接
 2。数据库q接的动态增加和q接池的动态增?br />      1。调用xml操作增加c?br />
      2。重新实例华q接池管理池c?/div>


]]>PO BO VO DTO POJO DAO概念?qing)其作用Q附转换图)(j)http://m.tkk7.com/oaixgnaw/archive/2007/01/15/93856.html?/dc:creator>?/author>Mon, 15 Jan 2007 01:52:00 GMThttp://m.tkk7.com/oaixgnaw/archive/2007/01/15/93856.htmlhttp://m.tkk7.com/oaixgnaw/comments/93856.htmlhttp://m.tkk7.com/oaixgnaw/archive/2007/01/15/93856.html#Feedback0http://m.tkk7.com/oaixgnaw/comments/commentRss/93856.htmlhttp://m.tkk7.com/oaixgnaw/services/trackbacks/93856.html    首先声明偶也不是什么高手,以下ȝ都是自己的体?x)。不对之处请(zhn)多指教?/p>

POQ?br />persistant object持久对象

最形象的理解就是一个PO是数据库中的一条记录?br />好处是可以把一条记录作Z个对象处理,可以方便的{为其它对象?br />



BOQ?br />business object业务对象

主要作用是把业务逻辑装Z个对象。这个对象可以包括一个或多个其它的对象?br />比如一个简历,有教育经历、工作经历、社?x)关pȝ{?br />我们可以把教育经历对应一个POQ工作经历对应一个POQ社?x)关pd应一个PO?br />建立一个对应简历的BO对象处理历,每个BO包含q些PO?br />q样处理业务逻辑Ӟ我们可以针对BOd理?br />



VO Q?br />value object值对?br />ViewObject表现层对?br />
主要对应界面昄的数据对象。对于一个WEB面Q或者SWT、SWING的一个界面,用一个VO对象对应整个界面的倹{?br />



DTO Q?br />Data Transfer Object数据传输对象
主要用于q程调用{需要大量传输对象的地方?br />比如我们一张表?00个字D,那么对应的PO有100个属性?br />但是我们界面上只要显C?0个字D,
客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,
q时我们可以用只有q?0个属性的DTO来传递结果到客户端,q样也不?x)暴露服务端表结?到达客户端以后,如果用这个对象来对应界面昄Q那此时它的w䆾p{为VO



POJO Q?br />plain ordinary java object 单java对象
个h感觉POJO是最常见最多变的对象,是一个中间对象,也是我们最常打交道的对象?br />
一个POJO持久化以后就是PO
直接用它传递、传递过E中是DTO
直接用来对应表示层就是VO


DAOQ?br />data access object数据讉K对象
q个大家最熟?zhn)Q和上面几个O区别最大,基本没有互相转化的可能性和必要.
主要用来装Ҏ(gu)据库的访问。通过它可以把POJO持久化ؓ(f)POQ用POl装出来VO、DTO


      ȝ下我认ؓ(f)一个对象究竟是什么O要看具体环境Q在不同的层、不同的应用场合Q对象的w䆾也不一P而且对象w䆾的{化也是很自然的。就像你对老婆来说是老公Q对父母来说是子女。设计这些概늚初衷不是Z(jin)唬h而是Z(jin)更好的理解和处理各种逻辑Q让大家能更好的ȝ面向对象的方式处理问?

      大家千万不要陷入q度设计Q大可不必ؓ(f)?jin)设计而设计一定要在代码中区分各个对象。一句话技术是为应用服务的?br />
Ƣ迎指正?br />



M(jin)个图Q感觉没有完全表辑և自己的意思。。。。。谁帮忙完善下,最好能体现各个O在MVC中的位置
snap20070108.jpg

]]>
谈新手修lJ2EE武功?qing)学SSH的方?/title><link>http://m.tkk7.com/oaixgnaw/archive/2007/01/15/93852.html</link><dc:creator>?/dc:creator><author>?/author><pubDate>Mon, 15 Jan 2007 01:46:00 GMT</pubDate><guid>http://m.tkk7.com/oaixgnaw/archive/2007/01/15/93852.html</guid><wfw:comment>http://m.tkk7.com/oaixgnaw/comments/93852.html</wfw:comment><comments>http://m.tkk7.com/oaixgnaw/archive/2007/01/15/93852.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/oaixgnaw/comments/commentRss/93852.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/oaixgnaw/services/trackbacks/93852.html</trackback:ping><description><![CDATA[ <div id="yfppaeq" class="postTitle"> <a class="postTitle2" id="viewpost1_TitleUrl" href="/easyjf/archive/2007/01/11/93057.html"> <font color="#3468a4">谈新手修lJ2EE武功?qing)学SSH的方?</font> </a> </div> <font face="Verdana" size="2"> </font> <div> <font size="2"> <font face="Verdana"> <strong>  q是两封信,一来自网?/strong>adamed <strong>Q一是我的回复Q交的是初学者如何学?fn)J2EE?qing)SSH的问题,得到adamed许可Q这q里发出来跟大家分nQ欢q更多的朋友来交?br /><br /></strong></font> </font> </div> <div> <font face="Verdana"> <font size="2"> <strong> </strong> </font> </font> </div> <div> <font face="Verdana"> <font size="2"> <strong>主题Q?/strong> heasyjf团队各位大侠</font> </font> </div> <div> <font face="Verdana" size="2"> </font> </div> <div> <font face="Verdana" size="2"> <div> </div> <div>  (zhn)好Q我是一个在职Y件开发h员。我?5q开始接触java开发?6q加入北京一家公司到现在。我的工作是做J2EE开发。公怋用SSH架构QStrutsQSpringQhibernateQ进行开发?/div> <div>虽然q公司半q但是由于项目原因,真正只做q一个StrutsQHibernate的项目。现在我看了(jin)许多关于SSH的书。也看了(jin)一些代码,是感觉自己提高太慢?/div> <div> </div> <div>  偶然Z(x)在CSDN的blog上看?大侠 的blog知道?jin)EasyJF。很钦佩你们的勇气,敢于开创中国开源项目之先河?/div> <div> </div> <div>  ׃接触J2EE旉太短。而现在这L(fng)开源项目名目繁多。看?jin)Spring的一些源代码只感觉头晕到不行。我实在不知道该如何提高自己。所以斗胆给各位EasyJF的朋友写q封邮gQ请大家l我一些徏议好嘛?Q(׃公司使用SSH开发。所以不看这些东西还不行。)(j)该大家给些徏议该如何学习(fn)?/div> <div> </div> <div>psQ看?jin)EasyJF的介l我很想参与可惜能力实在有限。怕遭拒绝?/div> <div>我现在有一颗火热的?j)想提高Q想做技术,想ؓ(f)中国原创Z点力。但我也知道做技术不能Qw。故请各位帮忙?/div> </font> <font face="宋体, MS Song" size="3"> </font> <font face="Verdana" size="2"> </font> </div> <div> <font face="Verdana" size="2">  adamed</font> </div> <div>  2007-01-09 </div> <div> </div> <p> <font face="Verdana" size="5"> <strong>下面是我的回信:(x)</strong> </font> </p> <div> <font face="Verdana" color="#0000ff" size="2">(zhn)好Q?/font> </div> <div> <font face="Verdana" color="#0000ff" size="2">  感谢你对EasyJF的关注以?qing)对国内开源的支持Q国内环境普遍Qw,因ؓ(f)有太多像<a ><font color="#ff0000">春迷</font></a>q样的h存在Q搞得大安不敢表达自己的思想?jin),因此q希望以后能l箋多对国内开源hl予支持?/font> </div> <div> <font face="Verdana" color="#0000ff" size="2"> </font> </div> <div> <font face="Verdana" color="#0000ff" size="2">    关于(zhn)来信中说到的问题,我觉得可能是你对java的基的掌握还不够的原因,单来说就是内力不够。好比中国传l武侠小说中l武人的内力问题Q降龙十八掌q样的绝世掌法,要是没有一定的内力作基的话Q就只能是降蛇十八掌Q甚臌都降不了(jin)。虚竹小和尚的武功也是因为有?jin)高q内力Q才能变得那么牛的?/font> <font face="Verdana" color="#0000ff" size="2">而修lJ2EE武学的内力,我认为大致分Z层,初层次是JAVA基础Q第二层ơ是OO思想?qing)模式,W三层次是特定领?如Web开发相x术规范、Servlet规范、JPA规范、EJB3规范{?、专业知识的学习(fn)。有?jin)这些内力,不管他是SSHq是EasyJFQ用v来都?x)非常容易的?/font> </div> <div> <font face="Verdana" color="#0000ff" size="2"> </font> </div> <div> <font face="Verdana" color="#0000ff" size="2">  SSH属于框架Q属于工P也是中间件。他们是用来提高我们的开发效率,提高我们软g产品的可l护性、可扩展性乃xh的?/font> </div> <div> <font face="Verdana" color="#0000ff" size="2"> </font> </div> <div> <font face="Verdana" color="#0000ff" size="2">  他们里面有很我优U的设计理念及(qing)模式应用。比如,</font> <font face="Verdana" color="#0000ff" size="2">struts属于MVC框架Q关键是要了(jin)解MVC的概念及(qing)大致原理Q掌握就很容易了(jin)Q而hibernate属于ormpȝQ属于持久层的解x案,同样需要对ORM的概念及(qing)原理有一个M的了(jin)解,必要时可以去查查EJB1?qing)EJB2里面用于持久层的Entity Bean的用。而spring属于应用E序框架Q其核心(j)是IOC容器以及(qing)AOPQ把q两个核?j)概?也可UCؓ(f)大模??jin)解以后Q再加上一定的内力修ؓ(f)Q其它就都不难了(jin)。Spring中还集成?jin)很多适用东西(不过q些东西80%的在某一个项目中可能一直用不上)Q比如对JDBC的封装、自qMVC、对动态语a的简z访问等Q这些你Ҏ(gu)自己的项目情冉|选择学习(fn)Q用到的时候再看看他的文档Q一个项目下来应该就能把握?/font> </div> <div> <font face="Verdana" color="#0000ff" size="2"> </font> </div> <div> <font face="Verdana" color="#0000ff" size="2">  说了(jin)那么多,我篏?jin),你一定也有点晕了(jin)Q下面结合你的情况,单发表一Ҏ(gu)的徏议:(x)</font>        </div> <div> <div> <font face="Verdana" color="#0000ff" size="2">  Q、用一q的旉慢慢提升自己的内力,然后q期间可以通过下面的方法同步学?fn)用ssh?/font> </div> </div> <div> <font face="Verdana" color="#0000ff" size="2">  2、看一些国内作者原创的书籍Qƈq行相关代码Q比如孙卫琴的Struts?qing)Hibernate{入门教E,|时飞的Spring教程。他们的书都通谷易懂Q很多属于他们在学习(fn)q程中的Ҏ(gu)记录Q因此一定非常好懂。不要一下子去读Rod的《J2EE Without EJB》,或者是Spring开发团队编写的《Spring框架高~程》,甚至《Spring in action》!׃很多~故Q这些书看了(jin)你一定会(x)更晕?/font> </div> <div> <font face="Verdana" color="#0000ff" size="2">  3、下载一些国内原创的SSH应用源码CZ。国外有很多q样的,也可以多看看?/font> </div> <div> <font face="Verdana" color="#0000ff" size="2">  4、运行这些框架所附带ExampleCZQƈ?jin)解其设计原理,q能单修攏V?/font> </div> <div> <font face="Verdana" color="#0000ff" size="2">  5、运行ƈ多看q些框架的测试代码。要像买彩民分析采票走势Nh慢琢分析?/font> </div> <div> <font face="Verdana" color="#0000ff" size="2">  6、在自己的项目中多动用,熟练使用一个开发工P如EclipseQƈ能掌握程序调试技巧?/font> </div> <div>    </div> <div>  <font color="#ff0000">最后,关于Spring的学?fn),可以看看我们最q在~写的《深入Spring 2Q轻量J2EE开发框架原理与实践》的?sh)子版,现在有两章可以下载,比较适合入门Q?/font>|址是:(x)<a ><font color="#3468a4">http://www.easyjf.com/spring</font></a>?/div> <div> </div> <div>  另外Q我准备你给我的信及(qing)我给你的回信攑ֈ我的blog上,供大家分享我们的交流Q不知道(zhn)是否愿意?</div> <div> </div> <div>  :(x)学习(fn)愉快Q工作顺利!</div> <div> </div> <div>    </div> <div>  EasyJF开源 大(chng)</div> <div> </div> <div>  2007-01-10</div> <img src ="http://m.tkk7.com/oaixgnaw/aggbug/93852.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/oaixgnaw/" target="_blank">?/a> 2007-01-15 09:46 <a href="http://m.tkk7.com/oaixgnaw/archive/2007/01/15/93852.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐几个览器开发工?http://m.tkk7.com/oaixgnaw/archive/2007/01/15/93849.html?/dc:creator>?/author>Mon, 15 Jan 2007 01:44:00 GMThttp://m.tkk7.com/oaixgnaw/archive/2007/01/15/93849.htmlhttp://m.tkk7.com/oaixgnaw/comments/93849.htmlhttp://m.tkk7.com/oaixgnaw/archive/2007/01/15/93849.html#Feedback0http://m.tkk7.com/oaixgnaw/comments/commentRss/93849.htmlhttp://m.tkk7.com/oaixgnaw/services/trackbacks/93849.html 推荐几个览器开发工?/a>
    做web开?q了(jin)Q居然才发现有这么好的浏览器开发工P真是惭愧?br />
   
    做Java的web开发,肯定M开览器,现在行的浏览器除了(jin)微Y的IEQ还有其他流行的览器:(x)firefox,opera。俗话说Q“欲要善其事Q必先利其器”,下面我就列出工作中针对这些浏览器常用的工兗?br />1.Instant Source
q是一N对IE的工兗对|页源文件的查看Q可以我们获得更多与网늛关的信息Q对|页制作者来_(d)一些设计得较有特色的网,通过对其源代码来查看以作q一步地学习(fn)借鉴更有必要了(jin)。但在IE中查看源文g极ؓ(f)不便。Instant Source是一个非常实用的IE插gQ只要你用鼠标指向网上的某一元素Q它的HTML代码便即时显C出来,配合Shift、Ctrl键的操作Q还可以锁定昄的源代码和显CHTML代码的上U元素。此外,通过鼠标q可以直接获取网上各种颜色的R、G、B值及(qing)HEX代码?br />2.ieHTTPHeaders
q是一N对IE的工兗我们进行web开发的时候,使用的就是http协议Q这个Y件能够帮助我们查看http协议的表头的信息?br />3.Internet Explorer Developer Toolbar
q是一N对IE的工兗IE Developer Toolbar Ҏ(gu)如下:(x) Q浏览和修改Web늚文档对象模型QDOMQ。-通过多种技术方式定位、选定Web上的特定元素。-止或激zIE讄。-查看HTML对象的类名、IDQ以?qing)类似链接\径、tab序、快捷键{细节。-描绘表格、单元格、图片或选定标签的轮廓。-昄囄象素、大、\径、替代文字等。-x重定义浏览器H口大小?00x600或自定义大小。-清空览器缓存和cookieQ被清除可从所有对象或l定域中选择。-直接讉K兌W3C规范参考、IE开发组blog或其他来源。-昄设计时标,帮助寚w对象。该工具条可集成在IEH口Q或以Q动窗口Ş式存在\\使用Ҏ(gu):安装好以?打开IE,在菜单栏中选择 查看---工具?勾上 Developer Toolbar
4.FireBug
q是一N对FireFox的工?可以查看和(f)时修改HTML源代码、查看CSS定义、调试JavaScript.其是在firefox上调试javascript功能非常的强大,但是firefox对javascript的兼Ҏ(gu)没有IE好,所以这ƾ插件就?x)有很大的局限性?br />5.script debugger
q是一N对IE的javascript调试工具。此工具的特Ҏ(gu)yQ功能齐全,debug时能够单步执行,能够昄变量QObject的|~点是不够稳定,很容易出错,出错以后q个工具再也打开不了(jin)?br />6.microsoft script editor
q是一N对IE的工?调试javascript的功能非常的强大Q他是跟随office发布的,q个工具很稳定,一般不?x)出错,调试javascript需要的功能都具有,唯一的缺Ҏ(gu)占内存较多,比较慢,如果内存的话可以考虑使用script debugger.


]]>struts+hibernate的替代方案:(x)struts+newxy?http://m.tkk7.com/oaixgnaw/archive/2006/09/11/69018.html?/dc:creator>?/author>Mon, 11 Sep 2006 12:14:00 GMThttp://m.tkk7.com/oaixgnaw/archive/2006/09/11/69018.htmlhttp://m.tkk7.com/oaixgnaw/comments/69018.htmlhttp://m.tkk7.com/oaixgnaw/archive/2006/09/11/69018.html#Feedback1http://m.tkk7.com/oaixgnaw/comments/commentRss/69018.htmlhttp://m.tkk7.com/oaixgnaw/services/trackbacks/69018.htmlnewxy技术网站:(x)http://www.newxy.net
    在java的web开发领域较ȝ(ch)的是数据库操U,如果有工兯像delphi开发数据库q用pȝ那样高效Q它一定会(x)受到开发者的Ƣ迎?

    l过五个斚w的比较,newxy+struts WEB开发与deiphi桌面开发相比,速度更快Q能力更强?

    newxy是hibernate的替代者,struts+newxy是struts+hibernate的替代方案?

    struts的不I下面一文章有代表性:(x)《Struts的巨大烦(ch)?真的不适合大系l??a >http://dev.csdn.net/develop/article/85/85114.shtm?br />主要观点是:(x)
     一、{到展C层Ӟ需要配|forwardQ每一ơ{到展C层Q相信大多数都是直接转到jspQ?而涉?qing)到转向Q需要配|forwardQ如果有十个展示层的jspQ需要配|十ơstrutsQ?而且q不包括有时候目录、文件变_(d)需要重C改forwardQ注意,每次修改配置之后Q?要求重新部v整个目Q而tomcateq样的服务器Q还必须重新启动服务器,如果业务变更复杂频繁的系l, q样的操作简单不可想象。现在就是这P几十上百个h同时在线使用我们?pȝQ?大家可以惌一下,我的?ch)恼有多大?br />    二、当面表单需要自动变化或者频J变化时?br />    对于一个成熟的MISpȝ来说,面表单肯定是不固定?甚至象有些系l,面表单是存在数据库中, 需要填写的表单在页面自动生成,比如填写一个h员基本信?本来只需要填?姓名、性别、出生年?三个指标Q?而我后来需要增加籍贯这L(fng)指标Q我只需要在数据库中dc诏q个记录Qƈ在页面就能自动增加籍贯这L(fng)表单??struts在这斚wQ其优势反而变成了(jin)不Q我参考了(jin)非常多的人力资源理pȝQ这些系l几乎都能够做系l里面就可以控制人员信息的指C, q行使展C层能随之灵zd化,如果使用?jin)strutsQ这些灵zL就Ҏ(gu)用不上。 同时Q如果页面表单频J变化时Q就需要频J修改formbean对应的方法和属性,而每ơ修改之后,p求重新部|Ԍ或者重新启动服务器……?br />    hibernate的不I下面是一位网友的看法Q具有代表性:(x)
    一、对象与数据库的映射Q关键在于对象关pȝ映射Q但是没做到很理惻I配置q多Q控制复杂, 另外q会(x)出错。其实本质在于对象不够自由?br />    二、事务处理。这点上更容易出问题Q相对于各种各样的事务管理器Q要兼容是一个大问题Q?d在各U应用服务器上有很多问题。其本质在于创徏?jin)一个自我数据存取小环境Q必焉临各U兼定w题?br />    三、HQL语言。徏立对象查询语aQ类SQLQ但是不同于M一USQLQ调试环境复杂。本质在于创Z(jin)一U语aQ增加学?fn)成本?br />    q位|友q提Z(jin)减化和退化方案?

    struts+newxyx以在开发效率上比struts+hibernate能提高十倍、甚臛_十倍,是因为克服了(jin)struts与hiberate的不?br />    利用newxy DAOc,标签Q?struts+newxy可以在以下几个方面不用写java代码Q不用配|struts?

    1.数据库的增、删、改Q?
    2.Ҏ(gu)询所得数据缓存,指定~存旉Q?
    3.数据库字W编码与本地字符~码转换Q?
    4.文g上传Q上传大控Ӟ
    5.文g下蝲Q下载记敎ͼ
    6.囄昄Q?
    7.数据分页昄Q?
    8.客户端标记记录集哪条记录被选择Q?

    因ؓ(f)可以不写java代码Q不用徏立ActionFormcRActionc,因而不用配|strutsQ不用重新编译类文g、不用重新打包、不用重启服务器?可以克服struts的不?br />    在克服hibernate的不x面,newxy采用“退化”和“进化”ƈ用的Ҏ(gu)?br />    newxy在进行数据的查询、增、删、改旉?x)调用一注册Ҏ(gu)Q根据业务涉?qing)到的数据库相关数据源名和表名进行注册?注册的目的是要获得表字段对应的javacdQ主关键字段名,d键字D长度等数据Q保存在一个单子实例中Q以供DAOc调用?如果已注册不再注册?br />    可以对多表查询语句注册,如:(x)“select a.field1,b.field2 from table1 as a,table2 as b where ...";
    可以对跨数据源的查询注册。如Q?select a.field1,b.field2 from table1 as a,DB3.dto.table2 as b where ...";
    如果是数据增、删、改Q则是对单一表注册;
    ׃struts+newxy用即时注册的Ҏ(gu)Q可以不象hibernate那样用静(rn)态文件媄(jing)数据库到值对象类。开发者不用配|Q何文件。可以用Q意查询语句,克服“对象不够自由”问题?br />    hibernate通过配置文g讄表之间的关系Q有一定意义,newxy在这斚w是“退化”的Q但struts+newxy在处理数据库表之间关pL面是很容易的?br />    在事务处理方面,newxy提供?jin)一事务cnet.newxy.dbm.Transaction。它可以多个数据库的操作放在一个事务中。由于DAOcd数据操作前的注册Ҏ(gu)得到的表?qing)其字段各种?gu)都是与数据库直接相关的Q而不是事先用?rn)态文件媄(jing), 因而极发生错误;开发者可以通过Transaction的方法ؓ(f)不同的数据库讄不同的隔ȝU;可以讄操时回滚旉Q在讄的时间内事务没有完成Q会(x)有一U程q行q预Q将事务回滚?br />    hibernate的HQL语言是和数据库与对象影射规则盔R应的,它没有特别功能,主要是利用值对象类来查询数据?newxy也提供了(jin)一U查询语aNQL。开发者不需用特D的语法来构建查询语句。非常容易理解,不会(x)增加学习(fn)成本?

struts一旦与newxyl合C赯用是如此单,下列是struts+newxy代替struts+hibernate的例子?

        struts配置中,formBean的type是“net.newxy.struts_faces.DynaFormBean”,开发者不需另外设计ActionFormcR如Q?br />            <form-bean name="myFormBean" type="net.newxy.struts_faces.DynaFormBean" />

        用户从页面表单submit数据后,在ActioncȝҎ(gu)中,开发者可以用DynaFormBean代替struts ActionForm,用DynaDto代替hibernate 对象cR?br />        public ActionForward methodName(ActionMapping actionMapping, ActionForm actionForm,
                              HttpServletRequest httpServletRequest,
            HttpServletResponse httpServletResponse) throws Exception{
            ......
            DynaFormBean form=(DynaFormBean)actionForm;
            DynaDto dto=(DynaDto)form.getDto();
            dto.set_table("table1");//如果用户面没有传来数据库表名?br />            try{
                IFacade ifacade=IFacadeFactory.getFacade(httpServletRequest.getParameter("_dao"),
                      httpServletRequest.getLocale());  //l大多数情况是:(x)IFacade ifacade=IFacadeFactory.getFacade();

                //更新或插入,如果result==null,为updateQ否则ؓ(f)insert?br />                result = ifacade.update(dto);//或:(x)FormBeanUtils.update(ifacade, form);

                //删除记录
                ifacade.remove(dto);//?FormBeanUtils.remove(ifacade, form);

                //数据查询Q如果上传了(jin)W合newxy多项查询规则的数据。查询记录集攑֜newForm 的_coll属性中?br />                DynaFormBean newForm=new DynaFormBean();
                FormBeanUtils.createForm(newForm, httpServletRequest);
                ......
                //开发者如果想知道生成的sql语句Q可以这P(x)
                //string sql=form.get_sql();
                //׃开发者在Ҏ(gu)据进行操作时完全不需知道sql语句Q所以没有提供方法让开发者直接得到sql语句来控制数据操作?br />                //未来版本可能提供q样的方法?br />            }catch(Exception e){
                ......
            }
        }
        如果使用newxy的标{֏以不建立Actionc,不设|struts的formBean?qing)actionQ可以不写代码?br />   

newxy也提供了(jin)一些实用类。本文档是用newxy自n工具c轻村־立的?



]]>
爱护自己和你q人——预防癌?/title><link>http://m.tkk7.com/oaixgnaw/archive/2006/09/05/67841.html</link><dc:creator>?/dc:creator><author>?/author><pubDate>Tue, 05 Sep 2006 08:47:00 GMT</pubDate><guid>http://m.tkk7.com/oaixgnaw/archive/2006/09/05/67841.html</guid><wfw:comment>http://m.tkk7.com/oaixgnaw/comments/67841.html</wfw:comment><comments>http://m.tkk7.com/oaixgnaw/archive/2006/09/05/67841.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/oaixgnaw/comments/commentRss/67841.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/oaixgnaw/services/trackbacks/67841.html</trackback:ping><description><![CDATA[有关癌症<br /><br />三十多年前有一位服务于公卖局台北啤酒厂的张先生,参加该啤酒厂选派技术h员到国外深造的考试Q以优异的成l及(qing)根{在出国前经某公立医院体(g)发现Q罹(zhn)有像孩招_大小的肺部肿瘤,因而不能出国?<br />张先生非常失望之余,一直怀疑诊断有误;于是再到另一家医院检查,l果q是证实原来的诊断ƈ无错误。当时年d壮的张先生得到这L(fng)l症Q在人生l望之余Q多ơ打?sh)话l当时Q职台东县政府黄顺兴县长机要秘书的姓同学?br />姓同学便利用星期日赶到台北和张先生见面Q张先生向魏同学详述相关l望的详情和(zhn)观感受Qƈ请位同学协助其后事,恰逢魏同学与前任马偕医院院?949Q?5专精于癌症(f)床研I的吕革令博士)(j)pȝ交好友。当卛_议前往访求吕博士医治,起初张先生说不愿再看ȝQ以免徒增伤(zhn)Ԍ但魏同学说先前已以电(sh)话请教过吕博士ƈ安排好时_(d)张先生只好偕同前往吕博士住处造访。吕博士和张先生见面pQ魏先生是我的好友,介绍你和我认识是我们~䆾Q感谢上帝赐l我们这个机?x);我请教你Q『癌Zq叫l症Q你可知道吗Q』?br />张先生和先生都不知道如何作{?br />吕博士又_(d)(x)「hcdȝ?rn)症到目前为止只有两条路,W一条\是消灭病源,W二条\是增加抵抗力。但很奇怪的是,癌无论用?0或其它药物去消灭癌细?yu),可是癌细胞(yu)还没被消灭Q好的细?yu)却先被杀歅R另无论用什q充R补药,好的l胞(yu)q未吸收Q癌l胞(yu)却先吸收、让癌长得更快;因此可说上述两条路都行不通、所以叫l症。?<br />吕博士又_(d)(x)人类的聪明连登陆月球也都已经成功Q但Zq没有hL疑上qC条治癌的路是在钻牛角,另外扄三条路?感谢上帝赐给我以往在马偕医 院做癌症斚w的(f)床实验,q得院内各部同仁协助的机?x),我发现癌症病液检查的l果癑ֈ之百都是酸性反应。长期素食、且生活接近然的?jng)寺僧尼Q由于体质都偏属优质q性,所以尚没有发现|Ҏ(gu)癌症的病例。因此我大胆的断定在q性体质的状态下Q癌l胞(yu)是无法生ѝ甚x无法生存的。张先生我徏议你从现在v吃酸性的荤食c,多吃性食物,另外可吃l藻和带壌角汤Q改变你的体质,q励行接q自然的良好生活规律Q如果五q内不死、你没问题?jin),愿上帝祝你。?<br />张先生依照吕博士的徏议,认真改变吃的?fn)惯Q每天又吃绿藅R喝p汤,乐观加上每天适当的运动,一q后再到同一公立医院(g)查结果,发现肿瘤不但没有长大、反而已呈现萎羃状态,遂o(h)医院(g)查h员惊为奇q,五年后竟完全处于萎羃、至q于消失状态?<br />l过?jin)将q四十年岁月Q现在张先生的健h况完全正常,生活起居甚ؓ(f)愉快。张先生之后,有位前台东省立医院dN陈添寿先生,同样得到肺癌Q魏先生得知后将张先生的l过转告陈添寿先生,陈先生乃依照吕博士的q行改变体质Q结果与张先生同h癌症?<br />那时吕博士全家已UL国Q事后吕博士回来台湾再与先生见面时Q魏先生张先生和陈先生的经q告诉吕博士Qƈ提议׃们俩位亲自向吕博士陈qͼ请吕博士发表其改变体质之自疗成果报告。吕博士谦虚地回{说Q我q事已大Q?  且没有(f)床纪录不能做为成果。请先生{告亲友,如果友h认同的话Q请他们l箋做体验ƈqؓ(f)宣导........。?<br />兛_(j)自己也要兛_(j)别hQ?5H癌症病(zhn)属于酸性体质。健康h的血液是成弱性的Q约是PH7.35?.45左右。婴儿也是属于弱性的体质。成长期的成人有体质酸化的现象。根据一六百位癌症病h体液分布的研IӞ昄85H癌症病(zhn)属于酸性体质。因此,如何使体质维持在q性就是远ȝ病的W一步?br />酸性体质的生理表征Q?br />1.皮肤无光泽?br />2.香港脚?br />3.E做q动x疲劳Q一上公车便想睡觉?br />4.上下楼梯Ҏ(gu)气喘?br />5.肥胖、下腹突出?br />6.步伐~慢、动作迟~?br />ZqZ(x)形成酸性体质?<br />1.q度摄取乳酸性食?br />aQ肉cR奶酪制品与蛋、牛肉、火腿等皆属于酸性食品?<br />bQ摄取过量的酸性食品血液会(x)們֐酸性而变黏稠Q不易流到细血的末稍Q而易造成手脚或膝盖的冷寒症,以及(qing)肩膀늡和失眠等?<br />cQ年d壮时吃适量的肉cL对的Q但老年人则以蔬菜或鱼为宜?br />2.生活步调失常?x)造成酸性体?<br />aQ生zL调失怼(x)造成_与肉体的压力?<br />bQ据l计Q晚睡者罹(zhn)癌症的机率比正思h高出五倍?<br />cQhcL来就zd节奏的世界里Q无法事先储备睡眠或饮食Q也不能日夜颠倒?br />dQh体内脏受自律经控制Q白天主要是交感经zdQ晚上则由副交感经工作Q若使其错ؕ?qing)倒置Q就亦百病滋生?br />3.情Aq于紧张<br />aQ文明社?x)?x)造成的压力?br />bQ工作上或精上的压力。? <br />cQ当一个h承受_压力后,一旦紧张松弛,时会(x)造成猝死Q称为潜在性副肄质机能不全症?br />4.肉体的紧?br />aQ动手术之前应先(g)查肾上腺皮质是否正常。如果副肄质机能较差, 或手术压力远过副肾调整功能Q则可能造成病hM或其它不良媄(jing)响?br />bQ若发现病?zhn)脔R肿Q需详加询问病史?qing)服药状况,为长期服用肾上腺皮质贺尔蒙者,施以针灸要特别注意反应?br />cQ劳动或q动q度Q通宵打牌、开车等压力都应量避免?br />附录Q常见食物的酸碱?br />1.强酸性食品:(x)蛋黄、奶酪、白p做的西Ҏ(gu)柿子、乌鱼子、柴鱼等?br />2.中酸性食品:(x)火腿、培栏V鸡肉、鲔鱹{猪肉、鳗鱹{牛肉、面包、小麦、奶沏V马肉等?br />3.弱酸性食品:(x)白米、落q、啤酒、酒、a(b)炸豆腐、v苔、文蛤、章?泥鳅?<br />4.q性食品:(x)U豆、萝卜、苹果、甘蓝菜?z葱、豆腐等?br />5.中碱性食品:(x)萝卜qӀ大豆、红萝卜、蕃茄?香蕉、橘子、番瓜、草莓、蛋白、梅qӀ柠檬、菠菜等。 ?br />6.强碱性食品:(x)葡萄、茶叶、葡萄酒、v带芽、v带等?其是天然绿d含叶l素Q是不错的碱性健康食品,而茶cM宜过量,最佳饮用时间ؓ(f)早上?br /><img src ="http://m.tkk7.com/oaixgnaw/aggbug/67841.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/oaixgnaw/" target="_blank">?/a> 2006-09-05 16:47 <a href="http://m.tkk7.com/oaixgnaw/archive/2006/09/05/67841.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何让你的网站排名靠?http://m.tkk7.com/oaixgnaw/archive/2006/09/05/67840.html?/dc:creator>?/author>Tue, 05 Sep 2006 08:43:00 GMThttp://m.tkk7.com/oaixgnaw/archive/2006/09/05/67840.htmlhttp://m.tkk7.com/oaixgnaw/comments/67840.htmlhttp://m.tkk7.com/oaixgnaw/archive/2006/09/05/67840.html#Feedback0http://m.tkk7.com/oaixgnaw/comments/commentRss/67840.htmlhttp://m.tkk7.com/oaixgnaw/services/trackbacks/67840.html
成功案例推荐Qhttp://sooboo.com.cn/


q在l箋整理中,而且我们的网站也在不断优化中.........

1?|站建好后首先到各大搜烦(ch)引擎免费d你的|站

http://www.sowang.com/freesubmit.htm
http://bbs.5ixb.com/simple/index.php?t584.html

2?下蝲一个spider模拟? 来查看你|页被SE(g)到的信? 可以在这个网址查看你页面被搜烦(ch)引擎攉到的信息: http://www.webconfs.com/search-engine-spider-simulator.php, Ҏ(gu)q些信息, 修改面, L无用信息, 增加你认为有用的信息?

3?量不要把整个页面都用Flash或者图片来实现, q样SE无法扑ֈ面的有用信?

4?用标准代码设计网?一个页面最主要?个部分需要关? 一个是<head></head>, 另外一个是<boy></body>, 臛_q?部分应该设计好了(jin), SE喜欢从左到右,自上而下搜烦(ch)信息, 它认为页面上面的信息更重? 所以尽量把你要H出的信息放在页面的上面

5?<title>标志:
  title标志作ؓ(f)面的重要信? SE非常看重, 应该把本面要突出的信息_?0个字以内作ؓ(f)title的? 但不要用与页面无关的关键字作为title? 否则?x)被SE惩罚.

6?lt;Meta>标志:
  每页都加上关键词比较好,但是不要堆砌关键词,堆砌关键词会(x)被搜索引擎视Z弊,最好是??癑֭的内宏V在内容中有主要关键词,而关键词密度?Q到8Q之_(d)q是目前几个月的最?jng)_键词密度Q以后可能会(x)变)(j). 关键词要注意QTitle和网内容中含有关键词最重要、其ơ是Meta描述QMeta 关键词。然后网内容中?lt;h></h>之间的标题中是否含有关键词也很重要。Meta最重要的是DescriptionQ而Meta Keywords现在大型的搜索引擎都不会(x)在意Q比如Google和Yahoo都不?x)根据Meta Keywords来进行网|名。Description中关键词的原则同h搜烦(ch)量最大最相关的放在最前面Q比如我们网站是做汽车保险报L(fng)Q原来我们网站的关键字是q样描述?

<meta content="qh(hun)车险,搜保,搜保|?低h(hun)车险,搜保车险|?车险,北京车险,车险报h(hun),车险市(jng),搜保车险,汽R保险,车险|?华安车险,中保车险,中华联合车险,q_车险,太^zR?便宜车险,保险市(jng),在线投保"name="keywords">Q在baidu中打入“保险”,你会(x)发现“R险计”这个关键词的搜索量是最高的Q这个关键词不用Q等于浪费,按照癑ֺ定关键词搜索量的方法,排在最前面的关键词是:(x)车险计算,q_车险,Z车险,北京车险,强制车险,中保车险,太^zR?车险论坛,车险知识,上v车险,车险理赔,车险U类,保得车险|?车险营销,武汉车险,天^车险,车险|?中国车险|?|上车险Q所以我Ҏ(gu)q样Q?
<meta content="车险计算和R险投保尽在搜保网。国内首家网上专业代理^安R?Z车险,中保车险,太^zR险。向消费者提供^仗快速、高品质的汽车保险销售服务? name="DESCRIPTION">
<meta content="车险QR险计?q_车险,Z车险,北京车险,强制车险,中保车险,太^zR?车险知识,车险理赔,车险U类,车险|?|上车险,车险报h(hun)Q搜保网,车险报h(hun),搜保车险,汽R保险,低h(hun)车险,搜保车险|?qh(hun)车险,便宜车险,在线投保" name="keywords">
一般可以把q段子写C个title.lbi文g中,?
<title>搜保|?全国首家专业车险报h(hun)q_Qؓ(f)(zhn)提供精快速的|上报h(hun)服务</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta content="车险QR险计?q_车险,Z车险,北京车险,强制车险,中保车险,太^zR?车险知识,车险理赔,车险U类,车险|?|上车险,车险报h(hun)Q搜保网,车险报h(hun),搜保车险,汽R保险,低h(hun)车险,搜保车险|?qh(hun)车险,便宜车险,在线投保" name="keywords">
<meta content="车险计算和R险投保尽在搜保网。国内首家网上专业代理^安R?Z车险,中保车险,太^zR险。向消费者提供^仗快速、高品质的汽车保险销售服务? name="DESCRIPTION">
然后嵌入到页面中Q如
<HTML>
<HEAD>
<!--#include virtual="/Library/title.lbi" -->
</head>
<html>

7、我之所以把“R险报价”放在了(jin)后面Q是因ؓ(f)你按照我的方法在癑ֺ中搜索会(x)发现“R险报价”这个关键词Ҏ(gu)没有什么h搜烦(ch)Q所以放在后面,没有人搜索就表示没有人流Q关键词是别人的搜烦(ch)?fn)惯Q不是俺们做|页的自己想出来的,所以首先要分析什么关键词别h用的最?

8?javascript: SE一般对javascript不感? 量不要在页面的<head></head>间放|大量的javascript函数, q样?x)SE不知所? 而且大部分SE在爬行你的页面时都有旉限制, 或者最大信息量限制, 在前面放|很多javascript代码?x)SEq行~慢, 降低对你的兴? 最主要q是q部分代码把你后面有用信息占用了(jin),使得SE无法获取你页面有用的信息, 如果你实在要用javascript, 量把所有javascript代码攑֜一个js文g? 然后在页面连接这个JS文g卛_

9?l所?lt;img>加上alt属? q个一个好的习(fn)? 其是指向一个连接的囄一定要加上要连接网址的关键信? SE?x)对有连接指向的囄的ALT属性进行识? 但对无连接的囄不作处理.

10?<h1><h2>: SE对这L(fng)信息很感兴趣, 而且?x)对其增加权? 所以把最重要的信息用<h1></h1>标识出来, 把次重要的信息用<h2></h2>标识出来. 注意: 一个页面应该只有一?lt;h1></h1>, 可以有多?lt;h2></h2>, 否则?x)被SE认ؓ(f)是作弊的

11?量不要用mouseovers, 最好在css里用hover来实?

12?量不要套用多层ơ的<table>, SE一般最多只能读??lt;table>的嵌? 如果多了(jin), 它就懒得MM(jin), 造成你的有用信息没有被检到.

13?<b><strong>: q些标识也会(x)被SE很好的注意到, 虽然权重不如<h1><h2>那么? 可以灉|使用.

14?一个页面的q接数量最多不要超q?00? google认ؓ(f)只有?00个是有用?

15?对于搜烦(ch)引擎来说Q页面各个元素的权重比例?
  内部q接: 10 ?
  标题title: 10 ?
  域名: 7 ?
  <h1>?lt;h2>: 5 ?
  面W一个段落的开始部? 5 ?
  路径和文件名: 4 ?
  怼关键? 4 ?
  每个句子的开始部?1.5 ?
  <b>?lt;strong>: 1 ?
  内容: 1 ?
  Title属? 1 ? (注意不是<title>, 是title属? 比如<a href=?title=”?gt;)
  alt 标志: 0.5 ?
  <meta>的description属? 0.5 ?
  <meta>?keywords属? 0.05 ?

16?量用HTML的格? 如果的确要用数据? 量减少参数的长?

17?我的|站( http://www.sooboo.com.cn/ )以前昄商品都是用一个aspx文g通过参数传递的, l果q个aspx文g只能被SE收录1? 而且排名Ҏ(gu)找不? 后来我把动态页面{换成?jin)?rn)态页?用HTML格式昄, 每个商品一个HTML面, l果google收录增加?000多页, 而且每个商品在google的排行基本都在第一了(jin), 一搜的也是. 最q来自一搜的讉K量成倍增? 一搜基本上只对HTML文g感兴? 对动态页面不太感?
可以写个基类Q如





public class BasePage: System.Web.UI.Page
{
public BasePage()
{

}
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
string name=Request.Url.AbsolutePath.Substring(1,Request.Url.AbsolutePath.Length-1).Replace("aspx","htm");
string newurl="";
if(name.IndexOf("/")>0)
{
newurl=Server.MapPath("../") + name;
}
else
{
newurl=Server.MapPath("./") + name;
}
MemoryStream ms = new MemoryStream();
StreamWriter sww = new StreamWriter(ms);
StreamWriter swr = new StreamWriter(newurl);
System.Web.UI.HtmlTextWriter htmlw = new HtmlTextWriter(swr);
base.Render(htmlw);
htmlw.Flush();
htmlw.Close();
string strLL = System.Text.Encoding.UTF8.GetString(ms.ToArray());
Response.Write(strLL);
Response.Redirect(Request.Url.AbsoluteUri.Replace("aspx","htm"), true);
}
}
然后在需要生成静(rn)态页面的面中承就可以?
18?反向q接:google非常重视反向q接, 可以通过以下方式来增加反向连?

A: 友情q接, 最好找PR高的, 而且被SE收录很多面, 排名靠前的连? 千万不要和看hPR很高, 但一眼就看出来是作弊的网站连? 也不要和PR状态栏是灰色的q接, q样的网站有可能是没有被收录, 也有可能是被惩罚? 另外, q接的时候也不一定非要连接你的首? 也可以多q接些你的其他重要的面, 比如|站的站点地囄面, 首页外部q接不要太多,不超q?0? 20个以内最?
  B: 登陆|址? 象dmoz, yahoo{目录要使出n解数来登? 但不要隔两天q陆一? 其他的网址站登陆越多越? 至于如果扄址? 你可以看看你的竞争对手在google里的反向q接, 在google输入 “link:www.****.com? 可以看到对方网站的反向q接, 你可以挨个进入搜索的l果, 在每个页面里也申请你的连? 可以方便的找到很多连接网址?
  C: 留言板留a: cM|址站登? 但写法一定要U学, 否则没有意义了(jin), 一般我是这样写?
  <a href=http://?>|站?lt;/a>
  |站?
  |站?http://.... 甌和贵站友情连?
  D: Blog博客
  现在博客也在中国兴v? 完全可以充分利用一? 可以注册一个帐?来宣传你的网? 也可以直接发表评? 评论内容基本和留a板的格式一?
  E: 论坛宣传
  q个我就不多说了(jin), 反正不要让h一看就是广告就行了(jin)

19?内部q接
  很多人只看重外部q接, 岂不知道内部q接也相当重? 我的基本思\? 所有页面都包含主页和其他重要页面的q接, 和本늛关的面也加上连? 最l让你所有的面都能够互q?

20?域名和文件名
  SE看重域名和页面文件名, 但多情况? 域名已经不想改了(jin), 只好修改文g名了(jin), 量让你的文件名包含面关键字的英文名称

21?不要用作弊的手段来欺骗SE, 即成功一? 也不?x)成功永? 到时候肯定会(x)被惩|? 所谓善恶到头终有报, 只挣来早与来q?况且, 合法优化|站也完全可以达到这个效?

22?|站速度的媄(jing)响,|站速度对SE的排名也很有影响, 讉K速度? ?x)让SE爬行你页面的时候失去耐? 从而减你面的信息量, 让你的排名靠? 如果你的服务器非常慢, 应该考虑重新换应该快点的服务器了(jin)

23?l常更新你的重要面, 哪怕只是更换应该图片也? q样?x)让SE?jin)解C的网站更新很? 有生命力, 对你的重视程度会(x)增加, 排名当然也会(x)提高? 我网站基?天google更新一

24?用Blogger.com做一个甚臛_个个人博客,博客中首几文章中含有搜保|的链接。将q个博客的RSS提交到Yahoo和各个rssd站点Q因为rss?x)每天搜索你的网站,一旦rss被别的网站引用,q于别人免费的间接的加入了(jin)你的搜保的网站,而你Ҏ(gu)不需要交换链接,q种链接比交换链接更有效

可以从以下网站中d

http://www.feedss.com/

http://www.okrss.com/search.html

http://www.rss-cn.com/

http://rss.blogbeta.com/

http://www.92rss.com/cn/

http://www.bloghome.cn/posts/506

http://www.sorss.com/rss.htm

http://bbs.5ixb.com/thread.php?fid=49

http://www.rssfav.com/baimin/rss.htm

http://www.jingzhengli.cn/baogao/f20060613.htm

http://www.700net.com/article.asp?id=112

http://blog.caihongxu.com/index.php/archives/70-OEAEBlogRSSyCo.html

http://www.rsschina.com.cn/



25?在大型的汽R|站上要求买一个广告位Q买之前先看看PR|q种地方往往PR??左右?000?000元以下就可以搞定Q看你的囄大小Q,有的甚至100?00元就可以搞定。在q种PR4以上的网站上攑ֹ?个月以上Q你的网站至会(x)有PR?。这时候h自然就?x)滚滚来?

26?我用的最多的q有一个方法是写文章。比如我要做汽R保险Q我?x)找到排名靠前的人气|站Q或者个人网站,我不?x)说要交换链接,我?x)说我有一我自己写的专业文章Q和你的|页内容很相养I我愿意免Ҏ(gu)在你的网站上Q你只需要允许我的文章中保留我的出处pQ而这个出处就是我的真正要赚钱的商业网站链接,q个Ҏ(gu)如果你的文章真的写的很好Q有三分之一的站长会(x)同意。而这些网站都是我研究qPR很高Q或者h气很旺的|站Q所以在q些|站上一旦发表了(jin)你的文章Q你的网站PR自然?x)提高,而且人气?x)上来,q个文章一定要原创q且题材吸引人。我的经验是吸引人的题材90Q都是“我是如何解?.....?"之类的文章?br />

]]>
你练C么程度了(jin)QJ2EEQ?/title><link>http://m.tkk7.com/oaixgnaw/archive/2006/09/05/67830.html</link><dc:creator>?/dc:creator><author>?/author><pubDate>Tue, 05 Sep 2006 08:13:00 GMT</pubDate><guid>http://m.tkk7.com/oaixgnaw/archive/2006/09/05/67830.html</guid><wfw:comment>http://m.tkk7.com/oaixgnaw/comments/67830.html</wfw:comment><comments>http://m.tkk7.com/oaixgnaw/archive/2006/09/05/67830.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/oaixgnaw/comments/commentRss/67830.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/oaixgnaw/services/trackbacks/67830.html</trackback:ping><description><![CDATA[l常?x)跟一些朋友讨论怎么h能学好Java,学到什么程度才撑握了(jin)Java的问题。其中有一个J2EEE序员层ơ及(qing)武功修ؓ(f)的问题,有点意思。这里就把讨论的内容大致整理一下发出来Q大家l讨论? <p> </p><p>  U观国内的Y件行业,靠Java吃饭的程序员q真不是,而且JavaE序员是有很大优感的,毕竟对于很多用b/s搞开发的业内朋友来说QJava技术意味着隑ֺ大、门槛高Q因此相Ҏ(gu)说JavaE序员比其它的程序员(如php?net)收入高就理所当然。然而J2EE所涉及(qing)到的范畴是很q的Q不能一个JavaE序员就概括?jin)事Q而应该具有层ơ及(qing)水^之分Q很多时候经帔R要进行分cL评Q有时他评、有时自评?/p><p>  谈到国内J2EE领域的程序员层次水^Q当前流行的U谓?qing)评U不外乎׃面几U:(x)</p><p>  W一U是_N掌握记事本、Dreamweaver{工h写JSP+JavaBean数据库应用的是J2EEE序员;<br />  W二U是用JBuilder、Eclipse{专用Java开发工具写着一堆一堆过E式Java BeanQ而且q能_NStruts+Spring+Hibernate{应用框架的高J2EEE序员;<br />  W三U是用Together建模Q然后生成一堆Java接口或代码,开口闭口都是设计模式的资深JavaE序同及(qing)高pȝ分析、构架师Q?br />  最后还有一U是整天在BlogJava或JavaEye上谈l论道的大师们,q些大师技术水q难以触摸,武功门派也各L(fng)Ԍ不好归类Q有时不好称为程序员Q因为有的时候他们甚至不写或者写不出E序Q,但又做着与J2EEE序员密切相关的事情Q我们暂且就归ؓ(f)“牛牛”或“大师”?/p><p>  U谓毕竟只是U谓Q带有点主观或者功利色彩,有时很难鉴定一个h应该属于什么,因此Q我们再从纯技术的角度Q也x功修为的角度Q作?jin)一个简单的分析?qing)归c,?EE领域E序员大致分成以下几个层ơ,可以作ؓ(f)大家自评的一个参考标准:(x)</p><p>  W一个层ơ:(x)_N掌握Java语法、能调试基本的程序错误,_N掌握JSP+Java Bean写一些Nq前ASP、PHPȝ的Java Web应用E序Q如论坛、网站新d布系l、OA、网上商城等Q,_NJDBC使用、精通SQL语句、精通XML{?/p><p>  W二个层ơ:(x)掌握设计模式原理?qing)应用,掌握ZOO的分析及(qing)设计Ҏ(gu),q能_N熟l用几UJava专业设计?qing)开发工P_N掌握流行的J2EE框架如Hibernate、EJB、Webwork、Spring的原理及(qing)应用Q精通J2EE中一两个l成部分(如Servlet、EJB{?的工作原理及(qing)l节?/p><p>  W三个层ơ:(x)林的高僧有两种Q禅僧及(qing)武僧。J2EEE序员的W三个层ơ也同样有禅、武两个分支Q这里我们重点分析一下:(x)</p><p>  W一个分支属于走的禅僧线路。在l完W二个层ơ中的各U武功基上,l合实际目中的千奇百怪的用户需求,游刃有余的选择适合的技术方案ؓ(f)客户解决问题Qƈ形成自己的一套解x案。达到这一个层ơ的J2EEE序员已l不在乎使用M工具、Q何框架了(jin)Q而是Ҏ(gu)不同的对手,使用不同的武器或招式来应寏V好比小李飞刀一P只有辑ֈ?jin)“手中无刀、心(j)中有刀”的境界Q才能达到“出手一刀Q例不虚发”的效果。这一层次的武功属于一个熟l度问题Q刀l得多了(jin)、遇到的Ҏ(gu)多了(jin)Q再加上前面的武功修为,q做不C不虚发,也可辑ֈ十发?ji)中?/p><p>  W二个分支属于走的武僧线路,在撑握熟(zhn)第一二个层次中涉?qing)到的内容后Q进一步专研ƈ撑握J2EE底层开发,J2EE规范制订、规范实现、Java虚拟机的工作原理、各U常见的J2EE服务器内核工作机制、内存管理、进E机制、源代码{。因为涉?qing)的很多东西都比较抽象,代码也很多,l这一层的武功需要有很好的资质及(qing)耐性、ƈ兯得有一定的环境?qing)条件。好比神雕大侠杨q拿起“玄铁剑”,q练成“暗焉掌”的成长q程Q需要前面的武功修ؓ(f)作基Q更需那只威力武雕的帮助指点及(qing)他处处ؓ(f)民、惩奔R恶的侠之?j)态?br />  <br />  胡侃?jin)这么多Q现在来Ҏ(gu)自己情况算一下自q份量Q结果如下:(x)</p><p>  W一层 l到8成;<br />  W二层 l到5成;<br />  W三层 准备走禅僧线路,当前是l到1成;<br />  <br />  唉,后面的武功提升越来越难,真不知道要到何年何月才能辑ֈ10成啊。你的武功练到哪一个层ơ了(jin)Q不防亮出来大家切磋切磋。嘿嘿,要是有一天,׃中国的JavaE序员h手一把“玄铁剑”、hZ(x)低(k)暗焉掌”,那还?jin)得Q汗...Q写着写着居然做v白日梦了(jin)Q不好意思,此打住?/p><img src ="http://m.tkk7.com/oaixgnaw/aggbug/67830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/oaixgnaw/" target="_blank">?/a> 2006-09-05 16:13 <a href="http://m.tkk7.com/oaixgnaw/archive/2006/09/05/67830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://yisaoma.com" target="_blank">99þۺϾƷ</a>| <a href="http://468862.com" target="_blank">ĻƷѾþ</a>| <a href="http://sdsupuchem.com" target="_blank">þaaëƬѲŰ</a>| <a href="http://234an.com" target="_blank">þþþѿaԿ</a>| <a href="http://53reniao.com" target="_blank">þþƷһ</a>| <a href="http://600c63.com" target="_blank">avѸ߳ˮ</a>| <a href="http://o091i.com" target="_blank">Ƶѹۿ97</a>| <a href="http://fz166.com" target="_blank">VAۺVAVA</a>| <a href="http://kk600700.com" target="_blank">ɫ͵ר</a>| <a href="http://hyhtzh.com" target="_blank">˾þô߽槼</a>| <a href="http://8xcb.com" target="_blank">avۺר</a>| <a href="http://8x6c.com" target="_blank">У԰޴ɫС˵ϼ</a>| <a href="http://d3q4.com" target="_blank">xvideos</a>| <a href="http://baocaoluoli.com" target="_blank">þþþþþþþùƷ</a>| <a href="http://www99383.com" target="_blank">Ƶ</a>| <a href="http://c2277.com" target="_blank">޹˾þþƷ99</a>| <a href="http://gxnnzk.com" target="_blank">AVרAVͬ</a>| <a href="http://www-7607.com" target="_blank">պþþþþ</a>| <a href="http://chuguo65.com" target="_blank">AV㽶һ</a>| <a href="http://worldbiao.com" target="_blank">þþþþþùѿ </a>| <a href="http://dazhe777.com" target="_blank">պ</a>| <a href="http://513573.com" target="_blank">ؼëƬ69ѹۿ</a>| <a href="http://ddhlj.com" target="_blank">պƷһ</a>| <a href="http://564ka.com" target="_blank">18վڵ</a>| <a href="http://ytshdiping.com" target="_blank">?v˿߹ۿ </a>| <a href="http://siminglighting.com" target="_blank">ëƬպëƬ</a>| <a href="http://www398ph.com" target="_blank">޾Ʒɫһ</a>| <a href="http://cqkalai.com" target="_blank">þƵһ</a>| <a href="http://bjgjjrxy.com" target="_blank">Ƶ߹ۿ </a>| <a href="http://445645.com" target="_blank">ɫ˿ѹۿվ</a>| <a href="http://6123fa.com" target="_blank">޾ƷƬ߹ۿ</a>| <a href="http://shiliuvip.com" target="_blank">޾ƷŮ</a>| <a href="http://dgyinhezy.com" target="_blank">Ůվ</a>| <a href="http://hezuoedu.com" target="_blank">þþùƷר</a>| <a href="http://61255555.com" target="_blank">ձƵ</a>| <a href="http://zmnhssn.com" target="_blank">ۺϾþۺϼþ</a>| <a href="http://www77714.com" target="_blank">AVרAVѿ</a>| <a href="http://yy885.com" target="_blank">ҹѸƵ</a>| <a href="http://857434.com" target="_blank">һëƬѲ</a>| <a href="http://gachi1151.com" target="_blank">7777þĻ</a>| <a href="http://sy8989.com" target="_blank">Ƶվ߹ۿ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>