﻿<?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-DANCE WITH JAVA-随笔分类-其它开源框架</title><link>http://www.blogjava.net/dreamstone/category/24603.html</link><description>开发出高质量的系统</description><language>zh-cn</language><lastBuildDate>Fri, 21 Aug 2009 17:42:12 GMT</lastBuildDate><pubDate>Fri, 21 Aug 2009 17:42:12 GMT</pubDate><ttl>60</ttl><item><title>理解osworkflow 工作流</title><link>http://www.blogjava.net/dreamstone/archive/2009/08/19/291755.html</link><dc:creator>dreamstone</dc:creator><author>dreamstone</author><pubDate>Wed, 19 Aug 2009 02:44:00 GMT</pubDate><guid>http://www.blogjava.net/dreamstone/archive/2009/08/19/291755.html</guid><wfw:comment>http://www.blogjava.net/dreamstone/comments/291755.html</wfw:comment><comments>http://www.blogjava.net/dreamstone/archive/2009/08/19/291755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamstone/comments/commentRss/291755.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamstone/services/trackbacks/291755.html</trackback:ping><description><![CDATA[<div class="ExternalClass9797756EA2854CA5AC8E4E7B0550C56D">
<p><font color="#ff0000">什么是工作流：</font><br />
就是工作流程的计算模型，即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是：为实现某个业务目标，在多个参与者之间，利用计算机，按某种预定规则自动传递文档、信息或者任务。<strong> </strong><br />
</p>
<p><font color="#ff0000">工作流的应用场景：<br />
</font><font color="#000000">soa中的时序编排，oa系统中的审批流转。大部分管理流程中都可以用到工作流。</font></p>
<p><font color="#ff0000">工作流与业务的关系<br />
</font><font color="#000000">一、业务集成到工作流中：一种常见的做法是把所有的业务集成到工作流中，如果有个业务就定义个function，然后放进去。例如要生成spcode。<br />
1、带来的好处：<br />
业务与工作流完全集成，只需要找到工作流配置文件，以他为主线就能找到所有的业务。让代码的阅读维护更方便。<br />
2、坏处：<br />
并不是最好的理念，仍然需要一次次的读原来的代码，复用性差，可剥离性差（比如我不想用工作流了），替换性差（比如我想从osworkflow到jbpm），侵入性高。跟现在大家说的最多的soa冲突。<br />
3、适用环境<br />
小项目开发，灵活，重写难度不大</font></p>
<p>二、业务单独写，工作流后加入进去<br />
用非工作流的代码实现所有的业务，再用工作流编排<br />
1、带来的好处：<br />
符合soa的原则，可以分组件，分服务，分应用，复用性好，一旦复用消耗小，并不需要了解内部代码。<br />
2、坏处：<br />
初期消耗大，业务划分难度大，需要频繁调整。<br />
3、适用环境<br />
越大型的项目越好，甚至可以在应用之间组织。在电子系统集成中最有用。<br />
<font color="#ff0000"><br />
</font><font color="#ff0000">工作流引擎：</font><br />
字面意思理解，工作流引擎就是工作流核心元素解决方案。<br />
那工作流的核心是什么呢？<br />
有权限的操作者触发流程在各种条件下的跳转。<br />
关键的是权限，条件，跳转。<br />
所以工作流引擎实现的就是：<br />
根据角色、分工和条件的不同决定信息传递路由<br />
</p>
<p>使用工作流引擎带来的便利：<br />
1、开发简化<br />
2、稳定性<br />
3、易维护</p>
<p><font color="#ff0000">理解工作流：</font><br />
一句话：其实软件设计上更多的是借鉴非软件知识，比如设计模式来源于建筑。哲学上也有大同理论。</p>
<p><br />
说了好久的工作流，知道它的好处，知道它的坏处，知道应用场景，但工作流还是有点朦胧，想到设计工作流，理解工作流还是有点头疼。特别是在大的场景，比如说我要实现任意方式定义的流程。听到这个就头大。那如何解决这个问题呢？<br />
<br />
越是这类问题，约容易从理论的高度来解决。那么我们来看osworkflow是基于什么实现的？有限状态机。当我们放到宏观，我们要解决所有问题的时候会感觉很棘手，任意流程。但放到微观呢。虽然我们最终是要解决整个的路由。但是我只要解决任意两个step之间的路由。所有的路由就解决了。这也是数学上的归纳法。<br />
<br />
好了现在的问题已经变成如何解决两个step之间的路由了，从两个step之间的路由，再次缩减到，我只需要知道一个step可以到什么地方，那我就知道是否两个step之间存在路由。<br />
<br />
那放到一个step上是否就是有限状态机了呢？没错。<br />
step就是状态，action就是状态转换，但是osworkflow赋予了action太多的功能，变成了action中的result才是转换，而action变成了转换过程中一些列操作及转换的集合。</p>
<p><font color="#ff0000">有限状态机：<br />
</font>你熟悉他吗，一定的，一定熟悉他，想想有多少程序是基于他实现的。比如rpg游戏中迷宫的任意路口，比如rpg游戏中的情节设定。如果你写一个游戏引擎，你会发现fsm离你有多近。即使你不写游戏引擎，你玩游戏吗，在rpg中是否用笔通过一个个的点再现过迷宫地图，是否通过一次次的通关找到各种隐藏情节，这就是状态机。</p>
<p><font color="#ff0000">osworkflow的设计工具：</font><br />
为什么osworkflow不提供设计工具呢，osworkflow开发者说，要灵活，这是程序员干的事情。但是uml本身也是程序员干的事情。再想想因为osworkflow基于有限状态机，而对于有限状态机这种如果用uml表现出来是困难的。总会出一些难以控制的地方，再来看看jbpm，因为jbpm是基于状态图的，来源于uml，所以更容易出设计工具。</p>
<p><br />
个人理解，大家交流</p>
</div>
<img src ="http://www.blogjava.net/dreamstone/aggbug/291755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamstone/" target="_blank">dreamstone</a> 2009-08-19 10:44 <a href="http://www.blogjava.net/dreamstone/archive/2009/08/19/291755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>axis2 入门 quickstart(webservice Requested resource not found)</title><link>http://www.blogjava.net/dreamstone/archive/2009/01/31/252781.html</link><dc:creator>dreamstone</dc:creator><author>dreamstone</author><pubDate>Sat, 31 Jan 2009 03:20:00 GMT</pubDate><guid>http://www.blogjava.net/dreamstone/archive/2009/01/31/252781.html</guid><wfw:comment>http://www.blogjava.net/dreamstone/comments/252781.html</wfw:comment><comments>http://www.blogjava.net/dreamstone/archive/2009/01/31/252781.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamstone/comments/commentRss/252781.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamstone/services/trackbacks/252781.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: axis2 入门 quickstart  webservice Requested resource not found 官方 错误&nbsp;&nbsp;<a href='http://www.blogjava.net/dreamstone/archive/2009/01/31/252781.html'>阅读全文</a><img src ="http://www.blogjava.net/dreamstone/aggbug/252781.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamstone/" target="_blank">dreamstone</a> 2009-01-31 11:20 <a href="http://www.blogjava.net/dreamstone/archive/2009/01/31/252781.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>acegi的验证问题1 ---中文用户名登录，及md5加密密码方式</title><link>http://www.blogjava.net/dreamstone/archive/2008/09/19/230020.html</link><dc:creator>dreamstone</dc:creator><author>dreamstone</author><pubDate>Fri, 19 Sep 2008 13:29:00 GMT</pubDate><guid>http://www.blogjava.net/dreamstone/archive/2008/09/19/230020.html</guid><wfw:comment>http://www.blogjava.net/dreamstone/comments/230020.html</wfw:comment><comments>http://www.blogjava.net/dreamstone/archive/2008/09/19/230020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamstone/comments/commentRss/230020.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamstone/services/trackbacks/230020.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;在框架中使用了acegi，但是割接了一个微软的系统，系统中出现了中文用户名登录，这就造成了问题。<br />
因为之前acegi都是另一个同事负责，现在同事不在，只能自己解决，找到acegi中取得用户名的地方<br />
org.acegisecurity.ui.webapp.AuthenticationProcessingFilter 中的这段代码<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Authentication&nbsp;attemptAuthentication(HttpServletRequest&nbsp;request)<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_111_815_Open_Image" onclick="this.style.display='none'; Codehighlighter1_111_815_Open_Text.style.display='none'; Codehighlighter1_111_815_Closed_Image.style.display='inline'; Codehighlighter1_111_815_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_111_815_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_111_815_Closed_Text.style.display='none'; Codehighlighter1_111_815_Open_Image.style.display='inline'; Codehighlighter1_111_815_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;AuthenticationException&nbsp;</span><span id="Codehighlighter1_111_815_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_111_815_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;username&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;obtainUsername(request);<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;password&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;obtainPassword(request);<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img id="Codehighlighter1_246_283_Open_Image" onclick="this.style.display='none'; Codehighlighter1_246_283_Open_Text.style.display='none'; Codehighlighter1_246_283_Closed_Image.style.display='inline'; Codehighlighter1_246_283_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_246_283_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_246_283_Closed_Text.style.display='none'; Codehighlighter1_246_283_Open_Image.style.display='inline'; Codehighlighter1_246_283_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(username&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_246_283_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_246_283_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img id="Codehighlighter1_316_353_Open_Image" onclick="this.style.display='none'; Codehighlighter1_316_353_Open_Text.style.display='none'; Codehighlighter1_316_353_Closed_Image.style.display='inline'; Codehighlighter1_316_353_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_316_353_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_316_353_Closed_Text.style.display='none'; Codehighlighter1_316_353_Open_Image.style.display='inline'; Codehighlighter1_316_353_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(password&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_316_353_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_316_353_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UsernamePasswordAuthenticationToken&nbsp;authRequest&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;UsernamePasswordAuthenticationToken(username,&nbsp;password);<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Place&nbsp;the&nbsp;last&nbsp;username&nbsp;attempted&nbsp;into&nbsp;HttpSession&nbsp;for&nbsp;views</span><span style="color: #008000"><br />
</span><span style="color: #008080">17</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.getSession().setAttribute(ACEGI_SECURITY_LAST_USERNAME_KEY,&nbsp;username);<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Allow&nbsp;subclasses&nbsp;to&nbsp;set&nbsp;the&nbsp;"details"&nbsp;property</span><span style="color: #008000"><br />
</span><span style="color: #008080">20</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setDetails(request,&nbsp;authRequest);<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getAuthenticationManager().authenticate(authRequest);<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
取出username后发现是乱码，如果解决这个问题呢？第一个想到的是转码<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">username</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;String(username.getBytes(</span><span style="color: #000000">"</span><span style="color: #000000">ISO8859-1</span><span style="color: #000000">"</span><span style="color: #000000">),</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />解决问题，但是这段代码要嵌入到acegi中必须重新编译acegi</span></div>
上边的办法改动太大，再想办法，想到既然问题是来自编码，看看web.xml的filter发现原因在这<br />
spring的filter是解决编码问题的，但是因为acegi的filter在spring之前，所以编码没有转码。又不能把acegi的filter挪到spring filter之后，这样就有安全问题了。<br />
<br />
那就增加一个filter，只过滤登录链接，然后设置一下代替spring的encodingfilter设置一下编码，解决问题<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_54_524_Open_Image" onclick="this.style.display='none'; Codehighlighter1_54_524_Open_Text.style.display='none'; Codehighlighter1_54_524_Closed_Image.style.display='inline'; Codehighlighter1_54_524_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_54_524_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_54_524_Closed_Text.style.display='none'; Codehighlighter1_54_524_Open_Image.style.display='inline'; Codehighlighter1_54_524_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;EncodeChnUsernameFilter&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Filter</span><span id="Codehighlighter1_54_524_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_54_524_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;String&nbsp;ACEGI_SECURITY_FORM_USERNAME_KEY&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">j_username</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;String&nbsp;ACEGI_SECURITY_FORM_PASSWORD_KEY&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">j_password</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_234_240_Open_Image" onclick="this.style.display='none'; Codehighlighter1_234_240_Open_Text.style.display='none'; Codehighlighter1_234_240_Closed_Image.style.display='inline'; Codehighlighter1_234_240_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_234_240_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_234_240_Closed_Text.style.display='none'; Codehighlighter1_234_240_Open_Image.style.display='inline'; Codehighlighter1_234_240_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;destroy()&nbsp;</span><span id="Codehighlighter1_234_240_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_234_240_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_371_452_Open_Image" onclick="this.style.display='none'; Codehighlighter1_371_452_Open_Text.style.display='none'; Codehighlighter1_371_452_Closed_Image.style.display='inline'; Codehighlighter1_371_452_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_371_452_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_371_452_Closed_Text.style.display='none'; Codehighlighter1_371_452_Open_Image.style.display='inline'; Codehighlighter1_371_452_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doFilter(ServletRequest&nbsp;request,&nbsp;ServletResponse&nbsp;response,&nbsp;FilterChain&nbsp;chain)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;IOException,&nbsp;ServletException&nbsp;</span><span id="Codehighlighter1_371_452_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_371_452_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setCharacterEncoding(</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chain.doFilter(request,&nbsp;response);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_516_522_Open_Image" onclick="this.style.display='none'; Codehighlighter1_516_522_Open_Text.style.display='none'; Codehighlighter1_516_522_Closed_Image.style.display='inline'; Codehighlighter1_516_522_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_516_522_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_516_522_Closed_Text.style.display='none'; Codehighlighter1_516_522_Open_Image.style.display='inline'; Codehighlighter1_516_522_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init(FilterConfig&nbsp;arg0)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ServletException&nbsp;</span><span id="Codehighlighter1_516_522_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_516_522_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
中文用户名登录问题解决了。<br />
<br />
但是另一个问题来了，密码是非明文的md5加密的，需要加密，同样不想更改acegi。<br />
那好吧继续使用filter，看看能否getParameter后再set回去<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">String&nbsp;password</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">j_password</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">这里是个md5加密函数</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">password&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;md5(password);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">怎么set进去呢？</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">request.getParameterMap().put(</span><span style="color: #000000">"</span><span style="color: #000000">j_password</span><span style="color: #000000">"</span><span style="color: #000000">,password);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">启动试一下，异常报错，map不能put，看一下异常，发现这个不是普通的map，是org.apache.catalina.util.ParameterMap，这个map中有个标志位lock，tomcat不让更改http接收到的值。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">基于不服输的精神，一定要搞定它，呵呵</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">ParameterMap&nbsp;map&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(ParameterMap)request.getParameterMap();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />map.setLock(</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />map.put(</span><span style="color: #000000">"</span><span style="color: #000000">j_password</span><span style="color: #000000">"</span><span style="color: #000000">,password);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />map.setLock(</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">搞定？不对，编译不通过，发现org.apache.catalina.util.ParameterMap的jar包是catalina.jar。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">把这个包放到lib下编译，通过，运行出向下转型错误，仔细看一下发现request.getParameterMap()出来的ParameterMap.getClass()的id是300多，而接受转型</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">的ParameterMap.</span><span style="color: #0000ff">class</span><span style="color: #000000">.getClass()是6000多，不是一个类啊。想想也对，lib下和tomcat的server</span><span style="color: #000000">/</span><span style="color: #000000">lib下各有一个catalina.jar这个就是两个类了。<br />
<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />eclipse&nbsp;add&nbsp;外部jar包，直接add上tomcat中的catalina.jar，编译运行，还是有问题，这次是报的classNotFound异常，为什么会这样呢，命名Server</span><span style="color: #000000">/</span><span style="color: #000000">lib下有这个jar包，后来想了下明白了。tomcat一定是限定了catalina.jar不能被普通的用户类所直接引用。处于安全性考虑吧。这条路走不通了，回到acegi才发现acegi的配置文件中是可以随意配置autheticationfilter的，自己写一个autheticationfilter，配置进去，不用系统的，解决问题，filter里边怎么写都没问题，爱怎么处理怎么处理，呵呵</span></div>
<br />
<img src ="http://www.blogjava.net/dreamstone/aggbug/230020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamstone/" target="_blank">dreamstone</a> 2008-09-19 21:29 <a href="http://www.blogjava.net/dreamstone/archive/2008/09/19/230020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jdom 或 dom4j读取xml文件时如何让dtd验证使用本地dtd文件或者不生效</title><link>http://www.blogjava.net/dreamstone/archive/2007/08/29/140993.html</link><dc:creator>dreamstone</dc:creator><author>dreamstone</author><pubDate>Wed, 29 Aug 2007 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/dreamstone/archive/2007/08/29/140993.html</guid><wfw:comment>http://www.blogjava.net/dreamstone/comments/140993.html</wfw:comment><comments>http://www.blogjava.net/dreamstone/archive/2007/08/29/140993.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamstone/comments/commentRss/140993.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamstone/services/trackbacks/140993.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、写在所有之前：因为dom4j和jdom在这个问题上处理的方法是一模一样的，只是一个是SAXBuilder 一个SAXReader，这里以jdom距离，至于dom4j只需要同理替换一下就可以了。二、问题发生的情况当你用jdom读取一个有dtd验证的xml文件,同时你的网络是不通的情况下。会出现以下错误：1，代码如下package&nbsp;dom;import&nbsp;java.io.Fi...&nbsp;&nbsp;<a href='http://www.blogjava.net/dreamstone/archive/2007/08/29/140993.html'>阅读全文</a><img src ="http://www.blogjava.net/dreamstone/aggbug/140993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamstone/" target="_blank">dreamstone</a> 2007-08-29 17:05 <a href="http://www.blogjava.net/dreamstone/archive/2007/08/29/140993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过httpClient连接 tomcat https  (ssl)</title><link>http://www.blogjava.net/dreamstone/archive/2007/07/27/132861.html</link><dc:creator>dreamstone</dc:creator><author>dreamstone</author><pubDate>Fri, 27 Jul 2007 10:01:00 GMT</pubDate><guid>http://www.blogjava.net/dreamstone/archive/2007/07/27/132861.html</guid><wfw:comment>http://www.blogjava.net/dreamstone/comments/132861.html</wfw:comment><comments>http://www.blogjava.net/dreamstone/archive/2007/07/27/132861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamstone/comments/commentRss/132861.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamstone/services/trackbacks/132861.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>HttpClient</span><span>连接</span><span>tomcat https</span><span>（使用私有证书）</span></p>
<p><span>步骤一：</span></p>
<p><span>在</span><span>www.apache.org</span><span>下载所需的类包</span></p>
<p><span>commons-codec-1.3.jar</span></p>
<p><span>commons-httpclient-3.1-rc1.jar</span></p>
<p><span>commons-logging.jar</span></p>
<p><span>步骤二：</span></p>
<p><span>制作证书：</span></p>
<p><span>keytool -genkey -alias tomcat -keyalg RSA</span></p>
<p><span>任意输入，最后一个提示输入回车（保证两个密码相等）否则</span><span>tomcat</span><span>不能启动</span><span>.</span></p>
<p><span>默认生成的文件在用户目录下</span><span>.keystore</span></p>
<p><span>步骤三：</span></p>
<p><span>配置</span><span>tomcat</span></p>
<p><span>更改</span><span>tomcat</span><span>配置文件</span><span>server.xml</span></p>
<p><span>加入</span></p>
<p><span>&lt;Connector port="8443" maxHttpHeaderSize="8192"</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>maxThreads="150" minSpareThreads="25" maxSpareThreads="75"</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>enableLookups="false" disableUploadTimeout="true"</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>acceptCount="100" scheme="https" secure="true"</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>clientAuth="false" sslProtocol="TLS" </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp; </span>keystoreFile="C:\.keystore"<span>&nbsp;&nbsp; </span>keystorePass="123456"</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp; </span>/&gt;</span></p>
<p><span>其中</span><span>keystoreFile</span><span>是刚生成文件的带全路径的名字</span></p>
<p><span>keystorePass</span><span>是刚才建立证书时候的名字</span></p>
<p><span>启动</span><span>tomcat</span><span>，访问</span><span>https:\\localhost:8443/</span><span>如果能正常看到，说明</span><span>tomcat</span><span>的</span><span>https</span><span>配置成功</span><span>.</span></p>
<p><span>步骤四：</span></p>
<p><span>生成</span><span>jdk</span><span>能使用的证书<br></span>&nbsp;1,用ie导出证书(导出方法：<a href="http://www.ibm.com/developerworks/cn/opensource/os-httpclient/#N10114">http://www.ibm.com/developerworks/cn/opensource/os-httpclient/#N10114</a>)</p>
<p><span>2,假设上边导出文件的名字叫</span><span>tt.cer</span></p>
<p><span>执行</span><span>(</span><span>确保配置了</span><span>java &nbsp;home)</span></p>
<p><span>keytool -import -noprompt -keystore <span>D:\Java\jdk<st1:chsdate w:st="on" Year="1899" Month="12" Day="30" IsLunarDate="False" IsROCDate="False">1.5.0</st1:chsdate>_06\jre\lib\security\carcert</span> -alias tomcat -file<span> tt.cer </span>&#8211;trustcacerts</span></p>
<p><span>其中红色的部分替换成自己</span><span>jre</span><span>的路径</span><span>,alias</span><span>同建立证书时的名字，</span><span>file</span><span>时刚才导出的证书的名字</span></p>
<p>&nbsp;</p>
<p><span>会提示输入密码，输入刚才建立证书时输入的密码</span></p>
<p>&nbsp;</p>
<p><span>步骤五：</span></p>
<p><span>编写代码</span></p>
<p align=left>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.commons.httpclient.HttpClient;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.commons.httpclient.HttpStatus;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.commons.httpclient.methods.GetMethod;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.commons.httpclient.params.HttpMethodParams;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_304_1224_Open_Image onclick="this.style.display='none'; Codehighlighter1_304_1224_Open_Text.style.display='none'; Codehighlighter1_304_1224_Closed_Image.style.display='inline'; Codehighlighter1_304_1224_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_304_1224_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_304_1224_Closed_Text.style.display='none'; Codehighlighter1_304_1224_Open_Image.style.display='inline'; Codehighlighter1_304_1224_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Test&nbsp;</span><span id=Codehighlighter1_304_1224_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_304_1224_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_362_389_Open_Image onclick="this.style.display='none'; Codehighlighter1_362_389_Open_Text.style.display='none'; Codehighlighter1_362_389_Closed_Image.style.display='inline'; Codehighlighter1_362_389_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_362_389_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_362_389_Closed_Text.style.display='none'; Codehighlighter1_362_389_Open_Image.style.display='inline'; Codehighlighter1_362_389_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception</span><span id=Codehighlighter1_362_389_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_362_389_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;normal();</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ssl();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_432_492_Open_Image onclick="this.style.display='none'; Codehighlighter1_432_492_Open_Text.style.display='none'; Codehighlighter1_432_492_Closed_Image.style.display='inline'; Codehighlighter1_432_492_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_432_492_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_432_492_Closed_Text.style.display='none'; Codehighlighter1_432_492_Open_Image.style.display='inline'; Codehighlighter1_432_492_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;ssl()</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception</span><span id=Codehighlighter1_432_492_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_432_492_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">https://127.0.0.1:8443/ts/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get(url);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_538_597_Open_Image onclick="this.style.display='none'; Codehighlighter1_538_597_Open_Text.style.display='none'; Codehighlighter1_538_597_Closed_Image.style.display='inline'; Codehighlighter1_538_597_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_538_597_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_538_597_Closed_Text.style.display='none'; Codehighlighter1_538_597_Open_Image.style.display='inline'; Codehighlighter1_538_597_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;normal()</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception</span><span id=Codehighlighter1_538_597_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_538_597_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://127.0.0.1:8080/ts/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get(url);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_651_1222_Open_Image onclick="this.style.display='none'; Codehighlighter1_651_1222_Open_Text.style.display='none'; Codehighlighter1_651_1222_Closed_Image.style.display='inline'; Codehighlighter1_651_1222_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_651_1222_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_651_1222_Closed_Text.style.display='none'; Codehighlighter1_651_1222_Open_Image.style.display='inline'; Codehighlighter1_651_1222_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;get(String&nbsp;url)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception</span><span id=Codehighlighter1_651_1222_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_651_1222_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpClient&nbsp;client&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;HttpClient();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetMethod&nbsp;getMethod&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;GetMethod(url);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置成了默认的恢复策略，在发生异常时候将自动重试3次，在这里你也可以设置成自定义的恢复策略</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;DefaultHttpMethodRetryHandler());&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">执行getMethod</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;statusCode&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;client.executeMethod(getMethod);<br><img id=Codehighlighter1_1010_1085_Open_Image onclick="this.style.display='none'; Codehighlighter1_1010_1085_Open_Text.style.display='none'; Codehighlighter1_1010_1085_Closed_Image.style.display='inline'; Codehighlighter1_1010_1085_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1010_1085_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1010_1085_Closed_Text.style.display='none'; Codehighlighter1_1010_1085_Open_Image.style.display='inline'; Codehighlighter1_1010_1085_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(statusCode&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;HttpStatus.SC_OK)&nbsp;</span><span id=Codehighlighter1_1010_1085_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1010_1085_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Method&nbsp;failed:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;getMethod.getStatusLine());<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[]&nbsp;responseBody&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;getMethod.getResponseBody();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;String(responseBody));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getMethod.releaseConnection();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p align=left>&nbsp;</p>
<p><span>普通连接和</span><span>ssl</span><span>连接只有一个差距就是</span><span>url</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/dreamstone/aggbug/132861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamstone/" target="_blank">dreamstone</a> 2007-07-27 18:01 <a href="http://www.blogjava.net/dreamstone/archive/2007/07/27/132861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache mina (异步连接框架)介绍</title><link>http://www.blogjava.net/dreamstone/archive/2007/07/09/129004.html</link><dc:creator>dreamstone</dc:creator><author>dreamstone</author><pubDate>Mon, 09 Jul 2007 03:26:00 GMT</pubDate><guid>http://www.blogjava.net/dreamstone/archive/2007/07/09/129004.html</guid><wfw:comment>http://www.blogjava.net/dreamstone/comments/129004.html</wfw:comment><comments>http://www.blogjava.net/dreamstone/archive/2007/07/09/129004.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamstone/comments/commentRss/129004.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamstone/services/trackbacks/129004.html</trackback:ping><description><![CDATA[<font size=2>一、介绍<br>mina(Multipurpose Infrastructure for Network Applications) 是apache的顶级项目之一，用于构造异步连接的各种网络应用<br>二、最简单的使用实例<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;aicu.mina;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.io.IOException;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.net.InetSocketAddress;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.nio.charset.Charset;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.common.ByteBuffer;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.common.IoAcceptor;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.common.SimpleByteBufferAllocator;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.filter.LoggingFilter;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.filter.codec.ProtocolCodecFilter;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.filter.codec.textline.TextLineCodecFactory;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.transport.socket.nio.SocketAcceptor;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.transport.socket.nio.SocketAcceptorConfig;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_581_1434_Open_Image onclick="this.style.display='none'; Codehighlighter1_581_1434_Open_Text.style.display='none'; Codehighlighter1_581_1434_Closed_Image.style.display='inline'; Codehighlighter1_581_1434_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_581_1434_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_581_1434_Closed_Text.style.display='none'; Codehighlighter1_581_1434_Open_Image.style.display='inline'; Codehighlighter1_581_1434_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;MinaTimeServer&nbsp;</span><span id=Codehighlighter1_581_1434_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_581_1434_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;PORT&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">9123</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_689_1432_Open_Image onclick="this.style.display='none'; Codehighlighter1_689_1432_Open_Text.style.display='none'; Codehighlighter1_689_1432_Closed_Image.style.display='inline'; Codehighlighter1_689_1432_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_689_1432_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_689_1432_Closed_Text.style.display='none'; Codehighlighter1_689_1432_Open_Image.style.display='inline'; Codehighlighter1_689_1432_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;IOException&nbsp;</span><span id=Codehighlighter1_689_1432_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_689_1432_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置buffer</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ByteBuffer.setUseDirectBuffers(</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ByteBuffer.setAllocator(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;SimpleByteBufferAllocator());<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义acceptor</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IoAcceptor&nbsp;acceptor&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;SocketAcceptor();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义config</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SocketAcceptorConfig&nbsp;cfg&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;SocketAcceptorConfig();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置config,加入filter</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cfg.getSessionConfig().setReuseAddress(&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">&nbsp;);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cfg.getFilterChain().addLast(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">logger</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;LoggingFilter()&nbsp;);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cfg.getFilterChain().addLast(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">codec</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ProtocolCodecFilter(&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TextLineCodecFactory(&nbsp;Charset.forName(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">UTF-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;))));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">加入port&nbsp;handler&nbsp;cfg</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acceptor.bind(&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;InetSocketAddress(PORT),&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TimeServerHandler(),&nbsp;cfg);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MINA&nbsp;Time&nbsp;server&nbsp;started.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br>对应的handler ,handler的作用是在对应的网事件的处理代码<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;aicu.mina;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.Date;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.common.IdleStatus;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.common.IoHandlerAdapter;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.common.IoSession;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.common.TransportType;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.mina.transport.socket.nio.SocketSessionConfig;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_341_1116_Open_Image onclick="this.style.display='none'; Codehighlighter1_341_1116_Open_Text.style.display='none'; Codehighlighter1_341_1116_Closed_Image.style.display='inline'; Codehighlighter1_341_1116_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_341_1116_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_341_1116_Closed_Text.style.display='none'; Codehighlighter1_341_1116_Open_Image.style.display='inline'; Codehighlighter1_341_1116_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;TimeServerHandler&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;IoHandlerAdapter&nbsp;</span><span id=Codehighlighter1_341_1116_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_341_1116_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_421_466_Open_Image onclick="this.style.display='none'; Codehighlighter1_421_466_Open_Text.style.display='none'; Codehighlighter1_421_466_Closed_Image.style.display='inline'; Codehighlighter1_421_466_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_421_466_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_421_466_Closed_Text.style.display='none'; Codehighlighter1_421_466_Open_Image.style.display='inline'; Codehighlighter1_421_466_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;exceptionCaught(IoSession&nbsp;session,&nbsp;Throwable&nbsp;t)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;</span><span id=Codehighlighter1_421_466_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_421_466_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.printStackTrace();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_546_804_Open_Image onclick="this.style.display='none'; Codehighlighter1_546_804_Open_Text.style.display='none'; Codehighlighter1_546_804_Closed_Image.style.display='inline'; Codehighlighter1_546_804_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_546_804_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_546_804_Closed_Text.style.display='none'; Codehighlighter1_546_804_Open_Image.style.display='inline'; Codehighlighter1_546_804_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;messageReceived(IoSession&nbsp;session,&nbsp;Object&nbsp;msg)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;</span><span id=Codehighlighter1_546_804_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_546_804_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;msg.toString();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果是quit就关闭session退出</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_647_682_Open_Image onclick="this.style.display='none'; Codehighlighter1_647_682_Open_Text.style.display='none'; Codehighlighter1_647_682_Closed_Image.style.display='inline'; Codehighlighter1_647_682_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_647_682_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_647_682_Closed_Text.style.display='none'; Codehighlighter1_647_682_Open_Image.style.display='inline'; Codehighlighter1_647_682_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;str.trim().equalsIgnoreCase(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">quit</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;)&nbsp;</span><span id=Codehighlighter1_647_682_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_647_682_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">否则打印当前日期</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;date&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.write(&nbsp;date.toString()&nbsp;);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Message&nbsp;written<img src="http://www.blogjava.net/Images/dot.gif"></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_871_1114_Open_Image onclick="this.style.display='none'; Codehighlighter1_871_1114_Open_Text.style.display='none'; Codehighlighter1_871_1114_Closed_Image.style.display='inline'; Codehighlighter1_871_1114_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_871_1114_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_871_1114_Closed_Text.style.display='none'; Codehighlighter1_871_1114_Open_Image.style.display='inline'; Codehighlighter1_871_1114_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;sessionCreated(IoSession&nbsp;session)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;</span><span id=Codehighlighter1_871_1114_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_871_1114_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Session&nbsp;created<img src="http://www.blogjava.net/Images/dot.gif"></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;session.getTransportType()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;TransportType.SOCKET&nbsp;)<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((SocketSessionConfig)&nbsp;session.getConfig()&nbsp;).setReceiveBufferSize(&nbsp;</span><span style="COLOR: #000000">2048</span><span style="COLOR: #000000">&nbsp;);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.setIdleTime(&nbsp;IdleStatus.BOTH_IDLE,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">&nbsp;);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
三、使用方法：<br>编译上边两个类（需要加入mina的jar文件)，然后运行terminalServer<br>开始-&gt;运行-&gt;cmd进入控制台<br>telnet 127.0.0.1 9123<br>输入hello<br>得到当前日期<br>输入quit关闭session。<br></font>
<img src ="http://www.blogjava.net/dreamstone/aggbug/129004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamstone/" target="_blank">dreamstone</a> 2007-07-09 11:26 <a href="http://www.blogjava.net/dreamstone/archive/2007/07/09/129004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SLF4J 教程（自由在各种log中切换)</title><link>http://www.blogjava.net/dreamstone/archive/2007/07/09/128993.html</link><dc:creator>dreamstone</dc:creator><author>dreamstone</author><pubDate>Mon, 09 Jul 2007 02:47:00 GMT</pubDate><guid>http://www.blogjava.net/dreamstone/archive/2007/07/09/128993.html</guid><wfw:comment>http://www.blogjava.net/dreamstone/comments/128993.html</wfw:comment><comments>http://www.blogjava.net/dreamstone/archive/2007/07/09/128993.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamstone/comments/commentRss/128993.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamstone/services/trackbacks/128993.html</trackback:ping><description><![CDATA[<p>一、介绍：<br>简单日记门面(simple logging Facade for java)SLF4J是为各种loging APIs提供一个简单统一的<br>接口，从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现。 Logging API实现既可以<br>选择直接实现SLF4J接的loging APIs如： NLOG4J、SimpleLogger。也可以通过SLF4J提供的API实现<br>来开发相应的适配器如Log4jLoggerAdapter、JDK14LoggerAdapter。在SLF4J发行版本中包含了几个<br>jar包，如slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-log4j13.jar, <br>slf4j-jdk14.jar and slf4j-jcl.jar通过这些jar文件可以使编译期与具体的实现脱离。或者说可以<br>灵活的切换<br>二、官方站点<br>官方的网站：<a href="http://www.slf4j.org/manual.html">http://www.slf4j.org/manual.html</a><br>三、为何使用slf4j?<br>我们在开发过程中可能使用各种log，每个Log有不同的风格、布局，如果想灵活的切换那么slf4j是比较好的<br>选择。<br>四、如何使用slf4j<br>下边一段程序是经典的使用slf4j的方法.</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.slf4j.Logger;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.slf4j.LoggerFactory;<br><img id=Codehighlighter1_77_562_Open_Image onclick="this.style.display='none'; Codehighlighter1_77_562_Open_Text.style.display='none'; Codehighlighter1_77_562_Closed_Image.style.display='inline'; Codehighlighter1_77_562_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_77_562_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_77_562_Closed_Text.style.display='none'; Codehighlighter1_77_562_Open_Image.style.display='inline'; Codehighlighter1_77_562_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Wombat&nbsp;</span><span id=Codehighlighter1_77_562_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_77_562_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000">&nbsp;Logger&nbsp;logger&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;LoggerFactory.getLogger(Wombat.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;t;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;oldT;<br><img id=Codehighlighter1_217_426_Open_Image onclick="this.style.display='none'; Codehighlighter1_217_426_Open_Text.style.display='none'; Codehighlighter1_217_426_Closed_Image.style.display='inline'; Codehighlighter1_217_426_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_217_426_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_217_426_Closed_Text.style.display='none'; Codehighlighter1_217_426_Open_Image.style.display='inline'; Codehighlighter1_217_426_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;setTemperature(Integer&nbsp;temperature)&nbsp;</span><span id=Codehighlighter1_217_426_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_217_426_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oldT&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;t;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;temperature;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Temperature&nbsp;set&nbsp;to&nbsp;{}.&nbsp;Old&nbsp;temperature&nbsp;was&nbsp;{}.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;t,&nbsp;oldT);<br><img id=Codehighlighter1_360_423_Open_Image onclick="this.style.display='none'; Codehighlighter1_360_423_Open_Text.style.display='none'; Codehighlighter1_360_423_Closed_Image.style.display='inline'; Codehighlighter1_360_423_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_360_423_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_360_423_Closed_Text.style.display='none'; Codehighlighter1_360_423_Open_Image.style.display='inline'; Codehighlighter1_360_423_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(temperature.intValue()&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">50</span><span style="COLOR: #000000">)&nbsp;</span><span id=Codehighlighter1_360_423_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_360_423_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Temperature&nbsp;has&nbsp;risen&nbsp;above&nbsp;50&nbsp;degrees.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_468_560_Open_Image onclick="this.style.display='none'; Codehighlighter1_468_560_Open_Text.style.display='none'; Codehighlighter1_468_560_Closed_Image.style.display='inline'; Codehighlighter1_468_560_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_468_560_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_468_560_Closed_Text.style.display='none'; Codehighlighter1_468_560_Open_Image.style.display='inline'; Codehighlighter1_468_560_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id=Codehighlighter1_468_560_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_468_560_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wombat&nbsp;wombat&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Wombat();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wombat.setTemperature(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wombat.setTemperature(</span><span style="COLOR: #000000">55</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<p><br>下边介绍一下运行上边程序的过程。<br>1,编译上边的程序，需要classpath中加入slf4j-api-1.4.1.jar文件<br>2,运行时，需要classpath中加上slf4j-simple-1.4.1.jar<br>运行得到结果:<br>----------------------------<br>0 [main] ERROR Wombat - Temperature set to 1. Old temperature was null.<br>0 [main] ERROR Wombat - Temperature set to 55. Old temperature was 1.<br>0 [main] INFO Wombat - Temperature has risen above 50 degrees.<br>这个是simple log风格，</p>
<p>3,切换：如果想切换到jdk14的log的风格，只需要把slf4j-simple-1.4.1.jar<br>从classpath中移除，同时classpath中加入slj4j-jdk14-1.4.1.jar<br>这时的运行结果:<br>---------------------------------------------------<br>2007-7-9 10:40:15 Wombat setTemperature<br>严重: Temperature set to 1. Old temperature was null.<br>2007-7-9 10:40:16 Wombat setTemperature<br>严重: Temperature set to 55. Old temperature was 1.<br>2007-7-9 10:40:16 Wombat setTemperature<br>信息: Temperature has risen above 50 degrees.<br>已经变成jdk14的log风格了。<br>4,再次切换到log4j<br>同样移除slj4j-jdk14-1.4.1.jar，加入slf4j-log4j12-1.4.1.jar，同时加入log4j-1.2.x.jar<br>加入log4j.properties。得到显示结果:<br>---------------------------------------<br>10:42:27,328 ERROR Wombat: Temperature set to 1. Old temperature was null.<br>10:42:27,328 ERROR Wombat: Temperature set to 55. Old temperature was 1.<br>10:42:27,328&nbsp; INFO Wombat: Temperature has risen above 50 degrees.<br>在不同的风格中切换只需要在部署期切换类库就可以了，和开发时无关。<br></p>
<img src ="http://www.blogjava.net/dreamstone/aggbug/128993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamstone/" target="_blank">dreamstone</a> 2007-07-09 10:47 <a href="http://www.blogjava.net/dreamstone/archive/2007/07/09/128993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对比Corba 了解Ice</title><link>http://www.blogjava.net/dreamstone/archive/2007/05/09/116067.html</link><dc:creator>dreamstone</dc:creator><author>dreamstone</author><pubDate>Tue, 08 May 2007 16:48:00 GMT</pubDate><guid>http://www.blogjava.net/dreamstone/archive/2007/05/09/116067.html</guid><wfw:comment>http://www.blogjava.net/dreamstone/comments/116067.html</wfw:comment><comments>http://www.blogjava.net/dreamstone/archive/2007/05/09/116067.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamstone/comments/commentRss/116067.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamstone/services/trackbacks/116067.html</trackback:ping><description><![CDATA[公司给讲了一堂课，主要是讲<em>Ice</em> 的,和C++的同事一起听的。记录一些内容，另外放一些自己看过的资料：<br>1，学习Ice必须的网站<br><a href="http://www.zeroc.com/">www.zeroc.com</a><span class=a><font color=#008000 size=2><br><font color=#000000 size=3>2，ice简介<br></font>
<p style="FONT-SIZE: 14pt; COLOR: #000000">ICE(Internet Communications Engine)是一个为现实中程序员而写的中间件平台。作为一个高性能的互联网通信平台，ICE包含了很多分层的服务和插件(Plug-ins)，并且简单、高效和强大。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">ICE的自由使用遵从GNU的GPL(GNU General Public Licens)许可的条款。ICE也有商业的许可证，如果你想将ICE使用在你的私有产品中，那么你应该使用ICE的商业许可证。可以联系<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#97;&#108;&#101;&#115;&#64;&#122;&#101;&#114;&#111;&#99;&#46;&#99;&#111;&#109;" target=_blank><u><font color=#0000ff>sales@zeroc.com</font></u></a>来获得这方面的更多信息。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">ICE当前支持C++、Java、C#、Visual Basic、Python和PHP编程语言，并支持在多种操作系统上运行。更多的操作系统和编程语言将会在以后的发布中支持。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">ICE有以下几部分组成：</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">Slice<br>ICE的规范语言，跟CORBA的IDL(Interface Definition Language)等价的东西。Slice建立了客户端和服务器端共同遵守的契约：接口。Slice也用来描述对象持久数据。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">Slice Compilers<br>Slice的规范语言可以影射成多种编程语言。目前ICE支持C++，Java，Python，PHP，C#和VB的语言影射。Ice的客户端和服务器端协同工作，而不会知道分别实现的是何种编程语言。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">Ice<br>Ice的核心库。在众多的特性当中，Ice核心库通过一个高效的协议(包含TCP/UDP层上协议压缩)来管理所有的通信任务，为多线程服务器提供了一个灵活的线程池，并且有特别的功能来支持上百万对象的可扩展性。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000"><br>IceUtil<br>一些常用的功能函数集。例如Unicode处理和多线程编程，是用C++写成。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">IceBox<br>一个专用于ICE应用的应用服务器。ICEBox可以方便地运行和管理动态加载、共享库或java类的形式Ice的服务。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">IcePack<br>一个成熟的服务激活和部署工具。IcePack能大大简化在异构网络之间部署应用的复杂性。只要简单的编写XML格式的一个部署描述文件，IcePack就能自动处理剩下的工作。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">Freeze<br>Freeze提供了Ice Servants对象的自动持久性。通过几行代码，一个应用就可以生成一个高度可扩展的逐出器(evictor)来高效地管理持久对象。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">FreezeScript<br>在大的软件项目里，持久对象的数据类型改变很常见。为了最小化这些变化的影响，FreezeScript提供了相应的工具来检查和移植Freeze生成的数据库。这些工具支持XML格式的配置脚本，易于使用。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">IceSSL<br>用于Ice核心的动态的SSL传输插件。提供了认证、加密和消息完整性，使用工业标准的SSL协议来实现。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">Glacier<br>面向对象中间件平台的一个最大的挑战是安全性和防火墙。Glacier是Ice的防火墙解决方案，它大大简化了安全程序的部署。Glacier认证和过滤客户的请求并允许服务器通过安全的方式回调客户端对象。结合IceSSL的使用，Glacier提供了强大的安全解决方案，即安全，又易于配置管理。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">IceStorm<br>一个支持联盟的消息服务。和大多数的其他消息和事件服务相比，IceStorm支持有类型的事件，这意味着通过联盟广播一个消息和调用一个接口上的一个方法一样容易。</p>
<p style="FONT-SIZE: 14pt; COLOR: #000000">IcePatch<br>一个软件修补和分发的服务。为确保运行的软件是最新的版本，要经常更新软件，这是一件乏味的工作。IcePatch自动更新在某个目录层次下的文件。只有需要更新的文件会下作到客户端，为了快速的下载更新，IcePatch使用的高效的压缩算法。<br>3、ice vs corba差异<br><a href="http://gigaboy.bokee.com/2158057.html">http://gigaboy.bokee.com/2158057.html</a><br>4、ice vs corba性能对比<br><a href="http://gigaboy.bokee.com/2160870.html">http://gigaboy.bokee.com/2160870.html</a><br>5、ice评价<br>corba是一个规范，ice不是 ice的特性是zeroc想怎样就怎样的 所以也不会有第三方产商参与 ice对各种平台的支持也只有zeroc的实现版本。使用Ice不用自己设计传输协议了 ，Ice有成熟的商用案例。ICE是以前Corba的开发者来开发的，吸取了corba的长处，避免了一些短处，特点是：效率高、简单、免费</p>
</font></span>
<img src ="http://www.blogjava.net/dreamstone/aggbug/116067.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamstone/" target="_blank">dreamstone</a> 2007-05-09 00:48 <a href="http://www.blogjava.net/dreamstone/archive/2007/05/09/116067.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作流入门  </title><link>http://www.blogjava.net/dreamstone/archive/2007/05/07/115739.html</link><dc:creator>dreamstone</dc:creator><author>dreamstone</author><pubDate>Mon, 07 May 2007 11:06:00 GMT</pubDate><guid>http://www.blogjava.net/dreamstone/archive/2007/05/07/115739.html</guid><wfw:comment>http://www.blogjava.net/dreamstone/comments/115739.html</wfw:comment><comments>http://www.blogjava.net/dreamstone/archive/2007/05/07/115739.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamstone/comments/commentRss/115739.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamstone/services/trackbacks/115739.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 工作流 OSWorkFlow 入门&nbsp;&nbsp;<a href='http://www.blogjava.net/dreamstone/archive/2007/05/07/115739.html'>阅读全文</a><img src ="http://www.blogjava.net/dreamstone/aggbug/115739.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamstone/" target="_blank">dreamstone</a> 2007-05-07 19:06 <a href="http://www.blogjava.net/dreamstone/archive/2007/05/07/115739.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装appfuse</title><link>http://www.blogjava.net/dreamstone/archive/2007/04/17/111153.html</link><dc:creator>dreamstone</dc:creator><author>dreamstone</author><pubDate>Tue, 17 Apr 2007 01:48:00 GMT</pubDate><guid>http://www.blogjava.net/dreamstone/archive/2007/04/17/111153.html</guid><wfw:comment>http://www.blogjava.net/dreamstone/comments/111153.html</wfw:comment><comments>http://www.blogjava.net/dreamstone/archive/2007/04/17/111153.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamstone/comments/commentRss/111153.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamstone/services/trackbacks/111153.html</trackback:ping><description><![CDATA[&nbsp;如果你对ant没有了解，<a href="http://www.blogjava.net/dreamstone/archive/2006/09/20/70647.html">请看这里(ant入门) </a>
<p>&nbsp;<span>一：准备</span></p>
<p align=left><span>1,</span><span>安装</span><span>Jdk1.4 </span></p>
<p align=left><span>2,</span><span>安装</span><span>mysql</span></p>
<p align=left><span>3,</span><span>解压缩</span><span>ant</span><span>，拷贝</span><span>junit.jar</span><span>到</span><span>ant_home/lib/</span><span>下</span></p>
<p align=left><span>4,</span><span>设置</span><span>path,classpath,jdk_home,and_home,catalina_home</span></p>
<p align=left><span>5,</span><span>测试安装</span></p>
<p align=left><span>cmd-&gt;</span><span>输入</span><span>java </span></p>
<p align=left><span>cmd-&gt;</span><span>输入</span><span>ant </span></p>
<p align=left><span>二：安装：</span></p>
<p align=left><span>1</span><span>，拷贝</span><span>appfuse-webwork-<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">1.9.3</st1:chsdate>-src.zip</span><span>到</span><span>d:/work</span></p>
<p align=left><span><span>&nbsp;&nbsp; </span></span><span>解压缩</span><span>appfuse-webwork-<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">1.9.3</st1:chsdate>-src.zip</span><span>到当前文件夹</span></p>
<p align=left><span>2,</span><span>修改配置文件</span><span>build.properties</span></p>
<p align=left><span>这里以</span><span>mysql</span><span>为例子：</span></p>
<p align=left><span>原来的样子：</span></p>
<p align=left><span>--------------------------------------------------------</span></p>
<p align=left><span>#database.jar=${postgresql.jar}</span></p>
<p align=left><span>#database.type=postgresql</span></p>
<p align=left><span>#database.host=localhost</span></p>
<p align=left><span>#database URL for creating other databases (doesn't work with pgsql)</span></p>
<p align=left><span>#database.admin.url=jdbc:${database.type}://${database.host}/template1</span></p>
<p align=left><span>#database.admin.username=postgres</span></p>
<p align=left><span>#database.admin.password=postgres</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>#hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect</span></p>
<p align=left><span>#database.driver_class=org.postgresql.Driver</span></p>
<p align=left><span>#database.url=jdbc:${database.type}://${database.host}/${database.name}</span></p>
<p align=left><span>--------------------------------------------------------</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>修改后的样子：</span></p>
<p align=left><span>--------------------------------------------------------</span></p>
<p align=left><span>database.jar=${mysql.jar}</span></p>
<p align=left><span>database.type=mysql</span></p>
<p align=left><span>database.host=localhost</span></p>
<p align=left><span>#database URL for creating other databases (doesn't work with pgsql)</span></p>
<p align=left><span>database.admin.url=jdbc:${database.type}://${database.host}/mydb</span></p>
<p align=left><span>database.admin.username=root</span></p>
<p align=left><span>database.admin.password=aa</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>hibernate.dialect=org.hibernate.dialect.MySQLDialect</span></p>
<p align=left><span>database.driver_class=com.mysql.jdbc.Driver</span></p>
<p align=left><span>database.url=jdbc:${database.type}://${database.host}/${database.name}</span></p>
<p align=left><span>--------------------------------------------------------</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>修改</span><span>D:\work\myapp\metadata\sql</span><span>里边的</span><span>mysql-create.sql</span></p>
<p align=left><span>把第一句改成</span></p>
<p align=left><span>create database if not exists @DB-NAME@ CHARACTER SET utf8 COLLATE utf8_general_ci;</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>2,</span><span>生成工程</span></p>
<p align=left><span>cmd</span><span>进入</span><span>d:\work\appfuse-&gt;</span><span>输入</span><span>ant new</span></p>
<p align=left><span>全部使用默认</span></p>
<p align=left><span>3,</span><span>编译：</span></p>
<p align=left><span>Ant compile</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>3</span><span>，建立表结构</span></p>
<p align=left><span>进入</span><span>mysql&gt;</span></p>
<p align=left><span>Create database mydb</span></p>
<p align=left><span>Ant setup-db</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>4,</span><span>测试</span></p>
<p align=left><span>Ant test-all</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>5,</span><span>部署</span></p>
<p align=left><span>Ant deploy</span></p>
<p><span>三，运行<span><br><br>1</span>、<span>&nbsp;&nbsp;</span>运行<span>tomcat</span>。<span><br><br>2</span>、<span>&nbsp;&nbsp;</span>打开浏览器，输入<span><a href="http://localhost:8080/app">http://localhost:8080/myapp</a></span>，会看到登录页面。</span></p>
<p>&nbsp;</p>
<p><span>注意问题：</span></p>
<p><span>每次更改环境变量后应该重新打开<span>CMD</span>窗口</span></p>
<p>&nbsp;</p>
<p><span>下载地址：</span></p>
<ul type=disc>
    <li><span>从</span><span> <span><a href="https://appfuse.dev.java.net/servlets/ProjectDocumentList?folderID=5618">AppFuse <span><span>下载页面</span></span></a> </span></span><span>下载</span><span> appfuse-tapestry-<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">1.9.3</st1:chsdate>-src.zip</span><span>，并解压缩在任意目录下。这个</span><span> zip </span><span>已经定制了使用</span><span> Tapestry </span><span>作为表现层的实现框架，因而使用起来较为直接。</span><span> </span>
    <li><span>从</span><span> <span><a href="http://java.sun.com/">http://java.sun.com</a> </span></span><span>下载最新的</span><span> JDK</span><span>，并安装或解压缩到任意目录下。本文采用</span><span> JDK <st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">1.5.0</st1:chsdate></span><span>。设置环境变量</span><span> JAVA_HOME </span><span>指向</span><span> JDK </span><span>所在的目录，并在</span><span> PATH </span><span>中添加</span><span> %JAVA_HOME%/bin</span><span>。</span><span> </span>
    <li><span>从</span><span> <span><a href="http://jakarta.apache.org/tomcat">http://jakarta.apache.org/tomcat</a> </span></span><span>下载最新版的</span><span> Tomcat</span><span>，并安装或解压缩到任意目录下。本文采用</span><span> Tomcat <st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">5.5.17</st1:chsdate></span><span>。设置环境变量</span><span> CATALINA_HOME </span><span>指向</span><span> Tomcat </span><span>的安装目录。</span><span> </span>
    <li><span>从</span><span> <span><a href="http://ant.apache.org/">http://ant.apache.org</a></span></span><span>下载最新版的</span><span> Ant</span><span>，并解压缩到任意目录下。</span><span>AppFuse </span><span>要求的最低版本是</span><span> <st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">1.6.2</st1:chsdate></span><span>，本文采用的是</span><span> 1.6.5</span><span>。设置</span><span> ANT_HOME </span><span>指向</span><span> Ant </span><span>所在的目录，并在</span><span> PATH </span><span>中添加</span><span> %ANT_HOME%/bin</span><span>。另外，要拷贝一个</span><span> junit.jar </span><span>到</span><span> %ANT_HOME%/lib </span><span>下，如果</span><span> lib </span><span>下没有</span><span> junit.jar</span><span>，</span><span>AppFuse </span><span>的脚本在运行时会给出警告信息。</span><span>junit.jar </span><span>可以从</span><span> <span><a href="http://www.junit.org/">http://www.junit.org</a> </span></span><span>获得，也可以从</span><span> %AppFuse%/lib/junit3.8.1 </span><span>目录下获得。</span><span> </span>
    <li><span>从</span><span> <span><a href="http://www.mysql.com/">http://www.mysql.com</a> </span></span><span>下载最新版的</span><span> <span>MySQL</span></span><span>，并安装或解压缩到任意目录下。本文采用的是</span><span> 5.0</span><span>。</span><span> </span></li>
</ul>
<p>&nbsp;参考：<a href="http://www.ibm.com/developerworks/cn/java/j-lo-appfuse/index.html">http://www.ibm.com/developerworks/cn/java/j-lo-appfuse/index.html</a><br><br><strong>1. Ant 中常用的 AppFuse target<br></strong>
<table class=data-table-1 cellSpacing=0 cellPadding=0 width="100%" summary="Ant 中常用的 AppFuse target" border=0>
    <tbody>
        <tr>
            <th>target</th>
            <th>说明</th>
            <th>所在文件</th>
        </tr>
        <tr>
            <td class=tb-row>new</td>
            <td>这个 target 是使用 AppFuse 必须要用到的，它用来在 AppFuse 同级的目录下创建一个新项目。创建过程是交互式的，会让用户输入项目名称、数据库名称以及根包路径。</td>
            <td>AppFuse 安装目录下的 build.xml</td>
        </tr>
        <tr>
            <td class=tb-row>setup</td>
            <td>用于初始化一个新的项目，它包含了从数据库创建、Tomcat 设置到 war 文件的生成和部署等一系列操作。</td>
            <td>项目根目录下的 build.xml</td>
        </tr>
        <tr>
            <td class=tb-row>deploy</td>
            <td>如果你修改的代码不涉及到数据库的更改，那么可以使用这个 target，因为它只负责生成并重新部署 war 包。</td>
            <td>项目根目录下的 build.xml</td>
        </tr>
        <tr>
            <td class=tb-row>setup-db</td>
            <td>如果你只是要对数据库进行更改，使用这个 target。比如，重新创建数据库，重新加载样本数据等操作。</td>
            <td>项目根目录下的 build.xml</td>
        </tr>
        <tr>
            <td class=tb-row>install</td>
            <td>AppGen 的 target。如果你不希望使用 AppGen 帮你生成 dao 类和 service 类以及其他的代码，就使用这个 target。</td>
            <td>extras/appgen 目录下的 build.xml</td>
        </tr>
        <tr>
            <td class=tb-row>install-detailed</td>
            <td>AppGen 的 target。如果你希望使用 AppGen 帮你生成所有代码，就使用这个 target。</td>
            <td>extras/appgen 目录下的 </td>
        </tr>
    </tbody>
</table>
</p>
<img src ="http://www.blogjava.net/dreamstone/aggbug/111153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamstone/" target="_blank">dreamstone</a> 2007-04-17 09:48 <a href="http://www.blogjava.net/dreamstone/archive/2007/04/17/111153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配制Spring声明型事务和JdbcTemplate的使用</title><link>http://www.blogjava.net/dreamstone/archive/2007/02/08/98844.html</link><dc:creator>dreamstone</dc:creator><author>dreamstone</author><pubDate>Thu, 08 Feb 2007 10:33:00 GMT</pubDate><guid>http://www.blogjava.net/dreamstone/archive/2007/02/08/98844.html</guid><wfw:comment>http://www.blogjava.net/dreamstone/comments/98844.html</wfw:comment><comments>http://www.blogjava.net/dreamstone/archive/2007/02/08/98844.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamstone/comments/commentRss/98844.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamstone/services/trackbacks/98844.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Spring 声明事务  JdbcTemplate&nbsp;&nbsp;<a href='http://www.blogjava.net/dreamstone/archive/2007/02/08/98844.html'>阅读全文</a><img src ="http://www.blogjava.net/dreamstone/aggbug/98844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamstone/" target="_blank">dreamstone</a> 2007-02-08 18:33 <a href="http://www.blogjava.net/dreamstone/archive/2007/02/08/98844.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用IText打印PDF</title><link>http://www.blogjava.net/dreamstone/archive/2007/01/29/96468.html</link><dc:creator>dreamstone</dc:creator><author>dreamstone</author><pubDate>Mon, 29 Jan 2007 03:55:00 GMT</pubDate><guid>http://www.blogjava.net/dreamstone/archive/2007/01/29/96468.html</guid><wfw:comment>http://www.blogjava.net/dreamstone/comments/96468.html</wfw:comment><comments>http://www.blogjava.net/dreamstone/archive/2007/01/29/96468.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.blogjava.net/dreamstone/comments/commentRss/96468.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreamstone/services/trackbacks/96468.html</trackback:ping><description><![CDATA[IText是开源的，对与打印PDF做的还不错，下边一个例子关于IText的，列出了大部份常用的功能。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.io.FileOutputStream;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;com.lowagie.text.Cell;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;com.lowagie.text.Document;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;com.lowagie.text.Font;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;com.lowagie.text.PageSize;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;com.lowagie.text.Paragraph;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;com.lowagie.text.Table;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;com.lowagie.text.pdf.BaseFont;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;com.lowagie.text.pdf.PdfWriter;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_328_2692_Open_Image onclick="this.style.display='none'; Codehighlighter1_328_2692_Open_Text.style.display='none'; Codehighlighter1_328_2692_Closed_Image.style.display='inline'; Codehighlighter1_328_2692_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_328_2692_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_328_2692_Closed_Text.style.display='none'; Codehighlighter1_328_2692_Open_Image.style.display='inline'; Codehighlighter1_328_2692_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Example&nbsp;</span><span id=Codehighlighter1_328_2692_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_328_2692_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;Font&nbsp;FONT_11;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;BaseFont&nbsp;msgothic;<br><img id=Codehighlighter1_451_1183_Open_Image onclick="this.style.display='none'; Codehighlighter1_451_1183_Open_Text.style.display='none'; Codehighlighter1_451_1183_Closed_Image.style.display='inline'; Codehighlighter1_451_1183_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_451_1183_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_451_1183_Closed_Text.style.display='none'; Codehighlighter1_451_1183_Open_Image.style.display='inline'; Codehighlighter1_451_1183_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception</span><span id=Codehighlighter1_451_1183_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_451_1183_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_458_649_Open_Image onclick="this.style.display='none'; Codehighlighter1_458_649_Open_Text.style.display='none'; Codehighlighter1_458_649_Closed_Image.style.display='inline'; Codehighlighter1_458_649_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_458_649_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_458_649_Closed_Text.style.display='none'; Codehighlighter1_458_649_Open_Image.style.display='inline'; Codehighlighter1_458_649_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span id=Codehighlighter1_458_649_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_458_649_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义字体</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msgothic&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;BaseFont.createFont(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">D:\\workspace\\UseIText\\MSMINCHO.TTC,0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,BaseFont.IDENTITY_H,BaseFont.EMBEDDED);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FONT_11</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Font(msgothic);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FONT_11.setSize(</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">);<br><img id=Codehighlighter1_668_696_Open_Image onclick="this.style.display='none'; Codehighlighter1_668_696_Open_Text.style.display='none'; Codehighlighter1_668_696_Closed_Image.style.display='inline'; Codehighlighter1_668_696_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_668_696_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_668_696_Closed_Text.style.display='none'; Codehighlighter1_668_696_Open_Image.style.display='inline'; Codehighlighter1_668_696_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(Exception&nbsp;e)</span><span id=Codehighlighter1_668_696_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_668_696_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">为了测试方便，加入自动关闭打开acrord32</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime.getRuntime().exec(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">tskill&nbsp;acrord32</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).waitFor();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;document</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Document(PageSize.A4.rotate());<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">写文件</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PdfWriter&nbsp;writer</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">PdfWriter.getInstance(document,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;FileOutputStream(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d:/temp.pdf</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.open();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;makeDocument(document);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.close();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">为了测试方便，加入自动关闭打开acrord32</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime.getRuntime().exec(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">c:\\Program&nbsp;Files\\Adobe\\Acrobat&nbsp;</span><span style="COLOR: #000000">7.0</span><span style="COLOR: #000000">\\Reader\\acrord32.exe\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;d:/temp.pdf</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).waitFor();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_1252_1845_Open_Image onclick="this.style.display='none'; Codehighlighter1_1252_1845_Open_Text.style.display='none'; Codehighlighter1_1252_1845_Closed_Image.style.display='inline'; Codehighlighter1_1252_1845_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1252_1845_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1252_1845_Closed_Text.style.display='none'; Codehighlighter1_1252_1845_Open_Image.style.display='inline'; Codehighlighter1_1252_1845_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;makeDocument(Document&nbsp;document)</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception</span><span id=Codehighlighter1_1252_1845_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1252_1845_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">table大部份操做类似与html,下边是一些常用的参数<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">3是总的列数，也可以同时指定行数和列数new&nbsp;Table(3,4)</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Table&nbsp;table</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Table(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">table的宽度</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.setWidth(</span><span style="COLOR: #000000">98</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">类似html的cellSpaceing</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.setSpacing(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">每一列的宽度，是比例不是固定宽度</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_1483_1492_Open_Image onclick="this.style.display='none'; Codehighlighter1_1483_1492_Open_Text.style.display='none'; Codehighlighter1_1483_1492_Closed_Image.style.display='inline'; Codehighlighter1_1483_1492_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1483_1492_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1483_1492_Closed_Text.style.display='none'; Codehighlighter1_1483_1492_Open_Image.style.display='inline'; Codehighlighter1_1483_1492_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.setWidths(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[]</span><span id=Codehighlighter1_1483_1492_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1483_1492_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">30</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">60</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">对齐方式</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.setAlignment(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">CENTER</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">table是否有边框</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.setBorder(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">cell默认是否有边框</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.setDefaultCellBorder(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">自动填充空白</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.setAutoFillEmptyCells(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_1705_1732_Open_Image onclick="this.style.display='none'; Codehighlighter1_1705_1732_Open_Text.style.display='none'; Codehighlighter1_1705_1732_Closed_Image.style.display='inline'; Codehighlighter1_1705_1732_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1705_1732_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1705_1732_Closed_Text.style.display='none'; Codehighlighter1_1705_1732_Open_Image.style.display='inline'; Codehighlighter1_1705_1732_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_1705_1732_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1705_1732_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;makeContent(table);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">新的一页要加上这句</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.newPage();<br><img id=Codehighlighter1_1792_1819_Open_Image onclick="this.style.display='none'; Codehighlighter1_1792_1819_Open_Text.style.display='none'; Codehighlighter1_1792_1819_Closed_Image.style.display='inline'; Codehighlighter1_1792_1819_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1792_1819_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1792_1819_Closed_Text.style.display='none'; Codehighlighter1_1792_1819_Open_Image.style.display='inline'; Codehighlighter1_1792_1819_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_1792_1819_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1792_1819_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;makeContent(table);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.add(table);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_1909_2149_Open_Image onclick="this.style.display='none'; Codehighlighter1_1909_2149_Open_Text.style.display='none'; Codehighlighter1_1909_2149_Closed_Image.style.display='inline'; Codehighlighter1_1909_2149_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1909_2149_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1909_2149_Closed_Text.style.display='none'; Codehighlighter1_1909_2149_Open_Image.style.display='inline'; Codehighlighter1_1909_2149_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;&nbsp;makeContent(Table&nbsp;table)</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;</span><span id=Codehighlighter1_1909_2149_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1909_2149_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;len&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;table.columns();<br><img id=Codehighlighter1_1964_2146_Open_Image onclick="this.style.display='none'; Codehighlighter1_1964_2146_Open_Text.style.display='none'; Codehighlighter1_1964_2146_Closed_Image.style.display='inline'; Codehighlighter1_1964_2146_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1964_2146_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1964_2146_Closed_Text.style.display='none'; Codehighlighter1_1964_2146_Open_Image.style.display='inline'; Codehighlighter1_1964_2146_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">len;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_1964_2146_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1964_2146_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;testStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">xxxxxxxxxxxxxxxxxxxxxx</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell&nbsp;cell</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Cell(testStr);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">max&nbsp;lines&nbsp;，设置成1防止换行，配合cell宽度，可以实现自动截取</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cell.setMaxLines(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.addCell(cell);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">构造一个自定义的cell</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_2244_2690_Open_Image onclick="this.style.display='none'; Codehighlighter1_2244_2690_Open_Text.style.display='none'; Codehighlighter1_2244_2690_Closed_Image.style.display='inline'; Codehighlighter1_2244_2690_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2244_2690_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2244_2690_Closed_Text.style.display='none'; Codehighlighter1_2244_2690_Open_Image.style.display='inline'; Codehighlighter1_2244_2690_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;Cell&nbsp;makeCell(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;colspan,String&nbsp;align,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;maxLines,Font&nbsp;font)</span><span id=Codehighlighter1_2244_2690_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_2244_2690_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell&nbsp;cell&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Paragraph&nbsp;paragraph&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_2300_2625_Open_Image onclick="this.style.display='none'; Codehighlighter1_2300_2625_Open_Text.style.display='none'; Codehighlighter1_2300_2625_Closed_Image.style.display='inline'; Codehighlighter1_2300_2625_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2300_2625_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2300_2625_Closed_Text.style.display='none'; Codehighlighter1_2300_2625_Open_Image.style.display='inline'; Codehighlighter1_2300_2625_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span id=Codehighlighter1_2300_2625_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_2300_2625_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用自定义字体</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paragraph</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Paragraph(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">testxxx</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,font);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cell</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Cell(paragraph);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置colspan,同样的方法可以设置rowspan</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_2437_2472_Open_Image onclick="this.style.display='none'; Codehighlighter1_2437_2472_Open_Text.style.display='none'; Codehighlighter1_2437_2472_Closed_Image.style.display='inline'; Codehighlighter1_2437_2472_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2437_2472_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2437_2472_Closed_Text.style.display='none'; Codehighlighter1_2437_2472_Open_Image.style.display='inline'; Codehighlighter1_2437_2472_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(colspan&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_2437_2472_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_2437_2472_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cell.setColspan(colspan);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置对齐</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_2529_2574_Open_Image onclick="this.style.display='none'; Codehighlighter1_2529_2574_Open_Text.style.display='none'; Codehighlighter1_2529_2574_Closed_Image.style.display='inline'; Codehighlighter1_2529_2574_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2529_2574_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2529_2574_Closed_Text.style.display='none'; Codehighlighter1_2529_2574_Open_Image.style.display='inline'; Codehighlighter1_2529_2574_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">((align&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">align.equals(</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">)))</span><span id=Codehighlighter1_2529_2574_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_2529_2574_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cell.setHorizontalAlignment(align);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置maxlines</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cell.setMaxLines(maxLines);<br><img id=Codehighlighter1_2644_2672_Open_Image onclick="this.style.display='none'; Codehighlighter1_2644_2672_Open_Text.style.display='none'; Codehighlighter1_2644_2672_Closed_Image.style.display='inline'; Codehighlighter1_2644_2672_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2644_2672_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2644_2672_Closed_Text.style.display='none'; Codehighlighter1_2644_2672_Open_Image.style.display='inline'; Codehighlighter1_2644_2672_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(Exception&nbsp;e)</span><span id=Codehighlighter1_2644_2672_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_2644_2672_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;cell;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<img src ="http://www.blogjava.net/dreamstone/aggbug/96468.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreamstone/" target="_blank">dreamstone</a> 2007-01-29 11:55 <a href="http://www.blogjava.net/dreamstone/archive/2007/01/29/96468.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>