??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产精品一区二区成人片国内 ,亚洲人成网站在线观看播放动漫,亚洲精品免费视频http://www.tkk7.com/gentoo1439/category/24056.htmlIt's never too late to learnzh-cnThu, 21 Nov 2013 12:18:32 GMTThu, 21 Nov 2013 12:18:32 GMT60tomcat下用Log4j 按文件大,生成catalina.out日志文g(?http://www.tkk7.com/gentoo1439/archive/2013/11/21/406634.htmlGeorge GongGeorge GongThu, 21 Nov 2013 06:43:00 GMThttp://www.tkk7.com/gentoo1439/archive/2013/11/21/406634.htmlhttp://www.tkk7.com/gentoo1439/comments/406634.htmlhttp://www.tkk7.com/gentoo1439/archive/2013/11/21/406634.html#Feedback0http://www.tkk7.com/gentoo1439/comments/commentRss/406634.htmlhttp://www.tkk7.com/gentoo1439/services/trackbacks/406634.htmlhttp://blog.csdn.net/function413/article/details/8485822

一?/span>下蝲所需cd Q可?a style="color: #336699; text-decoration: none;">http://download.csdn.net/detail/function413/4977751中下载tomcat log4j.rar 里面包含以下JAR包)

1?/span>下蝲log4j下蝲1.2以后的版?/p>

下蝲地址Q?span style="font-family: Calibri;">http://logging.apache.org/log4j/1.2/download.html

2?/span>下蝲tomcat-juli.jarQ?span style="font-family: Calibri;">tomcat-juli-adapters.jar

使用LOG4J来接?span style="font-family: Calibri;">tomcat6.0.18的日志文件必要下蝲两个文gQ?span style="font-family: Calibri;">tomcat-juli.jarQ?span style="font-family: Calibri;">tomcat-juli-adapters.jar?/p>

下蝲地址为:http://www.apache.org/dist/tomcat/tomcat-6/v6.0.18/bin/extras/ (如果tomcat为其他版本,请下载对应版本的cd)

二?/span>修改相关配置文g

1?/span>修改${catalina.home}/conf/context.xml

修改Q?lt;Context >?lt;Context swallowOutput="true" >只有q样才能完全的把tomcat的stdoutl接过来?strong>q一步很关键 在官|及|上找了许多资料都没有提及?/strong>

2?/span>复制log4j.jar?span style="font-family: Calibri;">${catalina.home}/lib?/p>

3?/span>复制tomcat-juli-adapters.jar?span style="font-family: Calibri;">${catalina.home}/lib?/p>

4?/span>复制tomcat-juli.jar?span style="font-family: Calibri;">${catalina.home}/bin下,在该目录会存在该文gQ覆?卛_

5?/span>建立log4j.properties,q把其放?span style="font-family: Calibri;">${catalina.home}/lib?/p>

George Gong 2013-11-21 14:43 发表评论
]]>
maven builder :auto build 恶心的东?/title><link>http://www.tkk7.com/gentoo1439/archive/2010/04/30/319770.html</link><dc:creator>George Gong</dc:creator><author>George Gong</author><pubDate>Fri, 30 Apr 2010 03:24:00 GMT</pubDate><guid>http://www.tkk7.com/gentoo1439/archive/2010/04/30/319770.html</guid><wfw:comment>http://www.tkk7.com/gentoo1439/comments/319770.html</wfw:comment><comments>http://www.tkk7.com/gentoo1439/archive/2010/04/30/319770.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/gentoo1439/comments/commentRss/319770.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gentoo1439/services/trackbacks/319770.html</trackback:ping><description><![CDATA[最q开始用eclipse3.5Q下载了maven插gm2eclipseQ用后才发现每ơproject clean的时候这个maven builder都会自动执行Q这个很恶心。google了半天也没找到解军_法,恶心? <img src ="http://www.tkk7.com/gentoo1439/aggbug/319770.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gentoo1439/" target="_blank">George Gong</a> 2010-04-30 11:24 <a href="http://www.tkk7.com/gentoo1439/archive/2010/04/30/319770.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ANT脚本Maven Dependencies的jar包copy到WEB-INF?/title><link>http://www.tkk7.com/gentoo1439/archive/2010/04/30/319745.html</link><dc:creator>George Gong</dc:creator><author>George Gong</author><pubDate>Thu, 29 Apr 2010 16:12:00 GMT</pubDate><guid>http://www.tkk7.com/gentoo1439/archive/2010/04/30/319745.html</guid><wfw:comment>http://www.tkk7.com/gentoo1439/comments/319745.html</wfw:comment><comments>http://www.tkk7.com/gentoo1439/archive/2010/04/30/319745.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/gentoo1439/comments/commentRss/319745.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gentoo1439/services/trackbacks/319745.html</trackback:ping><description><![CDATA[<p>pȝ之前一直用的是maven-artifact-ant-2.0.4-dep.jarQ但最q对一些jar包支持不好,q行ant脚本出现以下问题Q?/p> [artifact:dependencies] [WARNING] POM for 'ch.qos.logback:logback-classic:pom:0.9.9' is invalid. It will be ignored for artifact resolution. Reason: The POM expression: ${parent.version} could not be evaluated. Reason: ch.qos.logback:logback-classic:jar:${parent.version} references itself.<br /> <br /> q样的话q个忽略的jar包就得手动copy了,q样你还得找q个jar包依赖的其他jar包是不是存在。后来在|上google了一下,发现现在都用maven-ant-tasks-2.1.0.jarQ然后对build.xmlE作改动Q如下即可:<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.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff"><?</span><span style="color: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="color: #0000ff">?></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff"><</span><span style="color: #800000">project </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="hehe"</span><span style="color: #ff0000"> default</span><span style="color: #0000ff">="maven-jar"</span><span style="color: #ff0000"> xmlns:artifact</span><span style="color: #0000ff">="urn:maven-artifact-ant"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">property </span><span style="color: #ff0000">file</span><span style="color: #0000ff">="build.properties"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">target </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="maven-jar"</span><span style="color: #ff0000"> description</span><span style="color: #0000ff">="Use Maven2 to manage jars' dependencies"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">echo </span><span style="color: #ff0000">message</span><span style="color: #0000ff">="deleting old jar <img src="http://www.tkk7.com/Images/dot.gif" alt="" />.. "</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">delete </span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${web.dir}/WEB-INF/lib"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">copy </span><span style="color: #ff0000">todir</span><span style="color: #0000ff">="${web.dir}/WEB-INF/lib"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">fileset </span><span style="color: #ff0000">id</span><span style="color: #0000ff">="runtimeFiles"</span><span style="color: #ff0000"> dir</span><span style="color: #0000ff">="lib/mylib"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />                </span><span style="color: #0000ff"><</span><span style="color: #800000">include </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="**/*.jar"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />            </span><span style="color: #0000ff"></</span><span style="color: #800000">fileset</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">mapper </span><span style="color: #ff0000">type</span><span style="color: #0000ff">="flatten"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"></</span><span style="color: #800000">copy</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">echo </span><span style="color: #ff0000">message</span><span style="color: #0000ff">="Use Maven2 to manage jar<img src="http://www.tkk7.com/Images/dot.gif" alt="" />."</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">typedef </span><span style="color: #ff0000">resource</span><span style="color: #0000ff">="org/apache/maven/artifact/ant/antlib.xml"</span><span style="color: #ff0000"> uri</span><span style="color: #0000ff">="urn:maven-artifact-ant"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">classpath</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />                </span><span style="color: #0000ff"><</span><span style="color: #800000">pathelement </span><span style="color: #ff0000">location</span><span style="color: #0000ff">="lib/maven-ant-tasks-2.1.0.jar"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />            </span><span style="color: #0000ff"></</span><span style="color: #800000">classpath</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"></</span><span style="color: #800000">typedef</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">artifact:pom </span><span style="color: #ff0000">file</span><span style="color: #0000ff">="pom.xml"</span><span style="color: #ff0000"> id</span><span style="color: #0000ff">="my.pom"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">artifact:dependencies </span><span style="color: #ff0000">pathId</span><span style="color: #0000ff">="dependency.classpath"</span><span style="color: #ff0000"> filesetId</span><span style="color: #0000ff">="dependency.fileset"</span><span style="color: #ff0000"> usescope</span><span style="color: #0000ff">="runtime"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">pom </span><span style="color: #ff0000">refid</span><span style="color: #0000ff">="my.pom"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"></</span><span style="color: #800000">artifact:dependencies</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">copy </span><span style="color: #ff0000">todir</span><span style="color: #0000ff">="${web.dir}/WEB-INF/lib"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">fileset </span><span style="color: #ff0000">refid</span><span style="color: #0000ff">="dependency.fileset"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">mapper </span><span style="color: #ff0000">type</span><span style="color: #0000ff">="flatten"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff"></</span><span style="color: #800000">copy</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />    </span><span style="color: #0000ff"></</span><span style="color: #800000">target</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff"></</span><span style="color: #800000">project</span><span style="color: #0000ff">></span></div> q样OK?br />   <img src ="http://www.tkk7.com/gentoo1439/aggbug/319745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gentoo1439/" target="_blank">George Gong</a> 2010-04-30 00:12 <a href="http://www.tkk7.com/gentoo1439/archive/2010/04/30/319745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat与nginx & apache 在windows server 2003 Q?4位) 下的集群http://www.tkk7.com/gentoo1439/archive/2010/01/15/309657.htmlGeorge GongGeorge GongFri, 15 Jan 2010 03:28:00 GMThttp://www.tkk7.com/gentoo1439/archive/2010/01/15/309657.htmlhttp://www.tkk7.com/gentoo1439/comments/309657.htmlhttp://www.tkk7.com/gentoo1439/archive/2010/01/15/309657.html#Feedback2http://www.tkk7.com/gentoo1439/comments/commentRss/309657.htmlhttp://www.tkk7.com/gentoo1439/services/trackbacks/309657.html׃目中的文件太多,都是几K的小文gQ有100多GQ所以必要提升静态文件的讉K速度。一开始用Nginx ?Tomcat做集,Nginx负责静态资源的响应。Nginx在Linux下跑的很爽,到Windows下就不太好了。Nginx前段旉推出了Windows版,拿来一试,感觉不太E_。在一个刀片机下作试很好Q但弄到正式环境下就不行了,ext tree昄不出来,而且要等很久Q最后页面提C:ext无法昄。最后跟同事商量Q觉得还是apache+tomcat在windows下比较稳定,转手弄apache+tomcat?br />
apache官方没有提供win64版本Q就找了一个外国哥们在Vistual Studio 2005 下自q译的win64 apacheQ在试Z安装很轻松,然后布了2个tomcatQ又在apache的mem cache中设|了3G的内存做~存Q测试一切OK。接着弄正式服务器Q第一台正式服务器很顺利,几分钟就搞定了。第二台服务器就Z问题Qapache无法启动Q提C:“׃应用E序配置不正?应用E序未能启动。重新安装应用程序可能会U正q个问题”。然后查看这两台服务器有何差异,最后发现第一C?net framework 2,3,3.5Q第二台上一?net framework 都没有。接着?net framework 2.0 service,q是不行。有文章说要安装 vc redistribute 包,到微软官方下载安装,q是不行Q郁闗最后没办法Q又下蝲安装.ner framework 3.0Q还是不行,靠!q时候我都不报希望了Q又下蝲安装.net framework 3.5Q然后发现apache 可以了!最后一分钟搞定W二台服务器的apache+tomcat?br />
我的apache+tomcat用的是ajp proxy通信方式Q设|session sticky?br />
好了Q接下来观察几天看看效果如何



George Gong 2010-01-15 11:28 发表评论
]]>
64位的Windows2003 Server上添加Tomcat服务http://www.tkk7.com/gentoo1439/archive/2009/03/31/263191.htmlGeorge GongGeorge GongTue, 31 Mar 2009 09:32:00 GMThttp://www.tkk7.com/gentoo1439/archive/2009/03/31/263191.htmlhttp://www.tkk7.com/gentoo1439/comments/263191.htmlhttp://www.tkk7.com/gentoo1439/archive/2009/03/31/263191.html#Feedback2http://www.tkk7.com/gentoo1439/comments/commentRss/263191.htmlhttp://www.tkk7.com/gentoo1439/services/trackbacks/263191.html׃目中用刎ͼ特在此做一W记Q?br />
       1.Tomcat?.0.14Q解压版。首先说明一?Tomcat本n?2位的Q所?4位操作系l的话要覆盖两个文g?br />            ?a >http://svn.apache.org/viewvc/tomcat/tc6.0.x/tags/TOMCAT_6_0_14/res/procrun/amd64/  下蝲tomcat6.exe和tomcat6w.exe两个文g?br />
       2.上面下载的两个文g覆盖$TOMCAT_HOME/bin下对应的文g?br />
       3.命o行到$TOMCAT_HOME/bin下,q行service install命o?br />
       4.修改服务启动QOK?br />

      PS:


      q里有点问题,pȝ中用的Java为Oracle jrockitQ所以安装后的\径同SUN的Java有所不同。?TOMCAT_HOME/bin下的service.bat昄是ؓSUN的Java准备的,如下Q?br />

rem Set the server jvm from JAVA_HOME
set PR_JVM=%JAVA_HOME%\jre\bin\server\jvm.dll
if exist "%PR_JVM%" goto foundJvm
rem Set the client jvm from JAVA_HOME
set PR_JVM=%JAVA_HOME%\jre\bin\client\jvm.dll
if exist "%PR_JVM%" goto foundJvm
set PR_JVM=auto
:foundJvm
echo Using JVM:              %PR_JVM%

    标红的是Sun Java的安装\径,而Jrockit?span style="color: #ff0000">%JAVA_HOME%\jre\bin\jrockit\jvm.dll?br />

    q有一ҎQ有的帖子说覆盖文g前要先运行tomcat6w.exe记录下各参数Q其实完全没必要。运行server install命o后参C自动d?

George Gong 2009-03-31 17:32 发表评论
]]>
Introduction to the Spring Framework 2.5http://www.tkk7.com/gentoo1439/archive/2007/10/31/157103.htmlGeorge GongGeorge GongWed, 31 Oct 2007 01:23:00 GMThttp://www.tkk7.com/gentoo1439/archive/2007/10/31/157103.htmlhttp://www.tkk7.com/gentoo1439/comments/157103.htmlhttp://www.tkk7.com/gentoo1439/archive/2007/10/31/157103.html#Feedback0http://www.tkk7.com/gentoo1439/comments/commentRss/157103.htmlhttp://www.tkk7.com/gentoo1439/services/trackbacks/157103.html阅读全文

George Gong 2007-10-31 09:23 发表评论
]]>
介绍一关于session的好文章,写的很详l??http://www.tkk7.com/gentoo1439/archive/2007/10/29/156652.htmlGeorge GongGeorge GongMon, 29 Oct 2007 05:15:00 GMThttp://www.tkk7.com/gentoo1439/archive/2007/10/29/156652.htmlhttp://www.tkk7.com/gentoo1439/comments/156652.htmlhttp://www.tkk7.com/gentoo1439/archive/2007/10/29/156652.html#Feedback0http://www.tkk7.com/gentoo1439/comments/commentRss/156652.htmlhttp://www.tkk7.com/gentoo1439/services/trackbacks/156652.html

http://hmily.blueidea.com/archives/2007/4508.shtml

目录Q?br /> 一、术语session
二、HTTP协议与状态保?br /> 三、理解cookie机制
四、理解session机制
五、理解javax.servlet.http.HttpSession
六、HttpSession常见问题
七、跨应用E序的session׃n
八、ȝ
参考文?/p>

一、术语session
在我的经验里Qsessionq个词被滥用的程度大概仅ơ于transactionQ更加有的是transaction与session在某些语境下的含义是相同的?/p>

sessionQ中文经常翻译ؓ会话Q其本来的含义是指有始有l的一pd动作/消息Q比如打电话时从拿v电话拨号到挂断电话这中间的一pdq程可以UCZ?session。有时候我们可以看到这L?#8220;在一个浏览器会话期间Q?..”Q这里的会话一词用的就是其本义Q是指从一个浏览器H口打开到关闭这个期?①。最混ؕ的是“用户Q客LQ在一ơ会话期?#8221;q样一句话Q它可能指用L一pd动作Q一般情况下是同某个具体目的相关的一pd动作Q比如从d到选购商品到结账登样一个网上购物的q程Q有时候也被称Z个transactionQ,然而有时候也可能仅仅是指一ơ连接,也有可能是指含义①,其中的差别只能靠上下文来推断②?/p>

然而当session一词与|络协议相关联时Q它又往往隐含?#8220;面向q接”??#8220;保持状?#8221;q样两个含义Q?“面向q接”指的是在通信双方在通信之前要先建立一个通信的渠道,比如打电话,直到Ҏ接了电话通信才能开始,与此相对的是写信Q在你把信发出去的时候你q不能确认对方的地址是否正确Q通信渠道不一定能建立Q但对发信h来说Q通信已经开始了?#8220;保持状?#8221;则是指通信的一方能够把一pd的消息关联v来,使得消息之间可以互相依赖Q比如一个服务员能够认出再次光的老顾客ƈ且记得上ơ这个顾客还Ơ店里一块钱。这一cȝ例子?#8220;一个TCP session”或?“一个POP3 session”③?/p>

而到了web服务器蓬勃发展的时代Qsession在web开发语境下的语义又有了新的扩展Q它的含义是指一cȝ来在客户端与服务器之间保持状态的解决Ҏ④。有时候session也用来指q种解决Ҏ的存储结构,?#8220;把xxx保存在session ?#8221;⑤。由于各U用于web开发的语言在一定程度上都提供了对这U解x案的支持Q所以在某种特定语言的语境下Qsession也被用来指代该语a的解x案,比如l常把Java里提供的javax.servlet.http.HttpSessionUCؓsession⑥?/p>

鉴于q种混ؕ已不可改变,本文中session一词的q用也会Ҏ上下文有不同的含义,请大家注意分辨?br /> 在本文中Q用中?#8220;览器会话期?#8221;来表辑֐义①Q?#8220;session机制”来表辑֐义④Q?#8220;session”表达含义⑤,使用具体?#8220;HttpSession”来表辑֐义⑥

二、HTTP协议与状态保?br /> HTTP 协议本n是无状态的Q这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器h下蝲某些文gQ无论是客户端还是服务器都没有必要纪录彼此过ȝ行ؓQ每一ơ请求之间都是独立的Q好比一个顾客和一个自动售货机或者一个普通的Q非会员Ӟ大卖Z间的关系一栗?/p>

然而聪明(或者贪心?Q的Z很快发现如果能够提供一些按需生成的动态信息会使web变得更加有用Q就像给有线电视加上Ҏ功能一栗这U需求一斚wqHTML逐步d了表单、脚本、DOM{客L行ؓQ另一斚w在服务器端则出现了CGI规范以响应客L的动态请求,作ؓ传输载体的HTTP协议也添加了文g上蝲?cookieq些Ҏ。其中cookie的作用就是ؓ了解决HTTP协议无状态的~陷所作出的努力。至于后来出现的session机制则是又一U在客户端与服务器之间保持状态的解决Ҏ?/p>

让我们用几个例子来描qC下cookie和session机制之间的区别与联系。笔者曾l常ȝ一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠Q然而一ơ性消?杯咖啡的Z微乎其微Q这时就需要某U方式来U录某位֮的消Ҏ量。想象一下其实也无外乎下面的几种ҎQ?br /> 1、该店的店员很厉宻I能记住每位顾客的消费数量Q只要顾客一走进咖啡店,店员q道该怎么对待了。这U做法就是协议本w支持状态?br /> 2、发l顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每ơ消ҎQ如果顾客出C张卡片,则此ơ消费就会与以前或以后的消费相联pv来。这U做法就是在客户端保持状态?br /> 3、发l顾客一张会员卡Q除了卡号之外什么信息也不纪录,每次消费Ӟ如果֮出示该卡片,则店员在店里的纪录本上找到这个卡号对应的U录d一些消费信息。这U做法就是在服务器端保持状态?/p>

׃HTTP协议是无状态的Q而出于种U考虑也不希望使之成ؓ有状态的Q因此,后面两种Ҏ成为现实的选择。具体来说cookie机制采用的是在客L保持状态的ҎQ而session机制采用的是在服务器端保持状态的Ҏ。同时我们也看到Q由于采用服务器端保持状态的Ҏ在客L也需要保存一个标识,所以session机制可能需要借助于cookie机制来达C存标识的目的Q但实际上它q有其他选择?/p>

三、理解cookie机制
cookie机制的基本原理就如上面的例子一L单,但是q有几个问题需要解冻I“会员?#8221;如何分发Q?#8220;会员?#8221;的内容;以及客户如何使用“会员?#8221;?/p>

正统的cookie分发是通过扩展HTTP协议来实现的Q服务器通过在HTTP的响应头中加上一行特D的指示以提C浏览器按照指示生成相应的cookie。然而纯_的客户端脚本如JavaScript或者VBScript也可以生成cookie?/p>

而cookie 的用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器查所有存储的cookieQ如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置Q则把该cookie附在h资源的HTTPh头上发送给服务器。意思是麦当劳的会员卡只能在麦当劳的店里出示Q如果某家分店还发行了自q会员卡,那么q这家店的时候除了要出示麦当劳的会员卡,q要出示q家店的会员卡?/p>

cookie的内容主要包括:名字Q|q期旉Q\径和域?br /> 其中域可以指定某一个域比如.google.comQ相当于d招牌Q比如宝z公司,也可以指定一个域下的具体某台机器比如www.google.com或者froogle.google.comQ可以用飘柔来做比?br /> 路径是跟在域名后面的URL路径Q比?或?foo{等Q可以用某飘柔专柜做比?br /> 路径与域合在一起就构成了cookie的作用范围?br /> 如果不设|过期时_则表C个cookie的生命期为浏览器会话期间Q只要关闭浏览器H口Qcookie消׃。这U生命期为浏览器会话期的 cookie被称Z话cookie。会话cookie一般不存储在硬盘上而是保存在内存里Q当然这U行为ƈ不是规范规定的。如果设|了q期旉Q浏览器׃把cookie保存到硬盘上Q关闭后再次打开览器,q些cookie仍然有效直到过讑֮的过期时间?/p>

存储在硬盘上的cookie 可以在不同的览器进E间׃nQ比如两个IEH口。而对于保存在内存里的cookieQ不同的览器有不同的处理方式。对于IEQ在一个打开的窗口上?Ctrl-NQ或者从文g菜单Q打开的窗口可以与原窗口共享,而用其他方式新开的IEq程则不能共享已l打开的窗口的内存cookieQ对?Mozilla Firefox0.8Q所有的q程和标{N都可以共享同Lcookie。一般来说是用javascript的window.open打开的窗口会与原H口׃n内存cookie。浏览器对于会话cookie的这U只认cookie不认人的处理方式l常l采用session机制的web应用E序开发者造成很大的困扰?/p>

下面是一个goolge讄cookie的响应头的例?br /> HTTP/1.1 302 Found
Location: http://www.google.com/intl/zh-CN/
Set-Cookie: PREF=ID=0565f77e132de138:NW=1:TM=1098082649:LM=1098082649:S=KaeaCFPo49RiA_d8; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Content-Type: text/html

q是使用HTTPLookq个HTTP Sniffer软g来俘LHTTP通讯U录的一部分

览器在再次讉Kgoolge的资源时自动向外发送cookie

使用Firefox可以很容易的观察现有的cookie的?br /> 使用HTTPLook配合Firefox可以很容易的理解cookie的工作原理?/p>

IE也可以设|在接受cookie前询?/p>

q是一个询问接受cookie的对话框?/p>

四、理解session机制
session机制是一U服务器端的机制Q服务器使用一U类g散列表的l构Q也可能是使用散列表)来保存信息?/p>

当程序需要ؓ某个客户端的h创徏一个session的时候,服务器首先检查这个客L的请求里是否已包含了一个session标识 - UCؓ session idQ如果已包含一个session id则说明以前已lؓ此客L创徏qsessionQ服务器按照session id把这?session索出来用(如果索不刎ͼ可能会新Z个)Q如果客Lh不包含session idQ则为此客户端创Z个sessionq且生成一个与此session相关联的session idQsession id的值应该是一个既不会重复Q又不容易被扑ֈ规律以仿造的字符Ԍq个 session id被在本ơ响应中q回l客L保存?/p>

保存q个session id的方式可以采用cookieQ这样在交互q程中浏览器可以自动的按照规则把q个标识发挥l服务器。一般这个cookie的名字都是类gSEEESIONIDQ而。比如weblogic对于web应用E序生成的cookieQJSESSIONID= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764Q它的名字就?JSESSIONID?/p>

׃cookie可以被h为的止Q必L其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一U技术叫做URL重写Q就是把session id直接附加在URL路径的后面,附加方式也有两种Q一U是作ؓURL路径的附加信息,表现形式?a href="http://...../xxx;jsessionid">http://...../xxx;jsessionid= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
另一U是作ؓ查询字符串附加在URL后面Q表现Ş式ؓhttp://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
q两U方式对于用h说是没有区别的,只是服务器在解析的时候处理的方式不同Q采用第一U方式也有利于把session id的信息和正常E序参数区分开来?br /> Z在整个交互过E中始终保持状态,必d每个客户端可能请求的路径后面都包含这个session id?/p>

另一U技术叫做表单隐藏字Dc就是服务器会自动修改表单,d一个隐藏字D,以便在表单提交时能够把session id传递回服务器。比如下面的表单
<form name="testform" action="/xxx">
<input type="text">
</form>
在被传递给客户端之前将被改写成
<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">
<input type="text">
</form>
q种技术现在已较少应用Q笔者接触过的很古老的iPlanet6(SunONE应用服务器的前n)׃用了q种技术?br /> 实际上这U技术可以简单的用对action应用URL重写来代ѝ?/p>

在谈论session机制的时候,常常听到q样一U误?#8220;只要关闭览器,session消׃”。其实可以想象一下会员卡的例子,除非֮d对店家提出销卡,否则店家l对不会L删除֮的资料。对session来说也是一LQ除非程序通知服务器删除一个sessionQ否则服务器会一直保留,E序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会d在关闭之前通知服务器它要关闭Q因此服务器Ҏ不会有机会知道浏览器已经关闭Q之所以会有这U错觉,是大部分session机制都用会话cookie来保存session idQ而关闭浏览器后这?session id消׃Q再ơ连接服务器时也无法找到原来的session。如果服务器讄的cookie被保存到盘上,或者用某U手D|写浏览器发出的HTTPh_把原来的session id发送给服务器,则再ơ打开览器仍然能够找到原来的session?/p>

恰恰是由于关闭浏览器不会Dsession被删除,q服务器ؓseesion讄了一个失效时_当距dL上一ơ用session的时间超q这个失效时间时Q服务器可以认为客L已经停止了活动,才会把session删除以节省存储空间?/p>

五、理解javax.servlet.http.HttpSession
HttpSession是Javaq_对session机制的实现规范,因ؓ它仅仅是个接口,具体到每个web应用服务器的提供商,除了对规范支持之外,仍然会有一些规范里没有规定的细微差异。这里我们以BEA的Weblogic Server8.1作ؓ例子来演C?/p>

首先QWeblogic Server提供了一pd的参数来控制它的HttpSession的实玎ͼ包括使用cookie的开关选项Q用URL重写的开关选项Qsession持久化的讄Qsession失效旉的设|,以及针对cookie的各U设|,比如讄cookie的名字、\径、域Q?cookie的生存时间等?/p>

一般情况下Qsession都是存储在内存里Q当服务器进E被停止或者重启的时候,内存里的session也会被清I,如果讄了session的持久化Ҏ,服务器就会把session保存到硬盘上Q当服务器进E重新启动或q些信息能够被再次使用Q?Weblogic Server支持的持久性方式包括文件、数据库、客Lcookie保存和复制?/p>

复制严格说来不算持久化保存,因ؓsession实际上还是保存在内存里,不过同样的信息被复制到各个cluster内的服务器进E中Q这样即使某个服务器q程停止工作也仍然可以从其他q程中取得session?/p>

cookie生存旉的设|则会媄响浏览器生成的cookie是否是一个会话cookie。默认是使用会话cookie。有兴趣的可以用它来试验我们在第四节里提到的那个误解?/p>

cookie的\径对于web应用E序来说是一个非帔R要的选项QWeblogic Server对这个选项的默认处理方式得它与其他服务器有明昄区别。后面我们会专题讨论?/p>

关于session的设|参考[5] http://e-docs.bea.com/wls/docs70/webapp/weblogic_xml.html#1036869

六、HttpSession常见问题
Q在本小节中session的含义ؓ⑤和⑥的混合Q?/p>


1、session在何时被创徏
一个常见的误解是以为session在有客户端访问时p创徏Q然而事实是直到某server端程序调?HttpServletRequest.getSession(true)q样的语句时才被创徏Q注意如果JSP没有昄的?<% @page session="false"%> 关闭sessionQ则JSP文g在编译成Servlet时将会自动加上这样一条语?HttpSession session = HttpServletRequest.getSession(true);q也是JSP中隐含的 session对象的来历?/p>

׃session会消耗内存资源,因此Q如果不打算使用sessionQ应该在所有的JSP中关闭它?/p>

2、session何时被删?br /> l合前面的讨论,session在下列情况下被删除a.E序调用HttpSession.invalidate();或b.距离上一ơ收到客L发送的session id旉间隔过了session的超时设|?或c.服务器进E被停止Q非持久sessionQ?/p>

3、如何做到在览器关闭时删除session
严格的讲Q做不到q一炏V可以做一点努力的办法是在所有的客户端页面里使用javascript代码window.oncolose来监视浏览器的关闭动作,然后向服务器发送一个请求来删除session。但是对于浏览器崩溃或者强行杀死进E这些非常规手段仍然无能为力?/p>

4、有个HttpSessionListener是怎么回事
你可以创Llistenerȝ控session的创建和销毁事Ӟ使得在发生这L事g时你可以做一些相应的工作。注意是session的创建和销毁动作触发listenerQ而不是相反。类似的与HttpSession有关的listenerq有 HttpSessionBindingListenerQHttpSessionActivationListener?HttpSessionAttributeListener?/p>

5、存攑֜session中的对象必须是可序列化的?br /> 不是必需的。要求对象可序列化只是ؓ了session能够在集中被复制或者能够持久保存或者在必要时server能够暂时把session交换出内存。在 Weblogic Server的session中放|一个不可序列化的对象在控制C会收C个警告。我所用过的某个iPlanet版本如果 session中有不可序列化的对象Q在session销毁时会有一个ExceptionQ很奇怪?/p>

6、如何才能正的应付客户端禁止cookie的可能?br /> Ҏ有的URL使用URL重写Q包括超链接Qform的actionQ和重定向的URLQ具体做法参见[6]
http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770

7、开两个览器窗口访问应用程序会使用同一个sessionq是不同的session
参见W三节对cookie的讨论,对session来说是只认id不认人,因此不同的浏览器Q不同的H口打开方式以及不同的cookie存储方式都会对这个问题的{案有媄响?/p>

8、如何防止用h开两个览器窗口操作导致的session混ؕ
q个问题与防止表单多ơ提交是cM的,可以通过讄客户端的令牌来解冟뀂就是在服务器每ơ生成一个不同的idq回l客LQ同时保存在session里,客户端提交表单时必须把这个id也返回服务器Q程序首先比较返回的id与保存在session里的值是否一_如果不一致则说明本次操作已经被提交过了。可以参看《J2EE核心模式》关于表C层模式的部分。需要注意的是对于用javascript window.open打开的窗口,一般不讄q个idQ或者用单独的idQ以防主H口无法操作Q徏议不要再window.open打开的窗口里做修Ҏ作,q样可以不用设|?/p>

9、ؓ什么在Weblogic Server中改变session的值后要重新调用一ơsession.setValue
做这个动作主要是Z在集环境中提示Weblogic Server session中的值发生了改变Q需要向其他服务器进E复制新的session倹{?/p>

10、ؓ什么session不见?br /> 排除session正常失效的因素之外,服务器本w的可能性应该是微乎其微的,虽然W者在iPlanet6SP1加若q补丁的Solaris版本上倒也遇到q;览器插件的可能性次之,W者也遇到q?721插g造成的问题;理论上防火墙或者代理服务器在cookie处理上也有可能会出现问题?br /> 出现q一问题的大部分原因都是E序的错误,最常见的就是在一个应用程序中去访问另外一个应用程序。我们在下一节讨个问题?/p>

七、跨应用E序的session׃n

常常有这L情况Q一个大目被分割成若干项目开发,Z能够互不q扰Q要求每个小目作ؓ一个单独的web应用E序开发,可是C最后突然发现某几个项目之间需要共享一些信息,或者想使用session来实现SSO(single sign on)Q在session中保存login的用户信息,最自然的要求是应用E序间能够访问彼此的session?/p>

然而按照Servlet规范Qsession的作用范围应该仅仅限于当前应用程序下Q不同的应用E序之间是不能够互相讉KҎ的session的。各个应用服务器从实际效果上都遵守了q一规范Q但是实现的l节却可能各有不同,因此解决跨应用程序session׃n的方法也各不相同?/p>

首先来看一下Tomcat是如何实现web应用E序之间session的隔ȝQ从 Tomcat讄的cookie路径来看Q它对不同的应用E序讄的cookie路径是不同的Q这样不同的应用E序所用的session id是不同的Q因此即使在同一个浏览器H口里访问不同的应用E序Q发送给服务器的session id也可以是不同的?/p>

Ҏq个Ҏ,我们可以推测Tomcat中session的内存结构大致如下?/p>

W者以前用q的iPlanet也采用的是同L方式Q估计SunONE与iPlanet之间不会有太大的差别。对于这U方式的服务器,解决的思\很简单,实际实行h也不难。要么让所有的应用E序׃n一个session idQ要么让应用E序能够获得其他应用E序的session id?/p>

iPlanet中有一U很单的Ҏ来实现共享一个session idQ那是把各个应用程序的cookie路径都设?Q实际上应该?NASAppQ对于应用程序来讲它的作用相当于根)?br /> <session-info>
<path>/NASApp</path>
</session-info>

需要注意的是,操作׃n的session应该遵@一些编E约定,比如在session attribute名字的前面加上应用程序的前缀Q?setAttribute("name", "neo")变成setAttribute("app1.name", "neo")Q以防止命名I间冲突Q导致互相覆盖?/p>


在Tomcat中则没有q么方便的选择。在Tomcat版本3上,我们q可以有一些手D|׃nsession。对于版?以上的TomcatQ目前笔者尚未发现简单的办法。只能借助于第三方的力量,比如使用文g、数据库、JMS或者客LcookieQURL参数或者隐藏字D늭手段?/p>

我们再看一下Weblogic Server是如何处理session的?nbsp;

从截屏画面上可以看到Weblogic ServerҎ有的应用E序讄的cookie的\径都?Q这是不是意味着在Weblogic Server中默认的可以共享session了呢Q然而一个小实验卛_证明即不同的应用程序用的是同一个sessionQ各个应用程序仍然只能访问自己所讄的那些属性。这说明Weblogic Server中的session的内存结构可能如?/p>

对于q样一U结构,?session机制本n上来解决session׃n的问题应该是不可能的了。除了借助于第三方的力量,比如使用文g、数据库、JMS或者客L cookieQURL参数或者隐藏字D늭手段Q还有一U较为方便的做法Q就是把一个应用程序的session攑ֈServletContext中,q样另外一个应用程序就可以从ServletContext中取得前一个应用程序的引用。示例代码如下,

应用E序A
context.setAttribute("appA", session);

应用E序B
contextA = context.getContext("/appA");
HttpSession sessionA = (HttpSession)contextA.getAttribute("appA");

值得注意的是q种用法不可ULQ因为根据ServletContext的JavaDocQ应用服务器可以处于安全的原因对于context.getContext("/appA");q回I|以上做法在Weblogic Server 8.1中通过?/p>

那么Weblogic ServerZ么要把所有的应用E序的cookie路径都设?呢?原来是ؓ了SSOQ凡是共享这个session的应用程序都可以׃n认证的信息。一个简单的实验可以证明这一点,修改首先d的那个应用程序的描述Wweblogic.xmlQ把cookie路径修改?appA 讉K另外一个应用程序会重新要求dQ即使是反过来,先访问cookie路径?的应用程序,再访问修改过路径的这个,虽然不再提示dQ但是登录的用户信息也会丢失。注意做q个实验时认证方式应该用FORMQ因为浏览器和web服务器对basic认证方式有其他的处理方式Q第二次h的认证不是通过 session来实现的。具体请参看[7] secion 14.8 AuthorizationQ你可以修改所附的CZE序来做q些试验?/p>

八、ȝ
session机制本nq不复杂Q然而其实现和配|上的灵zL却使得具体情况复杂多变。这也要求我们不能把仅仅某一ơ的l验或者某一个浏览器Q服务器的经验当作普遍适用的经验,而是始终需要具体情况具体分析?br /> 摘要Q虽然session机制在web应用E序中被采用已经很长旉了,但是仍然有很多h不清楚session机制的本质,以至不能正确的应用这一技术。本文将详细讨论session的工作机制ƈ且对在Java web application中应用session机制时常见的问题作出解答?/p>

 



George Gong 2007-10-29 13:15 发表评论
]]>
dwr的json回调详解 (?http://www.tkk7.com/gentoo1439/archive/2007/10/26/156035.htmlGeorge GongGeorge GongFri, 26 Oct 2007 02:14:00 GMThttp://www.tkk7.com/gentoo1439/archive/2007/10/26/156035.htmlhttp://www.tkk7.com/gentoo1439/comments/156035.htmlhttp://www.tkk7.com/gentoo1439/archive/2007/10/26/156035.html#Feedback0http://www.tkk7.com/gentoo1439/comments/commentRss/156035.htmlhttp://www.tkk7.com/gentoo1439/services/trackbacks/156035.htmlhttp://llying.javaeye.com/blog/129897

function sendMessage()
{
 //获取name文本框的?br />  var name = document.getElementById("name").value;
 //使用json格式调用q程javaҎ
 hello.hello(name,
 {
  //指定回调函数
  callback:cb,

  //指定时旉
  timeout:5000,

  //指定错误处理函数Q对于dwr1.xQ如果服务端发生异常Q该函数被激发;从dwr2.0开始,服务端异常激发exceptionHandler函数?br />   errorHandler:function(message){alert("Oops: " + message);},
  
  //当因为浏览器bug引v的问题激发此函数Q该选项只有dwr2.0才支持?br />   warningHandler:function(message){alert("Oops: " + message);},

  //当服务器响应不是正确的text/html|Q激发该函数。通常Q超时也会激发该函数?br />   textHtmlHandler:function(message){alert("Oops: " + message);},

  //q程调用p|后激发该函数。通常服务器端处理异常或者数据{换异常时会激发该函数?br />   exceptionHandler:function(message){alert("Oops: " + message);},

  //指定发送请求的ҎQ分别是GETh和POSTh?br />   httpMethod:'POST',

  //指定是否发送异步请求。默认值trueQ即使用异步h。通常不用同步请求?br />   async:true,

  //指定q程调用方式Q三个值DWREngine.XMLHttpRequest,DWREngine.Iframe,DWREngine.ScriptTag,分别使用XMLHttpRequestQIframeQScriptTagQ默认ؓXMLHttpRequest方式
  rpcType:DWREngine.XMLHttpRequest,
  
  //指定一个Hook函数Q该函数在远E调用之前被Ȁ发?br />   preHook:function(){alert('q程调用之前.....')},

  //指定一个Hook函数Q该函数在远E调用之后被Ȁ发?br />   postHook:function(){alert('q程调用之后.....')}
 });
//回调函数
function cb(data)
{
 document.getElementById("show").innerHTML = data;
}

DWREngine.setOrdered(boolean)ҎQtrue,严格限制响应序Q默认falseQ?br /> DWREngine.setTimeout(5000)ҎQ设|全局响应旉
DWREngine.setPreHook(preFun);
DWREngine.setPostHook(postFun);



George Gong 2007-10-26 10:14 发表评论
]]>
CXF2.0 试 。。?/title><link>http://www.tkk7.com/gentoo1439/archive/2007/09/21/147135.html</link><dc:creator>George Gong</dc:creator><author>George Gong</author><pubDate>Fri, 21 Sep 2007 07:55:00 GMT</pubDate><guid>http://www.tkk7.com/gentoo1439/archive/2007/09/21/147135.html</guid><wfw:comment>http://www.tkk7.com/gentoo1439/comments/147135.html</wfw:comment><comments>http://www.tkk7.com/gentoo1439/archive/2007/09/21/147135.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/gentoo1439/comments/commentRss/147135.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gentoo1439/services/trackbacks/147135.html</trackback:ping><description><![CDATA[<p>        ׃目需要用到Web ServiceQ就采用了越来越火的CXF2.0。d感觉是CXF2.0毕竟q是在Apache的孵化器中孕Ԍq没有成熟,有很多不完善的地斏V项目中采用CXF与Spring合用Q比较简单,CXF本n的配|文件就是Spring配置文gQ所以集成v来比较方ѝCXF也提供了很多Sample?br /> <br />         在开发中q是出现了一些问题,其中CXF用到了geronimo-javamail_1.4_spec-1.0-M1.jar (or Sun's JavaMail jar)<br /> Q官方说可以用JavaMail.jar替换Q但是根本不行,因ؓgeronimo-javamail_1.4_spec-1.0-M1.jar不仅仅是Mail相关的ClassQ还有别的Class。不仅如此,此jarq与JavaMail1.4.jar冲突Q由于我们项目中采用JavaMail-1.4.jar发邮Ӟ目中同时引用了q两个jarQ在junit中测试OKQ但在Tomcat启动后就出现错误了,仔细跟踪Q发CU方式中发短信分别用Cq两个jarQ在junit中用的是javamail-1.4.jarQ没有问题。在tomcat中发邮g是用到的是geronimo-javamail_1.4_spec-1.0-M1.jar Q二两者实现的不同Q根本不像CXF所说的可以替换Q而且geronimo-javamail_1.4_spec-1.0-M1.jar 中实现发邮g的机制跟javamailq有不同Q仔l跟t,发现问题出现在Session中,<br /> geronimo的javax.mail.Session中用C属性文Ӟ它会把用戯|的发短信的host改ؓlocalhostQ这样就会出现connect异常。最后把geronimo中的javax.mail中的所有class删掉Q测试发现发邮g和CXF Web Service 都OK?br /> 另外QWeb Service 的安全采用了密钥公钥机制Q用keytool制作了钥匙,在CXF Web Service 以及q程讉K的Client中分别放|了jks文g?br /> </p> <img src ="http://www.tkk7.com/gentoo1439/aggbug/147135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gentoo1439/" target="_blank">George Gong</a> 2007-09-21 15:55 <a href="http://www.tkk7.com/gentoo1439/archive/2007/09/21/147135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse中用svn(subclipse插g)出现错误Qsubversion1.4.4与subclipse1.2.4在一起发生冲H?/title><link>http://www.tkk7.com/gentoo1439/archive/2007/09/04/142674.html</link><dc:creator>George Gong</dc:creator><author>George Gong</author><pubDate>Tue, 04 Sep 2007 08:43:00 GMT</pubDate><guid>http://www.tkk7.com/gentoo1439/archive/2007/09/04/142674.html</guid><wfw:comment>http://www.tkk7.com/gentoo1439/comments/142674.html</wfw:comment><comments>http://www.tkk7.com/gentoo1439/archive/2007/09/04/142674.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/gentoo1439/comments/commentRss/142674.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gentoo1439/services/trackbacks/142674.html</trackback:ping><description><![CDATA[<p>在跟svn资源库连接是eclipse非法关闭QJDK是BEA JRockit(R) R27.3.1-1-85830-1.5.0_11-20070716-1248-windows-ia32。日志如下:<br /> </p> <p>===== BEGIN DUMP =============================================================<br /> JRockit dump produced after 0 days, 00:01:14 on Tue Sep 04 15:48:05 2007</p> <p>Additional information is available in:<br />   I:\eclipse\jrockit.3124.dump<br />   I:\eclipse\jrockit.3124.mdmp<br /> If you see this dump, please open a support case with BEA and<br /> supply as much information as you can on your system setup and<br /> the program you were running. You can also search for solutions<br /> to your problem at http://forums.bea.com in<br /> the forum jrockit.developer.interest.general.</p> <p>Error Message: Illegal memory access. [54]<br /> Exception Rec: EXCEPTION_ACCESS_VIOLATION (c0000005) at 0x066A7C0C - memory at 0x00000000 could not be read.<br /> Minidump     : Wrote mdmp. Size is 183MB<br /> SafeDllMode  : -1<br /> Version      : BEA JRockit(R) R27.3.1-1-85830-1.5.0_11-20070716-1248-windows-ia32<br /> GC Strategy  : Mode: throughput. Currently using strategy: genparpar<br /> GC Status    : OC is not running. Last finished OC was OC#1.<br />              : YC is not running. Last finished YC was YC#2.<br /> OC History   : Strategy genparpar was used for OC#1.<br /> YC History   : Ran 2 YCs before OC#1.<br />              : Ran 0 YCs since last OC.<br /> Heap         : 0x10100000 - 0x14100000<br /> Compaction   : 0x13D00000 - 0x14100000<br /> NurseryList  : 0x10106158 - 0x12706A28<br /> KeepArea     : 0x110FFFF0 - 0x118FFFE8<br /> NurseryMarker: [ 0x118FFFE8,  0x11DF6FD0 ]<br /> CompRefs     : References are 32-bit.<br /> CPU          : Intel Pentium 4 (HT) SSE SSE2 SSE3 NetBurst EM64T<br /> Number CPUs  : 2<br /> Tot Phys Mem : 1006047232 (959 MB)<br /> OS version   : Microsoft Windows Server 2003 version 5.2 Service Pack 1 (Build 3790) (32-bit)<br /> Thread System: Windows Threads<br /> State        : JVM is running<br /> Command Line : -Xmx512M <br /> java.home    : C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11\jre<br /> j.class.path : I:\eclipse\plugins\org.eclipse.equinox.launcher_1.0.0.v20070606.jar<br /> j.lib.path   : I:\eclipse;.;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11\bin\..\jre\bin\jrockit;C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11\bin\..\jre\bin;C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11\bin;D:\oracle\ora92\bin;C:\Program Files\Oracle\jre\1.3.1\bin;C:\Program Files\Oracle\jre\1.1.8\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Microsoft SQL Server\80\Tools\BINN;C:\apache-ant-1.7.0\bin;C:\maven-2.0.7\bin;D:\maven-1.0.2\bin;C:\svn-win32-1.4.4\bin;C:\Program Files\QuickTime\QTSystem\<br /> JAVA_HOME    : C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11<br /> _JAVA_OPTIONS: <not set><br /> PATH         : C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11\bin\..\jre\bin\jrockit;C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11\bin\..\jre\bin;C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11\bin;D:\oracle\ora92\bin;C:\Program Files\Oracle\jre\1.3.1\bin;C:\Program Files\Oracle\jre\1.1.8\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Microsoft SQL Server\80\Tools\BINN;C:\apache-ant-1.7.0\bin;C:\maven-2.0.7\bin;D:\maven-1.0.2\bin;C:\svn-win32-1.4.4\bin;C:\Program Files\QuickTime\QTSystem\<br /> C Heap       : Good; no memory allocations have failed<br /> StackOverFlow: 0 StackOverFlowErrors have occured<br /> OutOfMemory  : 0 OutOfMemoryErrors have occured</p> <p>Registers (from ThreadContext: 0x066872B0 / OS context: 0x06687AB8):<br />    eax = 0207f508    ecx = 00000000    edx = 00000000    ebx = 00000000 <br />    esp = 06687d84    ebp = 06687d90    esi = 008fc980    edi = 00000000 <br />     es = 00000023     cs = 0000001b     ss = 00000023     ds = 00000023 <br />     fs = 0000003b     gs = 00000000 <br />    eip = 066a7c0c eflags = 00010246 </p> <p>Stack:<br /> (* marks the word pointed to by the stack pointer)<br /> 06687d84: 00000000* 008fc980  0207f508  06689dbc  06691f32  06689db8  <br /> 06687d9c: 0207f508  00000000  00000000  00000000  008fc980  0207f508  <br /> 06687db4: 00000000  0207f508  00000000  0207f508  0207f5a8  6eec84f1  <br /> 06687dcc: 0207f508  00000010  6ee40000  6eec11f2  0207f508  0207f5a8  </p> <p>Code:<br /> (* marks the word pointed to by the instruction pointer)<br /> 066a7bdc: 850c458b  8b0b75c0  6bd6e80d  0c4d8906  4d8bc18b  75c98510  <br /> 066a7bf4: 74c0850a  20508b06  53105589  56145d8b  75db8557  18588b03  <br /> 066a7c0c: 01bf038b* 3b000000  19820fc7  8b000001  c0850c43  e8500674  <br /> 066a7c24: fffff168  8b18738b  18438d0b  f685d78b  d13b0f75  708b0b73  </p> <p>Loaded modules:<br /> (* denotes the module causing the exception)<br /> 00400000-0040cfff  I:\eclipse\eclipse.exe<br /> 7c930000-7c9fffff  C:\WINDOWS\system32\ntdll.dll<br /> 7c800000-7c92afff  C:\WINDOWS\system32\kernel32.dll<br /> 77e10000-77ea0fff  C:\WINDOWS\system32\USER32.dll<br /> 77bd0000-77c18fff  C:\WINDOWS\system32\GDI32.dll<br /> 77f30000-77fdbfff  C:\WINDOWS\system32\ADVAPI32.dll<br /> 77c20000-77cbefff  C:\WINDOWS\system32\RPCRT4.dll<br /> 77370000-77406fff  C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_5.82.3790.2778_x-ww_497C098C\COMCTL32.dll<br /> 77b70000-77bc9fff  C:\WINDOWS\system32\MSVCRT.dll<br /> 76180000-7619cfff  C:\WINDOWS\system32\IMM32.DLL<br /> 63090000-63098fff  C:\WINDOWS\system32\LPK.DLL<br /> 74ae0000-74b40fff  C:\WINDOWS\system32\USP10.dll<br /> 10000000-10010fff  I:\eclipse\plugins\org.eclipse.equinox.launcher.win32.win32.x86_1.0.0.v20070523\eclipse_1017a.dll<br /> 77b60000-77b67fff  C:\WINDOWS\system32\VERSION.dll<br /> 71ad0000-71b04fff  C:\WINDOWS\system32\uxtheme.dll<br /> 4b210000-4b260fff  C:\WINDOWS\system32\MSCTF.dll<br /> 75d60000-75d86fff  C:\WINDOWS\system32\apphelp.dll<br /> 4c510000-4c53dfff  C:\WINDOWS\system32\msctfime.ime<br /> 774b0000-775e3fff  C:\WINDOWS\system32\ole32.dll<br /> 00b00000-00d91fff  C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11\jre\bin\jrockit\jvm.dll<br /> 769e0000-76a09fff  C:\WINDOWS\system32\WINMM.dll<br /> 71b60000-71b76fff  C:\WINDOWS\system32\WS2_32.dll<br /> 71b50000-71b57fff  C:\WINDOWS\system32\WS2HELP.dll<br /> 7c340000-7c395fff  C:\WINDOWS\system32\MSVCR71.dll<br /> 76eb0000-76ec2fff  C:\WINDOWS\system32\Secur32.dll<br /> 6d710000-6d71bfff  C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11\jre\bin\verify.dll<br /> 6d380000-6d39cfff  C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11\jre\bin\java.dll<br /> 6d300000-6d307fff  C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11\jre\bin\hpi.dll<br /> 6d730000-6d73efff  C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11\jre\bin\zip.dll<br /> 6d540000-6d552fff  C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11\jre\bin\net.dll<br /> 71a80000-71abffff  C:\WINDOWS\system32\mswsock.dll<br /> 69660000-696b5fff  C:\WINDOWS\system32\hnetcfg.dll<br /> 71a40000-71a47fff  C:\WINDOWS\System32\wshtcpip.dll<br /> 6d560000-6d568fff  C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11\jre\bin\nio.dll<br /> 76ab0000-76abafff  C:\WINDOWS\system32\psapi.dll<br /> 02d60000-02daefff  I:\eclipse\configuration\org.eclipse.osgi\bundles\13\1\.cp\swt-win32-3346.dll<br /> 77cd0000-77dd2fff  C:\WINDOWS\WinSxS\X86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.2778_x-ww_A8F04F11\COMCTL32.dll<br /> 77eb0000-77f01fff  C:\WINDOWS\system32\SHLWAPI.dll<br /> 761a0000-761e7fff  C:\WINDOWS\system32\comdlg32.dll<br /> 02dc0000-035a0fff  C:\WINDOWS\system32\SHELL32.dll<br /> 775f0000-7767bfff  C:\WINDOWS\system32\OLEAUT32.dll<br /> 779e0000-77a83fff  C:\WINDOWS\system32\WININET.dll<br /> 035b0000-03640fff  C:\WINDOWS\system32\CRYPT32.dll<br /> 03650000-03661fff  C:\WINDOWS\system32\MSASN1.dll<br /> 749c0000-749eefff  C:\WINDOWS\system32\oleacc.dll<br /> 780c0000-78120fff  C:\WINDOWS\system32\MSVCP60.dll<br /> 04cf0000-04d03fff  I:\eclipse\configuration\org.eclipse.osgi\bundles\13\1\.cp\swt-gdip-win32-3346.dll<br /> 4c620000-4c7c6fff  C:\WINDOWS\WinSxS\x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.3790.1830_x-ww_24C40C58\gdiplus.dll<br /> 04fc0000-05508fff  C:\WINDOWS\system32\xpsp2res.dll<br /> 003d0000-003d4fff  C:\WINDOWS\system32\msimg32.dll<br /> 6eec0000-6eee0fff  I:\eclipse\plugins\org.tigris.subversion.javahl.win32_1.2.4\libapr.dll<br /> 6ee50000-6ee58fff  I:\eclipse\plugins\org.tigris.subversion.javahl.win32_1.2.4\libapriconv.dll<br /> 05b10000-05c17fff  I:\eclipse\plugins\org.tigris.subversion.javahl.win32_1.2.4\libeay32.dll<br /> 01c60000-01c6afff  C:\WINDOWS\system32\WSOCK32.dll<br /> 05c20000-05ce3fff  I:\eclipse\plugins\org.tigris.subversion.javahl.win32_1.2.4\libdb44.dll<br /> 05cf0000-05d20fff  I:\eclipse\plugins\org.tigris.subversion.javahl.win32_1.2.4\ssleay32.dll<br /> 6ee60000-6ee88fff  I:\eclipse\plugins\org.tigris.subversion.javahl.win32_1.2.4\libaprutil.dll<br /> 03a80000-03a91fff  I:\eclipse\plugins\org.tigris.subversion.javahl.win32_1.2.4\intl3_svn.dll<br /> 05d30000-05e38fff  I:\eclipse\plugins\org.tigris.subversion.javahl.win32_1.2.4\libsvnjavahl-1.dll<br /> 76610000-76618fff  C:\WINDOWS\system32\SHFOLDER.dll<br /> 05e70000-0603ffff  C:\WINDOWS\system32\UNISPIM5.IME<br /> <span style="color: red">6ee40000-6ee44fff  C:\svn-win32-1.4.4\iconv\_tbl_simple.so<br /> 06690000-06698fff  C:\svn-win32-1.4.4\bin\libapriconv-1.dll<br /> 066a0000-066bffff *C:\svn-win32-1.4.4\bin\libapr-1.dll<br /> </span>066c0000-067d2fff  C:\Program Files\Java\jrockit-R27.3.1-jdk1.5.0_11\jre\bin\dbghelp.dll</p> <p><br /> "ModalContext" id=23 idx=0x58 tid=2184 lastJavaFrame=0x0668EAC4</p> <p>Stack 0: start=0x06590000, end=0x06690000, guards=0x06593000 (ok), forbidden=0x06591000<br /> Thread Stack Trace:<br />     at _apr_pool_create_ex@16+60()@0x066A7C0C<br />     at apr_iconv_mod_load+434()@0x06691F32<br />     at apr_iconv_mod_load+36()@0x06691DA4<br />     at apr_iconv_mod_load+316()@0x6EE51EFC<br />     -- Java stack --<br />     at org/tigris/subversion/javahl/SVNClient.info2(Ljava/lang/String;Lorg/tigris/subversion/javahl/Revision;Lorg/tigris/subversion/javahl/Revision;Z)[Lorg/tigris/subversion/javahl/Info2;(Native Method)<br />     at org/tigris/subversion/svnclientadapter/javahl/AbstractJhlClientAdapter.getInfo(AbstractJhlClientAdapter.java:1513)<br />     at org/tigris/subversion/svnclientadapter/AbstractClientAdapter.getInfo(AbstractClientAdapter.java:225)<br />     at org/tigris/subversion/subclipse/core/repo/SVNRepositoryLocation.validateConnection(SVNRepositoryLocation.java:407)<br />     at org/tigris/subversion/subclipse/ui/wizards/NewLocationWizard$1.run(NewLocationWizard.java:83)<br />     at org/eclipse/jface/operation/ModalContext$ModalContextThread.run(ModalContext.java:113)<br />     at jrockit/vm/RNI.c2java(IIIII)V(Native Method)<br />     -- end of trace</p> <p>Additional information is available in:<br />   I:\eclipse\jrockit.3124.dump<br />   I:\eclipse\jrockit.3124.mdmp<br /> If you see this dump, please open a support case with BEA and<br /> supply as much information as you can on your system setup and<br /> the program you were running. You can also search for solutions<br /> to your problem at http://forums.bea.com in<br /> the forum jrockit.developer.interest.general.<br /> ===== END DUMP ===============================================================</p> <p>׃面的U色字可以看出,eclipse的subclipse插g在运行时调用了C盘下的subversion中的dll文gQ故产生内容溢出的问题。这个现象不太容易出玎ͼ因ؓSVN服务器一般都在别的机器上。但发生q种情况q是很诡异,NSVN的开发者没有出现过cM问题么?SVN版本?.4.4Qsubclipse插g?.2.4Q不记得以前的版本是否也存在q样的冲H?br />  </p> <p><br />  </p> <img src ="http://www.tkk7.com/gentoo1439/aggbug/142674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gentoo1439/" target="_blank">George Gong</a> 2007-09-04 16:43 <a href="http://www.tkk7.com/gentoo1439/archive/2007/09/04/142674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Setting Up a Maven Repository (?http://www.tkk7.com/gentoo1439/archive/2007/08/25/139208.htmlGeorge GongGeorge GongFri, 24 Aug 2007 17:28:00 GMThttp://www.tkk7.com/gentoo1439/archive/2007/08/25/139208.htmlhttp://www.tkk7.com/gentoo1439/comments/139208.htmlhttp://www.tkk7.com/gentoo1439/archive/2007/08/25/139208.html#Feedback0http://www.tkk7.com/gentoo1439/comments/commentRss/139208.htmlhttp://www.tkk7.com/gentoo1439/services/trackbacks/139208.html阅读全文

George Gong 2007-08-25 01:28 发表评论
]]>
jfreechart 柱型囑ֺ?/title><link>http://www.tkk7.com/gentoo1439/archive/2007/07/23/131823.html</link><dc:creator>George Gong</dc:creator><author>George Gong</author><pubDate>Mon, 23 Jul 2007 02:47:00 GMT</pubDate><guid>http://www.tkk7.com/gentoo1439/archive/2007/07/23/131823.html</guid><wfw:comment>http://www.tkk7.com/gentoo1439/comments/131823.html</wfw:comment><comments>http://www.tkk7.com/gentoo1439/archive/2007/07/23/131823.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/gentoo1439/comments/commentRss/131823.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gentoo1439/services/trackbacks/131823.html</trackback:ping><description><![CDATA[<p>以下代码用到了大多数ҎQ附有注释)Q?br></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 id=Codehighlighter1_127_5031_Open_Image onclick="this.style.display='none'; Codehighlighter1_127_5031_Open_Text.style.display='none'; Codehighlighter1_127_5031_Closed_Image.style.display='inline'; Codehighlighter1_127_5031_Closed_Text.style.display='inline';" src="http://www.tkk7.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_127_5031_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_127_5031_Closed_Text.style.display='none'; Codehighlighter1_127_5031_Open_Image.style.display='inline'; Codehighlighter1_127_5031_Open_Text.style.display='inline';" src="http://www.tkk7.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String createBarChart(String[] series,String[] categories,</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">[][] data,HttpSession session,PrintWriter printWriter)</span><span id=Codehighlighter1_127_5031_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.tkk7.com/Images/dot.gif"></span><span id=Codehighlighter1_127_5031_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>         <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       CategoryDataset dataset </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> DatasetUtilities.createCategoryDataset(series, categories, data);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>  <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>    JFreeChart chart </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ChartFactory.createBarChart3D(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">预算l计?/span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">预算U目</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">实际执行?/span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>             dataset,PlotOrientation.VERTICAL,</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       chart.setBackgroundPaint(Color.WHITE);   </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讑֮背景色ؓ白色</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       CategoryPlot categoryPlot </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> chart.getCategoryPlot();  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获得 plotQCategoryPlotQ!</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       categoryPlot.setBackgroundPaint(Color.lightGray); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讑֮图表数据昄部分背景?/span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       categoryPlot.setDomainGridlinePaint(Color.white); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">横坐标网格线白色</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       categoryPlot.setDomainGridlinesVisible(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">可见</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       categoryPlot.setRangeGridlinePaint(Color.white); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">U坐标网格线白色</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">     <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       CategoryAxis domainAxis </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> categoryPlot.getDomainAxis();<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄 categoryAxis 垂直昄</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">     domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(</span><span style="COLOR: #000000">0.4</span><span style="COLOR: #000000">));<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>     <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>     </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄哼坐标u的标题字?此处?#8220;预算U目”</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">        domainAxis.setLabelFont(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Font(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SansSerif</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,Font.PLAIN,</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">));<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄距离囄左端距离,参数为图片的癑ֈ?/span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       domainAxis.setLowerMargin(</span><span style="COLOR: #000000">0.05</span><span style="COLOR: #000000">);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄距离囄右端距离</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       domainAxis.setUpperMargin(</span><span style="COLOR: #000000">0.05</span><span style="COLOR: #000000">);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>           <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄横坐标的坐标值的字体</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       domainAxis.setTickLabelFont(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Font(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SansSerif</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,Font.PLAIN,</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000">));<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       categoryPlot.setDomainAxis(domainAxis); <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>            <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       ValueAxis rangeAxis </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> categoryPlot.getRangeAxis();<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄最高的一个柱与图片顶端的距离</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       rangeAxis.setUpperMargin(</span><span style="COLOR: #000000">0.05</span><span style="COLOR: #000000">);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄最低的一个柱与图片底端的距离</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       rangeAxis.setLowerMargin(</span><span style="COLOR: #000000">0.05</span><span style="COLOR: #000000">);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       categoryPlot.setRangeAxis(rangeAxis); <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄竖坐标标{旋{角度</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       rangeAxis.setLabelAngle(</span><span style="COLOR: #000000">0.05</span><span style="COLOR: #000000">);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄竖坐标u的坐标值字?br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">       rangeAxis.setTickLabelFont(new Font("SansSerif",Font.PLAIN,12));</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">  <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       BarRenderer3D renderer</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(BarRenderer3D) categoryPlot.getRenderer();<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       renderer.setBaseOutlinePaint(Color.GREEN);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄 Wall 的颜?/span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       renderer.setWallPaint(Color.PINK);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄每个q颜色     </span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       GradientPaint gradientpaint </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> GradientPaint(</span><span style="COLOR: #000000">0.0F</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0.0F</span><span style="COLOR: #000000">, Color.blue,<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>                </span><span style="COLOR: #000000">0.0F</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0.0F</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Color(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">)); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讑֮特定颜色</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">  GradientPaint gradientpaint1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> GradientPaint(</span><span style="COLOR: #000000">0.0F</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0.0F</span><span style="COLOR: #000000">, Color.green,<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>           </span><span style="COLOR: #000000">0.0F</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0.0F</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Color(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">));<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top> <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       renderer.setSeriesPaint(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, gradientpaint);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       renderer.setSeriesPaint(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">, gradientpaint1);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄q Outline 颜色</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       renderer.setSeriesOutlinePaint(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, Color.BLACK);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       renderer.setSeriesOutlinePaint(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">, Color.BLACK);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄每个category所包含的^行柱的之间距?/span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       renderer.setItemMargin(</span><span style="COLOR: #000000">0.1</span><span style="COLOR: #000000">);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>    <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">昄每个q数|q修改该数值的字体属?/span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       renderer.setItemLabelGenerator(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> StandardCategoryItemLabelGenerator());<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄柱子上数值的字体</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       renderer.setItemLabelFont(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Font(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SansSerif</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,Font.PLAIN,</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">));  <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       renderer.setItemLabelsVisible(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>     <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄柱子上数据的颜色</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       renderer.setItemLabelPaint(Color.RED);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄bar的最宽度,以保证能昄数?/span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       renderer.setMinimumBarLength(</span><span style="COLOR: #000000">0.02</span><span style="COLOR: #000000">);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">最大宽?/span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       renderer.setMaximumBarWidth(</span><span style="COLOR: #000000">0.07</span><span style="COLOR: #000000">);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄柱子上显C的数据旋{90?最后一个参Cؓ旋{的角度?3.14</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       ItemLabelPosition itemLabelPosition</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ItemLabelPosition(<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>         ItemLabelAnchor.INSIDE12,TextAnchor.CENTER_RIGHT,<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>         TextAnchor.CENTER_RIGHT,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.57D</span><span style="COLOR: #000000">);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄不能在柱子上正常昄的那些数值的昄方式Q将q些数值显C在柱子外面</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       ItemLabelPosition itemLabelPositionFallback</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ItemLabelPosition(<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>         ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT,<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>         TextAnchor.HALF_ASCENT_LEFT,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.57D</span><span style="COLOR: #000000">);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄正常昄的柱子label的position</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       renderer.setPositiveItemLabelPosition(itemLabelPosition);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       renderer.setNegativeItemLabelPosition(itemLabelPosition);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄不能正常昄的柱子label的position</span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       renderer.setPositiveItemLabelPositionFallback(itemLabelPositionFallback);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       renderer.setNegativeItemLabelPositionFallback(itemLabelPositionFallback);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       categoryPlot.setRenderer(renderer);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄柱子的透明?/span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">       categoryPlot.setForegroundAlpha(</span><span style="COLOR: #000000">0.8f</span><span style="COLOR: #000000">);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">讄地区、销量的昄位置<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">       categoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">       categoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT); </span><span style="COLOR: #008000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">      <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       StandardEntityCollection sec </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> StandardEntityCollection(); <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>       ChartRenderingInfo info </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ChartRenderingInfo(sec);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>             <br><img id=Codehighlighter1_4461_4813_Open_Image onclick="this.style.display='none'; Codehighlighter1_4461_4813_Open_Text.style.display='none'; Codehighlighter1_4461_4813_Closed_Image.style.display='inline'; Codehighlighter1_4461_4813_Closed_Text.style.display='inline';" src="http://www.tkk7.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_4461_4813_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_4461_4813_Closed_Text.style.display='none'; Codehighlighter1_4461_4813_Open_Image.style.display='inline'; Codehighlighter1_4461_4813_Open_Text.style.display='inline';" src="http://www.tkk7.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>       </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> </span><span id=Codehighlighter1_4461_4813_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.tkk7.com/Images/dot.gif"></span><span id=Codehighlighter1_4461_4813_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>         ServletUtilities.setTempFilePrefix(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">zcz</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>         ServletUtilities.setTempOneTimeFilePrefix(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">zcz-onetime</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>        <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>           filename </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ServletUtilities.saveChartAsPNG(chart, </span><span style="COLOR: #000000">926</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">555</span><span style="COLOR: #000000">, info, session);   <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>           chartName</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">filename;<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>           <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>           System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">囄的时保存\径:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">System.getProperty(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">java.io.tmpdir</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br><img id=Codehighlighter1_4838_4880_Open_Image onclick="this.style.display='none'; Codehighlighter1_4838_4880_Open_Text.style.display='none'; Codehighlighter1_4838_4880_Closed_Image.style.display='inline'; Codehighlighter1_4838_4880_Closed_Text.style.display='inline';" src="http://www.tkk7.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_4838_4880_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_4838_4880_Closed_Text.style.display='none'; Codehighlighter1_4838_4880_Open_Image.style.display='inline'; Codehighlighter1_4838_4880_Open_Text.style.display='inline';" src="http://www.tkk7.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>       }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (IOException ex) </span><span id=Codehighlighter1_4838_4880_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.tkk7.com/Images/dot.gif"></span><span id=Codehighlighter1_4838_4880_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>           ex.printStackTrace();<br><img src="http://www.tkk7.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>       }</span></span><span style="COLOR: #000000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>          <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>           String myMap</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ChartUtilities.getImageMap(filename, info);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>           printWriter.println(myMap);<br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>    <br><img src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align=top>     </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> filename;<br><img src="http://www.tkk7.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>    }</span></span></div> <img src ="http://www.tkk7.com/gentoo1439/aggbug/131823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gentoo1439/" target="_blank">George Gong</a> 2007-07-23 10:47 <a href="http://www.tkk7.com/gentoo1439/archive/2007/07/23/131823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache+Tomcat关于Session Sticky的负载均?/title><link>http://www.tkk7.com/gentoo1439/archive/2007/07/11/129527.html</link><dc:creator>George Gong</dc:creator><author>George Gong</author><pubDate>Wed, 11 Jul 2007 02:08:00 GMT</pubDate><guid>http://www.tkk7.com/gentoo1439/archive/2007/07/11/129527.html</guid><wfw:comment>http://www.tkk7.com/gentoo1439/comments/129527.html</wfw:comment><comments>http://www.tkk7.com/gentoo1439/archive/2007/07/11/129527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/gentoo1439/comments/commentRss/129527.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gentoo1439/services/trackbacks/129527.html</trackback:ping><description><![CDATA[<p>选取Apache HTTP Server作ؓ前端的负载服务器Q后端选取两个Tomcat作集,此次选择的配|方式ؓSession StickyQ粘性SessionQ,q种方式同一用户的请求{发到特定的Tomcat服务器上Q避免了集群中Session的复Ӟ~点是用户只跟一U的一台服务器通信Q如果此服务器down掉,那就废了?br>采用的model为mod_proxy_ajp.soQ整个配|在tomcat的配|文件中都有相关的注释,只需作相应修改就OK?br>我们选取的是Apache HTTP Server2.2.4QTomcat5.5.16?br>首先安装Apache HTTP ServerQ然后修改其配置文ghttp.confQ首先load三个modelQ代码如下:</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.tkk7.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">LoadModule proxy_module modules</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">mod_proxy.so<br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>LoadModule proxy_ajp_module modules</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">mod_proxy_ajp.so<br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>LoadModule proxy_balancer_module modules</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">mod_proxy_balancer.so</span></div> 然后在此配置文g末端加入以下代码Q?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.tkk7.com/Images/OutliningIndicators/None.gif" align=top>ProxyPass / balancer://tomcatcluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3  <br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>ProxyPassReverse / balancer://tomcatcluster/   <br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>  <br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top><Proxy <span>balancer://tomcatcluster></span>  <br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>BalancerMember ajp://localhost:8009 route=a  <br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>BalancerMember ajp://localhost:9009 route=b<br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top></Proxy> </div> <br>以上代码配置了Proxy的相兛_敎ͼ<Proxy>模块定义了均衡负载的配置Q其中两个Tomcat Server都配|在同一台服务器上,端口分别?009?009Qƈ配置各自的routeQ这样Apache ServerpҎroute请求{发给特定的Tomcat?br>接下来修改Tomcat的server.xml文gQ如下:<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.tkk7.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000"><!--</span><span style="COLOR: #008000"> Define an AJP 1.3 Connector on port 8009 </span><span style="COLOR: #008000">--></span><span style="COLOR: #000000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>    </span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">Connector </span><span style="COLOR: #ff0000">port</span><span style="COLOR: #0000ff">="8009"</span><span style="COLOR: #ff0000"> <br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>               enableLookups</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #ff0000"> redirectPort</span><span style="COLOR: #0000ff">="8443"</span><span style="COLOR: #ff0000"> protocol</span><span style="COLOR: #0000ff">="AJP/1.3"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/></span></div> 其中的port为前?lt;Proxy>中设定的端口Q还要配|其routeQ代码如下:<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.tkk7.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000"><!--</span><span style="COLOR: #008000"> Define the top level container in our container hierarchy </span><span style="COLOR: #008000">--></span><span style="COLOR: #000000"><br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>    </span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">Engine </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="Catalina"</span><span style="COLOR: #ff0000"> defaultHost</span><span style="COLOR: #0000ff">="localhost"</span><span style="COLOR: #ff0000"> jvmRoute</span><span style="COLOR: #0000ff">="a"</span><span style="COLOR: #0000ff">></span></div> jvmRoute也须同前面的讄一栗?<br><br>下面用JMeter寚w|后的负载均衡做一试Q首先先启动两个Tomcat ServerQ随后启动Apache ServerQ在JMeter中新建测试计划,在两个Tomcat Server中的jsp-examples下新建test.jspQ此jsp自己随便写两句就成)Q然后进行测试,以下是部分取样器l果Q?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.tkk7.com/Images/OutliningIndicators/None.gif" align=top>HTTP response headers:<br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>HTTP/1.1 200 OK<br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>Date: Wed, 11 Jul 2007 02:17:55 GMT<br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>Set-Cookie: <span style="COLOR: #ff0000">JSESSIONID=AC7EF1CAA8C6B0FEB68E77D7D375E2AF.b</span><span>; </span>Path=/jsp-examples<br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>Content-Type: text/html;charset=ISO-8859-1<br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>Content-Length: 3<br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>Keep-Alive: timeout=5, max=79<br><img src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align=top>Connection: Keep-Alive</div> 以上U色代码表示用户的httph中的JSESSIONID中已l附带了route后缀Q?b表示此请求将转发到route为b的Tomcat Server上,你将会发现其中的一部分h的JSESSIONID后缀?aQ也是转发lroute为a的Tomcat Server上? <img src ="http://www.tkk7.com/gentoo1439/aggbug/129527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gentoo1439/" target="_blank">George Gong</a> 2007-07-11 10:08 <a href="http://www.tkk7.com/gentoo1439/archive/2007/07/11/129527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://33sse.com" target="_blank">һͼƬ </a>| <a href="http://whlnrsqsie.com" target="_blank">һõþۺ</a>| <a href="http://dehaichem.com" target="_blank">ֳִִˬƵ</a>| <a href="http://pencilinside.com" target="_blank">www.91</a>| <a href="http://trio2003.com" target="_blank">޾ƷԴ26u</a>| <a href="http://26uuyy.com" target="_blank">޳ɫ999þվ</a>| <a href="http://wx-jn.com" target="_blank">avһ</a>| <a href="http://2023852.com" target="_blank">޹ŷպƷһ </a>| <a href="http://zygwkqf.com" target="_blank">޵Ƶվ</a>| <a href="http://ac839.com" target="_blank">Ƭ߹ۿѹۿȫ </a>| <a href="http://nkldj.com" target="_blank">þ䰮</a>| <a href="http://www-63228.com" target="_blank">avѵӰ</a>| <a href="http://181xx.com" target="_blank">99ee6ȾþѾƷ6</a>| <a href="http://5shitou.com" target="_blank">߳ٸëˮˮ</a>| <a href="http://ekyzs.com" target="_blank">ҹˬˬˬWWWƵʮ˽</a>| <a href="http://ding001.com" target="_blank">պŷAVҹҹ</a>| <a href="http://wlamyx.com" target="_blank">˳ɵӰ</a>| <a href="http://peipeixiu.com" target="_blank">պһƷ侫</a>| <a href="http://zjtuntex.com" target="_blank">һɫëƬѿ</a>| <a href="http://18736374.com" target="_blank">99re99reƵֻ</a>| <a href="http://czshenyue.com" target="_blank">ѧһػƵѴƬƵ</a>| <a href="http://1314c.com" target="_blank">þAVվ</a>| <a href="http://js-jiarui.com" target="_blank">þAV˳׽</a>| <a href="http://dxj588.com" target="_blank">˳վ߹ۿ</a>| <a href="http://51a88.com" target="_blank">99뾫ƷƵѲ</a>| <a href="http://xyxpx.com" target="_blank">һƵ</a>| <a href="http://zcrencai.com" target="_blank">һƬѲŵӰ</a>| <a href="http://xtolm.com" target="_blank">޾þһ </a>| <a href="http://qzllw.com" target="_blank">aŮѿȫƬ</a>| <a href="http://mironpress.com" target="_blank">ڵƵ</a>| <a href="http://jjwgzx.com" target="_blank">VA߹ۿ</a>| <a href="http://wwwv27.com" target="_blank">˾Ʒձ</a>| <a href="http://mp4888.com" target="_blank">AѾƷƵ</a>| <a href="http://5656ys.com" target="_blank">ŮƵ</a>| <a href="http://2886868.com" target="_blank">ۺС˵ɫ</a>| <a href="http://69ct.com" target="_blank">˿Ļ</a>| <a href="http://ynkaishan.com" target="_blank">ƷƵȫѹۿ </a>| <a href="http://miyatb.com" target="_blank">ĻmvߵӰ </a>| <a href="http://www-63228.com" target="_blank">þþþþ99avվ</a>| <a href="http://cc58866.com" target="_blank">Ů޾Ʒþþۺ</a>| <a href="http://gdporun.com" target="_blank">avһùŴ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>