﻿<?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-Jarod@termainal$ tail * &gt;&gt; blog-随笔分类-Java</title><link>http://www.blogjava.net/jarod/category/7318.html</link><description>A Developer's Notebook</description><language>zh-cn</language><lastBuildDate>Fri, 15 Feb 2008 07:22:05 GMT</lastBuildDate><pubDate>Fri, 15 Feb 2008 07:22:05 GMT</pubDate><ttl>60</ttl><item><title>json-lib序列化java.sql.Date</title><link>http://www.blogjava.net/jarod/archive/2008/02/15/180021.html</link><dc:creator>Jarod</dc:creator><author>Jarod</author><pubDate>Fri, 15 Feb 2008 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/jarod/archive/2008/02/15/180021.html</guid><wfw:comment>http://www.blogjava.net/jarod/comments/180021.html</wfw:comment><comments>http://www.blogjava.net/jarod/archive/2008/02/15/180021.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jarod/comments/commentRss/180021.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jarod/services/trackbacks/180021.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.HashMap;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;net.sf.json.JSONObject;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;net.sf.json.JsonConfig;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;net.sf.json.processors.JsDateJsonBeanProcessor;<br />
<br />
</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;jarod<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;JsonDate&nbsp;{<br />
<br />
&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;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;json-lib默认不支持java.sql.Date的序列化，要序列化自己的类，实现一个BeanProcessor处理即可</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JsDateJsonBeanProcessor&nbsp;beanProcessor&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;JsDateJsonBeanProcessor();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java.sql.Date&nbsp;d&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;java.sql.Date(System.currentTimeMillis());<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;直接序列化</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JsonConfig&nbsp;config&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;JsonConfig();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSONObject&nbsp;json&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;beanProcessor.processBean(d,&nbsp;config);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(json.toString());<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;序列化含java.sql.Date作为属性值的bean</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HashMap&nbsp;m&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;HashMap();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.put(</span><span style="color: #000000;">"</span><span style="color: #000000;">date</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;d);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config.registerJsonBeanProcessor(java.sql.Date.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">,&nbsp;beanProcessor);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;json&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;JSONObject.fromObject(m,&nbsp;config);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(json.toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<img src ="http://www.blogjava.net/jarod/aggbug/180021.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jarod/" target="_blank">Jarod</a> 2008-02-15 10:11 <a href="http://www.blogjava.net/jarod/archive/2008/02/15/180021.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Embedded tomcat 6.0</title><link>http://www.blogjava.net/jarod/archive/2007/12/20/169030.html</link><dc:creator>Jarod</dc:creator><author>Jarod</author><pubDate>Thu, 20 Dec 2007 06:49:00 GMT</pubDate><guid>http://www.blogjava.net/jarod/archive/2007/12/20/169030.html</guid><wfw:comment>http://www.blogjava.net/jarod/comments/169030.html</wfw:comment><comments>http://www.blogjava.net/jarod/archive/2007/12/20/169030.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jarod/comments/commentRss/169030.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jarod/services/trackbacks/169030.html</trackback:ping><description><![CDATA[测试环境：<br />
tomcat-6.0.14<br />
ubuntu gusty<br />
sun-jdk-1.6<br />
<br />
多个人合作的项目里只要修改tomcat-conf.properties文件后即可使用。我这里用了slf4j做LOG，不用LOG的把相关类去掉即可。还有我是把tomcat/lib下的jar都加进classpath的。<br />
<br />
目录结构<br />
/-|projectHome<br />
&nbsp; |<br />
&nbsp; |--src<br />
&nbsp; |&nbsp;&nbsp; |--TomcatServer.java<br />
&nbsp; |&nbsp;&nbsp; |--tomcat-conf.properties<br />
&nbsp; |<br />
&nbsp; |--webapp<br />
&nbsp; |&nbsp;&nbsp; |--WEB-INF<br />
&nbsp; |&nbsp;&nbsp; |&nbsp;&nbsp; |-web.xml<br />
<br />
TomcatServer.java:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.File;<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.IOException;<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.Properties;<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.catalina.Context;<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.catalina.Engine;<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.catalina.Host;<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.catalina.LifecycleException;<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.catalina.startup.Embedded;<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.slf4j.Logger;<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.slf4j.LoggerFactory;<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #008000;">/**</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #008000;">&nbsp;*&nbsp;</span><span style="color: #008000; text-decoration: underline;">http://www.blogjava.net/jarod</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #008000;">&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;jarod<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #008000;">&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;TomcatServer&nbsp;{<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&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;Logger&nbsp;logger&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;LoggerFactory<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getLogger(TomcatServer.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">22</span>&nbsp;<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;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;TomcatServer();<br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(Throwable&nbsp;t)&nbsp;{<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(</span><span style="color: #000000;">""</span><span style="color: #000000;">,&nbsp;t);<br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;Embedded&nbsp;tomcat;<br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;tomcat主目录</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;catalinaHome;<br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;projectHome;<br />
</span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;TomcatServer()&nbsp;{<br />
</span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initConf();<br />
</span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tomcat&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Embedded();<br />
</span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tomcat.setCatalinaHome(catalinaHome);<br />
</span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Engine&nbsp;engine&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;tomcat.createEngine();<br />
</span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Host&nbsp;host&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;tomcat.createHost(</span><span style="color: #000000;">"</span><span style="color: #000000;">localhost</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;projectHome);<br />
</span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;host.addChild(tomcat.createContext(</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;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Context&nbsp;context&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;tomcat.createContext(</span><span style="color: #000000;">"</span><span style="color: #000000;">/webapp1</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">webapp</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;当以debug模式启动时，修改可立即生效</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context.setReloadable(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;host.addChild(context);<br />
</span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;engine.addChild(host);<br />
</span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;engine.setDefaultHost(</span><span style="color: #000000;">"</span><span style="color: #000000;">localhost</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tomcat.addEngine(engine);<br />
</span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tomcat.addConnector(tomcat.createConnector(</span><span style="color: #000000;">"0"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">8081</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">));<br />
</span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;registerShutdownHook();<br />
</span><span style="color: #008080;">54</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">55</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tomcat.start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Thread.sleep(Long.MAX_VALUE);<br />
<span style="color: #008080;">56</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080;">57</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">throw</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;RuntimeException(e);<br />
</span><span style="color: #008080;">58</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">59</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">60</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">61</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;initConf()&nbsp;{<br />
</span><span style="color: #008080;">62</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Properties&nbsp;properties&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Properties();<br />
</span><span style="color: #008080;">63</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">64</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties.load(TomcatServer.</span><span style="color: #0000ff;">class</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">65</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getResourceAsStream(</span><span style="color: #000000;">"</span><span style="color: #000000;">/tomcat-conf.properties</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
</span><span style="color: #008080;">66</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catalinaHome&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;properties.getProperty(</span><span style="color: #000000;">"</span><span style="color: #000000;">catalina.home</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">67</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">68</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;f&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;File(</span><span style="color: #000000;">"</span><span style="color: #000000;">.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">69</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;projectHome&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;f.getAbsolutePath();<br />
</span><span style="color: #008080;">70</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(IOException&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080;">71</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">throw</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;RuntimeException(e);<br />
</span><span style="color: #008080;">72</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">73</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">74</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">75</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;registerShutdownHook()&nbsp;{<br />
</span><span style="color: #008080;">76</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime.getRuntime().addShutdownHook(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Thread()&nbsp;{<br />
</span><span style="color: #008080;">77</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
</span><span style="color: #008080;">78</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;run()&nbsp;{<br />
</span><span style="color: #008080;">79</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">80</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tomcat.stop();<br />
</span><span style="color: #008080;">81</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(LifecycleException&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080;">82</span>&nbsp;<span style="color: #000000;">&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;">throw</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;RuntimeException(e);<br />
</span><span style="color: #008080;">83</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">84</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">85</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />
</span><span style="color: #008080;">86</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">87</span>&nbsp;<span style="color: #000000;">}</span></div>
<br />
<br />
tomcat-conf.properties:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">catalina.home</span><span style="color: #000000;">=/</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">jarod</span><span style="color: #000000;">/</span><span style="color: #000000;">server</span><span style="color: #000000;">/</span><span style="color: #000000;">tomcat</span><span style="color: #000000;">/</span><span style="color: #000000;">apache</span><span style="color: #000000;">-</span><span style="color: #000000;">tomcat</span><span style="color: #000000;">-</span><span style="color: #000000;">6.0</span><span style="color: #000000;">.</span><span style="color: #000000;">14</span></div>
<br />
<br />
为什么要<span style="color: #000000;">setCatalinaHome?<br />
设了该值，tomcat启动时会在该目录加载默认的一些配置，如MIME mapping等，如果要自己手动添加配置太麻烦了，而如果不要这些配置，这个embedded tomcat用处也不大<br />
</span>
<img src ="http://www.blogjava.net/jarod/aggbug/169030.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jarod/" target="_blank">Jarod</a> 2007-12-20 14:49 <a href="http://www.blogjava.net/jarod/archive/2007/12/20/169030.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个简单的Java反射方法调用性能测试</title><link>http://www.blogjava.net/jarod/archive/2006/09/27/72161.html</link><dc:creator>Jarod</dc:creator><author>Jarod</author><pubDate>Wed, 27 Sep 2006 00:28:00 GMT</pubDate><guid>http://www.blogjava.net/jarod/archive/2006/09/27/72161.html</guid><wfw:comment>http://www.blogjava.net/jarod/comments/72161.html</wfw:comment><comments>http://www.blogjava.net/jarod/archive/2006/09/27/72161.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jarod/comments/commentRss/72161.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jarod/services/trackbacks/72161.html</trackback:ping><description><![CDATA[本来是由于某个问题想用反射来解决，使用前作个小测试（我的应用都是用JDK1.4.2）。然后顺便把1.5的也测了。看到这个数据，不禁想到Hibernate，Spring这类依赖反射的框架是否更加适合运行在JDK1.4平台上。<br />补：后来在1.6上测了测，性能提高了不少，1.6真的是值得期待<br /><br /><span style="color: rgb(0, 0, 0);">Java 1.5<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">Reflection | Normal<br />3685|210<br />3696|210<br />4086|211<br />3685|211<br />3775|210<br />3696|210</span></div><br />Java 1.4.2</span><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);"><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">Reflection | Normal<br /></span></div><br />3295|340<br />3325|370<br />3295|340<br />3315|350<br />3305|340<br />3285|330<br /></span></div><br /><br />
Java 1.6 beta2<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">Reflection | Normal<br />2954|200<br />2644|581<br />3005|170<br />2944|190<br />2684|170<br />3014|191</span></div><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><img id="Code_Closed_Image_084250" onclick="this.style.display='none'; Code_Closed_Text_084250.style.display='none'; Code_Open_Image_084250.style.display='inline'; Code_Open_Text_084250.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11" /><img id="Code_Open_Image_084250" style="display: none;" onclick="this.style.display='none'; Code_Open_Text_084250.style.display='none'; Code_Closed_Image_084250.style.display='inline'; Code_Closed_Text_084250.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11" /><span id="Code_Closed_Text_084250" style="border: 1px solid rgb(128, 128, 128); background-color: rgb(255, 255, 255);">测试代码</span><span id="Code_Open_Text_084250" style="display: none;"><br /><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 128);"> 1</span> <span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.lang.reflect.</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);"> 2</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 3</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> ReflectTest {<br /></span><span style="color: rgb(0, 128, 128);"> 4</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 5</span> <span style="color: rgb(0, 0, 0);">   </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> main(String[] args) {<br /></span><span style="color: rgb(0, 128, 128);"> 6</span> <span style="color: rgb(0, 0, 0);">      String firstWord </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Hello </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);"> 7</span> <span style="color: rgb(0, 0, 0);">      String secondWord </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">everybody.</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);"> 8</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 9</span> <span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; i</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">100000</span><span style="color: rgb(0, 0, 0);">; i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">) {<br /></span><span style="color: rgb(0, 128, 128);">10</span> <span style="color: rgb(0, 0, 0);">            String bothWords </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> append2(firstWord, secondWord);<br /></span><span style="color: rgb(0, 128, 128);">11</span> <span style="color: rgb(0, 0, 0);">      }<br /></span><span style="color: rgb(0, 128, 128);">12</span> <span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; i</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">100000</span><span style="color: rgb(0, 0, 0);">; i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">) {<br /></span><span style="color: rgb(0, 128, 128);">13</span> <span style="color: rgb(0, 0, 0);">            String bothWords </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> append(firstWord, secondWord);<br /></span><span style="color: rgb(0, 128, 128);">14</span> <span style="color: rgb(0, 0, 0);">      }<br /></span><span style="color: rgb(0, 128, 128);">15</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">16</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">long</span><span style="color: rgb(0, 0, 0);"> begin </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> System.currentTimeMillis();<br /></span><span style="color: rgb(0, 128, 128);">17</span> <span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; i</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">1000000</span><span style="color: rgb(0, 0, 0);">; i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">) {<br /></span><span style="color: rgb(0, 128, 128);">18</span> <span style="color: rgb(0, 0, 0);">            String bothWords </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> append(firstWord, secondWord);<br /></span><span style="color: rgb(0, 128, 128);">19</span> <span style="color: rgb(0, 0, 0);">      }<br /></span><span style="color: rgb(0, 128, 128);">20</span> <span style="color: rgb(0, 0, 0);">      System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Reflection:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> (System.currentTimeMillis() </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> begin));<br /></span><span style="color: rgb(0, 128, 128);">21</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">22</span> <span style="color: rgb(0, 0, 0);">        begin </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> System.currentTimeMillis();<br /></span><span style="color: rgb(0, 128, 128);">23</span> <span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; i</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">1000000</span><span style="color: rgb(0, 0, 0);">; i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">) {<br /></span><span style="color: rgb(0, 128, 128);">24</span> <span style="color: rgb(0, 0, 0);">            String bothWords </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> append2(firstWord, secondWord);<br /></span><span style="color: rgb(0, 128, 128);">25</span> <span style="color: rgb(0, 0, 0);">      }<br /></span><span style="color: rgb(0, 128, 128);">26</span> <span style="color: rgb(0, 0, 0);">      System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Normal:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> (System.currentTimeMillis() </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> begin));<br /></span><span style="color: rgb(0, 128, 128);">27</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">28</span> <span style="color: rgb(0, 0, 0);">   }<br /></span><span style="color: rgb(0, 128, 128);">29</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">30</span> <span style="color: rgb(0, 0, 0);">   </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> String append(String firstWord, String secondWord) {<br /></span><span style="color: rgb(0, 128, 128);">31</span> <span style="color: rgb(0, 0, 0);">      String result </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">32</span> <span style="color: rgb(0, 0, 0);">      Class c </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> String.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">33</span> <span style="color: rgb(0, 0, 0);">      Class[] parameterTypes </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Class[] {String.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">};<br /></span><span style="color: rgb(0, 128, 128);">34</span> <span style="color: rgb(0, 0, 0);">      Method concatMethod;<br /></span><span style="color: rgb(0, 128, 128);">35</span> <span style="color: rgb(0, 0, 0);">      Object[] arguments </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Object[] {secondWord};<br /></span><span style="color: rgb(0, 128, 128);">36</span> <span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"> {<br /></span><span style="color: rgb(0, 128, 128);">37</span> <span style="color: rgb(0, 0, 0);">        concatMethod </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> c.getMethod(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">concat</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, parameterTypes);<br /></span><span style="color: rgb(0, 128, 128);">38</span> <span style="color: rgb(0, 0, 0);">        result </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> (String) concatMethod.invoke(firstWord, arguments);<br /></span><span style="color: rgb(0, 128, 128);">39</span> <span style="color: rgb(0, 0, 0);">      } <br /></span><span style="color: rgb(0, 128, 128);">40</span> <span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);"> (NoSuchMethodException e) {<br /></span><span style="color: rgb(0, 128, 128);">41</span> <span style="color: rgb(0, 0, 0);">          System.out.println(e);<br /></span><span style="color: rgb(0, 128, 128);">42</span> <span style="color: rgb(0, 0, 0);">      } <br /></span><span style="color: rgb(0, 128, 128);">43</span> <span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);"> (IllegalAccessException e) {<br /></span><span style="color: rgb(0, 128, 128);">44</span> <span style="color: rgb(0, 0, 0);">          System.out.println(e);<br /></span><span style="color: rgb(0, 128, 128);">45</span> <span style="color: rgb(0, 0, 0);">      } <br /></span><span style="color: rgb(0, 128, 128);">46</span> <span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);"> (InvocationTargetException e) {<br /></span><span style="color: rgb(0, 128, 128);">47</span> <span style="color: rgb(0, 0, 0);">          System.out.println(e);<br /></span><span style="color: rgb(0, 128, 128);">48</span> <span style="color: rgb(0, 0, 0);">      }<br /></span><span style="color: rgb(0, 128, 128);">49</span> <span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> result;<br /></span><span style="color: rgb(0, 128, 128);">50</span> <span style="color: rgb(0, 0, 0);">   }<br /></span><span style="color: rgb(0, 128, 128);">51</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">52</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> String append2(String firstWord, String secondWord) {<br /></span><span style="color: rgb(0, 128, 128);">53</span> <span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> firstWord.concat(secondWord);<br /></span><span style="color: rgb(0, 128, 128);">54</span> <span style="color: rgb(0, 0, 0);">   }<br /></span><span style="color: rgb(0, 128, 128);">55</span> <span style="color: rgb(0, 0, 0);">}</span></span></div><br /><img src ="http://www.blogjava.net/jarod/aggbug/72161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jarod/" target="_blank">Jarod</a> 2006-09-27 08:28 <a href="http://www.blogjava.net/jarod/archive/2006/09/27/72161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Singleton: Beyond double-checked</title><link>http://www.blogjava.net/jarod/archive/2006/09/26/71941.html</link><dc:creator>Jarod</dc:creator><author>Jarod</author><pubDate>Tue, 26 Sep 2006 04:30:00 GMT</pubDate><guid>http://www.blogjava.net/jarod/archive/2006/09/26/71941.html</guid><wfw:comment>http://www.blogjava.net/jarod/comments/71941.html</wfw:comment><comments>http://www.blogjava.net/jarod/archive/2006/09/26/71941.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jarod/comments/commentRss/71941.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jarod/services/trackbacks/71941.html</trackback:ping><description><![CDATA[单例是一个很常用的设计模式，以前一直都以为做到double-checked就已经线程安全了。直到无意中看到DeveloperWorks的这篇文章 <font size="2"><a target="_blank" title="Double-checked locking and the Singleton pattern" href="http://www-128.ibm.com/developerworks/java/library/j-dcl.html">Double-checked locking and the Singleton pattern</a></font>才知道还有更多要做的。。。<img src ="http://www.blogjava.net/jarod/aggbug/71941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jarod/" target="_blank">Jarod</a> 2006-09-26 12:30 <a href="http://www.blogjava.net/jarod/archive/2006/09/26/71941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven2也不是那么可靠</title><link>http://www.blogjava.net/jarod/archive/2006/07/27/60352.html</link><dc:creator>Jarod</dc:creator><author>Jarod</author><pubDate>Thu, 27 Jul 2006 07:03:00 GMT</pubDate><guid>http://www.blogjava.net/jarod/archive/2006/07/27/60352.html</guid><wfw:comment>http://www.blogjava.net/jarod/comments/60352.html</wfw:comment><comments>http://www.blogjava.net/jarod/archive/2006/07/27/60352.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jarod/comments/commentRss/60352.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jarod/services/trackbacks/60352.html</trackback:ping><description><![CDATA[我有个项目是用Maven2管理Jar包的，最近加入了commons-httpclient-alpha1，在pom中加入了httpclient。直到运行时才发现缺少包commons-codec。也就是说maven2没有自动下载httpclient所依赖的包。最后还要自己在pom中加入commons-codec。看来maven2这东西也不太可靠<br /><img src ="http://www.blogjava.net/jarod/aggbug/60352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jarod/" target="_blank">Jarod</a> 2006-07-27 15:03 <a href="http://www.blogjava.net/jarod/archive/2006/07/27/60352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Linux下配置Java开发环境（二）</title><link>http://www.blogjava.net/jarod/archive/2006/03/11/34813.html</link><dc:creator>Jarod</dc:creator><author>Jarod</author><pubDate>Sat, 11 Mar 2006 05:16:00 GMT</pubDate><guid>http://www.blogjava.net/jarod/archive/2006/03/11/34813.html</guid><wfw:comment>http://www.blogjava.net/jarod/comments/34813.html</wfw:comment><comments>http://www.blogjava.net/jarod/archive/2006/03/11/34813.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jarod/comments/commentRss/34813.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jarod/services/trackbacks/34813.html</trackback:ping><description><![CDATA[
		<b>
				<font size="5">三、安装apache、PHP、phpMyAdmin和resin</font>
		</b>
		<br />
		<br />
		<p>apache安装：</p>
		<p>
				<font size="2">apache的安装我选择了源码版，用以下命令安装：<br />tar xfj httpd-2.0.55.tar.bz2<br />cd httpd-2.0.55<br />./configure --prefix=/usr/local/apache2 --enable-so --enable-mods-shared=most<br />&amp;&amp; make &amp;&amp; make install</font>
		</p>
		<p>
				<font size="2">　　so模块用来提供DSO支持的apachehe核心模块（与PHP集成必须）；
    --enable-shared=max是指除了so以外的所有标准模块都编译成DSO模块<br />　　安装完后进入/usr/local/apache2/bin，运行./apachectl start。在浏览器进入localhost如果能看到apache默认页面就没问题了。</font>
				<br />
		</p>
		<font size="2">
				<font size="3">
						<br />
						<br />PHP安装：<br /><br /></font>用以下命令安装：<br />tar xfj php-5.1.2.tar.bz2<br />cd php-5.1.2<br />./configure --prefix=/usr/local/php --enable-mbstring --with-mysql=/usr/local/mysql/ --with-apxs2=/usr/local/apache2/bin/apxs &amp;&amp; make &amp;&amp; make install<br /><br />--enable-mbstring是让PHP支持中文字符集，--with-mysql，--with-apxs2分别是PHP与MYSQL，APACHE集成的支持<br />默认配置文件<br /><br />如果按照上面的方式编译PHP，在$HTTPD_HOME/conf/httpd.conf中会加入一句<br />LoadModule php5_module modules/libphp5.so<br /><br />如果没有的可以把modules/libphp5.so改成指向libphp5.so的文件名<br /><br /><br />在$HTTPD_HOME/conf/httpd.conf中加入<br />    AddType application/x-httpd-php .php .phtml<br />    AddType application/x-httpd-php-source .phps<br /><br /><br /><font size="3">phpMyAdmin安装：</font><br /><br />tar xfj phpMyAdmin-2.8.0.1.tar.bz2<br />mv phpMyAdmin-2.8.0.1 /usr/local/apache2/htdocs/phpMyAdmin<br /><br />进入</font>
		<font size="2">/usr/local/apache2/htdocs/phpMyAdmin/libraries，<br />cp config.default.php ../config.inc.php<br /><br />phpMyAdmin默认的验证模式为config，即数据库的用户名密码写入config.inc.php文件。改为cookie模式就可以在登陆时自己输用户名密码<br /><br />编辑config.inc.php文件<br />$cfg['blowfish_secret'] = '随便一个字符串';<br />$cfg['Servers'][$i]['auth_type']     = 'cookie';<br /><br />启动apache，在浏览器进入localhost/phpMyAdmin/index.php测试<br /><br /><br /><font size="3">resin</font></font>
		<font size="2">
				<font size="3">安装</font>
		</font>
		<font size="2">
				<font size="3">：<br /><br /><font size="2">通过以下命令安装：</font><br /></font>tar xfz resin-3.0.18.tar.gz<br />mv resin-3.0.18 /usr/local<br />ln -s resin-3.0.18 resin<br />cd resin<br />./configure --with-apache=/usr/local/apache2/ &amp;&amp; make &amp;&amp; make install<br /><br />启动apache, 通过bin/httpd.sh运行resin。在浏览器进入http://localhost/resin-doc/测试<br /></font>
<img src ="http://www.blogjava.net/jarod/aggbug/34813.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jarod/" target="_blank">Jarod</a> 2006-03-11 13:16 <a href="http://www.blogjava.net/jarod/archive/2006/03/11/34813.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Linux下配置Java开发环境（一）</title><link>http://www.blogjava.net/jarod/archive/2006/03/05/33663.html</link><dc:creator>Jarod</dc:creator><author>Jarod</author><pubDate>Sun, 05 Mar 2006 02:13:00 GMT</pubDate><guid>http://www.blogjava.net/jarod/archive/2006/03/05/33663.html</guid><wfw:comment>http://www.blogjava.net/jarod/comments/33663.html</wfw:comment><comments>http://www.blogjava.net/jarod/archive/2006/03/05/33663.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jarod/comments/commentRss/33663.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jarod/services/trackbacks/33663.html</trackback:ping><description><![CDATA[<font size="2">　　在Linux下配置Java的开发环境以前也有好几次了，但时间一长，总有不少细节会忘了，到重新要配置时又要花不少时间去解决这些再次遇到的小问题。这次就写下来吧，做个笔记，以后再要配置时就省时了。<br>　　以下是这次要配置的环境：<br>Linux：FC4<br>JDK：1.4.2<br>服务器：apache-2.0.55 + resin-3.0.18<br>数据库：mysql-4.1.18 + phpMyAdmin-2.8</font><br><br><br><font face="Tahoma" size="5"><b>一、安装、配置JDK<br><br></b></font><font size="3"><font size="4">安装：</font><br><font size="2">　　官网上有两种版本的JDK下载。我下载回来的JDK文件名为：j2sdk-1_4_2_11-linux-i586.bin_File_j2sdk-1_4_2_11-linux-i586.bin。这个在官网上称为自解压版，这个版本我还是第一次下。以前用的都是RPM版。两者的区别就在于，自解压版运行后就在当前目录产生个JDK的目录。RPM版则直接安装到指定的目录。通常为/usr/java/jdk-version目录。<br>　　在安装目录上我有个建议，就是都装到/usr/java的子目录下，然后做个链接成/usr/java/jdk。如，我这里看装后的路径为/usr/java/j2sdk1.4.2_11。可以通过以下命令建立一个软链接。<br>ln -s /usr/java/j2sdk1.4.2_11 /usr/java/jdk<br>　　这样做的好处就是当有几个JDK并存时，要改变默认JDK的版本只要改变这个软链接就OK了。而且跟JDK相关的各种环境变量也不用变来变去，就把JAVA_HOME指向/usr/java/jdk就行了。<br>　　至于CLASSPATH的配置我就不用说了，因为我一向都是用IDE或者是ANT的，配CLASSPATH对我来说没意义。</font></font><font size="2"><br><br></font><font size="2"><font size="4">中文支持的配置：</font><br>　　这个步骤好像不是必须的，因为听网上的一些朋友说有些Linux发行版在装好JDK后直接就支持中文。在配置前可以先运行一下$JAVA_HOME/jre/bin/ControlPanel和其它中文程序看是否可以正确显示中文（Linux的locale要设成中文ControlPanel才是中文的）。<br>　　进入$JAVA_HOME/jre/lib目录。拷贝一份font.properties.zh_CN.Redhat覆盖原来的font.properties文件。然后把font.properties以外的font.properties_***文件都删了。打开font.properties在最后一行会有类似下面的代码：<br><br>filename.-misc-zysong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1 =/usr/share/fonts/zh_CN/TrueType/zysong.ttf<br><br>把后面的/usr/share/fonts/zh_CN/TrueType/zysong.ttf改成自己的中文字体所在位置，如simsun或VeraSansYuanTi。simsun可以在windows的font目录里找到，VeraSansYuanTi可以在Linux公社下载。<br><br>如果用JDK5.0的可以参考这篇文章：http://addone.blogchina.com/blog/187527.html<br><br><br></font><hr size="2" width="100%"><br><b><font size="5">二、MYSQL</font></b><br><font size="2"><br>　　在MySQL的下载页上有很多版本可供下载。由于我装MySQL只是作为开发用途，并不是作服务器，因此可以选择最简单的版本来下载。如：标准二进制版或对应Linux发行版的RPM包等。 我下载的是标准二进制版，文件名为：mysql-standard-4.1.18-pc-linux-gnu-i686.tar.gz。解压后就是一个已经编译，初始化好的文件夹。解压好后把文件夹移到某个目录，我这里为/usr/local/database/mysql41。然后建立软链接：<br>ln -s /usr/local/database/mysql41 /usr/local/mysql<br><br>　　由于mysql里很多默认设置都是指向/usr/local/mysql目录的，链到这里就省了不少事。我这里不直接把数据库放到/usr/local/mysql，而是通过链接，也是为了可以多版本共存。因为4.0, 4.1, 5.0这几多版本都比较多用，而且差别又比较大，所以共存的必要还是有的。<br>　　把$MYSQL_HOME/support-files/my-small.cnf拷贝到$MYSQL_HOME/data/my.cnf，建立一个软链接：<br>ln -s /usr/local/mysql/data/my.cnf /etc/my.cnf<br><br>　　编辑my.cnf文件，分别在以下区加入下面的行，这里的编码都用UTF-8<br><br>[client]<br>default-character-set=utf8<br><br>[mysqld]<br></font><font size="2">default-character-set=utf8<br>default-storage-engine=INNODB<br><br>其中字符集的设置只有在4.1以后的版本才支持。这样设置了，建立数据库时默认就使用UTF-8编码，而且只要connector/j的版本号大于3.1，建立数据库链接时会自动使用数据库的编码。<br>　　在MYSQL&gt;4.1 &amp;&amp; connector/j &gt; 3.1时，JDBC链接URL为：<br>jdbc:mysql://</font><font size="2">&lt;host&gt;/&lt;database&gt;</font><font size="2">?useServerPrepStmts=false<br>　　否则要在链接上指定连接编码：<br>jdbc:mysql://&lt;host&gt;/&lt;database&gt;?useUnicode=true&amp;characterEncoding=utf-8<br><br></font><font size="2">至于default-storage-engine=INNODB，则在当你的程序需要用到事务时可以方便点，就算没用到也没所谓，反正只是个开发环境，方便就OK。<br><br>再为启动MYSQLD进程添加用户，执行以下命令：<br><br>添加用户组<br>groupadd mysql<br>添加用户<br>useradd -g mysql mysql<br>设置MYSQL目录的拥有者<br> chown -R root&nbsp; .<br>设置数据文件目录拥有者<br>chown -R mysql data<br>设置目录所属组<br>chgrp -R mysql .<br>安装初始数据库<br></font>scripts/mysql_install_db --user=mysql
<br><font size="2">启动进程<br>bin/mysqld_safe --user=mysql &amp;<br><br>如果没有显示mysqld end之类的字眼，通常都是正常启动了。<br><br><br>如果需要MYSQL开机时自动启动的：拷贝$MYSQL_HOME/support-files/mysql-server到/etc/rc.d/init.d/mysqld<br></font><font size="2">再执行chkconfig --add mysqld即可<br><br>因为我试过4, 5版的MYSQL启动脚本是可以通用的，所以这里就不用再搞链接了。。。<br></font><font size="2"><br></font>
<img src ="http://www.blogjava.net/jarod/aggbug/33663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jarod/" target="_blank">Jarod</a> 2006-03-05 10:13 <a href="http://www.blogjava.net/jarod/archive/2006/03/05/33663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>