﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-记录点滴</title><link>http://www.blogjava.net/397879213/</link><description /><language>zh-cn</language><lastBuildDate>Fri, 10 Apr 2026 08:38:02 GMT</lastBuildDate><pubDate>Fri, 10 Apr 2026 08:38:02 GMT</pubDate><ttl>60</ttl><item><title>log4j之配置文件加载过程分析-properties文件和xml文件</title><link>http://www.blogjava.net/397879213/archive/2012/05/04/341973.html</link><dc:creator>liuliang</dc:creator><author>liuliang</author><pubDate>Fri, 04 May 2012 04:27:00 GMT</pubDate><guid>http://www.blogjava.net/397879213/archive/2012/05/04/341973.html</guid><wfw:comment>http://www.blogjava.net/397879213/comments/341973.html</wfw:comment><comments>http://www.blogjava.net/397879213/archive/2012/05/04/341973.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/397879213/comments/commentRss/341973.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/397879213/services/trackbacks/341973.html</trackback:ping><description><![CDATA[log4j是一个通用的log工具。使用log4j的时候我们通常设置properties文件或者xml文件来进行log的配置。<br />那么log4j对配置文件的加载过程是什么样的呢？下面以分析log4j的source的形式来进行说明。<br />&nbsp;一，properties文件 当用properties文件进行配置的时候，对应的src为PropertyConfigurator。这个PropertyConfigurator class继承了接口 Configurator，并实现doConfigure方法。 对properties文件进行读取的过程如下 <br />1，把properties文件的内容读取到Properties对象中保存。 使用方法： Properties props = new Properties(); FileInputStream istream = null; istream = new FileInputStream(configFileName); props.load(istream); istream.close(); <br />2，对读到的内容进行解析 <br />2.1进行是否输出内部异常信息的判断 ，通过是否指定参数&#8220;log4j.debug&#8221;来判断<br />&nbsp;2.2进行是否复位所有配置信息的判断，通过是否指定参数&#8220;log4j.reset&#8221;来判断<br />&nbsp;2.3进行是否设定广域log的level的判断，通过是否指定参数&#8220;log4j.threshold&#8221;来判断 <br />2.4进行RootLogger的设定 <br />2.4.1 取得RootLogger <br />2.4.2 取得RootLogger对应的Appender <br />2.4.2.1取得Appender的Layout,将Layout追加到Appender中 <br />//1 设定Layout的属性 //2 设定<br />Appender的属性 <br />2.4.3 将Appender追加到RootLogger中 <br />2.5进行LoggerFactory的设定<br />&nbsp;2.5.1 取得指定参数&#8220;log4j.loggerFactory&#8221;的值，并生成Factory类的实例 <br />2.5.2 设定生成Factory类的实例的属性 <br />2.6进行RootLogger以外其他Logger的设定 <br />2.6.1取得其他的category<br />&nbsp;2.6.1.1 设置category的level属性 <br />2.6.1.2 取得category对应的Appender 取得Appender的Layout,将Layout追加到Appender中 //1 设定Layout的属性 //2 设定Appender的属性<br />&nbsp;2.6.1.3 设置category的是否继承parent的属性 <br />2.6.1.4 设置category的输出log的渲染类<br />&nbsp;二，xml文件当用xml文件进行配置的时候，对应的src为DOMConfigurator。这个DOMConfigurator class继承了接口 Configurator，并实现doConfigure方法。 <br />对xml文件进行读取的过程,与对properties文件进行解析的内容大致相同.不再重复. 不同点有以下几个地方 <br />//1 使用DOMAPI读取xml文件,并从dom中取得各个node的内容.<br />&nbsp;//2 属性的名称不一样  <img src ="http://www.blogjava.net/397879213/aggbug/341973.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/397879213/" target="_blank">liuliang</a> 2012-05-04 12:27 <a href="http://www.blogjava.net/397879213/archive/2012/05/04/341973.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>黑客新手常用命令(转)</title><link>http://www.blogjava.net/397879213/archive/2012/05/04/313466.html</link><dc:creator>liuliang</dc:creator><author>liuliang</author><pubDate>Fri, 04 May 2012 04:20:00 GMT</pubDate><guid>http://www.blogjava.net/397879213/archive/2012/05/04/313466.html</guid><wfw:comment>http://www.blogjava.net/397879213/comments/313466.html</wfw:comment><comments>http://www.blogjava.net/397879213/archive/2012/05/04/313466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/397879213/comments/commentRss/313466.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/397879213/services/trackbacks/313466.html</trackback:ping><description><![CDATA[<p>此文章转自 小和尚闹洞房 空间<br />以下列出在NT系统中基本的网络命令和使用方法：</p>
<p><br />一、ipconfig命令：<br />ipconfig命令应该是最最基础的命令了，主要功能就是显示用户所在主机内部的IP协议的配置信息等资料。<br />它的主要参数有：<br />all：显示与TCP/IP协议相关的所有细节信息，其中包括测试的主机名、IP地址、子网掩码、节点类型、是否启用IP路由、网卡的物理地址、默认网关等。<br />renew all：更新全部适配器的通信配置情况，所有测试重新开始。<br />release all：释放全部适配器的通信配置情况。<br />renew n：更新第n号适配器的通信配置情况，所有测试重新开始。 　　<br />例如：<br />C:\&gt;ipconfig</p>
<p>Windows IP Configuration</p>
<p>Ethernet adapter 本地连接:</p>
<p>Connection-specific DNS Suffix . :<br />IP Address. . . . . . . . . . . . : 192.168.0.14<br />Subnet Mask . . . . . . . . . . . : 255.255.255.0<br />Default Gateway . . . . . . . . . : 192.168.0.1</p>
<p><br />二、Net命令：<br />Net命令主要是在windows NT平台中完成一些网络工作，它的功能非常强大，可以这么说如果你想学习windows平台下的网络安全，必须熟悉使用该命令。该命令的语法很多，功能强大，我们只是介绍一些简单常用的。</p>
<p>1.建立IPC连接:<br />只要你拥有某IP的用户名和密码，那就用IPC$做连接,这里我们假如你得到的用户是管理员administrator，密码是123456。假设对方IP为192.168.0.1<br />net use <a href="file://\\192.168.0.1\ipc$">\\192.168.0.1\ipc$</a> "123456" /user:"administrator"<br />一般会显示如下信息：<br />C:\&gt;net use <a href="file://\\192.168.0.1\ipc$">\\192.168.0.1\ipc$</a> "123456" /user:"administrator"<br />命令成功完成。</p>
<p>退出的命令是：net use <a href="file://\\192.168.0.1\ipc$">\\192.168.0.1\ipc$</a> /del<br />一般执行后会显示如下信息：<br />C:\&gt;net use <a href="file://\\192.168.0.1\ipc$">\\192.168.0.1\ipc$</a> /del<br /><a href="file://\\192.168.0.1\ipc$">\\192.168.0.1\ipc$</a> 已经删除。</p>
<p>当然你也可以建立一个空的IPC连接，也就是我们常说的空连接，也就是不需要用户名和密码的IPC连接，一般建立这类连接后就可以获取对方的很多系统信息，比如用户名，共享资源等。建立空连接和建立IPC连接是一样的，不过是不需要用户名和密码,例如我们要建立和IP地址为192.168.0.39的机器的空连接，使用以下命令：<br />net use <a href="file://\\192.168.0.39\ipc$">\\192.168.0.39\ipc$</a> "" /user""<br />如果提示成功就建立了和该IP地址的空连接，然后通过其它命令就可以获取一些该系统的信息，这些系统信息在入侵或者是网络维护中是起着非常重要的作用的，比如你获取了用户名，那么你就可以进行暴力破解密码等。</p>
<p>2.映射磁盘：<br />如果和对方建立了IPC连接，那么就可以映射对方的磁盘。<br />这里是讲映射对方的C盘，当然其他盘也可以，只要存在就行了.我们这里把对方的C盘映射到本地的Z盘.<br />net use z:\\127.0.0.1\c$<br />执行命令后效果如下：<br />C:\&gt;net use z: <a href="file://\\192.168.0.92\c$">\\192.168.0.92\c$</a><br />命令成功完成。</p>
<p>如果这么映射磁盘后，我们就可以直接通过访问本地的Ｚ盘来访问对反的Ｃ盘。</p>
<p>3.打开服务：<br />如果想打开自己的一些服务，那么就可以使用net start命令，例如：<br />net start telnet<br />就可以打开Telnet服务了。<br />一般有如下信息显示：<br />C:\&gt;net start telnet<br />Telnet 服务正在启动 .<br />Telnet 服务已经启动成功。<br />C:\&gt;</p>
<p>4.关闭服务：<br />关闭服务使用net stop命令，例如：<br />net stop tenet //就可以关闭Telnet服务啦<br />一般执行后，有如下信息：<br />C:\&gt;net stop telnet<br />Telnet 服务正在停止.<br />Telnet 服务已成功停止。<br />C:\&gt;</p>
<p>5.建立用户：<br />必须有足够的权限，建立用户可以是本机，如果是对方的机器，必须远程登陆到对方系统，或者获得了一个shell后才能执行。（输入命令时要注意空格)<br />我们添加一个hacker的用户密码为lovehacker：<br />net user hacker lovehacker /add</p>
<p>只要显示命令成功，那么我们可以把他加入Administrator组(管理员组）了：<br />net localgroup Administrators hacker /add</p>
<p>6.激活用户/停止用户:<br />Guest用户默认是打开的,但是有写管理员会把它停止,我们怎么把它从新激活呢?可以使用net user命令：<br />net user guest /active:yes<br />如果我们想停止一个活动用户，比如停止Guest用户：<br />net user guest /active:no</p>
<p>7.显示网络资源共享状况<br />net view，可以显示网络资源共享状况，比如执行 net view <a href="file://\\IP">\\IP</a>地址,就可以查看该机器的资源共享状况，前提是必须建立了IPC连接，当然你可以建立一个空的IPC连接，也就是不需要用户名和密码的IPC连接。(上面的IPC连接有讲到，请仔细阅读)例如：<br />C:\&gt;net view <a href="file://\\192.168.0.39">\\192.168.0.39</a><br />在 <a href="file://\\192.168.0.39">\\192.168.0.39</a> 的共享资源<br />共享名 类型 使用为 注释<br />--------------------------------------------------------<br />ftproot Disk<br />webroot Disk<br />命令成功完成。</p>
<p>8.发送网络消息：<br />使用net send命令可以给局域网/广域网发送一条消息,格式为：net send IP地址 &#8220;消息内容&#8220;,如：<br />net send 192.168.0.1 "这是net send发送的消息!"<br />那么一回儿后192.168.0.1的机器将出现一个标题为&#8220;信使服务&#8221;的窗口，里面显示了你发送的消息，当然如果对方关闭了Messenger服务的话，这条消息是不会显示的，如果你不想收到该类消息，也可以在服务中把Messenger服务关闭。</p>
<p><br />三、At命令：<br />1.本地ＡＴ命令：<br />at命令是一个计划任务命令，和我们windows中的计划任务效果是一样的，但是它是通过命令的方式。<br />一般我们可以在本机上直接使用at命令来运行一些已经存在的程序，比如现在是19:58，我们想在20:00的时候运行cmd.exe打开：at 20:00 c:\winnt\system32\cmd.exe<br />那么就会显示&#8220;新加了一项作业，其作业 ID = 1"，然后在执行"at"命令就可以看见以下信息：<br />状态 ID 日期 时间 命令行<br />-----------------------------------------------------------------------<br />1 今天 下午 20:00 cmd.exe<br />那么在20:00就会打开一的cmd的窗口。如果想取消计划任务的话，可以使用以下命令：<br />at ID号 /del，ＩＤ号就是上面显示的ＩＤ--&gt;1，那么如果我们要取消ＩＤ为１的计划任务，就可以执行下面的命令：<br />at 1 /del<br />如果对该命令有不熟悉的的地方，可以使用at /?命令来查看它的帮助。</p>
<p>2.远程ＡＴ命令：<br />一般一个入侵者入侵后都会留下后门，也就是种木马了，你把木马传了上去，怎么启动他呢？<br />那么需要用AT命令，这里假设你已经登陆了那个服务器,你首先要得到对方的时间，<br />net time <a href="file://\\127.0.0.1">\\127.0.0.1</a><br />将会返回一个时间，这里假设时间为12:1，现在需要新建一个作业，其ID=1：<br />at <a href="file://\\127.0.0.1">\\127.0.0.1</a> 12:3 c:\winnt\system32nc.exe<br />后面的路径是要运行的程序在对方磁盘的目录，这个要搞清楚。<br />这里假设了一个木马，名为NC.EXE，这个东西要在对方服务器上。</p>
<p><br />四、Telnet命令：<br />Telnet命令是一个远程登陆的命令，就可以通过这个命令来远程登陆网络上已经开发了远程终端功能的服务器，来达到像本地计算机管理远程计算机。<br />该命令格式：telnet 远程主机IP 端口<br />例如:telnet 192.168.0.1 23<br />如果我们不输入端口,则默认为23端口。<br />一般登陆后，对方远程终端服务就会要求你输入用户名和密码，正确就让你登陆。<br />一般出现如下消息：<br />Welcome to Microsoft Telnet Service</p>
<p>login: root<br />password: ******</p>
<p>如果登陆成功后将出现如下信息：<br />*===========================================<br />Welcome to Microsoft Telnet Server.<br />*===========================================<br />C:\Documents and Settings\root&gt;</p>
<p>那么代表你通过telnet到了对方的系统，就可以做在你用户权限内的所有事情啦！</p>
<p><br />五、FTP命令：<br />FTP命令是一个文件传输的命令，该命令可以在两台互联的机器之间传送文件，这跟我们常用的FTP软件是一样的，但是我们的软件一般都是GUI(可视)界面的，但它是命令类型的。<br />FTP命令主要是在网上进行文件的传输，它的子命令非常多，我们挑一些主要的来讲。<br />一般在命令提示符下输入FTP后，就打开如下界面：<br />C:\&gt;ftp<br />ftp&gt;<br />那么我们输入的命令都是在"ftp&gt;"后面的，也就是说我们输入ftp命令后，那么我们就进入了FTP的平台，所有的操作都是基于FTP上的。假如我们要打开一台网络上已经开了FTP服务的服务器，那么我们就可以登陆到该服务器,然后上传/下载文件,有时候我们的权限是只能下载,那么我们就不能上传,这具体要看你有的权限。<br />假如我们要打开一个FTP服务器,那么我们就可以在FTP平台下输入：<br />open 主机IP 端口<br />例如：ftp&gt;open 192.168.0.39 21，那么就会显示下面的效果：</p>
<p>C:\&gt;ftp<br />ftp&gt; open 192.168.0.39<br />Connected to 192.168.0.39.<br />220 Serv-U FTP Server v4.2 for WinSock ready...<br />User (192.168.0.39:(none)):</p>
<p>到这里就需要我们输入用户名，如果是对方的服务器是支持匿名的，那么我们就可以输入像ftp之类的用户，如：<br />User (192.168.0.39:(none)): ftp<br />331 User name okay, please send complete E-mail address as password.<br />Password:</p>
<p>密码也是输入ftp，那么就会显示登陆成功，如下：</p>
<p>Password: ***<br />230-(欢迎你来到FTP192.168.0.39服务器!）<br />230 User logged in, proceed.<br />ftp&gt;</p>
<p>显示230就代表代表登陆成功，如果显示别的，比如530，那么就是用户名或密码错误，登陆失败。<br />登陆后就可以使用一些命令，包括上传/下载，执行外部命令等。要获得FTP的所有命令，可以键入help命令，它所有命令列表如下：<br />ftp&gt; help<br />Commands may be abbreviated. Commands are:<br />! delete literal prompt send<br />? debug s put status<br />append dir mdelete pwd trace<br />ascii disconnect mdir quit type<br />bell get mget quote ser<br />binary glob mkdir recv verbose<br />bye hash mls remotehelp<br />cd help mput rename<br />close lcd open rmdir</p>
<p><br />我们把常用的命令解释一下：<br />1．!：执行一个非FTP平台下的外部命令，如：!cls，那么将清除屏幕。<br />2．delete：删除一个文件，比如在你的当前FTP根目录下有一个dir1.txt的文件，你需要删除它，就输入 delete dir1.txt。<br />3．ls：列出现在有的文件列表，该命令是Unix/Linux下的一个命令，主要是列出该目录下的文件，而不管文件夹<br />4．put：从本地计算机上传一个文件到FTP服务器上，例如：put cmd.exe，那么就会把当前目录下有的cmd.exe传的FTP服务器5．上的当前目录,该命令是最常用的。<br />6．ascii：该命令可以使上传的文件是按照ASCII码来传输的。<br />7．get：该命令也比较常用，也是把对方FTP服务器上的文件下载到自己的当前目录。如：get cmd.exe，就会把FTP服务器上的<br />8．cmd.exe文件下载到当前目录。<br />9．mdelete/rmdir：删除一个目录/文件夹,比如：mdelete a ，那么该文件夹将被删除。<br />10．pwd：显示当前所处在FTP的那个目录下，相当于显示当前路径。例如：<br />ftp&gt; pwd<br />257 "/SOFTWARE/safe_tools" is current directory.</p>
<p>11．quit/bye：结束当前的FTP连接，并且退出FTP。<br />12．type：设定文件传输类型，类型有： [ ascii | binary | image | tenex ],如果你是传文本文件之类的就使用ascii码，如果是应用程序的话，就使用binary，如果是图片就使用image。FTP默认的是ascii码，如果你要传应用程序，就要使用binary。例如我们要上传一个lk.exe的文件，那么我们先设置传输模式为binary，然后再上传,如：<br />ftp&gt; type binary<br />200 Type set to I.<br />ftp&gt; put lk.exe<br />200 PORT Command successful.<br />150 Opening BINARY mode data connection for lk.exe.<br />226 Transfer complete.<br />ftp: 3800 bytes sent in 0.01Seconds 380.00Kbytes/sec.<br />ftp&gt;</p>
<p>13．mget：同时下载多个文件。<br />14．mput：同时上传多个文件。<br />15．user：向远程主机器表示自己的身份，如：<br />ftp&gt; user<br />Username: ftp<br />331 User name okay, please send complete E-mail address as password.<br />Password: ***<br />230 User logged in, proceed.</p>
<p>16．cd：切换目录，进入一个目录使用cd 目录,退到上一个层目录使用cd ..（注意中间有一个空格)，该命令比较常用。<br />17．help/?：显示帮助，主要是显示在FTP下可以用的命令。<br />18．rename：重命名，给文件重新命名。<br />19．close：关闭当前的FTP连接，但是不退出FTP，和quit/bye命令不一样。如：<br />ftp&gt; clos<br />221 Goodbye!<br />ftp&gt;</p>
<p>20．open 打开一个FTP连接。如：<br />ftp&gt; open 192.168.0.39<br />Connected to 192.168.0.39.<br />220 Serv-U FTP Server v4.2 for WinSock ready...<br />User (192.168.0.39:(none)):</p>
<p>FTP中比较常用的命令就这些，当然还设计一些别的命令，而且也要因不同的FTP服务器支持的命令不一样而定，所以如果碰到实际应用中不同，请参考相关的资料。</p>
<p><br />六、ping命令：<br />ping命令是一个在网络中非常重要的并且常用的命令，主要是用来测试网络是否连通。该命令通过发送一个ICMP （网络控制消息协议）包的回应来看是否和对方连通，一般我们用来测试目标主机是否可以连接，或者可以通过TTL值来判断对方的操作系统的版本。<br />比如你想测试你和IP地址为192.168.0.1的机器是否连通，那么就可以使用这个命令：ping 192.168.0.1，那么如果连通就会有如下返回：<br />C:\&gt;ping 192.168.0.1<br />Pinging 192.168.0.1 with 32 bytes of data:</p>
<p>Reply from 192.168.0.1: bytes=32 time&lt;1ms TTL=128<br />Reply from 192.168.0.1: bytes=32 time&lt;1ms TTL=128<br />Reply from 192.168.0.1: bytes=32 time&lt;1ms TTL=128<br />Reply from 192.168.0.1: bytes=32 time&lt;1ms TTL=128</p>
<p>Ping statistics for 192.168.0.1:<br />Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),<br />Approximate round trip times in milli-seconds:<br />Minimum = 0ms, Maximum = 0ms, Average = 0ms</p>
<p>如果不连通的话，就会返回超时：<br />C:\&gt;ping 192.168.0.1</p>
<p>Pinging 192.168.0.1 with 32 bytes of data:</p>
<p>Request timed out.<br />Request timed out.<br />Request timed out.<br />Request timed out.</p>
<p>Ping statistics for 192.168.0.1:<br />Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),</p>
<p>那么就证明你和该计算机的网络不通，也许是对方没有上网，或者装了防火墙。</p>
<p>在局域网中，如果是同一个工作组的机器，你可以通过ping对方的机器名称获得对方的IP地址，如：<br />C:\&gt;ping hysw</p>
<p>Pinging hysw [192.168.0.14] with 32 bytes of data:</p>
<p>Reply from 192.168.0.14: bytes=32 time&lt;1ms TTL=64<br />Reply from 192.168.0.14: bytes=32 time&lt;1ms TTL=64<br />Reply from 192.168.0.14: bytes=32 time&lt;1ms TTL=64<br />Reply from 192.168.0.14: bytes=32 time&lt;1ms TTL=64</p>
<p>Ping statistics for 192.168.0.14:<br />Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),<br />Approximate round trip times in milli-seconds:<br />Minimum = 0ms, Maximum = 0ms, Average = 0ms</p>
<p>在ping里面还有一个 -t 参数，是可以不间断的向一个机器发送包,使用-l 包大小参数还能设定发送包的最大值，这样差不多句有了DoS的功能了，也就是在黑客技术中的洪水攻击，最大值为65500。如：</p>
<p>C:\&gt;ping 192.168.0.1 -t -l 65500</p>
<p>Pinging 192.168.0.1 with 65500 bytes of data:</p>
<p>Reply from 192.168.0.1: bytes=65500 time=14ms TTL=128<br />Reply from 192.168.0.1: bytes=65500 time=13ms TTL=128<br />Reply from 192.168.0.1: bytes=65500 time=14ms TTL=128<br />Reply from 192.168.0.1: bytes=65500 time=13ms TTL=128<br />Reply from 192.168.0.1: bytes=65500 time=14ms TTL=128<br />Reply from 192.168.0.1: bytes=65500 time=14ms TTL=128</p>
<p>Ping statistics for 192.168.0.1:<br />Packets: Sent = 6, Received = 6, Lost = 0 (0% loss),<br />Approximate round trip times in milli-seconds:<br />Minimum = 13ms, Maximum = 14ms, Average = 13ms<br />Control-C<br />^C<br />C:\&gt;</p>
<p>因为加了-t参数，ping命令本身是不会停止的，于是我们就可以使用Ctrl + C来终止该命令。ping命令还有一些别的参数，请自己参考帮助。</p>
<p><br />七、netstat命令：<br />netstat命令的功能是显示网络连接、路由表和网络接口信息，可以让用户得知目前都有哪些网络连接正在运作。 <br />它能检验IP的当前连接状态，在断定你的基本级通信正在进行后，就要验证系统上的服务。这个服务包括检查正在收听输入的通信量和／或验证你正在创建一个与远程站点的会话，它可以很轻松地做到这一点。<br />netstat的参数有：<br />-a 显示所有socket，包括正在监听的。<br />-c 每隔1秒就重新显示一遍，直到用户中断它。<br />-i 显示所有网络接口的信息，格式同&#8220;ifconfig -e&#8221;。<br />-n 以网络IP地址代替名称，显示出网络连接情形。<br />-r 显示核心路由表，格式同&#8220;route -e&#8221;。<br />-t 显示TCP协议的连接情况。<br />-u 显示UDP协议的连接情况。<br />-v 显示正在进行的工作。</p>
<p>我们一般常用的参数有-a ,-n。使用-a参数可以显示本机正在监听的端口，包括TCP/UDP两种协议的端口，一般这样我们可以查看本机器的监听状况，可以查看是不是有后门工具在工作等。例如：<br />C:\&gt;netstat -a</p>
<p>Active Connections<br />Proto Local Address Foreign Address State<br />TCP hysw:echo hysw:0 LISTENING<br />TCP hysw:discard hysw:0 LISTENING<br />TCP hysw:daytime hysw:0 LISTENING<br />TCP hysw:qotd hysw:0 LISTENING<br />TCP hysw:chargen hysw:0 LISTENING<br />TCP hysw:epmap hysw:0 LISTENING<br />TCP hysw:microsoft-ds hysw:0 LISTENING<br />TCP hysw:1025 hysw:0 LISTENING<br />TCP hysw:2103 hysw:0 LISTENING<br />TCP hysw:2105 hysw:0 LISTENING<br />TCP hysw:2107 hysw:0 LISTENING<br />TCP hysw:3306 hysw:0 LISTENING<br />TCP hysw:1034 localhost:3306 ESTABLISHED<br />TCP hysw:3306 localhost:1034 ESTABLISHED<br />TCP hysw:netbios-ssn hysw:0 LISTENING<br />UDP hysw:echo *:*<br />UDP hysw:discard *:*<br />UDP hysw:daytime *:*<br />UDP hysw:qotd *:*<br />UDP hysw:chargen *:*<br />UDP hysw:epmap *:*<br />UDP hysw:microsoft-ds *:*<br />UDP hysw:isakmp *:*<br />UDP hysw:ntp *:*<br />UDP hysw:ntp *:*<br />UDP hysw:netbios-ns *:*<br />UDP hysw:netbios-dgm *:*<br />C:\&gt;</p>
<p>一般-n参数主要是显示本地的连接状况，包括本机连接其他系统和其它系统连接本机，包括主机的IP和端口，如：<br />C:\&gt;netstat -n</p>
<p>Active Connections</p>
<p>Proto Local Address Foreign Address State<br />TCP 127.0.0.1:1034 127.0.0.1:3306 ESTABLISHED<br />TCP 127.0.0.1:3306 127.0.0.1:1034 ESTABLISHED<br />TCP 192.168.0.14:1371 192.168.0.159:21 ESTABLISHED</p>
<p>C:\&gt;</p>
<p><br />八、nbtstat命令：<br />nbtstat和netstat可以说都是Windows下的网络检测工具,NBTSTAT命令:用于查看当前基于NETBIOS的TCP/IP连接状态，通过该工具你可以获得远程或本地机器的组名和机器名 。虽然用户使用ipconfig工具可以准确地得到主机的网卡地址，我们通过在自己上网的机器上使用nbtstat命令，可以获取另一台上网主机的网卡地址和用户名工作组等信息，这些信息对入侵至关重要。</p>
<p>　　常用参数说明：<br />　　-a Remotename&#8212;&#8212;说明使用远程计算机的名称列出其名称表，此参数可以通过远程计算机的NetBios名来查看他的当前状态。<br />　　-A IP address&#8212;&#8212;说明使用远程计算机的 IP 地址并列出名称表，这个和-a不同的是就是这个只能使用IP，其实-a就包括了-A的功能了。<br />　　-c&#8212;&#8212;列出远程计算机的NetBIOS 名称的缓存和每个名称的 IP 地址 这个参数就是用来列出在你的NetBIOS里缓存的你连接过的计算机的IP。<br />　　-S&#8212;&#8212; 在客户端和服务器会话表中只显示远程计算机的IP地址。</p>
<p>使用-A参数获取对方的工作组和用户名：<br />C:\&gt;nbtstat -A 192.168.0.14</p>
<p>本地连接:<br />Node IpAddress: [192.168.0.14] Scope Id: []</p>
<p>NetBIOS Remote Machine Name Table</p>
<p>Name Type Status<br />---------------------------------------------<br />HYSW &lt;00&gt; UNIQUE Registered<br />MSHOME &lt;00&gt; GROUP Registered<br />HYSW &lt;20&gt; UNIQUE Registered<br />MSHOME &lt;1E&gt; GROUP Registered<br />ROOT &lt;03&gt; UNIQUE Registered</p>
<p>MAC Address = 00-E0-4C-A3-F3-1C</p>
<p>显示为GROUP的前面的MSHOME就是工作组，证明该机器是在MSHOME工作组里，下面的&lt;03&gt;前面显示的ROOT就是用户名了，系统用户名为root。其它的一些参数可以自己去测试，或者查看相关帮助来掌握。</p>
<p><br />九、tracert命令：<br />tracert命令主要用来显示数据包到达目的主机所经过的路径，显示数据包经过的中继节点清单和到达时间。<br />该命令的使用格式：tracert 主机IP地址或主机名<br />执行结果返回数据包到达目的主机前所历的中断站清单，并显示到达每个继站的时间。该功能同ping命令类似，但它所看到的信息要比ping命令详细得多，它把你送出的到某一站点的请求包，所走的全部路由均告诉你，并且告诉你通过该路由的IP是多少，通过该IP的时延是多少。</p>
<p>该命令参数有：<br />-d：不解析目标主机的名称 <br />-h： maximum_hops 指定搜索到目标地址的最大跳跃数 <br />-j：host_list 按照主机列表中的地址释放源路由 <br />-w：timeout 指定超时时间间隔，程序默认的时间单位是毫秒</p>
<p>使用tracert命令可以很好的连接和目标主机的连接通道，一般为下一不的入侵或者测试获得详细的网络信息打好基础，例如中途经过多少次信息中转，每次经过一个中转站时花费了多长时间。通过这些时间，我们可以很方便地查出用户主机与目标网站之间的线路到底是在什么地方出了故障等情况。如果我们在tracert命令后面加上一些参数，还可以检测到其他更详细的信息。例如使用参数－d，可以指定程序在跟踪主机的路径信息时，同时也解析目标主机的域名。 <br />我们简单的使用该命令来测试到达<a href="http://www.baidu.com">www.baidu.com</a>的时间和经过的IP地址：<br />C:\&gt;tracert <a href="http://www.baidu.com">www.baidu.com</a></p>
<p>Tracing route to <a href="http://www.baidu.com">www.baidu.com</a> [202.108.250.228]<br />over a maximum of 30 hops:</p>
<p>1 &lt;1 ms &lt;1 ms &lt;1 ms 192.168.0.1<br />2 1 ms &lt;1 ms 1 ms 211.152.23.6<br />3 * 5 ms 3 ms 211.152.47.253<br />4 3 ms 3 ms 3 ms 210.78.156.66<br />5 3 ms 9 ms 4 ms 211.99.57.113<br />6 6 ms 5 ms 7 ms 202.108.250.228</p>
<p>Trace complete.</p>
<p>看信息我们知道我们通过了6个IP节点和使用的时间。第一个一般是我们的机器是从该IP出去的，第二个开始就是经过的路由，最后一个当然就是我们的目的地了。在入侵中，如果你肯对这些地址层曾追查的话，一定会有大收获啦。</p>
<p><br />十、nslookup命令：<br />nslookup命令的功能是查询一台机器的IP地址和其对应的域名,通常它能监测网络中DNS服务器是否能正确实现域名解析它,它的运行需要一台域名服务器来提供域名服务。如果用户已经设置好域名服务器，就可以用这个命令查看不同主机的IP地址对应的域名。<br />该命令的一般格式为：nslookup [IP地址/域名] ，如果在本地机上使用nslookup命令来查询<a href="http://www.baidu.com">www.baidu.com</a>的话，执行后如下：<br />C:\&gt;nslookup <a href="http://www.baidu.com">www.baidu.com</a><br />Server: dns2000.ruc.edu.cn<br />Address: 202.112.112.100</p>
<p>Non-authoritative answer:<br />Name: <a href="http://www.baidu.com">www.baidu.com</a><br />Address: 202.108.250.228</p>
<p>或者可以先进入nslookup模式再输入要查找的[域名/IP]：</p>
<p>C:\&gt;nslookup<br />Default Server: dns2000.ruc.edu.cn<br />Address: 202.112.112.100</p>
<p>&gt; <a href="http://www.baidu.com">www.baidu.com</a><br />Server: dns2000.ruc.edu.cn<br />Address: 202.112.112.100</p>
<p>Non-authoritative answer:<br />Name: <a href="http://www.baidu.com">www.baidu.com</a><br />Address: 202.108.250.228</p>
<p>&gt;</p>
<p>如果要退出该命令，输入exit并回车即可。别的一些强悍功能可以自己去摸索，或者查找相关的帮助。</p>
<p><br />到此为止，我们在NT下的基本常用的网络命令就介绍完毕，当然还有一些命令，比如finger、arp、hostname、route、ftfp等命令我们就不做介绍了，如果还想进一步了解的话，请查阅相关的帮助或者资料。</p>
<p>还有一点，很多命令在NT和Unix/Liunx下的作用是差不多的，而且很多子命令和参数也是差不多的，你学了以后完全可以举一反三，学会更多的东西。当然我们学东西不是一朝一夕就可以的，而是在长期的学习和使用中掌握的，所以希望你们学习的话能够把这写东西拿到实践中去，那么就不会觉得这些命令很难了；如果还有一些更基础的命令，比如Copy,dir,md,echo,attrib等没有熟悉的话，我希望你们能够去阅读一些DOS命令入门之类的东西，或者去网上搜索相关的东西，可以说，学习网络安全很多时候都是在&#8220;命令提示符&#8221;那黑乎乎的界面下进行的，一些常用命令的掌握，有助于你更好的学习深<br /></p>  <img src ="http://www.blogjava.net/397879213/aggbug/313466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/397879213/" target="_blank">liuliang</a> 2012-05-04 12:20 <a href="http://www.blogjava.net/397879213/archive/2012/05/04/313466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle修改时间报:ORA-01830: 日期格式图片在转换整个输入字符串之前结束的解决办法</title><link>http://www.blogjava.net/397879213/archive/2012/05/04/341925.html</link><dc:creator>liuliang</dc:creator><author>liuliang</author><pubDate>Fri, 04 May 2012 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/397879213/archive/2012/05/04/341925.html</guid><wfw:comment>http://www.blogjava.net/397879213/comments/341925.html</wfw:comment><comments>http://www.blogjava.net/397879213/archive/2012/05/04/341925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/397879213/comments/commentRss/341925.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/397879213/services/trackbacks/341925.html</trackback:ping><description><![CDATA[<p>1、错误原因： <br />date类型不能包含秒以后的精度。 <br />如日期：2010-01-01 20:02:20.0 </p>
<p>解决方法：将日期秒以后的精度去除 <br />如日期：2010-01-01 20:02:20</p>
<p>2、INSERT INTO TEST2 (C1, C2,c3) VALUES (${v1},${v2},to_date(${v3},'yyyy-mm-dd'));<br />oracle里面不需要以&#8220;；&#8221;结尾。</p>
<p><br />3、修改数据库日期格式：<br />alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'</p>
<p>这个命令的适用范围，是修改当前SESSION，另外这不能修改第三方工具的日期格式，如：PL/SQL DEVELOPER需要在Tools-&gt;Preferences-&gt;User Interface-&gt;Date/Time下修改格式即可，第三方工具的日期格式在工具内部自己去设置，我估计你也应该在第三方工具下才会看到这样的效果，一般默认情况下ORACLE默认的日期格式不是这样的。</p>
<p>在默认的sqlplus或者sqlplusw下或者程序编写过程中，执行该命令后，如果是同一个session是肯定会产生你要的效果。</p>
<p>如果要将整体的数据库级别默认格式改掉需要修改参数文件，并重启数据库才可以，但是这个也改不掉你第三方工具的显示格式，第三方工具只能在工具内部去改，它只能改掉默认的日期格式，第三方工具都是转换后的；但是很多时候容易被工具所忽悠，给人的感觉就是数据库就是这样存储的，其实存储的只有日期格式，没有YYYYMM这些东西，这些东西都是通过算法计算出来的结果，然后根据格式要求进行对应的格式化给看到的这样的效果而已。</p>
<p><br />4、INSERT INTO TEST2 (C1, C2,c3) VALUES ('1',1,to_date('2010-12-27 00:00:00','yyyy-mm-dd'))&nbsp; 不可以<br />INSERT INTO TEST2 (C1, C2,c3) VALUES (1,1,to_date('2010-12-27 00:00:00','yyyy-mm-dd hh24:mi:ss'))&nbsp; 可以<br />to_date是类型转换，不是格式转换，字符串和后面的格式要匹配；to_char才是转成对应格式；</p>
<p><br />oracle日期格式总结在oracle中处理日期大全</p>
<p>TO_DATE格式 <br />Day: <br />dd number 12 <br />dy abbreviated fri <br />day spelled out friday <br />ddspth spelled out, ordinal twelfth <br />Month: <br />mm number 03 <br />mon abbreviated mar <br />month spelled out march <br />Year: <br />yy two digits 98 <br />yyyy four digits 1998</p>
<p>24小时格式下时间范围为： 0:00:00 - 23:59:59.... <br />12小时格式下时间范围为： 1:00:00 - 12:59:59 .... <br />1. <br />日期和字符转换函数用法（to_date,to_char）</p>
<p>2. <br />select to_char( to_date(222,'J'),'Jsp') from dual</p>
<p>显示Two Hundred Twenty-Two</p>
<p>3. <br />求某天是星期几 <br />select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual; <br />星期一 <br />select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; <br />monday <br />设置日期语言 <br />ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN'; <br />也可以这样 <br />TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')</p>
<p>4. <br />两个日期间的天数 <br />select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;</p>
<p>5. 时间为null的用法 <br />select id, active_date from table1 <br />UNION <br />select 1, TO_DATE(null) from dual;</p>
<p>注意要用TO_DATE(null)</p>
<p>6. <br />a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd') <br />那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。 <br />所以，当时间需要精确的时候，觉得to_char还是必要的 <br />7. 日期格式冲突问题 <br />输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01' <br />alter system set NLS_DATE_LANGUAGE = American <br />alter session set NLS_DATE_LANGUAGE = American <br />或者在to_date中写 <br />select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; <br />注意我这只是举了NLS_DATE_LANGUAGE，当然还有很多， <br />可查看 <br />select * from nls_session_parameters <br />select * from V$NLS_PARAMETERS</p>
<p>8. <br />select count(*) <br />from ( select rownum-1 rnum <br />from all_objects <br />where rownum &lt;= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002- <br />02-01','yyyy-mm-dd')+1 <br />) <br />where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' ) <br />not <br />in ( '1', '7' )</p>
<p>查找2002-02-28至2002-02-01间除星期一和七的天数 <br />在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).</p>
<p>9. <br />select months_between(to_date('01-31-1999','MM-DD-YYYY'), <br />to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL; <br />1</p>
<p>select months_between(to_date('02-01-1999','MM-DD-YYYY'), <br />to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;</p>
<p>1.03225806451613 <br />10. Next_day的用法 <br />Next_day(date, day)</p>
<p>Monday-Sunday, for format code DAY <br />Mon-Sun, for format code DY <br />1-7, for format code D</p>
<p>11 <br />select to_char(sysdate,'hh:mi:ss') TIME from all_objects <br />注意：第一条记录的TIME 与最后一行是一样的 <br />可以建立一个函数来处理这个问题 <br />create or replace function sys_date return date is <br />begin <br />return sysdate; <br />end;</p>
<p>select to_char(sys_date,'hh:mi:ss') from all_objects; <br />12. <br />获得小时数</p>
<p>SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer <br />SQL&gt; select sysdate ,to_char(sysdate,'hh') from dual;</p>
<p>SYSDATE TO_CHAR(SYSDATE,'HH') <br />-------------------- --------------------- <br />2003-10-13 19:35:21 07</p>
<p>SQL&gt; select sysdate ,to_char(sysdate,'hh24') from dual;</p>
<p>SYSDATE TO_CHAR(SYSDATE,'HH24') <br />-------------------- ----------------------- <br />2003-10-13 19:35:21 19</p>
<p>获取年月日与此类似 <br />13. <br />年月日的处理 <br />select older_date, <br />newer_date, <br />years, <br />months, <br />abs( <br />trunc( <br />newer_date- <br />add_months( older_date,years*12+months ) <br />) <br />) days <br />from ( select <br />trunc(months_between( newer_date, older_date )/12) YEARS, <br />mod(trunc(months_between( newer_date, older_date )), <br />12 ) MONTHS, <br />newer_date, <br />older_date <br />from ( select hiredate older_date, <br />add_months(hiredate,rownum)+rownum newer_date <br />from emp ) <br />)</p>
<p>14. <br />处理月份天数不定的办法 <br />select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual</p>
<p>16. <br />找出今年的天数 <br />select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual</p>
<p>闰年的处理方法 <br />to_char( last_day( to_date('02' || :year,'mmyyyy') ), 'dd' ) <br />如果是28就不是闰年</p>
<p>17. <br />yyyy与rrrr的区别 <br />'YYYY99 TO_C <br />------- ---- <br />yyyy 99 0099 <br />rrrr 99 1999 <br />yyyy 01 0001 <br />rrrr 01 2001</p>
<p>18.不同时区的处理 <br />select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate <br />from dual;</p>
<p>19. <br />5秒钟一个间隔 <br />Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS') <br />from dual</p>
<p>2002-11-1 9:55:00 35786 <br />SSSSS表示5位秒数</p>
<p>20. <br />一年的第几天 <br />select TO_CHAR(SYSDATE,'DDD'),sysdate from dual <br />310 2002-11-6 10:03:51</p>
<p>21.计算小时,分,秒,毫秒 <br />select <br />Days, <br />A, <br />TRUNC(A*24) Hours, <br />TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes, <br />TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds, <br />TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds <br />from <br />( <br />select <br />trunc(sysdate) Days, <br />sysdate - trunc(sysdate) A <br />from dual <br />)</p>
<p><br />select * from tabname <br />order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');</p>
<p>// <br />floor((date2-date1) /365) 作为年 <br />floor((date2-date1, 365) /30) 作为月 <br />mod(mod(date2-date1, 365), 30)作为日. <br />23.next_day函数 <br />next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。 <br />1 2 3 4 5 6 7 <br />日 一 二 三 四 五 六</p>
<p><br />oracle中有很多关于日期的函数</p>
<p>在oracle中有很多关于日期的函数，如： <br />1、add_months()用于从一个日期值增加或减少一些月份 <br />date_value:=add_months(date_value,number_of_months) <br />例： <br />SQL&gt; select add_months(sysdate,12) "Next Year" from dual;</p>
<p>Next Year <br />---------- <br />13-11月-04</p>
<p>SQL&gt; select add_months(sysdate,112) "Last Year" from dual;</p>
<p>Last Year <br />---------- <br />13-3月 -13</p>
<p>SQL&gt;</p>
<p>2、current_date()返回当前会放时区中的当前日期 <br />date_value:=current_date <br />SQL&gt; column sessiontimezone for a15 <br />SQL&gt; select sessiontimezone,current_date from dual;</p>
<p>SESSIONTIMEZONE CURRENT_DA <br />--------------- ---------- <br />+08:00 13-11月-03</p>
<p>SQL&gt; alter session set time_zone='-11:00' <br />2 /</p>
<p>会话已更改。</p>
<p>SQL&gt; select sessiontimezone,current_timestamp from dual;</p>
<p>SESSIONTIMEZONE CURRENT_TIMESTAMP <br />--------------- ------------------------------------ <br />-11:00 12-11月-03 04.59.13.668000 下午 -11: <br />00</p>
<p>SQL&gt;</p>
<p>3、current_timestamp()以timestamp with time zone数据类型返回当前会放时区中的当前日期 <br />timestamp_with_time_zone_value:=current_timestamp([timestamp_precision]) <br />SQL&gt; column sessiontimezone for a15 <br />SQL&gt; column current_timestamp format a36 <br />SQL&gt; select sessiontimezone,current_timestamp from dual;</p>
<p>SESSIONTIMEZONE CURRENT_TIMESTAMP <br />--------------- ------------------------------------ <br />+08:00 13-11月-03 11.56.28.160000 上午 +08: <br />00</p>
<p>SQL&gt; alter session set time_zone='-11:00' <br />2 /</p>
<p>会话已更改。</p>
<p>SQL&gt; select sessiontimezone,current_timestamp from dual;</p>
<p>SESSIONTIMEZONE CURRENT_TIMESTAMP <br />--------------- ------------------------------------ <br />-11:00 12-11月-03 04.58.00.243000 下午 -11: <br />00</p>
<p>SQL&gt;</p>
<p>4、dbtimezone()返回时区 <br />varchar_value:=dbtimezone <br />SQL&gt; select dbtimezone from dual;</p>
<p>DBTIME <br />------ <br />-07:00</p>
<p>SQL&gt;</p>
<p>5、extract()找出日期或间隔值的字段值 <br />date_value:=extract(date_field from [datetime_value|interval_value]) <br />SQL&gt; select extract(month from sysdate) "This Month" from dual;</p>
<p>This Month <br />---------- <br />11</p>
<p>SQL&gt; select extract(year from add_months(sysdate,36)) "3 Years Out" from dual;</p>
<p>3 Years Out <br />----------- <br />2006</p>
<p>SQL&gt;</p>
<p>6、last_day()返回包含了日期参数的月份的最后一天的日期 <br />date_value:=last_day(date_value) <br />SQL&gt; select last_day(date'2000-02-01') "Leap Yr?" from dual;</p>
<p>Leap Yr? <br />---------- <br />29-2月 -00</p>
<p>SQL&gt; select last_day(sysdate) "Last day of this month" from dual;</p>
<p>Last day o <br />---------- <br />30-11月-03</p>
<p>SQL&gt;</p>
<p>7、localtimestamp()返回会话中的日期和时间 <br />timestamp_value:=localtimestamp <br />SQL&gt; column localtimestamp format a28 <br />SQL&gt; select localtimestamp from dual;</p>
<p>LOCALTIMESTAMP <br />---------------------------- <br />13-11月-03 12.09.15.433000 <br />下午</p>
<p>SQL&gt; select localtimestamp,current_timestamp from dual;</p>
<p>LOCALTIMESTAMP CURRENT_TIMESTAMP <br />---------------------------- ------------------------------------ <br />13-11月-03 12.09.31.006000 13-11月-03 12.09.31.006000 下午 +08: <br />下午 00</p>
<p>SQL&gt; alter session set time_zone='-11:00';</p>
<p>会话已更改。</p>
<p>SQL&gt; select localtimestamp,to_char(sysdate,'DD-MM-YYYY HH:MI:SS AM') "SYSDATE" from dual;</p>
<p>LOCALTIMESTAMP SYSDATE <br />---------------------------- ------------------------ <br />12-11月-03 05.11.31.259000 13-11-2003 12:11:31 下午 <br />下午</p>
<p>SQL&gt;</p>
<p>8、months_between()判断两个日期之间的月份数量 <br />number_value:=months_between(date_value,date_value) <br />SQL&gt; select months_between(sysdate,date'1971-05-18') from dual;</p>
<p>MONTHS_BETWEEN(SYSDATE,DATE'1971-05-18') <br />---------------------------------------- <br />389.855143</p>
<p>SQL&gt; select months_between(sysdate,date'2001-01-01') from dual;</p>
<p>MONTHS_BETWEEN(SYSDATE,DATE'2001-01-01') <br />---------------------------------------- <br />34.4035409</p>
<p>SQL&gt;</p>
<p>9、next_day()给定一个日期值，返回由第二个参数指出的日子第一次出现在的日期值（应返回相应日子的名称字符串）</p>
<p>與周相關日期函數</p>
<p>1.查询某周的第一天<br />select trunc(decode(ww, 53, to_date(yy || '3112', 'yyyyddmm'), to_date(yy || '-' || to_char(ww * 7), 'yyyy-ddd')), 'd') last_day<br />from (select substr('2004-32', 1, 4) yy, to_number(substr('2004-32', 6)) ww<br />from dual)</p>
<p>select trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))*7),'yyyy-ddd'),'d')-6 first_day from dual</p>
<p>select min(v_date) from<br />(select (to_date('200201','yyyymm') + rownum) v_date<br />from all_tables<br />where rownum &lt; 370)<br />where to_char(v_date,'yyyy-iw') = '2002-49'</p>
<p>2.查询某周的最后一天<br />select trunc(decode(ww, 53, to_date(yy || '3112', 'yyyyddmm'), to_date(yy || '-' || to_char(ww * 7), 'yyyy-ddd')), 'd') - 6 first_day<br />from (select substr('2004-33', 1, 4) yy, to_number(substr('2004-33', 6)) ww<br />from dual)</p>
<p>select trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))*7),'yyyy-ddd'),'d') last_day from dual</p>
<p>select max(v_date) from<br />(select (to_date('200408','yyyymm') + rownum) v_date<br />from all_tables<br />where rownum &lt; 370)<br />where to_char(v_date,'yyyy-iw') = '2004-33'</p>
<p>3.查询某周的日期<br />select min_date, to_char(min_date,'day') day from<br />(select to_date(substr('2004-33',1,4)||'001'+rownum-1,'yyyyddd') min_date <br />from all_tables<br />where rownum &lt;= decode(mod(to_number(substr('2004-33',1,4)),4),0,366,365) <br />union</p>
<p>select to_date(substr('2004-33',1,4)-1||<br />decode(mod(to_number(substr('2004-33',1,4))-1,4),0,359,358)+rownum,'yyyyddd') min_date <br />from all_tables <br />where rownum &lt;= 7<br />union</p>
<p>select to_date(substr('2004-33',1,4)+1||'001'+rownum-1,'yyyyddd') min_date <br />from all_tables <br />where rownum &lt;= 7 <br />)<br />where to_char(min_date,'yyyy-iw') ='2004-33'</p>
<p><br />oracle中时间运算</p>
<p>论坛中常常看到有对oracle中时间运算提问的问题，今天有时间，看了看以前各位兄弟的贴子，整理了一下，并作了个示例，希望会对大家有帮助。 <br />首先感谢ern、eric.li及各版主还有热心的兄弟们</p>
<p>内容如下： <br />1、oracle支持对日期进行运算 <br />2、日期运算时是以天为单位进行的 <br />3、当需要以分秒等更小的单位算值时，按时间进制进行转换即可 <br />4、进行时间进制转换时注意加括号（见示例中红色括号），否则会出问题</p>
<p>SQL&gt; alter session set nls_date_format='yyyy-mm-dd hh:mi:ss';</p>
<p>会话已更改。</p>
<p>SQL&gt; set serverout on <br />SQL&gt; declare <br />2 DateValue date; <br />3 begin <br />4 select sysdate into DateValue from dual; <br />5 dbms_output.put_line('源时间:'||to_char(DateValue)); <br />6 dbms_output.put_line('源时间减1天:'||to_char(DateValue-1)); <br />7 dbms_output.put_line('源时间减1天1小时:'||to_char(DateValue-1-1/24)); <br />8 dbms_output.put_line('源时间减1天1小时1分:'||to_char(DateValue-1-1/24-1/(24*60))); <br />9 dbms_output.put_line('源时间减1天1小时1分1秒:'||to_char(DateValue-1-1/24-1/(24*60)-1/(24*60*6 <br />0))); <br />10 end; <br />11 / <br />源时间:2003-12-29 11:53:41 <br />源时间减1天:2003-12-28 11:53:41 <br />源时间减1天1小时:2003-12-28 10:53:41 <br />源时间减1天1小时1分:2003-12-28 10:52:41 <br />源时间减1天1小时1分1秒:2003-12-28 10:52:40</p>
<p>PL/SQL 过程已成功完成。</p>
<p>&nbsp;</p> <img src ="http://www.blogjava.net/397879213/aggbug/341925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/397879213/" target="_blank">liuliang</a> 2012-05-04 09:41 <a href="http://www.blogjava.net/397879213/archive/2012/05/04/341925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gxt的笔记1</title><link>http://www.blogjava.net/397879213/archive/2012/05/03/341927.html</link><dc:creator>liuliang</dc:creator><author>liuliang</author><pubDate>Thu, 03 May 2012 10:05:00 GMT</pubDate><guid>http://www.blogjava.net/397879213/archive/2012/05/03/341927.html</guid><wfw:comment>http://www.blogjava.net/397879213/comments/341927.html</wfw:comment><comments>http://www.blogjava.net/397879213/archive/2012/05/03/341927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/397879213/comments/commentRss/341927.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/397879213/services/trackbacks/341927.html</trackback:ping><description><![CDATA[1、gxt用boeder布局时，看不见界面时，可能是要用子控件要用fitlayout布局。 
<p> </p><br />2、grid列自动缩放：             
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><bgsound cep="13"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="/Images/OutliningIndicators/None.gif" />    <span style="COLOR: #000000">grid.setStripeRows (</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">); grid.setAutoExpandColumn (</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); <br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="/Images/OutliningIndicators/None.gif" />    grid.setAutoExpandMin (</span><span style="COLOR: #000000">80</span><span style="COLOR: #000000">); <br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="/Images/OutliningIndicators/None.gif" />    grid.getView ().setForceFit (</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">); </span></bgsound></div><p> </p>3、对于tab页面，要想grid列宽度自适应的话还要加一下条件：<br /><div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><bgsound cep="14">    <img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="/Images/OutliningIndicators/None.gif" /><span style="COLOR: #000000">messagePanel.setLayoutData (</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FitLayout()); <br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="/Images/OutliningIndicators/None.gif" />    loggerTab </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> TabItem (</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">系统日志</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="/Images/OutliningIndicators/None.gif" />    loggerTab.setLayoutData (</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FitLayout()); <br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="/Images/OutliningIndicators/None.gif" />    loggerTab.setLayoutOnChange (</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">); <br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="/Images/OutliningIndicators/None.gif" />    loggerTab.add (getLoggerPanel ()); <br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="/Images/OutliningIndicators/None.gif" />    messagePanel.add (loggerTab); <br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="/Images/OutliningIndicators/None.gif" /></span></bgsound></div>         而且不能设置为自动宽度。 <br /><p> </p>4、布局不起作用，可能是setLayout写成了setLayoutData；<br /><p> </p>5、gxt里面尽量用boederlayout布局，那样自适应较强；<br /><p> </p>6、所有远程对象继承下面类，可以和spring集成； 
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><bgsound cep="15"><span style="COLOR: #008080"> 1</span><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="/Images/OutliningIndicators/None.gif" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">abstract</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> BaseAction </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> RemoteServiceServlet </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img id="Codehighlighter1_142_1378_Open_Image" onclick="this.style.display='none'; Codehighlighter1_142_1378_Open_Text.style.display='none'; Codehighlighter1_142_1378_Closed_Image.style.display='inline'; Codehighlighter1_142_1378_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" src_cetemp="/Images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_142_1378_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_142_1378_Closed_Text.style.display='none'; Codehighlighter1_142_1378_Open_Image.style.display='inline'; Codehighlighter1_142_1378_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" src_cetemp="/Images/OutliningIndicators/ContractedBlock.gif" />        Controller, ServletContextAware, ServletConfigAware, BeanNameAware </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_142_1378_Closed_Text"><img alt="" src="http://www.blogjava.net/images/dot.gif" src_cetemp="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_142_1378_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> ServletContext servletContext;<br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String controllerName;<br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" /><br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img id="Codehighlighter1_218_246_Open_Image" onclick="this.style.display='none'; Codehighlighter1_218_246_Open_Text.style.display='none'; Codehighlighter1_218_246_Closed_Image.style.display='inline'; Codehighlighter1_218_246_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_218_246_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_218_246_Closed_Text.style.display='none'; Codehighlighter1_218_246_Open_Image.style.display='inline'; Codehighlighter1_218_246_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" src_cetemp="/Images/OutliningIndicators/ContractedSubBlock.gif" />    </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_218_246_Closed_Text">/** */</span><span id="Codehighlighter1_218_246_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"> * Gets ServletContext. </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />    @Override<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img id="Codehighlighter1_302_330_Open_Image" onclick="this.style.display='none'; Codehighlighter1_302_330_Open_Text.style.display='none'; Codehighlighter1_302_330_Closed_Image.style.display='inline'; Codehighlighter1_302_330_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_302_330_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_302_330_Closed_Text.style.display='none'; Codehighlighter1_302_330_Open_Image.style.display='inline'; Codehighlighter1_302_330_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" src_cetemp="/Images/OutliningIndicators/ContractedSubBlock.gif" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> ServletContext getServletContext() </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_302_330_Closed_Text"><img alt="" src="http://www.blogjava.net/images/dot.gif" src_cetemp="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_302_330_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> servletContext;<br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" /><br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img id="Codehighlighter1_334_462_Open_Image" onclick="this.style.display='none'; Codehighlighter1_334_462_Open_Text.style.display='none'; Codehighlighter1_334_462_Closed_Image.style.display='inline'; Codehighlighter1_334_462_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_334_462_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_334_462_Closed_Text.style.display='none'; Codehighlighter1_334_462_Open_Image.style.display='inline'; Codehighlighter1_334_462_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" src_cetemp="/Images/OutliningIndicators/ContractedSubBlock.gif" />    </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_334_462_Closed_Text">/**/</span><span id="Codehighlighter1_334_462_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"> <br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #008000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />     * * (non-Javadoc) * * @see *<br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #008000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />     * org.springframework.beans.factory.BeanNameAware#setBeanName (java.lang *<br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #008000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />     * .String)<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #008000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />     </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />    @Override<br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img id="Codehighlighter1_523_566_Open_Image" onclick="this.style.display='none'; Codehighlighter1_523_566_Open_Text.style.display='none'; Codehighlighter1_523_566_Closed_Image.style.display='inline'; Codehighlighter1_523_566_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_523_566_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_523_566_Closed_Text.style.display='none'; Codehighlighter1_523_566_Open_Image.style.display='inline'; Codehighlighter1_523_566_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" src_cetemp="/Images/OutliningIndicators/ContractedSubBlock.gif" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setBeanName(String controllerName) </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_523_566_Closed_Text"><img alt="" src="http://www.blogjava.net/images/dot.gif" src_cetemp="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_523_566_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.controllerName </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> controllerName;<br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" /><br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img id="Codehighlighter1_570_616_Open_Image" onclick="this.style.display='none'; Codehighlighter1_570_616_Open_Text.style.display='none'; Codehighlighter1_570_616_Closed_Image.style.display='inline'; Codehighlighter1_570_616_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_570_616_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_570_616_Closed_Text.style.display='none'; Codehighlighter1_570_616_Open_Image.style.display='inline'; Codehighlighter1_570_616_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" src_cetemp="/Images/OutliningIndicators/ContractedSubBlock.gif" />    </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_570_616_Closed_Text">/** */</span><span id="Codehighlighter1_570_616_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"> * Implementation of ServletContextAware. </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img id="Codehighlighter1_680_723_Open_Image" onclick="this.style.display='none'; Codehighlighter1_680_723_Open_Text.style.display='none'; Codehighlighter1_680_723_Closed_Image.style.display='inline'; Codehighlighter1_680_723_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_680_723_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_680_723_Closed_Text.style.display='none'; Codehighlighter1_680_723_Open_Image.style.display='inline'; Codehighlighter1_680_723_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" src_cetemp="/Images/OutliningIndicators/ContractedSubBlock.gif" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setServletContext(ServletContext servletContext) </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_680_723_Closed_Text"><img alt="" src="http://www.blogjava.net/images/dot.gif" src_cetemp="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_680_723_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.servletContext </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> servletContext;<br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" /><br /></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img id="Codehighlighter1_758_892_Open_Image" onclick="this.style.display='none'; Codehighlighter1_758_892_Open_Text.style.display='none'; Codehighlighter1_758_892_Closed_Image.style.display='inline'; Codehighlighter1_758_892_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_758_892_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_758_892_Closed_Text.style.display='none'; Codehighlighter1_758_892_Open_Image.style.display='inline'; Codehighlighter1_758_892_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" src_cetemp="/Images/OutliningIndicators/ContractedSubBlock.gif" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getServletName() </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_758_892_Closed_Text"><img alt="" src="http://www.blogjava.net/images/dot.gif" src_cetemp="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_758_892_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">DispatcherServlet name is </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />                </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.servletConfig.getServletName()<br /></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />                </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, GwtController name is:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> controllerName;<br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" /><br /></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> ServletConfig servletConfig;<br /></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" /><br /></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />    @Override<br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img id="Codehighlighter1_1004_1045_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1004_1045_Open_Text.style.display='none'; Codehighlighter1_1004_1045_Closed_Image.style.display='inline'; Codehighlighter1_1004_1045_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_1004_1045_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1004_1045_Closed_Text.style.display='none'; Codehighlighter1_1004_1045_Open_Image.style.display='inline'; Codehighlighter1_1004_1045_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" src_cetemp="/Images/OutliningIndicators/ContractedSubBlock.gif" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setServletConfig(ServletConfig servletConfig) </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_1004_1045_Closed_Text"><img alt="" src="http://www.blogjava.net/images/dot.gif" src_cetemp="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1004_1045_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.servletConfig </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> servletConfig;<br /></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" /><br /></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img id="Codehighlighter1_1049_1157_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1049_1157_Open_Text.style.display='none'; Codehighlighter1_1049_1157_Closed_Image.style.display='inline'; Codehighlighter1_1049_1157_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_1049_1157_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1049_1157_Closed_Text.style.display='none'; Codehighlighter1_1049_1157_Open_Image.style.display='inline'; Codehighlighter1_1049_1157_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" src_cetemp="/Images/OutliningIndicators/ContractedSubBlock.gif" />    </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_1049_1157_Closed_Text">/** */</span><span id="Codehighlighter1_1049_1157_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">41</span><span style="COLOR: #008000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />     * * Handles request and delegates to GWT's *<br /></span><span style="COLOR: #008080">42</span><span style="COLOR: #008000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />     * RemoteServiceServlet.doPost(request, response).<br /></span><span style="COLOR: #008080">43</span><span style="COLOR: #008000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />     * </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> ModelAndView handleRequest(HttpServletRequest request,<br /></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img id="Codehighlighter1_1272_1375_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1272_1375_Open_Text.style.display='none'; Codehighlighter1_1272_1375_Closed_Image.style.display='inline'; Codehighlighter1_1272_1375_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_1272_1375_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1272_1375_Closed_Text.style.display='none'; Codehighlighter1_1272_1375_Open_Image.style.display='inline'; Codehighlighter1_1272_1375_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" src_cetemp="/Images/OutliningIndicators/ContractedSubBlock.gif" />            HttpServletResponse response) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Exception </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_1272_1375_Closed_Text"><img alt="" src="http://www.blogjava.net/images/dot.gif" src_cetemp="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1272_1375_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img id="Codehighlighter1_1280_1330_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1280_1330_Open_Text.style.display='none'; Codehighlighter1_1280_1330_Closed_Image.style.display='inline'; Codehighlighter1_1280_1330_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_1280_1330_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1280_1330_Closed_Text.style.display='none'; Codehighlighter1_1280_1330_Open_Image.style.display='inline'; Codehighlighter1_1280_1330_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" src_cetemp="/Images/OutliningIndicators/ContractedSubBlock.gif" />        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_1280_1330_Closed_Text"><img alt="" src="http://www.blogjava.net/images/dot.gif" src_cetemp="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1280_1330_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />            doPost(request, response);<br /></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img id="Codehighlighter1_1352_1372_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1352_1372_Open_Text.style.display='none'; Codehighlighter1_1352_1372_Closed_Image.style.display='inline'; Codehighlighter1_1352_1372_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_1352_1372_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1352_1372_Closed_Text.style.display='none'; Codehighlighter1_1352_1372_Open_Image.style.display='inline'; Codehighlighter1_1352_1372_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" src_cetemp="/Images/OutliningIndicators/ContractedSubBlock.gif" />        }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (Exception e) </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_1352_1372_Closed_Text"><img alt="" src="http://www.blogjava.net/images/dot.gif" src_cetemp="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1352_1372_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" />            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" src_cetemp="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="/Images/OutliningIndicators/InBlock.gif" /><br /></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" src_cetemp="/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></bgsound></div><br />7、servlet里面推数据至gxt前台：<br />后台：<br />     
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><bgsound cep="16"><span style="COLOR: #008080">1</span><img id="Codehighlighter1_66_68_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_68_Open_Text.style.display='none'; Codehighlighter1_66_68_Closed_Image.style.display='inline'; Codehighlighter1_66_68_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" src_cetemp="/Images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_66_68_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_66_68_Closed_Text.style.display='none'; Codehighlighter1_66_68_Open_Image.style.display='inline'; Codehighlighter1_66_68_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" src_cetemp="/Images/OutliningIndicators/ContractedBlock.gif" /><span style="COLOR: #000000">RemoteEventServiceServlet ress </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> RemoteEventServiceServlet () </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_66_68_Closed_Text"><img alt="" src="http://www.blogjava.net/images/dot.gif" src_cetemp="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_66_68_Open_Text"><span style="COLOR: #000000">{ }</span></span><span style="COLOR: #000000">; <br /></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="/Images/OutliningIndicators/None.gif" />UploadEvent event </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> UploadEvent (source);<br /></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="/Images/OutliningIndicators/None.gif" /> ress.addEvent (UploadEvent.FILEREADING_SERVER_DOMAIN_MESSAGE, event); <br /></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="/Images/OutliningIndicators/None.gif" /></span></bgsound></div><br /> RemoteEventServiceServlet ress = new RemoteEventServiceServlet () { }; UploadEvent event = new UploadEvent (source); ress.addEvent (UploadEvent.FILEREADING_SERVER_DOMAIN_MESSAGE, event); <br />前台：<br /> // 启动监听器 <br /><div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><bgsound cep="17"><span style="COLOR: #008080"> 1</span><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /><span style="COLOR: #000000">RemoteEventService theRemoteEventService </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> RemoteEventServiceFactory.getInstance ().getRemoteEventService (); <br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />    theRemoteEventService.addListener (UploadEvent.UPLOAD_SERVER_DOMAIN_INBOUND, <br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />            </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> RemoteEventListener () <br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img id="Codehighlighter1_231_533_Open_Image" onclick="this.style.display='none'; Codehighlighter1_231_533_Open_Text.style.display='none'; Codehighlighter1_231_533_Closed_Image.style.display='inline'; Codehighlighter1_231_533_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_231_533_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_231_533_Closed_Text.style.display='none'; Codehighlighter1_231_533_Open_Image.style.display='inline'; Codehighlighter1_231_533_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" />    </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_231_533_Closed_Text"><img alt="" src="http://www.blogjava.net/images/dot.gif" src_cetemp="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_231_533_Open_Text"><span style="COLOR: #000000">{ <br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> apply (de.novanic.eventservice.client.event.Event anEvent)<br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img id="Codehighlighter1_315_526_Open_Image" onclick="this.style.display='none'; Codehighlighter1_315_526_Open_Text.style.display='none'; Codehighlighter1_315_526_Closed_Image.style.display='inline'; Codehighlighter1_315_526_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_315_526_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_315_526_Closed_Text.style.display='none'; Codehighlighter1_315_526_Open_Image.style.display='inline'; Codehighlighter1_315_526_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" />        </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_315_526_Closed_Text"><img alt="" src="http://www.blogjava.net/images/dot.gif" src_cetemp="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_315_526_Open_Text"><span style="COLOR: #000000">{ <br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (anEvent </span><span style="COLOR: #0000ff">instanceof</span><span style="COLOR: #000000"> UploadEvent) <br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img id="Codehighlighter1_367_517_Open_Image" onclick="this.style.display='none'; Codehighlighter1_367_517_Open_Text.style.display='none'; Codehighlighter1_367_517_Closed_Image.style.display='inline'; Codehighlighter1_367_517_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="DISPLAY: none" id="Codehighlighter1_367_517_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_367_517_Closed_Text.style.display='none'; Codehighlighter1_367_517_Open_Image.style.display='inline'; Codehighlighter1_367_517_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" />            </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id="Codehighlighter1_367_517_Closed_Text"><img alt="" src="http://www.blogjava.net/images/dot.gif" src_cetemp="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_367_517_Open_Text"><span style="COLOR: #000000">{ <br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />                UploadEvent te </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (UploadEvent) anEvent; <br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />                sourceTemplate </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> te.getSource ();<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />                fileText.setValue (te.getResultMessage ());<br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />                }</span></span><span style="COLOR: #000000"> <br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />            }</span></span><span style="COLOR: #000000"> <br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" src_cetemp="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" />    }</span></span><span style="COLOR: #000000">); </span></bgsound></div><img src ="http://www.blogjava.net/397879213/aggbug/341927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/397879213/" target="_blank">liuliang</a> 2012-05-03 18:05 <a href="http://www.blogjava.net/397879213/archive/2012/05/03/341927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java编码规范 </title><link>http://www.blogjava.net/397879213/archive/2009/02/15/254768.html</link><dc:creator>liuliang</dc:creator><author>liuliang</author><pubDate>Sun, 15 Feb 2009 08:21:00 GMT</pubDate><guid>http://www.blogjava.net/397879213/archive/2009/02/15/254768.html</guid><wfw:comment>http://www.blogjava.net/397879213/comments/254768.html</wfw:comment><comments>http://www.blogjava.net/397879213/archive/2009/02/15/254768.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/397879213/comments/commentRss/254768.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/397879213/services/trackbacks/254768.html</trackback:ping><description><![CDATA[Java编码规范  <br />  <br />  <br />作者：酷页 来源：InterNet 加入时间：2003-7-24   <br />  <br /> <br />　　1. Java 命名约定 <br /> <br />除了以下几个特例之外，命名时应始终采用完整的英文描述符。此外，一般应采用小写字母，但类名、接口名以及任何非初始单词的第一个字母要大写。 <br />　　 <br />　　1.1 一般概念 <br /> <br />n 尽量使用完整的英文描述符 <br />n 采用适用于相关领域的术语 <br />n 采用大小写混合使名字可读 <br />n 尽量少用缩写，但如果用了，要明智地使用，且在整个工程中统一 <br />n 避免使用长的名字（小于 15 个字母是个好主意） <br />n 避免使用类似的名字，或者仅仅是大小写不同的名字 <br />n 避免使用下划线（除静态常量等） <br /> <br />　　1.2 示范 <br /> <br />包（Package） 采用完整的英文描述符，应该都是由小写字母组成。对于全局包，将你的 Internet 域名反转并接上包名。 java.awt,com.ambysoft.www.persistence <br />类（Class） 采用完整的英文描述符，所有单词的第一个字母大写。 Customer, SavingsAccount <br />接口（Interface） 采用完整的英文描述符说明接口封装，所有单词的第一个字母大写。习惯上，名字后面加上后缀 able， ible 或者 er，但这不是必需的。 Contactable,Prompter <br />组件/部件（Component） 使用完整的英文描述来说明组件的用途，末端应接上组件类型。 okButton, customerList,fileMenu <br />异常（Exception） 通常采用字母 e 表示异常。 e  <br />类变量 字段采用完整的英文描述，第一个字母小写，任何中间单词的首字母大写。 firstName, lastName <br />实参/参数 同字段/属性的命名规则 public void setFirstName(String firstName){ this.firstName = firstName;} <br />局部变量 同字段/属性的命名规则  <br />获取成员函数 被访问字段名的前面加上前缀 get。 getFirstName(), getLastName() <br />布尔型的获取成员函数 所有的布尔型获取函数必须用单词 is 做前缀。 isPersistent(), isString() <br />设置成员函数 被访问字段名的前面加上前缀 set。 setFirstName(), setLastName(),setWarpSpeed() <br />普通成员函数 采用完整的英文描述说明成员函数功能，第一个单词尽可能采用一个生动的动词，第一个字母小写。 openFile(), addAccount() <br />静态常量字段（static final） 全部采用大写字母，单词之间用下划线分隔。 MIN_BALANCE, DEFAULT_DATE <br />循环计数器 通常采用字母 i，j，k 或者 counter 都可以接受。 i, j, k, counter <br />数组 数组应该总是用下面的方式来命名：objectType[]。 byte[] buffer; <br /> <br /> <br /> <br />　　2. Java 注释约定 <br /> <br />一个很好的可遵循的有关注释的经验法则是：问问你自己，你如果从未见过这段代码，要在合理的时间内有效地明白这段代码，你需要哪些信息。 <br /> <br />　　2.1. 一般概念 <br /> <br />n 注释应该增加代码的清晰度 <br />n 保持注释的简洁 <br />n 在写代码之前写注释 <br />n 注释出为什么做了一些事，而不仅仅是做了什么 <br />2.2. 示范 <br />文档注释 在紧靠接口、类、成员函数和字段声明的前面注释它们。 /** 客户：客户是我们将服务和产品卖给的人或机构。*/ <br />C 语言风格 采用 C 语言风格的注释去掉不再使用但你仍想保留的代码。仍想保留是因为用户万一会改变想法，或者在调试过程中想让它暂时失效。 /* 这部分代码因为已被它之前的代码取代，由 B.Gustafsson, 于 1999 年 6 月 4 日注释掉。如果两年之后还未使用，将其删除。. . . （源代码）*/ <br />单行 在成员函数内采用单行注释，来说明业务逻辑、代码段和暂时变量的声明。注释符"//"后必须紧跟一个空格，然后才是注释信息。 // 遵照 Sarek 的规定，给所有// 超过 $1000 的发货单// 打 5% 的折扣。让利活// 动于 1995年 2 月开始. <br />2.3. 注释哪些部分 <br />类 类的目的、即类所完成的功能，注释出采用的不变量。 <br />接口 设置接口的目的、它应如何被使用以及如何不被使用。 <br />成员函数注释 对于设置与获取成员函数，在成员变量已有说明的情况下，可以不加注释；普通成员函数要求说明完成什么功能，参数含义是什么返回什么；  <br />普通成员函数内部注释 控制结构，代码做了些什么以及为什么这样做，处理顺序等。 <br />实参/参数 参数含义、及其它任何约束或前提条件 <br />字段/属性 字段描述 <br />局部变量 无特别意义的情况下不加注释 <br /> <br /> <br /> <br />　　3. Java 文件样式约定 <br /> <br />所有的 Java(*.java) 文件都必须遵守如下的样式规则： <br />1) 版权信息  <br />版权信息必须在 java 文件的开头，比如：  <br />/** * Copyright ? 2000 Shanghai XXX Co. Ltd. * All right reserved. */ <br />其他不需要出现在 javadoc 的信息也可以包含在这里。 <br />2) Package/Imports  <br />package 行要在 import 行之前，import 中标准的包名要在本地的包名之前，而且按照字母顺序排列。如果 import 行中包含了同一个包中的不同子目录，则应该用 * 来处理。  <br />package hotlava.net.stats;import java.io.*;import java.util.Observable;import hotlava.util.Application; <br />这里 java.io.* 是用来代替InputStream and OutputStream 的。 <br />3) Class  <br />接下来的是类的注释，一般是用来解释类的。  <br />/** * A class representing a set of packet and byte counters * It is observable to allow it to be watched, but only * reports changes when the current set is complete */ <br />接下来是类定义，包含了在不同的行的 extends 和 implements  <br />public class CounterSet extends Observable implements Cloneable{……} <br />4) Class Fields  <br />接下来是类的成员变量：  <br />/** * Packet counters */protected int[] packets; <br />public 的成员变量必须生成文档（JavaDoc）。proceted、private和 package 定义的成员变量如果名字含义明确的话，可以没有注释。 <br />5) 存取方法（类的设置与获取成员函数） <br />接下来是类变量的存取的方法。它只是简单的用来将类的变量赋值获取值的话，可以简单的写在一行上，如类的成员变量已经有注释，类变量的存取方法可以没有注释。 <br />public int[] getPackets() { return this.packets; }public void setPackets(int[] packets) { this.packets = packets; }…… <br />要求说明的是，对于集合，加入成员函数来插入和删除项；另其它的方法不要写在一行上。 <br />6) 构造函数  <br />接下来是构造函数，它应该用递增的方式写（比如：参数多的写在后面）。  <br />public CounterSet(int size){ this.size = size;} <br />7) 克隆方法  <br />如果这个类是可以被克隆的，那么下一步就是 clone 方法：  <br />public Object clone() { try { …… }catch(CloneNotSupportedException e) { …… }} <br />8) 类方法 （类的普通成员函数） <br />下面开始写类的方法： <br />/** * Set the packet counters * param r1 - …… * param r2 - …… * …… */protected final void setArray(int[] r1, int[] r2, int[] r3, int[] r4) throws IllegalArgumentException{ // Ensure the arrays are of equal size ……} <br />9) toString 方法  <br />一般情况下，每一个类都应该定义 toString 方法：  <br />public String toString() { ……} <br />10) main 方法  <br />普通类，考虑置入一个main()方法，其中包含用于测试那个类的代码，如果包含了main() 方法, 那么它应该写在类的底部。 <br /> <br /> <br /> <br />　　4. Java编码其它约定 <br /> <br />n 文档化  <br />必须用 javadoc 来为类生成文档。不仅因为它是标准，这也是被各种 java 编译器都认可的方法。使用 @author 标记是不被推荐的，因为代码不应该是被个人拥有的。  <br />n 缩进  <br />缩进应该是每行2个空格。 不要在源文件中保存Tab字符， 在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度。  <br />如果你使用 UltrEdit 作为你的 Java 源代码编辑器的话，你可以通过如下操作来禁止保存Tab字符， 方法是通过 UltrEdit中先设定 Tab 使用的长度室2个空格，然后用 Format|Tabs to Spaces 菜单将 Tab 转换为空格。  <br />n 页宽  <br />页宽应该设置为80字符。 源代码一般不会超过这个宽度， 并导致无法完整显示， 但这一设置也可以灵活调整。 在任何情况下， 超长的语句应该在一个逗号或者一个操作符后折行。 一条语句折行后， 应该比原来的语句再缩进2个字符。 <br />n {} 对  <br />{} 中的语句应该单独作为一行。 例如， 下面的第1行是错误的， 第2行是正确的:  <br />if (i&gt;0) { i ++ }; // 错误, { 和 } 在同一行 if (i&gt;0) { i ++ }; // 正确, 单独作为一行  <br />n 括号  <br />左括号和后一个字符之间不应该出现空格； 同样， 右括号和前一个字符之间也不应该出现空格。 下面的例子说明括号和空格的错误及正确使用:  <br />CallProc( AParameter ); // 错误  <br />CallProc(AParameter); // 正确  <br />不要在语句中使用无意义的括号，括号只应该为达到某种目的而出现在源代码中。 <br />n JSP文件命名 <br />采用完整的英文描述说明JSP所完成的功能，尽可能包括一个生动的动词，第一个字母小写，如：viewMessage.jsp、editUser.jsp或者forumChooser.jsp等。 <br />n Servlet类命名 <br />一般对应于所服务的对象加后缀Service来命名，如：UserService，TradeService等。 <br /> <br /> <br /> <br />　　5. 一些编程建议 <br /> <br />n 使用 StringBuffer 对象  <br />在处理 String 的时候要尽量使用 StringBuffer 类，StringBuffer 类是构成 String 类的基础。String 类将 StringBuffer 类封装了起来，（以花费更多时间为代价）为开发人员提供了一个安全的接口。当我们在构造字符串的时候，我们应该用 StringBuffer 来实现大部分的工作，当工作完成后将 StringBuffer 对象再转换为需要的 String 对象。比如：如果有一个字符串必须不断地在其后添加许多字符来完成构造，那么我们应该使用 StringBuffer 对象和它的 append() 方法。如果我们用 String 对象代替 StringBuffer 对象的话，会花费许多不必要的创建和释放对象的 CPU 时间。 <br />n 避免太多的使用 synchronized 关键字  <br />避免不必要的使用关键字 synchronized，应该在必要的时候再使用它，这是一个避免死锁的好方法。 必须使用时，也尽量控制范围，最好在块级控制。 <br />n 避免使用 java.util.Vector 类 <br />因为"Unlike the new collection implementations, Vector is synchronized."，所以使用java.util.Vector类在性能上会有所减低。 <br />n 尽量使用接口而不是一个具体的类 <br />比方如下需求，给定一个SQL语句，返回一个对象的列表，实现中用java.util.ArrayList实现，于是定义方法为： <br />public java.util.ArrayList getObjectItems(String sql) <br />上面的方法存在一个问题，当getObjectItems内改用Vector或LinkedList实现，外部类必须做相应更改。一个更好的方法是定义返回值为java.util.AbstractList更合适： <br />public java.util.AbstractList getObjectItems(String sql) <br />这样即使更改实现，外部类也不必做相应更改。 <br />n 避免使用索引来调用数据库中间层组件返回的结果集 <br />如： <br />for(int i=1; i&lt;=dt.getRowCount(); i++){ String field1 = dt.getField(i, 0).toString(); ……} <br />而应用字段名来存取结果集： <br />for(int i=1; i&lt;=dt.getRowCount(); i++){ String field1 = dt.getField(i, "field1").toString(); ……} <br />这样在数据库设计更改或查询的SQL语句发生变化时，不会影响到程序的执行。 <br /> <br />  <br /><br /><img src ="http://www.blogjava.net/397879213/aggbug/254768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/397879213/" target="_blank">liuliang</a> 2009-02-15 16:21 <a href="http://www.blogjava.net/397879213/archive/2009/02/15/254768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>﻿关于Java23种设计模式的有趣见解</title><link>http://www.blogjava.net/397879213/archive/2009/02/15/254767.html</link><dc:creator>liuliang</dc:creator><author>liuliang</author><pubDate>Sun, 15 Feb 2009 08:20:00 GMT</pubDate><guid>http://www.blogjava.net/397879213/archive/2009/02/15/254767.html</guid><wfw:comment>http://www.blogjava.net/397879213/comments/254767.html</wfw:comment><comments>http://www.blogjava.net/397879213/archive/2009/02/15/254767.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/397879213/comments/commentRss/254767.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/397879213/services/trackbacks/254767.html</trackback:ping><description><![CDATA[﻿关于Java23种设计模式的有趣见解<br /><br />创建型模式<br /><br />　 <br />　 <br />1、FACTORY—追MM少不了请吃饭了，麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西，虽然口味有所不同，但不管你带MM去麦当劳或肯德基，只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory<br /><br />　　工厂模式：客户类和工厂类分开。消费者任何时候需要某种产品，只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时，工厂类也要做相应的修改。如：如何创建及如何向客户端提供。<br /><br /> <br />　　 <br />2、 BUILDER—MM最爱听的就是“我爱你”这句话了，见到不同地方的MM,要能够用她们的方言跟她说这句话哦，我有一个多种语言翻译机，上面每种语言都有一个按键，见到MM我只要按对应的键，它就能够用相应的语言说出“我爱你”这句话了，国外的MM也可以轻松搞掂，这就是我的“我爱你”builder。 (这一定比美军在伊拉克用的翻译机好卖)<br /><br />　　建造模式：将产品的内部表象和产品的生成过程分割开来，从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化，客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。<br /><br />　　 <br /> <br />3、FACTORY METHOD—请MM去麦当劳吃汉堡，不同的MM有不同的口味，要每个都记住是一件烦人的事情，我一般采用Factory Method模式，带着MM到服务员那儿，说“要一个汉堡”，具体要什么样的汉堡呢，让MM直接跟服务员说就行了。<br /><br />　　工厂方法模式：核心工厂类不再负责所有产品的创建，而是将具体创建的工作交给子类去做，成为一个抽象工厂角色，仅负责给出具体工厂类必须实现的接口，而不接触哪一个产品类应当被实例化这种细节。<br /><br />　　 <br /> <br />4、PROTOTYPE—跟MM用QQ聊天，一定要说些深情的话语了，我搜集了好多肉麻的情话，需要时只要copy出来放到QQ里面就行了，这就是我的情话prototype了。(100块钱一份，你要不要)<br /><br />　　原始模型模式：通过给出一个原型对象来指明所要创建的对象的类型，然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类，产品类不需要非得有任何事先确定的等级结构，原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。<br /><br />　　 <br /> <br />5、SINGLETON—俺有6个漂亮的老婆，她们的老公都是我，我就是我们家里的老公Sigleton，她们只要说道“老公”，都是指的同一个人，那就是我(刚才做了个梦啦，哪有这么好的事)<br /><br />　　单例模式：单例模式确保某一个类只有一个实例，而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。<br /><br />　　结构型模式<br /><br />　　 <br /> <br />6、ADAPTER—在朋友聚会上碰到了一个美女Sarah，从香港来的，可我不会说粤语，她不会说普通话，只好求助于我的朋友kent了，他作为我和Sarah之间的Adapter，让我和Sarah可以相互交谈了(也不知道他会不会耍我)<br /><br />　　适配器(变压器)模式：把一个类的接口变换成客户端所期待的另一种接口，从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。<br /><br />　　 <br /> <br />7、BRIDGE—早上碰到MM，要说早上好，晚上碰到MM，要说晚上好;碰到MM穿了件新衣服，要说你的衣服好漂亮哦，碰到MM新做的发型，要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题，自己用BRIDGE组合一下不就行了<br /><br />　　桥梁模式：将抽象化与实现化脱耦，使得二者可以独立的变化，也就是说将他们之间的强关联变成弱关联，也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系，从而使两者可以独立的变化。 <br /> <br /><br /><br />8、 COMPOSITE—Mary今天过生日。“我过生日，你要送我一件礼物。”“嗯，好吧，去商店，你自己挑。”“这件T恤挺漂亮，买，这条裙子好看，买，这个包也不错，买。”“喂，买了三件了呀，我只答应送一件礼物的哦。”“什么呀，T恤加裙子加包包，正好配成一套呀，小姐，麻烦你包起来。”“……”， MM都会用Composite模式了，你会了没有?<br /><br />合成模式：合成模式将对象组织到树结构中，可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。<br /><br />　　 <br /> <br />9、 DECORATOR—Mary过完轮到Sarly过生日，还是不要叫她自己挑了，不然这个月伙食费肯定玩完，拿出我去年在华山顶上照的照片，在背面写上 “最好的的礼物，就是爱你的Fita”，再到街上礼品店买了个像框(卖礼品的MM也很漂亮哦)，再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起来……，我们都是Decorator，最终都在修饰我这个人呀，怎么样，看懂了吗?<br /><br />　　装饰模式：装饰模式以对客户端透明的方式扩展对象的功能，是继承关系的一个替代方案，提供比继承更多的灵活性。动态给一个对象增加功能，这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。<br /><br />　　 <br /> <br />10、 FACADE—我有一个专业的Nikon相机，我就喜欢自己手动调光圈、快门，这样照出来的照片才专业，但MM可不懂这些，教了半天也不会。幸好相机有 Facade设计模式，把相机调整到自动档，只要对准目标按快门就行了，一切由相机自动调整，这样MM也可以用这个相机给我拍张照片了。<br /><br />　　门面模式：外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口，使得子系统更易于使用。每一个子系统只有一个门面类，而且此门面类只有一个实例，也就是说它是一个单例模式。但整个系统可以有多个门面类。<br /><br />　　 <br /> <br />11、 FLYWEIGHT—每天跟MM发短信，手指都累死了，最近买了个新手机，可以把一些常用的句子存在手机里，要用的时候，直接拿出来，在前面加上MM的名字就可以发送了，再不用一个字一个字敲了。共享的句子就是Flyweight，MM的名字就是提取出来的外部特征，根据上下文情况使用。<br /><br />　　享元模式： FLYWEIGHT在拳击比赛中指最轻量级。享元模式以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部，不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状态不能影响内蕴状态，它们是相互独立的。将可以共享的状态和不可以共享的状态从常规类中区分开来，将不可以共享的状态从类里剔除出去。客户端不可以直接创建被共享的对象，而应当使用一个工厂对象负责创建被共享的对象。享元模式大幅度的降低内存中对象的数量。<br /><br />　　 <br /> <br />12、PROXY—跟MM在网上聊天，一开头总是“hi,你好”,“你从哪儿来呀?”“你多大了?”“身高多少呀?”这些话，真烦人，写个程序做为我的Proxy吧，凡是接收到这些话都设置好了自动的回答，接收到其他的话时再通知我回答，怎么样，酷吧。<br /><br />　　代理模式：代理模式给某一个对象提供一个代理对象，并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下，客户不想或者不能够直接引用一个对象，代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真正的被代理对象，而仅仅持有一个被代理对象的接口，这时候代理对象不能够创建被代理对象，被代理对象必须有系统的其他角色代为创建并传入。<br /><br />　　行为模式<br /><br />　　 <br /> <br />13、 CHAIN OF RESPONSIBLEITY—晚上去上英语课，为了好开溜坐到了最后一排，哇，前面坐了好几个漂亮的MM哎，找张纸条，写上“Hi,可以做我的女朋友吗?如果不愿意请向前传”，纸条就一个接一个的传上去了，糟糕，传到第一排的MM把纸条传给老师了，听说是个老处女呀，快跑!<br /><br />　　责任链模式：在责任链模式中，很多对象由每一个对象对其下家的引用而接起来形成一条链。请求在这个链上传递，直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求，系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择：承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。<br /><br />　　 <br /> <br />14、 COMMAND—俺有一个MM家里管得特别严，没法见面，只好借助于她弟弟在我们俩之间传送信息，她对我有什么指示，就写一张纸条让她弟弟带给我。这不，她弟弟又传送过来一个COMMAND，为了感谢他，我请他吃了碗杂酱面，哪知道他说：“我同时给我姐姐三个男朋友送COMMAND，就数你最小气，才请我吃面。”，:-(<br /><br />　　命令模式：命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开，委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来，使得请求的一方不必知道接收请求的一方的接口，更不必知道请求是怎么被接收，以及操作是否执行，何时被执行以及是怎么被执行的。系统支持命令的撤消。<br /><br />　　 <br /> <br />15、INTERPRETER—俺有一个《泡MM真经》，上面有各种泡MM的攻略，比如说去吃西餐的步骤、去看电影的方法等等，跟MM约会时，只要做一个Interpreter，照着上面的脚本执行就可以了。<br /><br />解释器模式：给定一个语言后，解释器模式可以定义出其文法的一种表示，并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后，使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表文法的命令类的等级结构，也就是一系列的组合规则。每一个命令对象都有一个解释方法，代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。<br /><br />　　 <br /> <br />16、ITERATOR—我爱上了Mary，不顾一切的向她求婚。<br /><br />　　Mary：“想要我跟你结婚，得答应我的条件”<br /><br />　　我：“什么条件我都答应，你说吧”<br /><br />　　Mary：“我看上了那个一克拉的钻石”<br /><br />　　我：“我买，我买，还有吗?”<br /><br />　　Mary：“我看上了湖边的那栋别墅”<br /><br />　　我：“我买，我买，还有吗?”<br /><br />　　Mary：“你的小弟弟必须要有50cm长”<br /><br />　　我脑袋嗡的一声，坐在椅子上，一咬牙：“我剪，我剪，还有吗?”<br /><br />　　……<br /><br />　　迭代子模式：迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集，聚集对象是能够包容一组对象的容器对象。迭代子模式将迭代逻辑封装到一个独立的子对象中，从而与聚集本身隔开。迭代子模式简化了聚集的界面。每一个聚集对象都可以有一个或一个以上的迭代子对象，每一个迭代子的迭代状态可以是彼此独立的。迭代算法可以独立于聚集角色变化。<br /><br />　　 <br /> <br />17、MEDIATOR—四个MM打麻将，相互之间谁应该给谁多少钱算不清楚了，幸亏当时我在旁边，按照各自的筹码数算钱，赚了钱的从我这里拿，赔了钱的也付给我，一切就OK啦，俺得到了四个MM的电话。<br /><br />　　调停者模式：调停者模式包装了一系列对象相互作用的方式，使得这些对象不必相互明显作用。从而使他们可以松散偶合。当某些对象之间的作用发生改变时，不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的相互作用转化为一对多的相互作用。调停者模式将对象的行为和协作抽象化，把对象在小尺度的行为上与其他对象的相互作用分开处理。<br /><br />　　 <br /> <br />18、MEMENTO—同时跟几个MM聊天时，一定要记清楚刚才跟MM说了些什么话，不然MM发现了会不高兴的哦，幸亏我有个备忘录，刚才与哪个MM说了什么话我都拷贝一份放到备忘录里面保存，这样可以随时察看以前的记录啦。<br /><br />备忘录模式：备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下，将一个对象的状态捉住，并外部化，存储起来，从而可以在将来合适的时候把这个对象还原到存储起来的状态。 <br /> <br /><br /><br />　　19、OBSERVER—想知道咱们公司最新MM情报吗?加入公司的MM情报邮件组就行了，tom负责搜集情报，他发现的新情报不用一个一个通知我们，直接发布给邮件组，我们作为订阅者(观察者)就可以及时收到情报啦<br /><br />　　观察者模式：观察者模式定义了一种一队多的依赖关系，让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时，会通知所有观察者对象，使他们能够自动更新自己。<br /><br />　　 <br /> <br />20、 STATE—跟MM交往时，一定要注意她的状态哦，在不同的状态时她的行为会有不同，比如你约她今天晚上去看电影，对你没兴趣的MM就会说“有事情啦”，对你不讨厌但还没喜欢上的MM就会说“好啊，不过可以带上我同事么?”，已经喜欢上你的MM就会说“几点钟?看完电影再去泡吧怎么样?”，当然你看电影过程中表现良好的话，也可以把MM的状态从不讨厌不喜欢变成喜欢哦。<br /><br />　　状态模式：状态模式允许一个对象在其内部状态改变的时候改变行为。这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里，每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候，其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时，系统便改变所选的子类。<br /><br />　　 <br /> <br />21、STRATEGY—跟不同类型的MM约会，要用不同的策略，有的请电影比较好，有的则去吃小吃效果不错，有的去海边浪漫最合适，单目的都是为了得到MM的芳心，我的追MM锦囊中有好多Strategy哦。<br /><br />　　策略模式：策略模式针对一组算法，将每一个算法封装到具有共同接口的独立的类中，从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类，各种算法在具体的策略类中提供。由于算法和环境独立开来，算法的增减，修改都不会影响到环境和客户端。<br /><br />　　 <br /> <br />22、 TEMPLATE METHOD——看过《如何说服女生上床》这部经典文章吗?女生从认识到上床的不变的步骤分为巧遇、打破僵局、展开追求、接吻、前戏、动手、爱抚、进去八大步骤(Template method)，但每个步骤针对不同的情况，都有不一样的做法，这就要看你随机应变啦(具体实现);<br /><br />　　模板方法模式：模板方法模式准备一个抽象类，将部分逻辑以具体方法以及具体构造子的形式实现，然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法，从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架，而将逻辑的细节留给具体的子类去实现。<br /><br />　　 <br /> <br />23、 VISITOR—情人节到了，要给每个MM送一束鲜花和一张卡片，可是每个MM送的花都要针对她个人的特点，每张卡片也要根据个人的特点来挑，我一个人哪搞得清楚，还是找花店老板和礼品店老板做一下Visitor，让花店老板根据MM的特点选一束花，让礼品店老板也根据每个人特点选一张卡，这样就轻松多了;<br /><br />　　访问者模式：访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话，接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对未定的系统，它把数据结构和作用于结构上的操作之间的耦合解脱开，使得操作集合可以相对自由的演化。访问者模式使得增加新的操作变的很容易，就是增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中，而不是分散到一个个的节点类中。当使用访问者模式时，要将尽可能多的对象浏览逻辑放在访问者类中，而不是放到它的子类中。访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。<br /><br /><img src ="http://www.blogjava.net/397879213/aggbug/254767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/397879213/" target="_blank">liuliang</a> 2009-02-15 16:20 <a href="http://www.blogjava.net/397879213/archive/2009/02/15/254767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA面试题集</title><link>http://www.blogjava.net/397879213/archive/2009/02/15/254766.html</link><dc:creator>liuliang</dc:creator><author>liuliang</author><pubDate>Sun, 15 Feb 2009 08:19:00 GMT</pubDate><guid>http://www.blogjava.net/397879213/archive/2009/02/15/254766.html</guid><wfw:comment>http://www.blogjava.net/397879213/comments/254766.html</wfw:comment><comments>http://www.blogjava.net/397879213/archive/2009/02/15/254766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/397879213/comments/commentRss/254766.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/397879213/services/trackbacks/254766.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JAVA																																																								面试题集																																								基础知识：																																				1.C...&nbsp;&nbsp;<a href='http://www.blogjava.net/397879213/archive/2009/02/15/254766.html'>阅读全文</a><img src ="http://www.blogjava.net/397879213/aggbug/254766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/397879213/" target="_blank">liuliang</a> 2009-02-15 16:19 <a href="http://www.blogjava.net/397879213/archive/2009/02/15/254766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java笔记</title><link>http://www.blogjava.net/397879213/archive/2009/02/15/254759.html</link><dc:creator>liuliang</dc:creator><author>liuliang</author><pubDate>Sun, 15 Feb 2009 07:33:00 GMT</pubDate><guid>http://www.blogjava.net/397879213/archive/2009/02/15/254759.html</guid><wfw:comment>http://www.blogjava.net/397879213/comments/254759.html</wfw:comment><comments>http://www.blogjava.net/397879213/archive/2009/02/15/254759.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/397879213/comments/commentRss/254759.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/397879213/services/trackbacks/254759.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 配置java环境变量：     JAVA_HOME：配置JDK的目录     CLASSPATH：指定到哪里去找运行时需要用到的类代码（字节码）     PATH：指定可执行程序的位置          LINUX系统（在" .bash_profile "下的环境变量设置）         JAVA_HOME=/opt/jdk1.5.0_06         CLASSPATH=.:$JAVA_H...&nbsp;&nbsp;<a href='http://www.blogjava.net/397879213/archive/2009/02/15/254759.html'>阅读全文</a><img src ="http://www.blogjava.net/397879213/aggbug/254759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/397879213/" target="_blank">liuliang</a> 2009-02-15 15:33 <a href="http://www.blogjava.net/397879213/archive/2009/02/15/254759.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xml2</title><link>http://www.blogjava.net/397879213/archive/2009/02/15/254754.html</link><dc:creator>liuliang</dc:creator><author>liuliang</author><pubDate>Sun, 15 Feb 2009 07:16:00 GMT</pubDate><guid>http://www.blogjava.net/397879213/archive/2009/02/15/254754.html</guid><wfw:comment>http://www.blogjava.net/397879213/comments/254754.html</wfw:comment><comments>http://www.blogjava.net/397879213/archive/2009/02/15/254754.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/397879213/comments/commentRss/254754.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/397879213/services/trackbacks/254754.html</trackback:ping><description><![CDATA[XML简介：
<br />
&nbsp;&nbsp;&nbsp; Xml是可扩展性标记语言(eXtendsible Markup Language)的缩写。
<br />
&nbsp;&nbsp;&nbsp; 所谓标记，是指一系列的特许的字符符号，可以通过向其中插入文本来存储文档的内容。
<br />
&nbsp;&nbsp;&nbsp; 它是不同技术之间数据交换的基石。
<br />
&nbsp;<br />
* xml与html的区别：
<br />
&nbsp;&nbsp;&nbsp; &gt; Xml是一中标记语言，这意味着xml文档都是使用标记来存储数据和信息的。
<br />
&nbsp;&nbsp;&nbsp; &gt;&gt; 一个规范的html文档完全可以被看做xml文档。
<br />
&nbsp;&nbsp;&nbsp; &gt;&gt; xml的可扩展性体现在其标记可由开发者自行定义。
<br />
&nbsp;&nbsp;&nbsp; &gt;&gt; xml文档更接近于数据库，它并不存储数据的表现形式。
<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &gt; html是一门编程语言，它可以被解析工具（如IE浏览器）处理，
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 并将信息以某种格式显示出来。
<br />
&nbsp;&nbsp;&nbsp; &gt;&gt; html注重的是数据的表现形式。
<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; HTML由于已定义标记的有限性，在很多领域已经抓襟见肘了。
<br />
&nbsp;&nbsp;&nbsp; 而xml可扩展性很好的弥补了HTML的缺陷。
<br />
&nbsp;<br />
* xml主要应用于一下几个方面：
<br />
&nbsp;&nbsp;&nbsp; 1.数据交换
<br />
&nbsp;&nbsp;&nbsp; 2.跨平台应用开发
<br />
&nbsp;&nbsp;&nbsp; 3.数据转换
<br />
&nbsp;&nbsp;&nbsp; 4.数据库：xml完全可以作为一个小型数据库来使用。
<br />
&nbsp;&nbsp;&nbsp; 5.配置文件：尤其是在Java开源框架中，如struts，hibernate，spring等。
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 都是用xml文档作为配置文件。
<br />
&nbsp;<br />
* xml语法：
<br />
一.文档类型的声明：
<br />
&nbsp;&nbsp;&nbsp; &lt;?xml version="1.0"?&gt;
<br />
&nbsp;&nbsp;&nbsp; 该语句是xml文档类型的声明，表示该文档是一个xml文件。
<br />
&nbsp;&nbsp;&nbsp; version="1.0"表示该xml文档的版本是1.0的。
<br />
&nbsp;<br />
说明：
<br />
&nbsp;&nbsp;&nbsp; w3c虽然已经提供了xml1.1的版本的推荐标准，但并未被广泛的普及和应用。
<br />
&nbsp;&nbsp;&nbsp; 最主要原因是说明了1.1版本不能完全向后兼容xml1.0版本。
<br />
&nbsp;&nbsp;&nbsp; 因为xml的应用非常广泛，所以在无法做到很好兼容的情况下，
<br />
&nbsp;&nbsp;&nbsp; 使用xml1.1来代替xml1.0是不可取的。
<br />
&nbsp;<br />
1.文档编码：xml的字符被设计为使用Unicode编码。
<br />
&nbsp;&nbsp;&nbsp; &gt; xml文档的默认编码为UTF-8,欲改变xml的字符编码，应适用encoding属性。
<br />
&nbsp;&nbsp;&nbsp; &gt; 具体设置：&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
<br />
&nbsp;<br />
2.文档的独立性：xml文档的外部关联一般使用外部实体或应用了外部DTD文件。
<br />
&nbsp;<br />
3.注意的问题：
<br />
&nbsp;&nbsp;&nbsp; a) xml文档类型的声明并不是处理命令，虽然其形式和处理指令非常相似。
<br />
&nbsp;&nbsp;&nbsp; b) 字符串"xml"和字符串"&lt;?"之间不能留有空格。
<br />
&nbsp;&nbsp;&nbsp; c) 文档类型的声明可以不出现在xml文档中，
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 如果出现，则一定要出现在xml文档的第一行第一列。
<br />
&nbsp;<br />
二。文档注释：
<br />
&nbsp;&nbsp;&nbsp; xml的文档注释以&lt;!--开头，以--&gt;结束，中间为注释的内容。
<br />
&nbsp;<br />
注意的问题：
<br />
&nbsp;&nbsp;&nbsp; 1.文档注释中可以包含任何特殊的字符。
<br />
&nbsp;&nbsp;&nbsp; 2.文档注释必须以--&gt;结束
<br />
&nbsp;<br />
三。元素：元素是指标签及包含在标签内部的内容。
<br />
&gt; 元素的命名要遵循以下规则：
<br />
&nbsp;&nbsp;&nbsp; 1.元素名只能以字母或下划线开始，其后可以跟数字，字母和下划线的任意组合。
<br />
&nbsp;&nbsp;&nbsp; 2.元素名不能以xml(Xml xMl......)开头
<br />
&nbsp;&nbsp;&nbsp; 3.元素名不能包含空格
<br />
&nbsp;&nbsp;&nbsp; 4.元素的开始标签与结束标签名称必须完全一致，包括大小写一致。
<br />
&nbsp;<br />
&gt; 根元素：
<br />
&nbsp;&nbsp;&nbsp; &gt;&gt; 每个xml文档元素有且只有一个根元素，
<br />
&nbsp;&nbsp;&nbsp; &gt;&gt; 根元素是顶级元素（也就是第一个元素），
<br />
&nbsp;&nbsp;&nbsp; &gt;&gt; 除处理指令和注释外，其余所有必须包含在根元素当中。
<br />
&nbsp;<br />
&gt; 元素的嵌套和元素的并列：
<br />
&nbsp;&nbsp;&nbsp; &gt;&gt; 元素嵌套是指一个元素完全包含在另一个元素中。
<br />
&nbsp;&nbsp;&nbsp; &gt;&gt; 元素并列是指多个元素具有相同的父元素。
<br />
&nbsp;&nbsp;&nbsp; &gt;&gt; 在xml文档中不允许元素的交叉使用。
<br />
&nbsp;<br />
注意的问题：
<br />
&nbsp;&nbsp;&nbsp; 1.xml是大小写敏感的
<br />
&nbsp;&nbsp;&nbsp; 2.文档类型声明，注释和文档的处理指令都不是元素
<br />
&nbsp;&nbsp;&nbsp; 3.元素的开始标签和结束标签必须成对出现。
<br />
&nbsp;<br />
四。属性：
<br />
&nbsp;&nbsp;&nbsp; &gt; 属性用于描述元素，所以属性必须出现在元素的标签内部。
<br />
&nbsp;&nbsp;&nbsp; &gt;&gt; 属性值一定要用引括号起来。
<br />
&nbsp;&nbsp;&nbsp; &gt; 在属性赋值时所使用的双引号可以单引号来代替。
<br />
&nbsp;&nbsp;&nbsp; &gt;&gt; 两者在使用时并无区别，但是当属性值含有双引号时，
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 则必须使用单引号来进行属性赋值，反之亦然。
<br />
&nbsp;<br />
使用属性还是子元素的区别：
<br />
&nbsp;&nbsp;&nbsp; &gt; 描叙一个元素的某个特征时，使用子元素和属性都是可行的。
<br />
&nbsp;&nbsp;&nbsp; &gt; 属性相对与子元素的局限性：
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 1.属性的扩展性差。
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 2.每个元素中同名的属性只能出现一次而同名的子元素可以出现多个。
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 3.属性存储的数据量一旦过大，就会造成xml文档结构上的失衡，
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 给阅读造成很大的不便。
<br />
&nbsp;<br />
五：实体引用
<br />
记住五种实体引用：
<br />
&nbsp;&nbsp;&nbsp; 1.&amp;amp；------------------&amp;
<br />
&nbsp;&nbsp;&nbsp; 2.&amp;lt;&nbsp;&nbsp;&nbsp; ------------------&lt;
<br />
&nbsp;&nbsp;&nbsp; 3.&amp;gt;&nbsp;&nbsp;&nbsp; ------------------&gt;
<br />
&nbsp;&nbsp;&nbsp; 4.&amp;apos;------------------'
<br />
&nbsp;&nbsp;&nbsp; 5.&amp;quot;------------------"
<br />
&nbsp;<br />
六。CDATA的语法
<br />
&nbsp;&nbsp;&nbsp; &gt; CDATA的全称为字符数据（Character Data），
<br />
&nbsp;&nbsp;&nbsp; &gt; 其语法规则：&lt;![CDATA[comment]]&gt;，其中&lt;![为开始符，]]&gt;为结束符，
<br />
&nbsp;&nbsp;&nbsp; &gt; 包含在其中的全部字符都被处理器视为普通字符。
<br />
&nbsp;<br />
注意的问题：
<br />
&nbsp;&nbsp;&nbsp; 1.CDATA段不可嵌套，而且没有嵌套的必要。
<br />
&nbsp;&nbsp;&nbsp; 2.当需要将大块的文本内容填充到元素中时，比较适合用CDATA部件。
<br />
&nbsp;<br />
七。xml中的DTD
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; DTD实际上可以看做一个或多个xml文件的模板，
<br />
&nbsp;&nbsp;&nbsp; &nbsp; &gt; 这些xml文件中的元素，元素属性，元素的排列方式、顺序，
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 元素能够包含的内容等，都必须符合DTD中的定义。
<br />
&nbsp;&nbsp;&nbsp; &nbsp; &gt; DTD可以是一个完全独立的文件，也可以是在xml文件中直接设定。
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 所以DTD分为外部DTD和内部DTD.
<br />
&nbsp;<br />
内部DTD：
<br />
&nbsp;&nbsp;&nbsp; 内部DTD是在xml文件中的文件序言区域中定义的。
<br />
&nbsp;&nbsp;&nbsp; 语法：
<br />
&nbsp;&nbsp;&nbsp; &lt;!DOCTYPE elementname[
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ............
<br />
&nbsp;&nbsp;&nbsp; ]&gt;
<br />
&nbsp;&nbsp;&nbsp; 说明：
<br />
&nbsp;&nbsp;&nbsp; &lt;!DOCTYPE :&nbsp;&nbsp;&nbsp; 表示开始设定DTD
<br />
&nbsp;&nbsp;&nbsp; elementsname:&nbsp;&nbsp;&nbsp; 制定此DTD的根元素名称
<br />
&nbsp;&nbsp;&nbsp; [..........]:&nbsp;&nbsp;&nbsp; 在[]标记里面定义xml文件使用的元素，然后用&gt;结束DTD定义
<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; 在DTD定义的中间元素设定，是DTD的最主要部分，其语法如下：
<br />
&nbsp;&nbsp;&nbsp; &lt;!ELEMENT elementname elementdifinition&gt;
<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; 内容模式：ANY,EMPTY,MIXED,子元素
<br />
&nbsp;&nbsp;&nbsp; 元素:
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ? 不出现或只出现一次
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; * 不出现或可以出现多次
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + 必须出现一次以上
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 无符号 只能出现一次
<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &lt;!ATTLIST 元素名 属性名 属性类型 缺省类型&gt;
<br />
&nbsp;&nbsp;&nbsp; 属性类型：10种&nbsp;&nbsp; 缺省类型：4种：＃required&nbsp; #implied #fix 字符串
<br />
&nbsp;<br />
八。命名空间<br />
语法：xmlns:prefix="uri"<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &gt; uri是一个虚拟的空间，不一定是实实在在存在的。
<br />
&nbsp;&nbsp;&nbsp; &gt; <br />
命名空间用来解决同名标签的问题.
<br />
<br />
&nbsp;&nbsp;&nbsp; &gt; 命名空间对属性不起作用，只表明标签属于哪个命名空间.<br />
&nbsp;<br />
&nbsp;<br />
十。如何书写xml文档
<br />
&nbsp;&nbsp;&nbsp; a) 首先要书写xml文档的类型声明
<br />
&nbsp;&nbsp;&nbsp; b) 然后添加一个注释以标注开发者的信息，开发时间等。
<br />
&nbsp;&nbsp;&nbsp; c) 接着为xml文档定义一个根元素。
<br />
&nbsp;&nbsp;&nbsp; d) 再接着添加二级元素，三级元素。
<br />
以上只是书写xml的一般步骤，其中元素的嵌套和属性依附是最关键的步骤。<br />
<img src ="http://www.blogjava.net/397879213/aggbug/254754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/397879213/" target="_blank">liuliang</a> 2009-02-15 15:16 <a href="http://www.blogjava.net/397879213/archive/2009/02/15/254754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML</title><link>http://www.blogjava.net/397879213/archive/2009/02/15/254753.html</link><dc:creator>liuliang</dc:creator><author>liuliang</author><pubDate>Sun, 15 Feb 2009 07:14:00 GMT</pubDate><guid>http://www.blogjava.net/397879213/archive/2009/02/15/254753.html</guid><wfw:comment>http://www.blogjava.net/397879213/comments/254753.html</wfw:comment><comments>http://www.blogjava.net/397879213/archive/2009/02/15/254753.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/397879213/comments/commentRss/254753.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/397879213/services/trackbacks/254753.html</trackback:ping><description><![CDATA[1 :&nbsp;&nbsp;&nbsp; 什么是Schema？<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 用来定义XML文件，并利用该定义验证XML文件是否符合要求的一种技术。&nbsp;<br />
<br />
2:&nbsp;&nbsp;&nbsp; Schema与DTD的区别：
<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; （1）：XML Schema是XML文档，而DTD有自己的特殊语法。这样，只需要懂得XML的语法规则就可以编写Schema，无须学习其他的语法规则；<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XML文件与XML Schema文件可以用相同的解析器进行解
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 析，无须两套解析器；XML Schema有强大、易用的扩展性。
<br />
&nbsp;
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; （2）：XML Schema利用命名空间将文档中的特殊的节点与Schema说明相联系，
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 一个XML文件可以有多个Schema，而对于DTD一个XML只能有一个相对应的DTD。
<br />
&nbsp;
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; （3）：XML Schema内容模型是开发的，可以随意扩充，而DTD则无法解析扩充的内容。
<br />
&nbsp;
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; （4）：DTD只能把内容类型定义为一个字符串，而XML Schema允许把内容类型定义为整形、浮点型、布尔型等等，而无须重定义。
<br />
<br />
&nbsp;&nbsp;&nbsp; 综上，XML Schema较DTD有着优势，所以尽量把XML Schema作为首选为佳。<br />
<br />
3：&nbsp;&nbsp;&nbsp; 简单语法举例<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; 6种最常用的基本类型&nbsp; String decimal(小数) integer date time&nbsp; boolean
<br />
<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; 元素定义：&lt;!xs:element name="" type="" default=""/fixed=""&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; 属性定义：&lt;!xs:attribute name="" type="" default=""/fixed=""/use="required"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; 注意：Schema中，属性声明于元素声明的唯一区别就是"use"用于定义属性是否出现在实例文档中。<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; required(必须存在) &nbsp;&nbsp;&nbsp; optional（可存在也可不存在）&nbsp;&nbsp; prohibited（必须不存在）<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; 元素定义分两种： simpleType与complexType<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; simpleType:没有子元素的 只包含自己的值 定义了一个简单的元素或者属性&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; complexType:由多个简单元素组成&nbsp;&nbsp;&nbsp; 可以层层嵌套<br />
<br />
<br />
<br />
1：什么叫解析器：一些用来对XML文件进行解析的程序。
<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
2：解析方法举例：XML最基本的解析方式有两种，分别是DOM和SAX
<br />
<br />
&nbsp;<br />
3：下面分别对两种解析方式重点介绍：
<br />
&nbsp;<br />
<br />
SAX--Simple API for XML&nbsp;&nbsp; API中 org.xml.sax <br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; 基于事件模型的处理方式，解释器发生事件通知应用程序<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; 当您使用 SAX 解析器来解析 XML 文档时，解析器在文档的不同处将产生事件。
<br />
&nbsp;&nbsp;&nbsp; 由您来决定对每个事件如何处理。<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; SAX 解析器会在以下情况下产生事件：在文档开始和结束时，在一个元素开始和结束时，或者它在一个元素中找到字符时，以及其它若干点。<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; 您可编写 Java 代码来处理每个事件，以及如何处理从解析器获得的信息。
<br />
&nbsp;<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; 如何使用SAX解析：
<br />
1)解析
<br />
&nbsp;&nbsp;&nbsp; String xmlURI = "c:/test.xml";
<br />
&nbsp;&nbsp;&nbsp; String vendorParserClass = "org.apache.xerces.parsers.SAXParser";
<br />
&nbsp;&nbsp;&nbsp; XMLReaer reader = XMLReaderFactory.createXMLReader(vendorParserClass);
<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; InputSource inputSource = new InputSource(xmlURI);
<br />
&nbsp;&nbsp;&nbsp; reader.parse(inputSource);
<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; 这样一个xml文档解析过程就完成了。因为SAX是采用时间处理机制来解析XML
<br />
&nbsp;&nbsp;&nbsp; 文档的，在解析过程中会触发一些事件，也就是执行特定的方法，你可以实现
<br />
&nbsp;&nbsp;&nbsp; 这些方法，就可以通过解析xml来做一些事情了
<br />
&nbsp; 2)处理
<br />
&nbsp;&nbsp;&nbsp; SAX2.0定义的核心处理接口一共有
<br />
&nbsp;&nbsp;&nbsp; org.xml.sax.ContentHandler
<br />
&nbsp;&nbsp;&nbsp; org.xml.sax.ErrorHandler
<br />
&nbsp;&nbsp;&nbsp; org.xml.sax.DTDHandler
<br />
&nbsp;&nbsp;&nbsp; org.xml.sax.EntityResolver
<br />
&nbsp;&nbsp;&nbsp; 这些接口是通过
<br />
&nbsp;&nbsp;&nbsp; org.xml.sax.XMLReader的setContentHandler(),setEroorHandler(),
<br />
&nbsp;&nbsp;&nbsp; setDTDHandler(),setEntityHandler()注册到解析器，这里面最重要的是
<br />
&nbsp;&nbsp;&nbsp; org.xml.sax.ContentHandler接口，它具体如下
<br />
&nbsp;&nbsp;&nbsp; public interface ContentHandler{
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setDocumentLocator(Locator locator);
<br />
&nbsp;public void startDocument() throws SAXException;
<br />
&nbsp;public void endDocument() throws SAXException;
<br />
&nbsp;public void startPrefixMapping(String prefix,String uri)
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws SAXException;
<br />
&nbsp;public void endPrefixMapping(String prifix)
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws SAXException;
<br />
&nbsp;public void startElement(String namespaceURI,String localName,
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String qName,Attributes atts) throws SAXException;
<br />
&nbsp;public void endElement(String namespaceURI,String localName,
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String qName) throws SAXException;
<br />
&nbsp;public void characters(char ch[],int start,int length)
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws SAXException;
<br />
&nbsp;public void ignorableWhitespace(char ch[],int start,int length)
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws SAXException;
<br />
&nbsp;public void processingInstruction(String target,String data)
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws SAXException;
<br />
&nbsp;public void skippedEntity(String name)
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws SAXException;
<br />
&nbsp;&nbsp;&nbsp; }
<br />
&nbsp;&nbsp;&nbsp; 通过setContentHandler()将你实现的ContentHandler注册给XMLReader之后，
<br />
&nbsp;&nbsp;&nbsp; 在解析过程中，系统根据各种条件执行接口中的方法，下面简单说明一下
<br />
&nbsp;&nbsp;&nbsp; 1)文档定位器
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private Locator locator;
<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setDocumentLocator(Locator locator){
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.locator = locator;
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通常情况下，你只要如此实现就可以了，这个主要是得到当前解析的位置，
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过得到的locator，你可以使用它的getLineNumber(),getColumnName()等
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方法，可以得到文档当前的位置，但要注意的是，这个locator不能保存，只
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 针对当前的解析有效
<br />
&nbsp;&nbsp;&nbsp; 2)文档的开头和结尾
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void startDocument() throws SAXException{
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //解析过程中仅位于setDocumentLocator()方法后调用
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void endDocument() throws SAXException{
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //解析过程中最后调用
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大多数情况下你可以不用理他们，只要写个空方法就可以了
<br />
&nbsp;&nbsp;&nbsp; 3)名字空间的开始和结束
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void startPrefixMapping(String prefix,String uri)
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws SAXException{
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void endPrefixMapping(String prifix)
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws SAXException{
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br />
&nbsp;&nbsp;&nbsp; 4)元素的开始和结束
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void startElement(String namespaceURI,String localName,
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String qName,Attributes atts) throws SAXException{
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void endElement(String namespaceURI,String localName,
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String qName) throws SAXException{
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br />
&nbsp;&nbsp;&nbsp; 5)元素的数据
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void characters(char ch[],int start,int length)
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws SAXException{
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String s = new String(ch,start,length);
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个是得到当前的元素的文本数据
<br />
&nbsp;&nbsp;&nbsp; 6)可以忽略的空白
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void ignorableWhitespace(char ch[],int start,int length)
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws SAXException{
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br />
&nbsp;&nbsp;&nbsp; 7)实体
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void skippedEntity(String name)
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws SAXException{
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br />
&nbsp;&nbsp;&nbsp; 8)指令处理
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void processingInstruction(String target,String data)
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws SAXException{
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br />
<br />
－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br />
<br />
<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
DOM－－－－API中的org.w3c.dom<br />
基于树和节点的文档对象模型<br />
<br />
一种基于对象的API，
<br />
&nbsp;&nbsp;&nbsp; 它把XML的内容加载到内存中，生成一个与XML文档对应的对象模型。
<br />
<br />
&nbsp;&nbsp;&nbsp; 解析完成时，内存中会生成与XML文档结构对应的DOM对象树。我们根据树的结&nbsp;&nbsp;&nbsp; 构，以节点形式对文档进行操作。<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;<br />
&nbsp;<br />
使用DOM解析方法：
<br />
&nbsp;<br />
<br />
（1）得到DOM解析器的工厂实例
<br />
&nbsp;<br />
DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
<br />
&nbsp;<br />
得到javax.xml.parsers.DocumentBuilderFactory;类的实例就是我们要的解析器工厂
<br />
&nbsp;<br />
（2）从DOM工厂获得DOM解析器
<br />
&nbsp;<br />
DocumentBuilder dombuilder=domfac.newDocumentBuilder();
<br />
&nbsp;<br />
通过javax.xml.parsers.DocumentBuilderFactory实例的静态方法newDocumentBuilder()得到DOM解析器
<br />
&nbsp;<br />
（3）把要解析的XML文档转化为输入流，以便DOM解析器解析它
<br />
&nbsp;<br />
InputStream is=new FileInputStream("/home/asd0809/abc.xml");
<br />
&nbsp;<br />
InputStream是一个接口。
<br />
&nbsp;<br />
（4）解析XML文档的输入流，得到一个Document
<br />
&nbsp;<br />
Document doc=dombuilder.parse(is);
<br />
&nbsp;<br />
由XML文档的输入流得到一个org.w3c.dom.Document对象，以后的处理都是对Document对象进行的
<br />
&nbsp;<br />
（5）得到XML文档的根节点
<br />
&nbsp;<br />
Element root=doc.getDocumentElement();
<br />
&nbsp;<br />
在DOM中只有根节点是一个org.w3c.dom.Element对象。
<br />
&nbsp;<br />
（6）得到节点的子节点
<br />
&nbsp;<br />
NodeList　books=root.getChildNodes();
<br />
&nbsp;<br />
for(int i=0;i&lt;books.getLength();i++){
<br />
&nbsp;<br />
Node book=books.item(i);
<br />
&nbsp;<br />
}
<br />
&nbsp;<br />
这是用一个org.w3c.dom.NodeList接口来存放它所有子节点的，还有一种轮循子节点的方法，后面有介绍
<br />
&nbsp;<br />
（7）取得节点的属性值
<br />
&nbsp;<br />
String email=book.getAttributes().getNamedItem("email").getNodeValue();
<br />
&nbsp;<br />
System.out.println(email);
<br />
&nbsp;<br />
注意，节点的属性也是它的子节点。它的节点类型也是Node.ELEMENT_NODE
<br />
&nbsp;<br />
（8）轮循子节点
<br />
&nbsp;<br />
for(Node node=book.getFirstChild();node!=null;node=node.getNextSibling()){
<br />
&nbsp;<br />
if(node.getNodeType()==Node.ELEMENT_NODE){
<br />
&nbsp;<br />
if(node.getNodeName().equals("name")){
<br />
String name=node.getNodeValue();
<br />
&nbsp;<br />
String name1=node.getFirstChild().getNodeValue();
<br />
&nbsp;<br />
System.out.println(name);
<br />
&nbsp;<br />
System.out.println(name1);
<br />
&nbsp;<br />
}
<br />
&nbsp;<br />
if(node.getNodeName().equals("price")){
<br />
&nbsp;<br />
String price=node.getFirstChild().getNodeValue();
<br />
&nbsp;<br />
System.out.println(price);
<br />
}
<br />
&nbsp;<br />
}
<br />
&nbsp;<br />
－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
<br />
<br />
&nbsp;<br />
4：其它关于解析问题
<br />
&nbsp;&nbsp;&nbsp; <br />
何时使用 SAX？何时使用 DOM？
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 文本大用SAX&nbsp; 消耗内存大 ；&nbsp; 如果要来回读&nbsp; 要用DOM<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; JAXP-------javax.xml.parser(sun公司的API 包含了上面两种API 是类不是接口&nbsp; 只是一个入口 )－－－－－统一接口，默认解析器<br />
其他公司的工具包<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; JDOM（基于DOM）<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; Dom4j(基于DOM)最流行<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; Apache Xerces(基于SAX)<br />
<br />
<img src ="http://www.blogjava.net/397879213/aggbug/254753.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/397879213/" target="_blank">liuliang</a> 2009-02-15 15:14 <a href="http://www.blogjava.net/397879213/archive/2009/02/15/254753.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>