<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://dengyin2000.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fdengyin2000.spaces.live.com%2fcategory%2fjava%e5%9f%ba%e7%a1%80%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Java Dreams: java基础</title><description /><link>http://dengyin2000.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=catjava%25E5%259F%25BA%25E7%25A1%2580</link><language>en-US</language><pubDate>Sat, 02 Aug 2008 01:08:53 GMT</pubDate><lastBuildDate>Sat, 02 Aug 2008 01:08:53 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://dengyin2000.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>-5815636772130029849</live:id><live:alias>dengyin2000</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>HttpURLConnection 访问页面时发生403问题。</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!249.entry</link><description>工作中发现一个问题。当我用HttpURLConnection去连接读取一个网站时，老是会发生这个403错误。这个引起了IOException，但是我用firefox访问这个网站时就没问题。 google后知道了答案。原来如果用java代码HttpURLConnection去连的话 http header 中的User-Agent就为空，解决方法就是在连接之前先设置这个属性。&lt;br&gt;&lt;pre&gt;URL myUrl = &lt;font color=navy&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; URL(searchURL);&lt;br&gt;URLConnection myConn = (HttpURLConnection)myUrl.openConnection();&lt;br&gt;myConn.setRequestProperty(&lt;font color=red&gt;&amp;quot;User-agent&amp;quot;&lt;/font&gt;,&lt;font color=red&gt;&amp;quot;Mozilla/4.0&amp;quot;&lt;/font&gt;);&lt;br&gt;BufferedReader br = &lt;font color=navy&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; BufferedReader(&lt;font color=navy&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; InputStreamReader(myConn.getInputStream()));&lt;br&gt;&lt;br&gt;&lt;/pre&gt;&lt;p&gt;那台Server上要这么做， 可能是要组织一些网络机器人的访问（不过感觉不是很有用，用上面的方法就能破了）。 其实实现感觉也很简单， 加上一个Filter，判断如果request.getHeader(&lt;font color=red&gt;&amp;quot;User-agent&amp;quot;&lt;/font&gt;)为空的话，然后再response一个403 status就行。&lt;br&gt;
&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+HttpURLConnection+%e8%ae%bf%e9%97%ae%e9%a1%b5%e9%9d%a2%e6%97%b6%e5%8f%91%e7%94%9f403%e9%97%ae%e9%a2%98%e3%80%82&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!249.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!249.entry</guid><pubDate>Wed, 15 Nov 2006 05:03:43 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!249/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!249.entry#comment</wfw:comment><dcterms:modified>2006-11-15T05:03:43Z</dcterms:modified></item><item><title>晕，inputstream for get image from internet.</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!248.entry</link><description>需要网站的favicon保存到数据库中。思路很简单连接internet，然后得到图片的bytes保存到数据库的blob字段就行。但是我却在取到图片的bytes上面浪费了许多时间。&lt;br&gt;&lt;br&gt;开始的代码如下&lt;br&gt;    boolean fetched = false;&lt;br&gt;        URL url = null;&lt;br&gt;        try {&lt;br&gt;            url = new URL(&amp;quot;http://&amp;quot; + channel.getSite().getHost() + &amp;quot;/favicon.ico&amp;quot;);&lt;br&gt;            HttpURLConnection httpURL = (HttpURLConnection) url.openConnection();&lt;br&gt;            //httpURL.setConnectTimeout(60*1000);&lt;br&gt;            httpURL.connect();&lt;br&gt;            if (httpURL.getResponseCode()==200){&lt;br&gt;                InputStream is = httpURL.getInputStream(); &lt;br&gt;                int length = is.available();&lt;br&gt;                byte[] bytes = new byte[length];&lt;br&gt;                is.read(bytes, 0, length);&lt;br&gt;                Blob blob = Hibernate.createBlob(bytes);&lt;br&gt;                ((Image)image).setLocalSmallImage(blob);&lt;br&gt;                logger.debug(&amp;quot;Image URL:[&amp;quot; + url + &amp;quot;] has been fetched.&amp;quot;);&lt;br&gt;                logger.debug(&amp;quot;read image size:&amp;quot; + length);&lt;br&gt;                fetched = true;&lt;br&gt;            }&lt;br&gt;        } catch (Exception e)    {&lt;br&gt;            //ignored&lt;br&gt;        }&lt;br&gt;        if (!fetched)&lt;br&gt;            logger.debug(&amp;quot;Fail to fetch Image URL:[&amp;quot; + url + &amp;quot;] &amp;quot;);&lt;br&gt;在本地上设置断点调试发现一切正常。 但是发不到服务器上却发现数据更本没有保存到进去，或者只保存进去一部分。奇怪！然后log了bytes的长度（logger.debug(&amp;quot;read image size:&amp;quot; + length);）。发现这时候的长度为0。上面的代码肯定是有问题。 因为网络延时之类的这里的available根本就不准确。其实这里我们应该像读取一个文件，然后在把他写入另一个文件的操作是一样的。需要先用过inputstream read出bytes， 然后再通过outputstream把bytes输出。 但是这里我们不需要写到文件之类的datasource中。我们需要的只是bytes。我们可以方便的使用ByteArrayOutputStream来存储我们的bytes。&lt;br&gt;&lt;br&gt;    public static byte[] getAllBytes(InputStream in) throws Exception {&lt;br&gt;        int chunkSize = 4096;&lt;br&gt;        byte[] b = new byte[chunkSize];&lt;br&gt;        int borb = -1;&lt;br&gt;        ByteArrayOutputStream fos = new ByteArrayOutputStream();&lt;br&gt;        while ((borb = in.read(b)) != -1) {&lt;br&gt;                fos.write(b, 0, borb);&lt;br&gt;        }&lt;br&gt;        return fos.toByteArray();&lt;br&gt;    }&lt;br&gt;&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e6%99%95%ef%bc%8cinputstream+for+get+image+from+internet.&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!248.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!248.entry</guid><pubDate>Tue, 07 Nov 2006 09:28:57 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!248/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!248.entry#comment</wfw:comment><dcterms:modified>2006-11-07T09:28:57Z</dcterms:modified></item><item><title>RSS Feed autodiscovery.</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!214.entry</link><description>使用一些浏览器的浏览某个页面时会提示你这个页面有那些Rss源。她时怎样做的呢？？&lt;br&gt;&lt;br&gt;不过是在HTML里的&amp;lt;HEAD&amp;gt;部分里加一行代码，类似：&lt;br&gt;&lt;br&gt;&amp;lt;link REL=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; title=&amp;quot;Default RSS1.0 feed&amp;quot;  &lt;br&gt;href=&amp;quot;&lt;a href="http://www.zhangyining.net/weblog/rss/rss.pl"&gt;http://www.zhangyining.net/weblog/rss/rss.pl&lt;/a&gt;&amp;quot;/&amp;gt;&lt;br&gt;&lt;br&gt;这行代码的作用就是告诉访问该页面的客户端程序（浏览器，RSS Reader，或者是RSS聚合&lt;br&gt;器）该页面提供RSS Feed以及该Feed的地址，这样，客户端程序可以直接反馈给用户提示用&lt;br&gt;户可以订阅的内容（例子：桌面或者基于浏览器的RSS Reader），或者自动聚合内容（例子&lt;br&gt;：RSS&lt;a href="http://www.networkland.com.cn/"&gt;搜索引擎&lt;/a&gt;）。&lt;br&gt;&lt;br&gt;Ok。 我用java实现这一功能。代码如下。。需要nekohtml-0.9.5.jar 和 xercesImple-2.6.2.jar&lt;br&gt;&lt;br&gt;    /**&lt;br&gt;     * This function is Feed Autodiscovery, You just need passing the url, It would &lt;br&gt;     * return the feeds.&lt;br&gt;     * &lt;br&gt;     * Rule,  gets the elements &amp;quot;&amp;lt;linke /&amp;gt;&amp;quot;, check the type attribute whether is rss-xml type, &lt;br&gt;     * if true, get the href attribute.&lt;br&gt;     * &lt;br&gt;     * @param url   the page url that need to discovery&lt;br&gt;     * @return      Feed list&lt;br&gt;     */&lt;br&gt;    public static List&amp;lt;String&amp;gt; discoveryFeedList(String url){&lt;br&gt;        List&amp;lt;String&amp;gt; rt = new ArrayList&amp;lt;String&amp;gt;();&lt;br&gt;        if (StringUtils.isBlank(url)){&lt;br&gt;            return rt;&lt;br&gt;        }&lt;br&gt;        &lt;br&gt;        DOMParser parser = new DOMParser();&lt;br&gt;        try {&lt;br&gt;            parser.parse(url);&lt;br&gt;        }catch(Exception e){&lt;br&gt;            // ignore the exception; just return empty value;&lt;br&gt;            return rt;&lt;br&gt;        }&lt;br&gt;        NodeList list = parser.getDocument().getElementsByTagName(&amp;quot;link&amp;quot;);&lt;br&gt;        for(int i=0; i&amp;lt;list.getLength(); i++){&lt;br&gt;            Node node = list.item(i);&lt;br&gt;            String rssurl = getRssUrl(node, url);&lt;br&gt;            if (StringUtils.isNotBlank(rssurl)){&lt;br&gt;                rt.add(rssurl);&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;        return rt;&lt;br&gt;    }&lt;br&gt;    &lt;br&gt;    /**&lt;br&gt;     * dig rss url.&lt;br&gt;     * @param node&lt;br&gt;     * @return    URL,  if not found, return null.&lt;br&gt;     */&lt;br&gt;    private static String getRssUrl(Node node, String url){&lt;br&gt;        if (node == null || node.getAttributes().getLength() == 0){&lt;br&gt;            return null;&lt;br&gt;        }&lt;br&gt;        // Map&amp;lt;attriName, attriValue&amp;gt;&lt;br&gt;        Map&amp;lt;String, String&amp;gt; attriMap = new HashMap&amp;lt;String, String&amp;gt;();&lt;br&gt;        for(int i=0; i&amp;lt;node.getAttributes().getLength(); i++){&lt;br&gt;            attriMap.put(node.getAttributes().item(i).getNodeName(), node&lt;br&gt;                    .getAttributes().item(i).getNodeValue());&lt;br&gt;            &lt;br&gt;        }&lt;br&gt;        String type = attriMap.get(&amp;quot;type&amp;quot;);&lt;br&gt;        if (!StringUtils.isBlank(type)&lt;br&gt;                &amp;amp;&amp;amp; (type.equalsIgnoreCase(&amp;quot;application/rss+xml&amp;quot;) || &lt;br&gt;                        type.equalsIgnoreCase(&amp;quot;application/atom+xml&amp;quot;))) {&lt;br&gt;            String href = attriMap.get(&amp;quot;href&amp;quot;);&lt;br&gt;            if (!StringUtils.isBlank(href) &amp;amp;&amp;amp; href.toLowerCase().startsWith(&amp;quot;http&amp;quot;)){&lt;br&gt;                return href;&lt;br&gt;            }else{&lt;br&gt;                return url.trim().endsWith(&amp;quot;/&amp;quot;) ? url + href : url + &amp;quot;/&amp;quot; + href; &lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;        return null;&lt;br&gt;    }&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+RSS+Feed+autodiscovery.&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!214.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!214.entry</guid><pubDate>Thu, 17 Aug 2006 10:27:06 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!214/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!214.entry#comment</wfw:comment><dcterms:modified>2006-08-17T10:27:06Z</dcterms:modified></item><item><title>google hosting, host your code base.</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!210.entry</link><description>现在你只需要拥有一个gmail帐号, 便能host 你的项目, 象在sf上一样, 使用的是subversion. &lt;br&gt;&lt;br&gt;http://code.google.com/hosting/&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+google+hosting%2c+host+your+code+base.&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!210.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!210.entry</guid><pubDate>Sat, 29 Jul 2006 02:54:26 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!210/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!210.entry#comment</wfw:comment><dcterms:modified>2006-07-29T02:55:40Z</dcterms:modified></item><item><title>还真的不知道，java里面可以 break [lable], continue [lable]</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!207.entry</link><description>outer: for(int i=0;i&amp;lt;2;i++){&lt;br&gt;            inner:for(int j=0;j&amp;lt;2;j++){&lt;br&gt;                if (j==1)&lt;br&gt;                    break outer;&lt;br&gt;                &lt;br&gt;                System.out.println(&amp;quot;i:&amp;quot; + i + &amp;quot; j:&amp;quot; + j);&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;&lt;br&gt;上面那个代码，当j＝1时，然后break outer。 这时候就会跳出高层的for（outer）。这里也可以改成continue outer; 这时候会i＋1后从高层循环继续开始。&lt;br&gt;&lt;br&gt;这是java的基础，但是我觉得大部分人还是不知道有这个东西的。 以前我跳出高层循环是设置一个boolean变量。 呵呵！ while 语句同样适用。&lt;br&gt;&lt;br&gt;http://dusu.mireene.com/java/flow.html&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e8%bf%98%e7%9c%9f%e7%9a%84%e4%b8%8d%e7%9f%a5%e9%81%93%ef%bc%8cjava%e9%87%8c%e9%9d%a2%e5%8f%af%e4%bb%a5+break+%5blable%5d%2c+continue+%5blable%5d&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!207.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!207.entry</guid><pubDate>Thu, 13 Jul 2006 06:23:08 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!207/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!207.entry#comment</wfw:comment><dcterms:modified>2006-07-13T06:34:19Z</dcterms:modified></item><item><title>透视java读书笔记(一)</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!200.entry</link><description>&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;反编译字节码所生成的源代码几乎与原始的源代码一致&lt;/span&gt;&lt;/font&gt;.
&lt;/ol&gt;
&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;使用反编译器能够把没有经过特殊处理的&lt;/span&gt;&lt;/font&gt;class&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;文件还原成几乎和源码一样的&lt;/span&gt;&lt;/font&gt;java&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;文件&lt;/span&gt;&lt;/font&gt;.
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;因为在&lt;/span&gt;&lt;/font&gt;class&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;文件中几乎包括了一切可以用于调试的信息&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;行号&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;成员变量&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;参数类型和参数名称
&lt;/span&gt;&lt;/font&gt;etc, &lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;但是应该不包括&lt;/span&gt;&lt;/font&gt;javadoc&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;和注释&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;正应为这样你才能用现代的&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;方便的调试你的程序&lt;/span&gt;&lt;/font&gt;.
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;定位行&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;单步执行&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;审查值
&lt;/span&gt;&lt;/font&gt;etc. &lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;如果我们在编译源码的时候加上&lt;/span&gt;&lt;/font&gt;-g:none&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;选项&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;反编译的代码就会损失一些清晰度&lt;/span&gt;&lt;/font&gt;.
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;例如方法参数名称和局部变量的名称等等&lt;/span&gt;&lt;/font&gt;.
&lt;p&gt;&lt;br&gt;

&lt;p&gt;2.	&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;在&lt;/span&gt;&lt;/font&gt;java&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;字节码中&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;混淆是保护知识产权的最佳途径&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;混淆执行如下一些或全部变换&lt;/span&gt;&lt;/font&gt;:
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;去除调试信息&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;名称的处理&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;编码字符串&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;改变控制流程&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;插入讹用的代码&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;删除未使用的代码和优化代码&lt;/span&gt;&lt;/font&gt;.
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;混淆带来了维护的困难&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;这可以通过配置混淆程序将其减到最小&lt;/span&gt;&lt;/font&gt;.
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;混淆的代码仍旧可读&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;除非使用了控制流程的混淆和字符串编码&lt;/span&gt;&lt;/font&gt;.
&lt;p&gt;&lt;br&gt;

&lt;ol start=3&gt;&lt;li&gt;&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;没有被声明为&lt;/span&gt;&lt;/font&gt;public&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;的方法和变量仍然可以访问&lt;/span&gt;&lt;/font&gt;.
	&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;具有&lt;/span&gt;&lt;/font&gt;package&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;或&lt;/span&gt;&lt;/font&gt;protected&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;可视属性的成员可以通过将助手类插入其包中或使用反射&lt;/span&gt;&lt;/font&gt;API&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;访问&lt;/span&gt;&lt;/font&gt;
	&lt;/ol&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;当变量或方法没有用可视性关键字&lt;/span&gt;&lt;/font&gt;(public
protected private)&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;声明时&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;就是&lt;/span&gt;&lt;/font&gt;package
visible&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;的&lt;/span&gt;&lt;/font&gt;.
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;假如一个包中的某个类有个&lt;/span&gt;&lt;/font&gt;package
visible&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;的属性&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;但是他又没有提供&lt;/span&gt;&lt;/font&gt;getter&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;方法给你&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;你又想获得这个属性的值&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;那我们可以在这个包中加一个助手方法&lt;/span&gt;&lt;/font&gt;.
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;为这个&lt;/span&gt;&lt;/font&gt;package
visible&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;的属性提供一个&lt;/span&gt;&lt;/font&gt;getter&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;方法&lt;/span&gt;&lt;/font&gt;.
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;不过当那个包是系统包时&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;可能会发生&lt;/span&gt;&lt;/font&gt;SecurityException.
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;我们下面会讨论这个&lt;/span&gt;&lt;/font&gt;.
&lt;ol start=3&gt;&lt;ol start=2&gt;&lt;li&gt;&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;使用反射访问私有类成员或方法&lt;/span&gt;&lt;/font&gt;.
	&lt;/ol&gt;&lt;/ol&gt;
&lt;p&gt;
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;这里要注意的是&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;如果设置了安全管理器&lt;/span&gt;&lt;/font&gt;(&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;大多数应用服务程序和中间产品通常都是这样&lt;/span&gt;&lt;/font&gt;),
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;那么我们还需要多做一些工作&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;要不就会发生&lt;/span&gt;&lt;/font&gt;RumtimePermission&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;发生&lt;/span&gt;&lt;/font&gt;.
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;为了让我们的代码能和已安装的安全管理器协同工作&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;必须准予通过反射访问声明的成员以及禁止访问检查的许可&lt;/span&gt;&lt;/font&gt;,
&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;这通过添加准予&lt;/span&gt;&lt;/font&gt;code
base&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;这两种许可&lt;/span&gt;&lt;/font&gt;java&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;政策文件的方式来实现&lt;/span&gt;&lt;/font&gt;:
&lt;p&gt;grant
{
&lt;p&gt;permission
java.lang.RuntimePermission “accessDeclaredMembers”;
&lt;p&gt;permission
java.lang.reflect.ReflectPermission “suppressAccessChecks”;
&lt;p&gt;};
&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;在&lt;/span&gt;&lt;/font&gt;java
command&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;中加上
 &lt;/span&gt;&lt;/font&gt;-Djava.security.manager
–Djava.security.policy=../conf/java.policy&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e9%80%8f%e8%a7%86java%e8%af%bb%e4%b9%a6%e7%ac%94%e8%ae%b0(%e4%b8%80)&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!200.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!200.entry</guid><pubDate>Sun, 04 Jun 2006 07:41:59 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!200/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!200.entry#comment</wfw:comment><dcterms:modified>2006-06-04T07:41:59Z</dcterms:modified></item><item><title>public static final long MONTH_IN_MILLIS = 30*24*60*60*1000</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!189.entry</link><description>public static final long MONTH_IN_MILLIS = 30*24*60*60*1000; 一看就明白这个是定义一月大概的微妙数.&lt;br&gt;&lt;br&gt;当我在计算两个月之间大概的月的个数时, 总是发现他返回一个负数, 奇怪, 后面调试发现 MONTH_IN_MILLIS = -1702967296. 呵呵, 原来overflow了.&lt;br&gt;&lt;br&gt;public static final long MONTH_IN_MILLIS = (30l)*24*60*60*1000;改成这样就ok了. &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+public+static+final+long+MONTH_IN_MILLIS+%3d+30*24*60*60*1000&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!189.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!189.entry</guid><pubDate>Tue, 18 Apr 2006 08:09:45 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!189/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!189.entry#comment</wfw:comment><dcterms:modified>2006-11-29T06:07:59Z</dcterms:modified></item><item><title>Clustering using Tomcat</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!178.entry</link><description>在Without Ejb第四章中有段对EJB的分布化和可扩展性的讨论:&lt;br&gt;&lt;br&gt;在人们中间有一个广为传播的信念: 分布式应用系统是高度可扩展的.这种观点认为,可以使用4个web容器, 8个ejb容器所有的业务都通过web层远程调用.这样就可以得到非常好的扩展行.&lt;br&gt;&lt;br&gt;然后作者在下文中批判了这种观点.每次远程方法调用造成的性能代价太过高昂,以至于在理论上还有什么 收益的化,早也被网络传输或对象编组中的损失给大大超过了. 作者建议的是对整个应用系统进行集群式部署. 然后在运用硬件负载均衡或web容器的负载均衡来分流访问.&lt;br&gt;&lt;br&gt;集群是个诱惑的名字. 今天花了一上午了解了如何在Tomcat中实现集群. 还不错, 当在Tomcat官方网站上看了集群的文章时, 感觉并不是很难, Tomcat5.X已经把集群内嵌了.&lt;br&gt;&lt;br&gt;配置也瞒简单的, Tomcat是用多波包(&lt;span&gt;multicast&lt;/span&gt;)的方式去发现其他的节点,其他节点回返回IP 和 端口, 以提供session的复制.  所以放在session里面的对象一定要实现序列化,  当在一定的时间内没有收到某个节点返回值时, 那个节点就判定死了.  还有就是要怎样实现load balancing ,  你要怎样分发请求(request)到集群节点(Node)去, 这里也有许多方法,  我看的是用Servlet Filter去做这件事的(参考下面网站的例子).&lt;br&gt;&lt;br&gt;集群能给我们带来很多好存, 性能的可扩展性,  可以关掉几台Node, 而系统不受影响. &lt;br&gt;&lt;br&gt;今天在Javalobby看到一个关于集群的一个trick. &lt;br&gt;假如在一台node中的session中存有一个List对象.&lt;br&gt;如果你是这样使用的话, &lt;br&gt;List l = (List)session.getAttribute(&amp;quot;list&amp;quot;);&lt;br&gt;l.add(&amp;quot;Denny&amp;quot;);&lt;br&gt;这个session不会引发session复制. 所有你还需要把这个List set回session中.&lt;br&gt;&lt;br style="font-style:italic"&gt;&lt;span style="font-style:italic"&gt; If you have an ArrayList in the session representing shopping
cart objects and if you just call getAttribute() to retrieve the
ArrayList and then add or change something without calling the
setAttribute(……………) then the container may not know that you have added
or changed something in the ArrayList. So the session will not be
replicated.
&lt;br&gt;&lt;br&gt;&lt;/span&gt;ok 就讲这么多了.&lt;br&gt;官方指南&lt;br&gt;http://tomcat.apache.org/tomcat-5.5-doc/cluster-howto.html&lt;br&gt;&lt;br&gt;下面的这个不错, 带了一个例子, 自己实现了两个load balancing的算法. 用的是Filter&lt;br&gt;&lt;span&gt;&lt;/span&gt;&lt;h2&gt;&lt;font size=3&gt;
Clustering and Load Balancing in Tomcat 5, Part 1&lt;/font&gt;&lt;/h2&gt;http://www.onjava.com/pub/a/onjava/2004/03/31/clustering.html?page=1&lt;br&gt;&lt;br&gt;&lt;span&gt;&lt;/span&gt;&lt;h2&gt;
Clustering and Load Balancing in Tomcat 5, Part 2&lt;/h2&gt;http://www.onjava.com/pub/a/onjava/2004/04/14/clustering.html?page=1&lt;br&gt;&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Clustering+using+Tomcat&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!178.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!178.entry</guid><pubDate>Fri, 31 Mar 2006 06:33:57 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!178/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!178.entry#comment</wfw:comment><dcterms:modified>2006-03-31T06:33:57Z</dcterms:modified></item><item><title>Essential Skills for Agile Development</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!176.entry</link><description>感谢小刚提供这本给我, 非常不错. &lt;img src="/rte/emoticons/smile_teeth.gif"&gt;&lt;br&gt;http://www.agileskills2.org/ESAD.pdf&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Essential+Skills+for+Agile+Development&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!176.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!176.entry</guid><pubDate>Wed, 29 Mar 2006 07:28:39 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!176/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!176.entry#comment</wfw:comment><dcterms:modified>2006-03-29T07:28:39Z</dcterms:modified></item><item><title>在eclipse里使用Embeded tomcat进行web项目开发和调试</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!158.entry</link><description>&lt;div&gt;1) 从&lt;a href="http://apache.justdn.org/tomcat/tomcat-5/v5.5.15/bin/apache-tomcat-5.5.15-embed.zip"&gt;http://apache.justdn.org/tomcat/tomcat-5/v5.5.15/bin/apache-tomcat-5.5.15-embed.zip&lt;/a&gt; 下载Tomcat的Embeded版本。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;2) 在eclipse里建一个java project（Tomcat Startup）。然后把从1)下载的tomcat解压到这个Tomcat Startup project中把Tomcat Startup/lib下所有的lib加到eclipse的Liberaries。(把Tomcat Startup/lib下所有的lib加到eclipse的Liberaries。)。如下图所示：&lt;/div&gt;
&lt;p&gt;&lt;img src="http://tk.files.storage.msn.com/x1pqP5noGPWAA7BCPHkwWtXlw3sGY4b3Mp70NtQmCr_kLA4IF2gpIyMZY9Eg3DqZqllYQ4ycZZyEKqVkACqNQFifFibQrgyS91hfOxm0_GGhVRCQ5YgphwUV1gWgPito-CcyzUVEZSJqjhYsIX29_aVMA"&gt; &lt;br&gt;3) 写一个tomcat 启动类，EmbeddedTomcat.java
&lt;p&gt;import java.io.File;&lt;br&gt;import java.net.InetAddress;
&lt;p&gt;import org.apache.catalina.Context;&lt;br&gt;import org.apache.catalina.Engine;&lt;br&gt;import org.apache.catalina.Host;&lt;br&gt;import org.apache.catalina.startup.Embedded;
&lt;p&gt;public class EmbeddedTomcat {
&lt;p&gt;  private String path = null;&lt;br&gt;  private Embedded embedded = null;&lt;br&gt;  private Host host = null;&lt;br&gt;  /**&lt;br&gt;    * Default Constructor&lt;br&gt;    *&lt;br&gt;    */&lt;br&gt;  public EmbeddedTomcat() {
&lt;p&gt;  }
&lt;p&gt;  /**&lt;br&gt;    * Basic Accessor setting the value of the context path&lt;br&gt;    *&lt;br&gt;    * @param path - the path&lt;br&gt;    */&lt;br&gt;  public void setPath(String path) {
&lt;p&gt;    this.path = path;&lt;br&gt;  }
&lt;p&gt;  /**&lt;br&gt;    * Basic Accessor returning the value of the context path&lt;br&gt;    *&lt;br&gt;    * @return - the context path&lt;br&gt;    */&lt;br&gt;  public String getPath() {
&lt;p&gt;    return path;&lt;br&gt;  }
&lt;p&gt;  /**&lt;br&gt;    * This method Starts the Tomcat server.&lt;br&gt;    */&lt;br&gt;  public void startTomcat() throws Exception {
&lt;p&gt;    // Create an embedded server&lt;br&gt;    embedded = new Embedded();&lt;br&gt;   &lt;br&gt;    Engine engine = null;&lt;br&gt;    // Set the home directory&lt;br&gt;//    System.setProperty(&amp;quot;catalina.home&amp;quot;, getPath());&lt;br&gt;    embedded.setCatalinaHome(getPath());
&lt;p&gt;    // Create an engine&lt;br&gt;    engine = embedded.createEngine();
&lt;p&gt;    // Create a default virtual host&lt;br&gt;    host = embedded.createHost(&amp;quot;localhost&amp;quot;, getPath()&lt;br&gt;      + &amp;quot;/webapps&amp;quot;);&lt;br&gt;    engine.addChild(host);&lt;br&gt;    engine.setDefaultHost(host.getName());
&lt;p&gt;    // Create the ROOT context&lt;br&gt;    Context rootCxt = embedded.createContext(&amp;quot;&amp;quot;,&lt;br&gt;      getPath() + &amp;quot;/webapps/ROOT&amp;quot;);&lt;br&gt;    rootCxt.setPrivileged(true);&lt;br&gt;    &lt;br&gt;    //Create your own context&lt;br&gt;    Context scoreCxt = embedded.createContext(&amp;quot;/score&amp;quot;, &amp;quot;E:\\Eclipse_WorkSpace\\Eclipse_Work\\WebDynamicAgg\\score&amp;quot;);&lt;br&gt;    &lt;br&gt;    &lt;br&gt;    host.addChild(rootCxt);&lt;br&gt;    host.addChild(scoreCxt);&lt;br&gt;    &lt;br&gt;    // Install the assembled container hierarchy&lt;br&gt;    embedded.addEngine(engine);
&lt;p&gt;    // Assemble and install a default HTTP connector&lt;br&gt;    embedded.addConnector(embedded.createConnector(&lt;br&gt;            InetAddress.getByName(&amp;quot;127.0.0.1&amp;quot;), 8080, false)); &lt;br&gt;    // Start the embedded server&lt;br&gt;    embedded.start();&lt;br&gt;  }
&lt;p&gt;  /**&lt;br&gt;    * This method Stops the Tomcat server.&lt;br&gt;    */&lt;br&gt;  public void stopTomcat() throws Exception {&lt;br&gt;    // Stop the embedded server&lt;br&gt;    embedded.stop();&lt;br&gt;  }
&lt;p&gt;  public static void main(String args[]) {
&lt;p&gt;    try {
&lt;p&gt;      EmbeddedTomcat tomcat = new EmbeddedTomcat();&lt;br&gt;      tomcat.setPath((new File(&amp;quot;.&amp;quot;)).getCanonicalPath());&lt;br&gt;      tomcat.startTomcat();&lt;br&gt;    }&lt;br&gt;    catch( Exception e ) {
&lt;p&gt;      e.printStackTrace();&lt;br&gt;    }&lt;br&gt;  }&lt;br&gt;}
&lt;p&gt;对其中tomcat 基础的介绍请看&lt;a href="http://www.onjava.com/lpt/a/1547"&gt;http://www.onjava.com/lpt/a/1547&lt;/a&gt;。在我的这个启动类中向tomcat中添加两个context， 一个tomcat root context， 另一个是在我的eclipse里面的一个web project。
&lt;p&gt;    // Create the ROOT context&lt;br&gt;    Context rootCxt = embedded.createContext(&amp;quot;&amp;quot;,&lt;br&gt;      getPath() + &amp;quot;/webapps/ROOT&amp;quot;);&lt;br&gt;    rootCxt.setPrivileged(true);&lt;br&gt;    &lt;br&gt;    //Create your own context&lt;br&gt;    Context scoreCxt = embedded.createContext(&amp;quot;/score&amp;quot;, &amp;quot;E:\\Eclipse_WorkSpace\\Eclipse_Work\\WebDynamicAgg\\score&amp;quot;);&lt;br&gt;    &lt;br&gt;    &lt;br&gt;    host.addChild(rootCxt);&lt;br&gt;    host.addChild(scoreCxt);
&lt;p&gt;假如要能认出eclipse的java project是一个web project， 你需要把你的web project的context做成发布时一样就行（本例中的context时score）， 然后在eclipse中改变build path：如下图：
&lt;p&gt;&lt;img src="http://tk.files.storage.msn.com/x1pmAkndzHuOffO511NLeC7PO9j72DN7KVTICWv1Q3FYsTWaXfRlttodn0XFfLW0DklTccn6KzqB57VfrQkgQacYalderEOt2ZjndZht78Q793_fC-Vrb3_-qhCpyjb_viL_h0auwPpVc4"&gt; &lt;br&gt;把所有的lib放到WEB-INF/lib 就行了。
&lt;p&gt; 
&lt;p&gt;4) 优点： 使用这种方式启动tomcat非常快， 而且更干净， 占用更少的memory。 相比下比 Myeclipse插件快很多(本人用的最多的也是Myeclipse的app server deployment 和 jsp xml editor)。而且myeclipse是在你每次保存文件时把这个文件考到对应的webapps下你的project下面。 使用这种方式还少了拷贝文件。
&lt;p&gt;5) 在实际操作时当我浏览score时， 发生了找不到一些lib的错误。 一个log4j还有一个是commons-el.jar（在TOMCAT_HOME/common\lib里面这里的tomcat不是emebed版本的），把这两个lib考到Tomcat Startup/lib文件夹下， 然后再把他们add到eclipse的Liberaries中。
&lt;p&gt;参考：&lt;a href="http://www.onjava.com/lpt/a/1547"&gt;http://www.onjava.com/lpt/a/1547&lt;/a&gt;&lt;div&gt;&lt;table cellspacing="0" border="0"&gt;&lt;tr height="8"&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://byfiles.storage.live.com&amp;#47;y1pnhxHQFxSFsxY3tyRkd1xmZmTb2o8O6ZNS634OAeASU_BEwx_9S0MvQ"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;AF4AB52B167D7EE7&amp;#33;159&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://byfiles.storage.live.com&amp;#47;y1pMfwTdI4wX0TVJDqjBNQPCo0B8djYbCK3iE-8DapN0Z0hJeLZum61ww"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;AF4AB52B167D7EE7&amp;#33;160&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://byfiles.storage.live.com&amp;#47;y1pMu6tfdDT9_xUjFXLQniUmB9uyuA2YiJKqXSurr2TQQ1O3-C5H_vZDA"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;AF4AB52B167D7EE7&amp;#33;161&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://byfiles.storage.live.com&amp;#47;y1p0ZFrIGOEsas5_rzeFsQmC1PohEbNXb_XLdXmfmY41lo_EXqhq96_mA"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;AF4AB52B167D7EE7&amp;#33;162&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e5%9c%a8eclipse%e9%87%8c%e4%bd%bf%e7%94%a8Embeded+tomcat%e8%bf%9b%e8%a1%8cweb%e9%a1%b9%e7%9b%ae%e5%bc%80%e5%8f%91%e5%92%8c%e8%b0%83%e8%af%95&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!158.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!158.entry</guid><pubDate>Tue, 28 Feb 2006 08:42:32 GMT</pubDate><slash:comments>5</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!158/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!158.entry#comment</wfw:comment><dcterms:modified>2006-02-28T08:42:32Z</dcterms:modified></item><item><title>解决sourceforge连不上的问题.</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!151.entry</link><description>&lt;div&gt;&lt;span&gt;sourceforge这几天都连不上, 不知道是不是国内封杀了. &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div&gt;&lt;span&gt;please try this. &lt;span&gt;&lt;a href="http://anonymouse.org/"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;http://anonymouse.org/&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;or   &lt;a href="http://prdownloads.sourceforge.net/tacos/tacos4-alpha-7-lib.zip?use_mirror=puzzle"&gt;http://prdownloads.sourceforge.net/&lt;/a&gt; + project name.&lt;br&gt;&lt;br&gt;example:  I want to download hibernate try this .. &lt;a href="http://prdownloads.sourceforge.net/hibernate"&gt;http://prdownloads.sourceforge.net/hibernate&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e8%a7%a3%e5%86%b3sourceforge%e8%bf%9e%e4%b8%8d%e4%b8%8a%e7%9a%84%e9%97%ae%e9%a2%98.&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!151.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!151.entry</guid><pubDate>Wed, 01 Feb 2006 08:02:54 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!151/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!151.entry#comment</wfw:comment><dcterms:modified>2006-02-03T05:24:30Z</dcterms:modified></item><item><title>Tomcat类装载的问题.</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!150.entry</link><description>昨天发布一个web application的时候发现一个奇怪的问题, 明明jar包里面有的类说找不到, 真是奇怪. 不过要下班了. 明天再说吧.&lt;br&gt;&lt;br&gt;&lt;pre&gt;java.lang.NoClassDefFoundError: com/netsboss/util/dbobject/GeneralEntity&lt;br&gt;	java.lang.ClassLoader.defineClass1(Native Method)&lt;br&gt;	java.lang.ClassLoader.defineClass(ClassLoader.java:620)&lt;br&gt;	java.lang.ClassLoader.defineClass(ClassLoader.java:465)&lt;br&gt;	com.netsboss.util.proxy.ProxyClassLoader.defineClass(ProxyClassLoader.java:75)&lt;br&gt;	com.netsboss.util.proxy.Proxy.getProxyClass(Proxy.java:216)&lt;br&gt;	com.netsboss.util.dbobject.DatabaseManager.generateClass(DatabaseManager.java:1161)&lt;br&gt;	com.netsboss.util.dbobject.DatabaseManager.&amp;lt;init&amp;gt;(DatabaseManager.java:240)&lt;br&gt;	com.netsboss.util.dbobject.DatabaseManager.getDatabaseManager(DatabaseManager.java:98)&lt;br&gt;	com.aft.constants.SystemConstants.getDefaultAFTDatabaseManager(SystemConstants.java:258)&lt;br&gt;	com.aft.database.retrieve.CAFTDBGetWebUserInfo.&amp;lt;init&amp;gt;(CAFTDBGetWebUserInfo.java:64)&lt;br&gt;	com.aft.database.retrieve.CAFTDBGetWebUserInfo.getCAFTDBGetWebUserInfo(CAFTDBGetWebUserInfo.java:51)&lt;br&gt;	com.aft.servlets.actions.RegisterAction.perform(RegisterAction.java:43)&lt;br&gt;	org.apache.struts.action.Action.execute(Action.java:420)&lt;br&gt;	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)&lt;br&gt;	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)&lt;br&gt;	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)&lt;br&gt;	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)&lt;br&gt;	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)&lt;br&gt;	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)&lt;br&gt;&lt;br&gt;上面的是异常的信息, 我明明把含有这个类的jar包放到了WEB-INF/lib下面. 怎么办, 还能这么办, trace code. &lt;br&gt;结果发现在了一个自定义的类装载器com.netsboss.util.proxy.ProxyClassLoader,他在构着函数里面没有传他的parent classloader(tomcat Webapp classloader)进去, 所以他的parent classloader是systemclassloader, 我想假如ProxyClassLoader的构着函数里面调用了super(ProxyClassLoader.class&lt;span&gt;.getClassLoader()&lt;/span&gt;);的话,&lt;br&gt; 应该能解决这个问题的. 我想这个就是这个java.lang.NoClassDefFoundError异常的原因吧.     &lt;br&gt;&lt;br&gt;这里有篇介绍类装载的问题, 也介绍了Tomcat类装器的机制.&lt;br&gt;&lt;a href="http://blog.csai.cn/blog/number01/2005628165135.html"&gt;http://blog.csai.cn/blog/number01/2005628165135.html&lt;/a&gt;&lt;br&gt;&lt;/pre&gt;&lt;pre&gt;添加一些: &lt;/pre&gt;&lt;pre&gt;这个是自定义的classloader, 他在构着函数里面没有传他的parent classloader(tomcat Webapp classloader)进去, 所以他的parent classloader是systemclassloader,&lt;/pre&gt;&lt;pre&gt;具体代码看java.lang.ClassLoader. &lt;/pre&gt;&lt;pre&gt;    /**&lt;br&gt;     * Creates a new class loader using the specified parent class loader for&lt;br&gt;     * delegation.&lt;br&gt;     *&lt;br&gt;     * &amp;lt;p&amp;gt; If there is a security manager, its &lt;a href="mailto:{@link"&gt;{@link&lt;/a&gt;&lt;br&gt;     * SecurityManager#checkCreateClassLoader()&lt;br&gt;     * &amp;lt;tt&amp;gt;checkCreateClassLoader&amp;lt;/tt&amp;gt;} method is invoked.  This may result in&lt;br&gt;     * a security exception.  &amp;lt;/p&amp;gt;&lt;br&gt;     *&lt;br&gt;     * @param  parent&lt;br&gt;     *         The parent class loader&lt;br&gt;     *&lt;br&gt;     * @throws  SecurityException&lt;br&gt;     *          If a security manager exists and its&lt;br&gt;     *          &amp;lt;tt&amp;gt;checkCreateClassLoader&amp;lt;/tt&amp;gt; method doesn't allow creation&lt;br&gt;     *          of a new class loader.&lt;br&gt;     *&lt;br&gt;     * @since  1.2&lt;br&gt;     */&lt;br&gt;    protected ClassLoader(ClassLoader parent) {&lt;br&gt; SecurityManager security = System.getSecurityManager();&lt;br&gt; if (security != null) {&lt;br&gt;     security.checkCreateClassLoader();&lt;br&gt; }&lt;br&gt; this.parent = parent;&lt;br&gt; initialized = true;&lt;br&gt;    }&lt;/pre&gt;&lt;pre&gt;    /**&lt;br&gt;     * Creates a new class loader using the &amp;lt;tt&amp;gt;ClassLoader&amp;lt;/tt&amp;gt; returned by&lt;br&gt;     * the method &lt;a href="mailto:{@link"&gt;{@link&lt;/a&gt; #getSystemClassLoader()&lt;br&gt;     * &amp;lt;tt&amp;gt;getSystemClassLoader()&amp;lt;/tt&amp;gt;} as the parent class loader.&lt;br&gt;     *&lt;br&gt;     * &amp;lt;p&amp;gt; If there is a security manager, its &lt;a href="mailto:{@link"&gt;{@link&lt;/a&gt;&lt;br&gt;     * SecurityManager#checkCreateClassLoader()&lt;br&gt;     * &amp;lt;tt&amp;gt;checkCreateClassLoader&amp;lt;/tt&amp;gt;} method is invoked.  This may result in&lt;br&gt;     * a security exception.  &amp;lt;/p&amp;gt;&lt;br&gt;     *&lt;br&gt;     * @throws  SecurityException&lt;br&gt;     *          If a security manager exists and its&lt;br&gt;     *          &amp;lt;tt&amp;gt;checkCreateClassLoader&amp;lt;/tt&amp;gt; method doesn't allow creation&lt;br&gt;     *          of a new class loader.&lt;br&gt;     */&lt;br&gt;    protected ClassLoader() {&lt;br&gt; SecurityManager security = System.getSecurityManager();&lt;br&gt; if (security != null) {&lt;br&gt;     security.checkCreateClassLoader();&lt;br&gt; }&lt;br&gt; this.parent = getSystemClassLoader();&lt;br&gt; initialized = true;&lt;br&gt;    }&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt;package com.netsboss.util.proxy;&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt;import java.io.File;&lt;/pre&gt;&lt;pre&gt;import java.io.FileOutputStream;&lt;/pre&gt;&lt;pre&gt;import java.io.IOException;&lt;br&gt;import java.io.UnsupportedEncodingException;&lt;/pre&gt;&lt;pre&gt;import java.net.URL;&lt;br&gt;import java.net.URLDecoder;&lt;br&gt;import java.net.URLEncoder;&lt;/pre&gt;&lt;pre&gt;import java.util.HashMap;&lt;br&gt;import java.util.Locale;&lt;/pre&gt;&lt;pre&gt;import org.apache.log4j.Category;&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt;public class ProxyClassLoader extends ClassLoader {&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt; private static Category log = Category.getInstance(ProxyClassLoader.class);&lt;/pre&gt;&lt;pre&gt; private HashMap classes = new HashMap();&lt;/pre&gt;&lt;pre&gt; private boolean saveToClassPath = false;&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt; public ProxyClassLoader(boolean saveToClassPath){&lt;/pre&gt;&lt;pre&gt;  this.saveToClassPath = saveToClassPath;&lt;/pre&gt;&lt;pre&gt; }&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt; /**&lt;/pre&gt;&lt;pre&gt;  * @see ClassLoader#findClass(String)&lt;/pre&gt;&lt;pre&gt;  */&lt;/pre&gt;&lt;pre&gt; protected Class findClass(String name) throws ClassNotFoundException {&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt;  Class find = super.findClass(name);&lt;/pre&gt;&lt;pre&gt;  if(find != null) return find;&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt;  find = (Class)classes.get(name);&lt;/pre&gt;&lt;pre&gt;  if(find != null) return find;&lt;/pre&gt;&lt;pre&gt;  else throw new ClassNotFoundException(name);&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt; }&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt; public void defineClass(byte classfile[], String classname){&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt;  Class clazz = defineClass(classname, classfile,0, classfile.length);&lt;/pre&gt;&lt;pre&gt;  classes.put(classname,clazz);&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt;  if(saveToClassPath){&lt;/pre&gt;&lt;pre&gt;   saveToClassPath(classfile, classname);&lt;/pre&gt;&lt;pre&gt;  }&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt; }&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt; /**&lt;/pre&gt;&lt;pre&gt;  * return a class which implements all the interfaces or inherit from one of class&lt;/pre&gt;&lt;pre&gt;  * currently, just return null.&lt;/pre&gt;&lt;pre&gt;  */&lt;/pre&gt;&lt;pre&gt; public Class search(Class interfaces[]){&lt;/pre&gt;&lt;pre&gt;  return null;&lt;/pre&gt;&lt;pre&gt; }&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt; private void saveToClassPath(byte classfile[], String classname){&lt;/pre&gt;&lt;pre&gt;  String filename = classname + &amp;quot;.class&amp;quot;;&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt;  URL url = getClass().getProtectionDomain().getCodeSource().getLocation();&lt;/pre&gt;&lt;pre&gt;  if( &amp;quot;file&amp;quot;.equals(url.getProtocol()) &amp;amp;&amp;amp; (url.getHost() == null || url.getHost().equals(&amp;quot;&amp;quot;)) ){&lt;/pre&gt;&lt;pre&gt;      String dir = null;&lt;/pre&gt;&lt;pre&gt;      try{&lt;br&gt;        dir = URLDecoder.decode(url.getFile(), &amp;quot;UTF-8&amp;quot;);&lt;br&gt;      }catch(UnsupportedEncodingException ex){&lt;br&gt;        log.error(&amp;quot;Encoding not supported&amp;quot;, ex);&lt;br&gt;      }&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt;   File classpath = new File(dir);&lt;/pre&gt;&lt;pre&gt;   if(classpath.isDirectory() == false){&lt;/pre&gt;&lt;pre&gt;    log.info(&amp;quot;Classpath error for ProxyClassLoader:&amp;quot; + dir + &amp;quot; not a directory&amp;quot;);&lt;/pre&gt;&lt;pre&gt;    return;&lt;/pre&gt;&lt;pre&gt;   }&lt;/pre&gt;&lt;pre&gt;   File file = new File(classpath, filename);&lt;/pre&gt;&lt;pre&gt;   try {&lt;/pre&gt;&lt;pre&gt;    FileOutputStream os = new FileOutputStream(file);&lt;/pre&gt;&lt;pre&gt;    os.write(classfile);&lt;/pre&gt;&lt;pre&gt;    os.close();&lt;/pre&gt;&lt;pre&gt;   }&lt;/pre&gt;&lt;pre&gt;   catch(IOException ex){&lt;br&gt;        log.error(&amp;quot;Error writing Proxy Class file&amp;quot;, ex);&lt;br&gt;    ex.printStackTrace();&lt;/pre&gt;&lt;pre&gt;   }&lt;/pre&gt;&lt;pre&gt;  }&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt; }&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre&gt;}&lt;/pre&gt;&lt;pre&gt;参考这篇文章&lt;/pre&gt;&lt;pre&gt;&lt;a href="http://www.cjsdn.net/post/view?bid=29&amp;amp;id=162060&amp;amp;sty=1&amp;amp;tpg=1&amp;amp;age=0"&gt;http://www.cjsdn.net/post/view?bid=29&amp;amp;id=162060&amp;amp;sty=1&amp;amp;tpg=1&amp;amp;age=0&lt;/a&gt;&lt;/pre&gt;&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Tomcat%e7%b1%bb%e8%a3%85%e8%bd%bd%e7%9a%84%e9%97%ae%e9%a2%98.&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!150.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!150.entry</guid><pubDate>Wed, 18 Jan 2006 08:21:44 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!150/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!150.entry#comment</wfw:comment><dcterms:modified>2006-01-19T07:38:34Z</dcterms:modified></item><item><title>Usefull swing component-Auto complete combobox.</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!146.entry</link><description>&lt;p&gt;Record this component. do some deeply research on it, if I have time. it will make you be familiar with Swing componect structure.
&lt;p&gt;&lt;a href="http://www.orbital-computer.de/JComboBox/"&gt;http://www.orbital-computer.de/JComboBox/&lt;/a&gt;
&lt;div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Usefull+swing+component-Auto+complete+combobox.&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!146.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!146.entry</guid><pubDate>Wed, 04 Jan 2006 08:04:04 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!146/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!146.entry#comment</wfw:comment><dcterms:modified>2006-01-04T08:04:04Z</dcterms:modified></item><item><title>Java Nt Service.</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!139.entry</link><description>&lt;div&gt;在FSI项目中, 客户说要把JNDIServer, CalcManager做成Windows Service. 这个想法不错. 一开机就能自动运行. 以后也不用一个一个去启动JNDIServer, CalcManager了.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;网上找到了&lt;a href="http://javaservice.objectweb.org/"&gt;http://javaservice.objectweb.org/&lt;/a&gt;  一个制作javaService的工具. download, 里面有一些sample 和 document.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;FSI中使用了&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;set JAVA_DLL=&amp;quot;C:\Program Files\Java\jdk1.5.0_03\jre\bin\server\jvm.dll&amp;quot;&lt;br&gt;set SERVICE_NAME=CalcService&lt;br&gt;set START_CLASS=com.fsillc.remote.server.CalculatorServiceImpl&lt;br&gt;set CP=&amp;quot;C:\AFTPrograms\FSI_JNDI.542\fsillc.jar&amp;quot;&lt;br&gt;set WORK_DIR=&amp;quot;C:\AFTPrograms\FSI_JNDI.542&amp;quot;&lt;/div&gt;
&lt;div&gt;JavaService.exe -install %SERVICE_NAME% %JAVA_DLL% -Djava.class.path=%CP% -Xmx756M -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,address=3999,suspend=n -start %START_CLASS% -method main -out %WORK_DIR%\CalcServer.log -err %WORK_DIR%\CalcServerErr.log -current %WORK_DIR%&lt;br&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Java+Nt+Service.&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!139.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!139.entry</guid><pubDate>Thu, 22 Dec 2005 02:04:52 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!139/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!139.entry#comment</wfw:comment><dcterms:modified>2005-12-22T02:04:52Z</dcterms:modified></item><item><title>j2ee程序员应该掌握的linux知识</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!137.entry</link><description>&lt;a href="http://blog.csdn.net/yzhz/archive/2004/11/29/198050.aspx"&gt;http://blog.csdn.net/yzhz/archive/2004/11/29/198050.aspx&lt;/a&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+j2ee%e7%a8%8b%e5%ba%8f%e5%91%98%e5%ba%94%e8%af%a5%e6%8e%8c%e6%8f%a1%e7%9a%84linux%e7%9f%a5%e8%af%86&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!137.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!137.entry</guid><pubDate>Wed, 30 Nov 2005 06:00:55 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!137/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!137.entry#comment</wfw:comment><dcterms:modified>2005-11-30T06:00:55Z</dcterms:modified></item><item><title>A common log sample.</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!136.entry</link><description>&lt;p&gt;# Log4j configuration file.&lt;br&gt;log4j.rootCategory=INFO, Console, X&lt;br&gt;log4j.logger.com.fsillc.remote.server=DEBUG, R&lt;br&gt;log4j.logger.com.fsillc.remote.server.CalculatorImplementation=DEBUG, Y&lt;br&gt;log4j.logger.com.fsillc.remote.server.FSINamingServer=DEGUG, Z&lt;br&gt;log4j.logger.com.fsillc.tabs.defaults.RemoteCalculatorProvider=DEGUG, W
&lt;p&gt;# Available levels are DEBUG, INFO, WARN, ERROR, FATAL
&lt;p&gt;#&lt;br&gt;# A1 is a ConsoleAppender&lt;br&gt;log4j.appender.Console=org.apache.log4j.ConsoleAppender&lt;br&gt;log4j.appender.Console.layout=org.apache.log4j.PatternLayout&lt;br&gt;log4j.appender.Console.layout.ConversionPattern=%-5p - %F(%L): %m%n
&lt;p&gt;&lt;br&gt;log4j.appender.X=org.apache.log4j.RollingFileAppender&lt;br&gt;log4j.appender.X.File=c:\\jndi_log\\gui.log&lt;br&gt;log4j.appender.X.layout=org.apache.log4j.PatternLayout&lt;br&gt;log4j.appender.X.layout.ConversionPattern=%-5p [%t][%d] - %F(%L): %m%n&lt;br&gt;log4j.appender.X.MaxFileSize=10000KB&lt;br&gt;log4j.appender.X.MaxBackupIndex=20
&lt;p&gt;&lt;br&gt;log4j.appender.Y=org.apache.log4j.RollingFileAppender&lt;br&gt;log4j.appender.Y.File=c:\\jndi_log\\calc.log&lt;br&gt;log4j.appender.Y.layout=org.apache.log4j.PatternLayout&lt;br&gt;log4j.appender.Y.layout.ConversionPattern=%-5p [%t][%d] - %F(%L): %m%n&lt;br&gt;log4j.appender.Y.MaxFileSize=10000KB&lt;br&gt;log4j.appender.Y.MaxBackupIndex=20
&lt;p&gt;&lt;br&gt;log4j.appender.R=org.apache.log4j.RollingFileAppender&lt;br&gt;log4j.appender.R.File=c:\\jndi_log\\jndi.log&lt;br&gt;log4j.appender.R.layout=org.apache.log4j.PatternLayout&lt;br&gt;log4j.appender.R.layout.ConversionPattern=%-5p [%t][%d] - %F(%L): %m%n&lt;br&gt;log4j.appender.R.MaxFileSize=10000KB&lt;br&gt;log4j.appender.R.MaxBackupIndex=20
&lt;p&gt;log4j.appender.Z=org.apache.log4j.RollingFileAppender&lt;br&gt;log4j.appender.Z.File=c:\\jndi_log\\namingServer.log&lt;br&gt;log4j.appender.Z.layout=org.apache.log4j.PatternLayout&lt;br&gt;log4j.appender.Z.layout.ConversionPattern=%-5p [%t][%d] - %F(%L): %m%n&lt;br&gt;log4j.appender.Z.MaxFileSize=10000KB&lt;br&gt;log4j.appender.Z.MaxBackupIndex=20
&lt;p&gt;log4j.appender.W=org.apache.log4j.RollingFileAppender&lt;br&gt;log4j.appender.W.File=c:\\jndi_log\\calcProvider.log&lt;br&gt;log4j.appender.W.layout=org.apache.log4j.PatternLayout&lt;br&gt;log4j.appender.W.layout.ConversionPattern=%-5p [%t][%d] - %F(%L): %m%n&lt;br&gt;log4j.appender.W.MaxFileSize=10000KB&lt;br&gt;log4j.appender.W.MaxBackupIndex=20
&lt;p&gt; 
&lt;div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+A+common+log+sample.&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!136.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!136.entry</guid><pubDate>Tue, 29 Nov 2005 06:32:57 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!136/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!136.entry#comment</wfw:comment><dcterms:modified>2005-11-29T06:32:57Z</dcterms:modified></item><item><title>Java 平台调试架构（ Java Platform Debugger Architecture ， JPDA ）</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!135.entry</link><description>&lt;div&gt;
&lt;div&gt;一直以为java调试是IDE一方的事，以为调试都是IDE自己实现的。知道看了篇文章后才知道不是这样子。&lt;a href="http://www.eclipsezone.com/eclipse/forums/t53459.html"&gt;http://www.eclipsezone.com/eclipse/forums/t53459.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;我们要调试一个java程序，我们需要在运行参数前加上 &lt;/div&gt;
&lt;div&gt;-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044  这些参数的具体意义看。&lt;a href="http://java.sun.com/products/jpda/doc/conninv.html#Invocation"&gt;http://java.sun.com/products/jpda/doc/conninv.html#Invocation&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;如：java -classpath E:\Eclipse_WorkSpace\Eclipse_Work\Test\classes;E:\Eclipse_WorkSpace\Eclipse_Work\Test\lib\log4j-1.2.8.jar;E:\Eclipse_WorkSpace\Eclipse_Work\config\lib\msbase.jar;E:\Eclipse_WorkSpace\Eclipse_Work\config\lib\mssqlserver.jar;E:\Eclipse_WorkSpace\Eclipse_Work\config\lib\msutil.jar;E:\Eclipse_WorkSpace\Eclipse_Work\Test\lib\fscontext.jar;E:\Eclipse_WorkSpace\Eclipse_Work\Test\lib\providerutil.jar -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,suspend=y,address=localhost:1516 com.dengyin.rmi.HelloWorld&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; JPDA 是一套组成构建调试应用程序框架的 API 。幸运的是，我们大多数人不需要自己考虑创建调试应用程序的事，因为这些是与主要的 IDE 捆绑在一起提供的。调试在这些新的 IDE 中是一个相当简单和轻松的过程。 &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;当我们用eclipse去调试一个java程序的时，确实也是这样。&lt;/div&gt;
&lt;div&gt;&lt;img src="http://storage.msn.com/x1pqP5noGPWAA7BCPHkwWtXlw3sGY4b3Mp70NtQmCr_kLDlgkHbNhzFaHiBN79nPECD4AIjSUrOp3DmxRfOrgpqK2H4Y1GGB758qnfoo1VX55oDHJ7ihtt7cV_HyNZnApI-KuIiCHgXdH1rcx7y5Rxpzg"&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;当我们不是用eclipse运行java程序时，我们可以用eclipse的remote debug去调试， 只要我们知道这个java程序的源代码和java程序debug的端口。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;我们需要在运行的java程序参数上加上-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 类似的参数。然后用eclipse去调试就行了。 具体请看&lt;a href="http://www.eclipsezone.com/eclipse/forums/t53459.html"&gt;http://www.eclipsezone.com/eclipse/forums/t53459.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Java+%e5%b9%b3%e5%8f%b0%e8%b0%83%e8%af%95%e6%9e%b6%e6%9e%84%ef%bc%88+Java+Platform+Debugger+Architecture+%ef%bc%8c+JPDA+%ef%bc%89&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!135.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!135.entry</guid><pubDate>Mon, 07 Nov 2005 06:11:24 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!135/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!135.entry#comment</wfw:comment><dcterms:modified>2005-11-07T06:11:24Z</dcterms:modified></item><item><title>Read/Write Lock</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!129.entry</link><description>&lt;div&gt;&lt;pre&gt;&lt;font color=navy&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color=navy&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt; SomeContainer &lt;font color=navy&gt;{&lt;/font&gt;
 &lt;font color=navy&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt; Set&amp;lt;Element&amp;gt; elements;
 &lt;font color=navy&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt; ReadWriteLock globalLock;
 &lt;font color=navy&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt; Lock readLock;
 &lt;font color=navy&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt; Lock writeLock;
 SomeContainer() &lt;font color=navy&gt;{&lt;/font&gt;
  elements = &lt;font color=navy&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; HashSet&amp;lt;Element&amp;gt;();
  globalLock = &lt;font color=navy&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; ReentrantReadWriteLock();
  readLock = globalLock.readLock();
  writeLock = globalLock.writeLock();
 &lt;font color=navy&gt;}&lt;/font&gt;
 
 &lt;font color=navy&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color=navy&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; addElement(Element elem) &lt;font color=navy&gt;{&lt;/font&gt;
  writeLock.lock();
  &lt;font color=navy&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt; &lt;font color=navy&gt;{&lt;/font&gt;
   elements.add(elem);
  &lt;font color=navy&gt;}&lt;/font&gt;
  &lt;font color=navy&gt;&lt;b&gt;finally&lt;/b&gt;&lt;/font&gt; &lt;font color=navy&gt;{&lt;/font&gt;
   writeLock.unlock();
  &lt;font color=navy&gt;}&lt;/font&gt; 
 &lt;font color=navy&gt;}&lt;/font&gt;
 
 &lt;font color=navy&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color=navy&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; processElements(ElementProcessor processor) &lt;font color=navy&gt;{&lt;/font&gt;
  readLock.lock();
  &lt;font color=navy&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt; &lt;font color=navy&gt;{&lt;/font&gt;
   Iterator&amp;lt;Element&amp;gt; iter = elements.iterator();
    &lt;font color=navy&gt;&lt;b&gt;while&lt;/b&gt;&lt;/font&gt;(iter.hasNext()) &lt;font color=navy&gt;{&lt;/font&gt;
     Element element = iter.next();
     processor.processElement(element);
  &lt;font color=navy&gt;}&lt;/font&gt;
  &lt;font color=navy&gt;&lt;b&gt;finally&lt;/b&gt;&lt;/font&gt; &lt;font color=navy&gt;{&lt;/font&gt;
   readLock.unlock();
 &lt;font color=navy&gt;}&lt;/font&gt; 
 &lt;font color=darkgreen&gt;// ... &lt;/font&gt;
&lt;font color=navy&gt;}&lt;/font&gt;
&lt;font color=navy&gt;&lt;b&gt;interface&lt;/b&gt;&lt;/font&gt; ElementProcessor &lt;font color=navy&gt;{&lt;/font&gt;
 &lt;font color=navy&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; processElement(Element element);
&lt;font color=navy&gt;}&lt;/font&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;So, in the example above, the first line in &lt;code&gt;processElements &lt;/code&gt;will let everybody play at once so long as the write lock is not held. Then, when the write lock is requested, the requesting thread will be made to wait until all existing readers are done (no further readers will be let in), and then the writer thread may begin.
&lt;p&gt; 
&lt;p&gt;&lt;a href="http://www.javalobby.com/java/forums/t45090.html"&gt;http://www.javalobby.com/java/forums/t45090.html&lt;/a&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Read%2fWrite+Lock&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!129.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!129.entry</guid><pubDate>Tue, 01 Nov 2005 08:44:07 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!129/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!129.entry#comment</wfw:comment><dcterms:modified>2005-11-01T08:44:07Z</dcterms:modified></item><item><title>Runtime.getRuntime().addShutdownHook(new ShutdownThread()) Hook方法。</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!127.entry</link><description>&lt;div&gt;在看公司的代码时，发现一段奇妙的代码。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;情景： &lt;/div&gt;
&lt;div&gt;        1） CalcManager 用command line运行。他能够产生Calculator Process。&lt;/div&gt;
&lt;div&gt;        2） Calculator Process Sevice进程， 以Window 进程的形式存在。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;需求：&lt;/div&gt;
&lt;div&gt;        CalcManager 能够管理他生长的Calc Process。 也就是说CalcManagerShutdown的时候Calc Process也要能自动Shutdown。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;如果我们提供一个exit的button在GUI上面的话  上面实现起来非常顺， 在exit 的action上先Shutdown这些Calc Process 然后在  System.exit(0),  但是假如用户不小心在Command 窗口上按了Ctrl ＋ c的话或者在Task Manager上killCalcManager进程的话，那么 Kill Calc Process这个机会就没有。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Java提供了这个问题的解决方案public void addShutdownHook(Thread hook)。  当java虚拟机推出的时候回调用hook  Thread里面的run方法，也就是运行那个hook线程。 Hook经常被叫着钩子方法。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;其实这种应用也不少。 想Ms Word 在编辑时 都会Open一个临时文件，不知道大家有没有注意。我们可以试试通过Task Manager去Kill Word的进程， 这时这个临时文件应该也会被Clean掉的。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;详细可以看这片文章&lt;a href="http://www.onjava.com/pub/a/onjava/2003/03/26/shutdownhook.html#listing1"&gt;http://www.onjava.com/pub/a/onjava/2003/03/26/shutdownhook.html#listing1&lt;/a&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Runtime.getRuntime().addShutdownHook(new+ShutdownThread())+Hook%e6%96%b9%e6%b3%95%e3%80%82&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!127.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!127.entry</guid><pubDate>Thu, 13 Oct 2005 09:32:43 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!127/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!127.entry#comment</wfw:comment><dcterms:modified>2005-10-13T09:32:43Z</dcterms:modified></item><item><title>Runtime.getRuntime().addShutdownHook(new ShutdownThread()) Hook方法。</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!126.entry</link><description>&lt;div&gt;在看公司的代码时，发现一段奇妙的代码。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;情景： &lt;/div&gt;
&lt;div&gt;        1） CalcManager 用command line运行。他能够产生Calculator Process。&lt;/div&gt;
&lt;div&gt;        2） Calculator Process Sevice进程， 以Window 进程的形式存在。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;需求：&lt;/div&gt;
&lt;div&gt;        CalcManager 能够管理他生长的Calc Process。 也就是说CalcManagerShutdown的时候Calc Process也要能自动Shutdown。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;如果我们提供一个exit的button在GUI上面的话  上面实现起来非常顺， 在exit 的action上先Shutdown这些Calc Process 然后在  System.exit(0),  但是假如用户不小心在Command 窗口上按了Ctrl ＋ c的话或者在Task Manager上killCalcManager进程的话，那么 Kill Calc Process这个机会就没有。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Java提供了这个问题的解决方案public void addShutdownHook(Thread hook)。  当java虚拟机推出的时候回调用hook  Thread里面的run方法，也就是运行那个hook线程。 Hook经常被叫着钩子方法。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;其实这种应用也不少。 想Ms Word 在编辑时 都会Open一个临时文件，不知道大家有没有注意。我们可以试试通过Task Manager去Kill Word的进程， 这时这个临时文件应该也会被Clean掉的。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;详细可以看这片文章&lt;a href="http://www.onjava.com/pub/a/onjava/2003/03/26/shutdownhook.html#listing1"&gt;http://www.onjava.com/pub/a/onjava/2003/03/26/shutdownhook.html#listing1&lt;/a&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Runtime.getRuntime().addShutdownHook(new+ShutdownThread())+Hook%e6%96%b9%e6%b3%95%e3%80%82&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!126.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!126.entry</guid><pubDate>Thu, 13 Oct 2005 09:31:34 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!126/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!126.entry#comment</wfw:comment><dcterms:modified>2005-10-13T09:31:34Z</dcterms:modified></item><item><title>How are Servlet paths mapped?</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!125.entry</link><description>&lt;div&gt;补充点基础知识.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Path mappings are used to map a URI to a contexts, handlers and servlets. &lt;br&gt;&lt;br&gt;The following types of mapping are supported and applied in the order presented. &lt;br&gt;&lt;br&gt;&lt;b&gt;Absolute Mapping&lt;/b&gt; &lt;code&gt;&lt;pre&gt;Path Spec:      /path
&lt;br&gt;&lt;br&gt;
Will match:     /path            path=/path  info=&amp;lt;null&amp;gt;
&lt;br&gt;&lt;br&gt;
Will not match: /
                /path/
                /path/info
                /path/info.jsp
                /other
&lt;/pre&gt;&lt;/code&gt;&lt;font face="宋体, MS Song"&gt;&lt;b&gt;Prefix Mapping&lt;/b&gt; &lt;/font&gt;&lt;code&gt;&lt;pre&gt;Path Spec:      /path/*
&lt;br&gt;&lt;br&gt;
Will match:     /path            path=/path  info=&amp;lt;null&amp;gt;
                /path/           path=/path  info=/
                /path/info       path=/path  info=/info
                /path/info.jsp   path=/path  info=/info.jsp
&lt;br&gt;&lt;br&gt;
Will not match: /
                /other
&lt;/pre&gt;&lt;/code&gt;&lt;font face="宋体, MS Song"&gt;&lt;b&gt;Suffix Mapping&lt;/b&gt; &lt;/font&gt;&lt;code&gt;&lt;pre&gt;Path Spec:      *.jsp
&lt;br&gt;&lt;br&gt;
Will match:     /path/info.jsp   path=       info=/path/info.jsp
&lt;br&gt;&lt;br&gt;
Will not match: /
                /path
                /path/
                /path/info
                /other
&lt;/pre&gt;&lt;/code&gt;&lt;font face="宋体, MS Song"&gt;&lt;b&gt;Default Mapping&lt;/b&gt; &lt;/font&gt;&lt;code&gt;&lt;pre&gt;Path Spec:      /
&lt;br&gt;&lt;br&gt;
Will match:     /                path=       info=/
                /path            path=       info=/path
                /path/           path=       info=/path/
                /path/info       path=       info=/path/info
                /path/info.jsp   path=       info=/path/info.jsp
                /other           path=       info=/other
&lt;br&gt;&lt;br&gt;
Will not match:                 
&lt;/pre&gt;&lt;/code&gt;
&lt;hr&gt;
&lt;font face="宋体, MS Song"&gt;&lt;b&gt;Typical examples&lt;/b&gt; &lt;br&gt;&lt;br&gt;&lt;em&gt;Context and Servlet with path&lt;/em&gt;&lt;/font&gt;&lt;code&gt;&lt;pre&gt;  Context Path Spec :    /context/*
  Servlet Path Spec :    /servlet/*
&lt;br&gt;&lt;br&gt;
  URI                &lt;a href="http://spaces.msn.com/mmm2005-09-20_19.45/ContextPath.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;ContextPath&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;     &lt;a href="http://spaces.msn.com/mmm2005-09-20_19.45/ServletPath.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;ServletPath&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;   &lt;a href="http://spaces.msn.com/mmm2005-09-20_19.45/PathInfo.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;PathInfo&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
  ========================================================= 
  /context/servlet   /context        /servlet      null
  /context/servlet/  /context        /servlet      /
  /context/servlet/x /context        /servlet      /x
&lt;/pre&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;&lt;em&gt;&lt;font face="宋体, MS Song"&gt;Default Context&lt;/font&gt;&lt;/em&gt;&lt;code&gt;&lt;pre&gt;  Context Path Spec :    /
  Servlet Path Spec :    /servlet/*
&lt;br&gt;&lt;br&gt;
  URI                &lt;a href="http://spaces.msn.com/mmm2005-09-20_19.45/ContextPath.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;ContextPath&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;     &lt;a href="http://spaces.msn.com/mmm2005-09-20_19.45/ServletPath.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;ServletPath&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;   &lt;a href="http://spaces.msn.com/mmm2005-09-20_19.45/PathInfo.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;PathInfo&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
  ========================================================= 
  /servlet           &amp;quot;&amp;quot;              /servlet      null
  /servlet/          &amp;quot;&amp;quot;              /servlet      /
  /servlet/x         &amp;quot;&amp;quot;              /servlet      /x
&lt;/pre&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;&lt;em&gt;&lt;font face="宋体, MS Song"&gt;Context and Suffix Servlet&lt;/font&gt;&lt;/em&gt;&lt;code&gt;&lt;pre&gt;  Context Path Spec :    /context/*
  Servlet Path Spec :    *.txt
&lt;br&gt;&lt;br&gt;
  URI                &lt;a href="http://spaces.msn.com/mmm2005-09-20_19.45/ContextPath.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;ContextPath&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;     &lt;a href="http://spaces.msn.com/mmm2005-09-20_19.45/ServletPath.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;ServletPath&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;   &lt;a href="http://spaces.msn.com/mmm2005-09-20_19.45/PathInfo.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;PathInfo&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
  ========================================================= 
  /context/xxx.txt   /context        &amp;quot;&amp;quot;            /xxx.txt
&lt;/pre&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;&lt;em&gt;&lt;font face="宋体, MS Song"&gt;Context and Default Servlet&lt;/font&gt;&lt;/em&gt;&lt;code&gt;&lt;pre&gt;  Context Path Spec :    /context/*
  Servlet Path Spec :    /
&lt;br&gt;&lt;br&gt;
  URI                &lt;a href="http://spaces.msn.com/mmm2005-09-20_19.45/ContextPath.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;ContextPath&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;     &lt;a href="http://spaces.msn.com/mmm2005-09-20_19.45/ServletPath.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;ServletPath&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;   &lt;a href="http://spaces.msn.com/mmm2005-09-20_19.45/PathInfo.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;PathInfo&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
  ========================================================= 
  /context/xxx       /context        &amp;quot;&amp;quot;            /xxx
&lt;/pre&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;&lt;em&gt;&lt;font face="宋体, MS Song"&gt;Default Context and Servlet&lt;/font&gt;&lt;/em&gt;&lt;code&gt;&lt;pre&gt;  Context Path Spec :    /
  Servlet Path Spec :    /
&lt;br&gt;&lt;br&gt;
  URI                &lt;a href="http://spaces.msn.com/mmm2005-09-20_19.45/ContextPath.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;ContextPath&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;     &lt;a href="http://spaces.msn.com/mmm2005-09-20_19.45/ServletPath.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;ServletPath&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;   &lt;a href="http://spaces.msn.com/mmm2005-09-20_19.45/PathInfo.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;PathInfo&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
  ========================================================= 
  /xxx               &amp;quot;&amp;quot;              &amp;quot;&amp;quot;            /xxx
&lt;/pre&gt;&lt;pre&gt;来自:http://jetty.mortbay.org/jetty/faq?s=500-Servlets&amp;amp;t=Path%20Mapping&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+How+are+Servlet+paths+mapped%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!125.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!125.entry</guid><pubDate>Fri, 07 Oct 2005 04:33:38 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!125/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!125.entry#comment</wfw:comment><dcterms:modified>2005-10-07T04:33:38Z</dcterms:modified></item><item><title>Java中的字符编码</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!124.entry</link><description>&lt;div&gt;计算机本来只认识0和1, 但我们却被java中的乱码搞得焦头烂额.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;IE.&lt;/div&gt;
&lt;div&gt;    new String(rs.getString(&amp;quot;name&amp;quot;).getBytes(&amp;quot;ISO-8859-1&amp;quot;),&amp;quot;GBK&amp;quot;);&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;读取数据库的内容.&lt;/div&gt;
&lt;div&gt;首先我们需要知道你的source的编码格式,  然后用source的编码格式得到bytes (&lt;font color="#ff0000"&gt;rs.getString(&amp;quot;name&amp;quot;).getBytes(&amp;quot;ISO-8859-1&amp;quot;)&lt;/font&gt;), 再将这些bytes转换成需要的目的终端(显示端)的编码格式.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;反之依然(插入数据)&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;插入数据&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;new String(txtField.getText().getBytes(),&amp;quot;ISO-8859-1&amp;quot;)   将得到需要insert 语句的文本.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;a href="http://www-128.ibm.com/developerworks/cn/java/java_chinese/" rel=nofollow&gt;Java 编程技术中汉字问题的分析及解决&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;table cellspacing=0 cellpadding=0 width="100%" border=0&gt;
&lt;tbody&gt;
&lt;tr valign=top&gt;
&lt;td colspan=5&gt;&lt;a href="http://www-128.ibm.com/developerworks/cn/java/jsp_dbcsz/"&gt;&lt;img height=15 alt="" src="http://www.ibm.com/i/c.gif" width=5 border=0&gt;&lt;/a&gt;
&lt;tr valign=top&gt;
&lt;td width=2&gt;&lt;a href="http://www-128.ibm.com/developerworks/cn/java/jsp_dbcsz/"&gt;&lt;img height=1 alt="" src="http://www.ibm.com/i/c.gif" width=2 border=0&gt;&lt;/a&gt;
&lt;td&gt;&lt;span&gt;&lt;a href="http://www-128.ibm.com/developerworks/cn/java/jsp_dbcsz/"&gt;JSP/Servlet 中的汉字编码问题&lt;/a&gt;&lt;/span&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Java%e4%b8%ad%e7%9a%84%e5%ad%97%e7%ac%a6%e7%bc%96%e7%a0%81&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!124.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!124.entry</guid><pubDate>Tue, 04 Oct 2005 08:11:44 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!124/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!124.entry#comment</wfw:comment><dcterms:modified>2005-10-04T08:11:44Z</dcterms:modified></item><item><title>annotation Metadata.</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!123.entry</link><description>&lt;div&gt;Hibernate Ejb3使用annotation来定义Metadata. 这也是jdk1.5中的new feature. 最近想了解下Ejb3,所以要先了解下annotation. 推荐两边IBM上面的文章.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;a href="http://www-128.ibm.com/developerworks/cn/java/j-annotate1/"&gt;&lt;span&gt;Tiger 中的注释，第 1 部分: &lt;/span&gt;&lt;span&gt;向 Java 代码中添加元数据&lt;/span&gt; &lt;/a&gt;
&lt;div&gt;&lt;a href="http://www-128.ibm.com/developerworks/cn/java/j-annotate1/"&gt; &lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www-128.ibm.com/developerworks/cn/java/j-annotate2.html"&gt;&lt;span&gt;Tiger 中的注释，第 2 部分: &lt;/span&gt;&lt;span&gt;定制注释&lt;/span&gt; &lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第一部分介绍jdk内置的三个annotation   @&lt;a&gt;&lt;span&gt;&lt;font color="#000000"&gt;Override &lt;/font&gt;&lt;/span&gt;&lt;/a&gt; @&lt;a&gt;&lt;span&gt;&lt;font color="#000000"&gt;Deprecated &lt;/font&gt;&lt;/span&gt;&lt;/a&gt; @&lt;a&gt;&lt;span&gt;&lt;font color="#000000"&gt;SuppressWarnings &lt;/font&gt;&lt;/span&gt;&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;第二部分介绍怎样定制annotation  其中Hibernate Ejb3都是使用这个.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+annotation+Metadata.&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!123.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!123.entry</guid><pubDate>Fri, 30 Sep 2005 03:54:03 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!123/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!123.entry#comment</wfw:comment><dcterms:modified>2005-09-30T03:54:03Z</dcterms:modified></item><item><title>java -Xbootclasspath的用法.</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!111.entry</link><description>&lt;div&gt;昨晚使用eclipse的时候突然想到eclipse怎样去区分使用jdk1.4还是jdk1.5,我使用jdk1.4在eclipse运行一个java程序这时的command是&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;C:\j2sdk1.4.2_05\bin\javaw.exe &lt;font color="#ff0000"&gt;-Xbootclasspath:C:\j2sdk1.4.2_05\lib\tools.jar;C:\j2sdk1.4.2_05\jre\lib\rt.jar;C:\j2sdk1.4.2_05\jre\lib\sunrsasign.jar;C:\j2sdk1.4.2_05\jre\lib\jsse.jar;C:\j2sdk1.4.2_05\jre\lib\jce.jar;C:\j2sdk1.4.2_05\jre\lib\charsets.jar;C:\j2sdk1.4.2_05\jre\lib\ext\dnsns.jar;C:\j2sdk1.4.2_05\jre\lib\ext\ldapsec.jar;C:\j2sdk1.4.2_05\jre\lib\ext\localedata.jar;C:\j2sdk1.4.2_05\jre\lib\ext\sunjce_provider.jar&lt;/font&gt; -classpath E:\Eclipse_WorkSpace\Eclipse_Work\DateTransform\classes;E:\Eclipse_WorkSpace\Eclipse_Work\DateTransform\lib\jtds-1.0.3.jar;E:\Eclipse_WorkSpace\Eclipse_Work\DateTransform\lib\poi-2.5.1-final-20040804.jar;E:\Eclipse_WorkSpace\Eclipse_Work\DateTransform\lib\poi-contrib-2.5.1-final-20040804.jar;E:\Eclipse_WorkSpace\Eclipse_Work\DateTransform\lib\poi-scratchpad-2.5.1-final-20040804.jar;E:\Eclipse_WorkSpace\Eclipse_Work\DateTransform\lib\commons-logging-1.0.2.jar;E:\Eclipse_WorkSpace\Eclipse_Work\DateTransform\lib\log4j-1.2.6.jar -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,suspend=y,address=localhost:1160 com.dengyin.data.transform.DoingTxt&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;红色部分后面的那些包是在eclipse重设置好的.这是使用这些包作为启动类&lt;font color="#ff0000"&gt;.( &lt;span&gt;set search path for bootstrap classes and resources&lt;/span&gt; )&lt;/font&gt;&lt;font color="#000000"&gt;然而当我使用jdk1.5的时候的command是&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; C:\jdk1.5.0_03\bin\javaw.exe -classpath E:\Eclipse_WorkSpace\Eclipse_Work\DateTransform\classes;E:\Eclipse_WorkSpace\Eclipse_Work\DateTransform\lib\jtds-1.0.3.jar;E:\Eclipse_WorkSpace\Eclipse_Work\DateTransform\lib\poi-2.5.1-final-20040804.jar;E:\Eclipse_WorkSpace\Eclipse_Work\DateTransform\lib\poi-contrib-2.5.1-final-20040804.jar;E:\Eclipse_WorkSpace\Eclipse_Work\DateTransform\lib\poi-scratchpad-2.5.1-final-20040804.jar;E:\Eclipse_WorkSpace\Eclipse_Work\DateTransform\lib\commons-logging-1.0.2.jar;E:\Eclipse_WorkSpace\Eclipse_Work\DateTransform\lib\log4j-1.2.6.jar -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,suspend=y,address=localhost:1635 com.dengyin.data.transform.DoingTxt&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;我们看到这时并没有-Xbootclasspath参数,我们知道java程序中的所有依赖的类都会去classpath里面照.这时我想-Xbootclasspath做的工作应该时被javaw.exe做了,把那些系统必须的那些bootClass设置到了bootClasspath里面了&lt;font color="#ff0000"&gt;.(以上想法时我个人的猜测,我上网找了但是没有找到满意的答案)&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;当你装好了jdk1.5时,它会拷贝一份java.exe到windows(winNt)目录下面,这样你就可以不用设置JAVA_HOME然后把%JAVA_HOME%\bin放到系统的path目录了, 而且这时java.exe会自己设置好bootClass,这样你就不用在系统的环境变量里面设置ClassPath了.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;span&gt;-&lt;font style="background-color:rgb(255,255,0)"&gt;&lt;b&gt;Xbootclasspath&lt;/b&gt;&lt;/font&gt;:&amp;lt;directories and zip/jar files separated by ;&amp;gt;&lt;br&gt;set search path for bootstrap classes and resources&lt;br&gt;-&lt;font style="background-color:rgb(255,255,0)"&gt;&lt;b&gt;Xbootclasspath&lt;/b&gt;&lt;/font&gt;/a:&amp;lt;directories and zip/jar files separated by ;&amp;gt;&lt;br&gt;append to end of bootstrap class path&lt;br&gt;-&lt;font style="background-color:rgb(255,255,0)"&gt;&lt;b&gt;Xbootclasspath&lt;/b&gt;&lt;/font&gt;/p:&amp;lt;directories and zip/jar files separated by ;&amp;gt;&lt;br&gt;prepend in front of bootstrap class path&lt;/span&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;最后给出些%JAVA_HOME%\bin里面一些exe的用法.(网上找的)&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;span&gt;java.exe&lt;br&gt;&lt;br&gt;用法：java [-options] class [args...]&lt;br&gt;(to execute a class)&lt;br&gt;或 java -jar [-options] jarfile [args...]&lt;br&gt;(to execute a jar file)&lt;br&gt;&lt;br&gt;where options include:&lt;br&gt;-client to select the &amp;quot;client&amp;quot; VM&lt;br&gt;-server to select the &amp;quot;server&amp;quot; VM&lt;br&gt;-hotspot is a synonym for the &amp;quot;client&amp;quot; VM [deprecated]&lt;br&gt;The default VM is client.&lt;br&gt;&lt;br&gt;-cp -classpath &amp;lt;directories and zip/jar files separated by ;&amp;gt;&lt;br&gt;set search path for application classes and resources&lt;br&gt;-D&amp;lt;name&amp;gt;=&amp;lt;value&amp;gt;&lt;br&gt;set a system property&lt;br&gt;-verbose[:class|gc|jni]&lt;br&gt;enable verbose output&lt;br&gt;-version print product version and exit&lt;br&gt;-showversion print product version and continue&lt;br&gt;-? -help print this help message&lt;br&gt;-X print help on non-standard options&lt;br&gt;-ea[:&amp;lt;packagename&amp;gt;...|:&amp;lt;classname&amp;gt;]&lt;br&gt;-enableassertions[:&amp;lt;packagename&amp;gt;...|:&amp;lt;classname&amp;gt;]&lt;br&gt;enable assertions&lt;br&gt;-da[:&amp;lt;packagename&amp;gt;...|:&amp;lt;classname&amp;gt;]&lt;br&gt;-disableassertions[:&amp;lt;packagename&amp;gt;...|:&amp;lt;classname&amp;gt;]&lt;br&gt;disable assertions&lt;br&gt;-esa | -enablesystemassertions&lt;br&gt;enable system assertions&lt;br&gt;-dsa | -disablesystemassertions&lt;br&gt;disable system assertions&lt;br&gt;&lt;br&gt;java -X&lt;br&gt;-Xmixed mixed mode execution (default)&lt;br&gt;-Xint interpreted mode execution only&lt;br&gt;-&lt;font style="background-color:rgb(255,255,0)"&gt;&lt;b&gt;Xbootclasspath&lt;/b&gt;&lt;/font&gt;:&amp;lt;directories and zip/jar files separated by ;&amp;gt;&lt;br&gt;set search path for bootstrap classes and resources&lt;br&gt;-&lt;font style="background-color:rgb(255,255,0)"&gt;&lt;b&gt;Xbootclasspath&lt;/b&gt;&lt;/font&gt;/a:&amp;lt;directories and zip/jar files separated by ;&amp;gt;&lt;br&gt;append to end of bootstrap class path&lt;br&gt;-&lt;font style="background-color:rgb(255,255,0)"&gt;&lt;b&gt;Xbootclasspath&lt;/b&gt;&lt;/font&gt;/p:&amp;lt;directories and zip/jar files separated by ;&amp;gt;&lt;br&gt;prepend in front of bootstrap class path&lt;br&gt;-Xnoclassgc disable class garbage collection&lt;br&gt;-Xincgc enable incremental garbage collection&lt;br&gt;-Xloggc:&amp;lt;file&amp;gt; log GC status to a file with time stamps&lt;br&gt;-Xbatch disable background compilation&lt;br&gt;-Xms&amp;lt;size&amp;gt; set initial Java heap size&lt;br&gt;-Xmx&amp;lt;size&amp;gt; set maximum Java heap size&lt;br&gt;-Xss&amp;lt;size&amp;gt; set java thread stack size&lt;br&gt;-Xprof output cpu profiling data&lt;br&gt;-Xrunhprof[:help]|[:&amp;lt;option&amp;gt;=&amp;lt;value&amp;gt;, ...]&lt;br&gt;perform JVMPI heap, cpu, or monitor profiling&lt;br&gt;-Xdebug enable remote debugging&lt;br&gt;-Xfuture enable strictest checks, anticipating future default&lt;br&gt;-Xrs reduce use of OS signals by Java/VM (see documentation)&lt;br&gt;&lt;br&gt;The -X options are non-standard and subject to change without notice.&lt;br&gt;&lt;br&gt;====================&lt;br&gt;javac.exe&lt;br&gt;&lt;br&gt;用法：javac &amp;lt;选项&amp;gt; &amp;lt;源文件&amp;gt;&lt;br&gt;可能的选项包括：&lt;br&gt;-g 生成所有调试信息&lt;br&gt;-g:none 生成无调试信息&lt;br&gt;-g:{lines,vars,source} 生成只有部分调试信息&lt;br&gt;-O 优化；可能妨碍调试或者增大类文件&lt;br&gt;-nowarn 生成无警告&lt;br&gt;-verbose 输出关于编译器正在做的信息&lt;br&gt;-deprecation 输出使用了不鼓励使用的API的源程序位置&lt;br&gt;-classpath &amp;lt;路径&amp;gt; 指定用户类文件的位置&lt;br&gt;-sourcepath &amp;lt;路径&amp;gt; 指定输入源文件的位置&lt;br&gt;-bootclasspath &amp;lt;路径&amp;gt; 覆盖自举类文件的位置&lt;br&gt;-extdirs &amp;lt;目录(多个)&amp;gt; 覆盖安装的扩展类的位置&lt;br&gt;-d &amp;lt;目录&amp;gt; 指定输出类文件的位置&lt;br&gt;-encoding &amp;lt;编码&amp;gt; 指定源文件中所用的字符集编码&lt;br&gt;-target &amp;lt;版本&amp;gt; 生成指定虚拟机版本的类文件&lt;br&gt;-help Print a synopsis of standard options&lt;br&gt;&lt;br&gt;====================&lt;br&gt;appletviewer.exe&lt;br&gt;&lt;br&gt;用法：appletviewer &amp;lt;options&amp;gt; url&lt;img alt=Moon src="http://www.cjsdn.net/images/smiles/moon_smile.gif" width=19&gt;&lt;br&gt;&lt;br&gt;其中，&amp;lt;options&amp;gt; 包括：&lt;br&gt;-debug 在 Java 调试器中启动 applet 小程序查看器&lt;br&gt;-encoding &amp;lt;encoding&amp;gt; 指定由 HTML 文件使用的字符编码&lt;br&gt;-J&amp;lt;runtime flag&amp;gt; 向 Java 解释器传递参数&lt;br&gt;&lt;br&gt;-J 选项不是标准选项，如有更改，不另行通知。&lt;br&gt;&lt;br&gt;====================&lt;br&gt;jar.exe&lt;br&gt;&lt;br&gt;用法：jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...&lt;br&gt;选项：&lt;br&gt;-c 创建新的存档&lt;br&gt;-t 列出存档内容的列表&lt;br&gt;-x 展开存档中的命名的（或所有的〕文件&lt;br&gt;-u 更新已存在的存档&lt;br&gt;-v 生成详细输出到标准输出上&lt;br&gt;-f 指定存档文件名&lt;br&gt;-m 包含来自标明文件的标明信息&lt;br&gt;-0 只存储方式；未用ZIP压缩格式&lt;br&gt;-M 不产生所有项的清单（manifest〕文件&lt;br&gt;-i 为指定的jar文件产生索引信息&lt;br&gt;-C 改变到指定的目录，并且包含下列文件：&lt;br&gt;如果一个文件名是一个目录，它将被递归处理。&lt;br&gt;清单（manifest〕文件名和存档文件名都需要被指定，按'm' 和 'f'标志指定的相同顺序。&lt;br&gt;示例1：将两个class文件存档到一个名为 'classes.jar' 的存档文件中：&lt;br&gt;jar cvf classes.jar Foo.class Bar.class&lt;br&gt;示例2：用一个存在的清单（manifest）文件 'mymanifest' 将 foo/ 目录下的所有&lt;br&gt;文件存档到一个名为 'classes.jar' 的存档文件中：&lt;br&gt;jar cvfm classes.jar mymanifest -C foo/ .&lt;br&gt;&lt;br&gt;====================&lt;br&gt;jarsigner.exe&lt;br&gt;&lt;br&gt;用法：jarsigner [options] jar-file alias&lt;br&gt;jarsigner -verify [options] jar-file&lt;br&gt;&lt;br&gt;[-keystore &amp;lt;url&amp;gt;] keystore location&lt;br&gt;&lt;br&gt;[-storepass &amp;lt;password&amp;gt;] password for keystore integrity&lt;br&gt;&lt;br&gt;[-storetype &amp;lt;type&amp;gt;] keystore type&lt;br&gt;&lt;br&gt;[-keypass &amp;lt;password&amp;gt;] password for private key (if different)&lt;br&gt;&lt;br&gt;[-sigfile &amp;lt;file&amp;gt;] name of .SF/.DSA file&lt;br&gt;&lt;br&gt;[-signedjar &amp;lt;file&amp;gt;] name of signed JAR file&lt;br&gt;&lt;br&gt;[-verify] verify a signed JAR file&lt;br&gt;&lt;br&gt;[-verbose] verbose output when signing/verifying&lt;br&gt;&lt;br&gt;[-certs] display certificates when verbose and verifying&lt;br&gt;&lt;br&gt;[-internalsf] include the .SF file inside the signature block&lt;br&gt;&lt;br&gt;[-sectionsonly] don't compute hash of entire manifest&lt;br&gt;&lt;br&gt;[-provider] name of cryptographic service provider's master class file&lt;br&gt;...&lt;br&gt;&lt;br&gt;====================&lt;br&gt;javadoc.exe&lt;br&gt;&lt;br&gt;用法：javadoc [options] [packagenames] [sourcefiles] [classnames] [@files]&lt;br&gt;-overview &amp;lt;file&amp;gt; 读取 HTML 格式的概述文档&lt;br&gt;-public 仅显示 public 类和成员&lt;br&gt;-protected 显示 protected/public 类和成员（缺省）&lt;br&gt;-package 显示 package/protected/public 类和成员&lt;br&gt;-private 显示所有类和成员&lt;br&gt;-help 显示命令行选项&lt;br&gt;-doclet &amp;lt;class&amp;gt; 通过候选 doclet 生成输出&lt;br&gt;-docletpath &amp;lt;path&amp;gt; 指定 doclet 类文件的查找位置&lt;br&gt;-sourcepath &amp;lt;pathlist&amp;gt; 指定源文件的查找位置&lt;br&gt;-classpath &amp;lt;pathlist&amp;gt; 指定用户类文件的查找位置&lt;br&gt;-exclude &amp;lt;pkglist&amp;gt; Specify a list of packages to exclude&lt;br&gt;-subpackages &amp;lt;subpkglist&amp;gt; Specify subpackages to recursively load&lt;br&gt;-breakiterator Compute 1st sentence with BreakIterator&lt;br&gt;-bootclasspath &amp;lt;pathlist&amp;gt; 覆盖自举类加载器所加载的类文件的位置&lt;br&gt;-source &amp;lt;release&amp;gt; Provide source compatibility with specified release&lt;br&gt;-extdirs &amp;lt;dirlist&amp;gt; 覆盖已安装的扩展的位置&lt;br&gt;-verbose 有关 Javadoc 所做工作的输出信息&lt;br&gt;-locale &amp;lt;name&amp;gt; 所用的 Locale，例如 en_US 或 en_US_WIN&lt;br&gt;-encoding &amp;lt;name&amp;gt; 源文件编码名称&lt;br&gt;-J&amp;lt;flag&amp;gt; 将 &amp;lt;flag&amp;gt; 直接传给运行时系统&lt;br&gt;&lt;br&gt;由标准 doclet 提供：&lt;br&gt;-d &amp;lt;directory&amp;gt; 输出文件的目标目录&lt;br&gt;-use 创建类和包的用法页&lt;br&gt;-version 包含 @version 段&lt;br&gt;-author 包含 @author 段&lt;br&gt;-docfilessubdirs Recursively copy doc-file subdirectories&lt;br&gt;-splitindex 将索引分为每个字母对应一个文件&lt;br&gt;-windowtitle &amp;lt;text&amp;gt; 文档的浏览器窗口标题&lt;br&gt;-doctitle &amp;lt;html-code&amp;gt; 包含包索引页（首页）的标题&lt;br&gt;-header &amp;lt;html-code&amp;gt; 包含每一页的页眉文本&lt;br&gt;-footer &amp;lt;html-code&amp;gt; 包含每一页的页脚文本&lt;br&gt;-bottom &amp;lt;html-code&amp;gt; 包含每一页的页底文本&lt;br&gt;-link &amp;lt;url&amp;gt; Create links to javadoc output at &amp;lt;url&amp;gt;&lt;br&gt;-linkoffline &amp;lt;url&amp;gt; &amp;lt;url2&amp;gt; Link to docs at &amp;lt;url&amp;gt; using package list at &amp;lt;url2&amp;gt;&lt;br&gt;-excludedocfilessubdir &amp;lt;name1&amp;gt;:.. Exclude any doc-files subdirectories with given name.&lt;br&gt;-group &amp;lt;name&amp;gt; &amp;lt;p1&amp;gt;:&amp;lt;p2&amp;gt;.. Group specified packages together in overview page&lt;br&gt;-nocomment Supress description and tags, generate only declarations.&lt;br&gt;-nodeprecated 不包含 @deprecated 信息&lt;br&gt;-noqualifier &amp;lt;name1&amp;gt;:&amp;lt;name2&amp;gt;:... Exclude the list of qualifiers from the output.&lt;br&gt;-nosince Do not include @since information&lt;br&gt;-nodeprecatedlist 不生成不鼓励使用的列表&lt;br&gt;-notree 不生成类层次&lt;br&gt;-noindex 不生成索引&lt;br&gt;-nohelp 不生成帮助链接&lt;br&gt;-nonavbar 不生成导航栏&lt;br&gt;-quiet Do not display status messages to screen&lt;br&gt;-serialwarn Generate warning about @serial tag&lt;br&gt;-tag &amp;lt;name&amp;gt;:&amp;lt;locations&amp;gt;:&amp;lt;header&amp;gt; Specify single argument custom tags&lt;br&gt;-taglet The fully qualified name of Taglet to register&lt;br&gt;-tagletpath The path to Taglets&lt;br&gt;-charset &amp;lt;charset&amp;gt; Charset for cross-platform viewing of generated documentation.&lt;br&gt;-helpfile &amp;lt;file&amp;gt; 包含帮助链接功能链接到目标的文件&lt;br&gt;-linksource Generate source in HTML&lt;br&gt;-stylesheetfile &amp;lt;path&amp;gt; 改变所生成文档的样式的文件&lt;br&gt;-docencoding &amp;lt;name&amp;gt; 输出编码名称&lt;br&gt;&lt;br&gt;====================&lt;br&gt;jdb.exe&lt;br&gt;&lt;br&gt;用法：jdb &amp;lt;options&amp;gt; &amp;lt;class&amp;gt; &amp;lt;arguments&amp;gt;&lt;br&gt;&lt;br&gt;where options include:&lt;br&gt;-help print out this message and exit&lt;br&gt;-sourcepath &amp;lt;directories separated by &amp;quot;;&amp;quot;&amp;gt;&lt;br&gt;directories in which to look for source files&lt;br&gt;-attach &amp;lt;address&amp;gt;&lt;br&gt;attach to a running VM at the specified address using standard connector&lt;br&gt;-listen &amp;lt;address&amp;gt;&lt;br&gt;wait for a running VM to connect at the specified address using standard connector&lt;br&gt;-listenany&lt;br&gt;wait for a running VM to connect at any available address using standard connector&lt;br&gt;-launch&lt;br&gt;launch VM immediately instead of waiting for 'run' command&lt;br&gt;-connect &amp;lt;connector-name&amp;gt;:&amp;lt;name1&amp;gt;=&amp;lt;value1&amp;gt;,...&lt;br&gt;connect to target VM using named connector with listed argument values&lt;br&gt;-dbgtrace [flags] print info for debugging jdb&lt;br&gt;-tclient run the application in the Hotspot(tm) Performance Engine (Client)&lt;br&gt;-tserver run the application in the Hotspot(tm) Performance Engine (Server)&lt;br&gt;&lt;br&gt;options forwarded to debuggee process:&lt;br&gt;-v -verbose[:class|gc|jni]&lt;br&gt;turn on verbose mode&lt;br&gt;-D&amp;lt;name&amp;gt;=&amp;lt;value&amp;gt; set a system property&lt;br&gt;-classpath &amp;lt;directories separated by &amp;quot;;&amp;quot;&amp;gt;&lt;br&gt;list directories in which to look for classes&lt;br&gt;-X&amp;lt;option&amp;gt; non-standard target VM option&lt;br&gt;&lt;br&gt;&amp;lt;class&amp;gt; is the name of the class to begin debugging&lt;br&gt;&amp;lt;arguments&amp;gt; are the arguments passed to the main() method of &amp;lt;class&amp;gt;&lt;br&gt;&lt;br&gt;For command help type 'help' at jdb prompt&lt;br&gt;&lt;br&gt;====================&lt;br&gt;javah.exe&lt;br&gt;&lt;br&gt;用法：javah [options] &amp;lt;classes&amp;gt;&lt;br&gt;&lt;br&gt;其中 [options] 包括：&lt;br&gt;&lt;br&gt;-help 打印该帮助信息&lt;br&gt;-classpath &amp;lt;path&amp;gt; 类的加载路径&lt;br&gt;-bootclasspath &amp;lt;path&amp;gt; 自举类的加载路径&lt;br&gt;-d &amp;lt;dir&amp;gt; 输出目录&lt;br&gt;-o &amp;lt;file&amp;gt; 输出文件（仅能使用 -d 或 -o 之一）&lt;br&gt;-jni 生成 JNI 风格的头文件（缺省）&lt;br&gt;-old 生成 JDK1.0 风格的头文件&lt;br&gt;-stubs 生成 stubs 文件&lt;br&gt;-version 打印版本信息&lt;br&gt;-verbose 输出有关本命令所做工作的信息&lt;br&gt;-force 始终写输出文件&lt;br&gt;&lt;br&gt;指定 &amp;lt;classes&amp;gt; 时必须使用全名（例如 java.lang.Object）。&lt;br&gt;&lt;br&gt;====================&lt;br&gt;javap.exe&lt;br&gt;&lt;br&gt;用法：javap &amp;lt;options&amp;gt; &amp;lt;classes&amp;gt;...&lt;br&gt;&lt;br&gt;where options include:&lt;br&gt;-b Backward compatibility with javap in JDK 1.1&lt;br&gt;-c Disassemble the code&lt;br&gt;-classpath &amp;lt;pathlist&amp;gt; Specify where to find user class files&lt;br&gt;-extdirs &amp;lt;dirs&amp;gt; Override location of installed extensions&lt;br&gt;-help Print this usage message&lt;br&gt;-J&amp;lt;flag&amp;gt; Pass &amp;lt;flag&amp;gt; directly to the runtime system&lt;br&gt;-l Print line number and local variable tables&lt;br&gt;-public Show only public classes and members&lt;br&gt;-protected Show protected/public classes and members&lt;br&gt;-package Show package/protected/public classes&lt;br&gt;and members (default)&lt;br&gt;-private Show all classes and members&lt;br&gt;-s Print internal type signatures&lt;br&gt;-bootclasspath &amp;lt;pathlist&amp;gt; Override location of class files loaded&lt;br&gt;by the bootstrap class loader&lt;br&gt;-verbose Print stack size, number of locals and args for methods&lt;br&gt;If verifying, print reasons for failure&lt;br&gt;&lt;br&gt;====================&lt;br&gt;javaw.exe&lt;br&gt;&lt;br&gt;====================&lt;br&gt;HtmlConverter.exe&lt;br&gt;&lt;br&gt;用法：HtmlConverter [-option1 value1 [-option2 value2 [...]]] [-simulate] [filespecs]&lt;br&gt;&lt;br&gt;其中，选项包括：&lt;br&gt;&lt;br&gt;-source: 获取源文件的路径。 缺省值： &amp;lt;userdir&amp;gt;&lt;br&gt;-dest: 写入已转换文件的路径。 缺省值： &amp;lt;userdir&amp;gt;&lt;br&gt;-backup: 写备份文件的路径。 缺省值： &amp;lt;dirname&amp;gt;_BAK&lt;br&gt;-f: 强制覆写备份文件。&lt;br&gt;-subdirs: 应处理子目录中的文件。&lt;br&gt;-template: 模板文件的路径。 如果不确定，请使用缺省值。&lt;br&gt;-log: 写日志的路径。 如果没有提供，则不会写入任何日志。&lt;br&gt;-progress: 转换时显示进度。 缺省值： true&lt;br&gt;-simulate: 在没有进行转换时显示特定于转换的信息。&lt;br&gt;-latest: 使用最新的 JRE 支持发行版 mimetype。&lt;br&gt;-gui: 显示转换程序的图形用户界面。&lt;br&gt;&lt;br&gt;filespecs: 用空格分开的文件说明列表。 缺省值： &amp;quot;*.html *.htm&amp;quot; （需要引号）&lt;br&gt;&lt;br&gt;====================&lt;br&gt;keytool.exe&lt;br&gt;&lt;br&gt;keytool 用法：&lt;br&gt;&lt;br&gt;-certreq [-v] [-alias &amp;lt;alias&amp;gt;] [-sigalg &amp;lt;sigalg&amp;gt;]&lt;br&gt;[-file &amp;lt;csr_file&amp;gt;] [-keypass &amp;lt;keypass&amp;gt;]&lt;br&gt;[-keystore &amp;lt;keystore&amp;gt;] [-storepass &amp;lt;storepass&amp;gt;]&lt;br&gt;[-storetype &amp;lt;storetype&amp;gt;] [-provider &amp;lt;provider_class_name&amp;gt;] ...&lt;br&gt;&lt;br&gt;-delete [-v] -alias &amp;lt;alias&amp;gt;&lt;br&gt;[-keystore &amp;lt;keystore&amp;gt;] [-storepass &amp;lt;storepass&amp;gt;]&lt;br&gt;[-storetype &amp;lt;storetype&amp;gt;] [-provider &amp;lt;provider_class_name&amp;gt;] ...&lt;br&gt;&lt;br&gt;-export [-v] [-rfc] [-alias &amp;lt;alias&amp;gt;] [-file &amp;lt;cert_file&amp;gt;]&lt;br&gt;[-keystore &amp;lt;keystore&amp;gt;] [-storepass &amp;lt;storepass&amp;gt;]&lt;br&gt;[-storetype &amp;lt;storetype&amp;gt;] [-provider &amp;lt;provider_class_name&amp;gt;] ...&lt;br&gt;&lt;br&gt;-genkey [-v] [-alias &amp;lt;alias&amp;gt;] [-keyalg &amp;lt;keyalg&amp;gt;]&lt;br&gt;[-keysize &amp;lt;keysize&amp;gt;] [-sigalg &amp;lt;sigalg&amp;gt;]&lt;br&gt;[-dname &amp;lt;dname&amp;gt;] [-validity &amp;lt;valDays&amp;gt;]&lt;br&gt;[-keypass &amp;lt;keypass&amp;gt;] [-keystore &amp;lt;keystore&amp;gt;]&lt;br&gt;[-storepass &amp;lt;storepass&amp;gt;] [-storetype &amp;lt;storetype&amp;gt;]&lt;br&gt;[-provider &amp;lt;provider_class_name&amp;gt;] ...&lt;br&gt;&lt;br&gt;-help&lt;br&gt;&lt;br&gt;-identitydb [-v] [-file &amp;lt;idb_file&amp;gt;] [-keystore &amp;lt;keystore&amp;gt;]&lt;br&gt;[-storepass &amp;lt;storepass&amp;gt;] [-storetype &amp;lt;storetype&amp;gt;]&lt;br&gt;&lt;br&gt;-import [-v] [-noprompt] [-trustcacerts] [-alias &amp;lt;alias&amp;gt;]&lt;br&gt;[-file &amp;lt;cert_file&amp;gt;] [-keypass &amp;lt;keypass&amp;gt;]&lt;br&gt;[-keystore &amp;lt;keystore&amp;gt;] [-storepass &amp;lt;storepass&amp;gt;]&lt;br&gt;[-storetype &amp;lt;storetype&amp;gt;] [-provider &amp;lt;provider_class_name&amp;gt;] ...&lt;br&gt;&lt;br&gt;-keyclone [-v] [-alias &amp;lt;alias&amp;gt;] -dest &amp;lt;dest_alias&amp;gt;&lt;br&gt;[-keypass &amp;lt;keypass&amp;gt;] [-new &amp;lt;new_keypass&amp;gt;]&lt;br&gt;[-keystore &amp;lt;keystore&amp;gt;] [-storepass &amp;lt;storepass&amp;gt;]&lt;br&gt;[-storetype &amp;lt;storetype&amp;gt;] [-provider &amp;lt;provider_class_name&amp;gt;] ...&lt;br&gt;&lt;br&gt;-keypasswd [-v] [-alias &amp;lt;alias&amp;gt;]&lt;br&gt;[-keypass &amp;lt;old_keypass&amp;gt;] [-new &amp;lt;new_keypass&amp;gt;]&lt;br&gt;[-keystore &amp;lt;keystore&amp;gt;] [-storepass &amp;lt;storepass&amp;gt;]&lt;br&gt;[-storetype &amp;lt;storetype&amp;gt;] [-provider &amp;lt;provider_class_name&amp;gt;] ...&lt;br&gt;&lt;br&gt;-list [-v | -rfc] [-alias &amp;lt;alias&amp;gt;]&lt;br&gt;[-keystore &amp;lt;keystore&amp;gt;] [-storepass &amp;lt;storepass&amp;gt;]&lt;br&gt;[-storetype &amp;lt;storetype&amp;gt;] [-provider &amp;lt;provider_class_name&amp;gt;] ...&lt;br&gt;&lt;br&gt;-printcert [-v] [-file &amp;lt;cert_file&amp;gt;]&lt;br&gt;&lt;br&gt;-selfcert [-v] [-alias &amp;lt;alias&amp;gt;] [-sigalg &amp;lt;sigalg&amp;gt;]&lt;br&gt;[-dname &amp;lt;dname&amp;gt;] [-validity &amp;lt;valDays&amp;gt;]&lt;br&gt;[-keypass &amp;lt;keypass&amp;gt;] [-keystore &amp;lt;keystore&amp;gt;]&lt;br&gt;[-storepass &amp;lt;storepass&amp;gt;] [-storetype &amp;lt;storetype&amp;gt;]&lt;br&gt;[-provider &amp;lt;provider_class_name&amp;gt;] ...&lt;br&gt;&lt;br&gt;-storepasswd [-v] [-new &amp;lt;new_storepass&amp;gt;]&lt;br&gt;[-keystore &amp;lt;keystore&amp;gt;] [-storepass &amp;lt;storepass&amp;gt;]&lt;br&gt;[-storetype &amp;lt;storetype&amp;gt;] [-provider &amp;lt;provider_class_name&amp;gt;] ...&lt;br&gt;&lt;br&gt;====================&lt;br&gt;extcheck.exe&lt;br&gt;&lt;br&gt;用法：extcheck [-verbose] &amp;lt;jar file&amp;gt;&lt;br&gt;&lt;br&gt;====================&lt;br&gt;idlj.exe&lt;br&gt;&lt;br&gt;com.sun.tools.corba.se.idl.InvalidArgument: No IDL file was specified.&lt;br&gt;&lt;br&gt;Compiler Usage:&lt;br&gt;&lt;br&gt;java com.sun.tools.corba.se.idl.toJavaPortable.Compile [options] &amp;lt;idl file&amp;gt;&lt;br&gt;&lt;br&gt;where &amp;lt;idl file&amp;gt; is the name of a file containing IDL definitions, and&lt;br&gt;[options] is any combination of the options listed below. The options&lt;br&gt;are optional and may appear in any order; &amp;lt;idl file&amp;gt; is required and&lt;br&gt;must appear last.&lt;br&gt;&lt;br&gt;Options:&lt;br&gt;-d &amp;lt;symbol&amp;gt; This is equivalent to the following line in an&lt;br&gt;IDL file: #define &amp;lt;symbol&amp;gt;&lt;br&gt;-emitAll Emit all types, including those found in #included files.&lt;br&gt;-f&amp;lt;side&amp;gt; Define what bindings to emit. &amp;lt;side&amp;gt; is one of client,&lt;br&gt;server, all, serverTIE, allTIE. serverTIE and allTIE&lt;br&gt;cause delegate model skeletons to be emitted. If this&lt;br&gt;flag is not used, -fclient is assumed.&lt;br&gt;-i &amp;lt;include path&amp;gt; By default, the current directory is scanned for&lt;br&gt;included files. This option adds another directory.&lt;br&gt;-keep If a file to be generated already exists, do not&lt;br&gt;overwrite it. By default it is overwritten.&lt;br&gt;-noWarn Suppress warnings.&lt;br&gt;-oldImplBase Generate skeletons compatible with old (pre-1.4) JDK ORBs.&lt;br&gt;-pkgPrefix &amp;lt;t&amp;gt; &amp;lt;prefix&amp;gt; When the type or module name &amp;lt;t&amp;gt; is encountered at&lt;br&gt;file scope, begin the Java package name for all files&lt;br&gt;generated for &amp;lt;t&amp;gt; with &amp;lt;prefix&amp;gt;.&lt;br&gt;-pkgTranslate &amp;lt;t&amp;gt; &amp;lt;pkg&amp;gt; When the type or module name &amp;lt;t&amp;gt; in encountered, replace&lt;br&gt;it with &amp;lt;pkg&amp;gt; in the generated java package. Note that&lt;br&gt;pkgPrefix changes are made first. &amp;lt;t&amp;gt; must match the&lt;br&gt;full package name exactly. Also, &amp;lt;t&amp;gt; must not be&lt;br&gt;org, org.omg, or any subpackage of org.omg.&lt;br&gt;-skeletonName &amp;lt;xxx%yyy&amp;gt; Name the skeleton according to the pattern.&lt;br&gt;The defaults are:&lt;br&gt;%POA for the POA base class (-fserver or -fall)&lt;br&gt;_%ImplBase for the oldImplBase base class&lt;br&gt;(-oldImplBase and (-fserver or -fall)).&lt;br&gt;-td &amp;lt;dir&amp;gt; use &amp;lt;dir&amp;gt; for the output directory instead of&lt;br&gt;the current directory.&lt;br&gt;-tieName &amp;lt;xxx%yyy&amp;gt; Name the tie according to the pattern. The defaults are:&lt;br&gt;%POATie for the POA tie (-fserverTie or -fallTie)&lt;br&gt;%_Tie for the oldImplBase tie&lt;br&gt;(-oldImplBase and (-fserverTie or -fallTie)).&lt;br&gt;-v, -verbose Verbose mode.&lt;br&gt;-version Display the version number and quit.&lt;br&gt;&lt;br&gt;====================&lt;br&gt;orbd.exe&lt;br&gt;&lt;br&gt;用法：orbd &amp;lt;选项&amp;gt;&lt;br&gt;&lt;br&gt;其中，&amp;lt;选项&amp;gt; 包括：&lt;br&gt;-port 启动 ORBD 的激活端口，缺省值为 1049 (可选)&lt;br&gt;-defaultdb ORBD 文件的目录，缺省值为 &amp;quot;./orb.db&amp;quot; (可选)&lt;br&gt;-serverid ORBD 的服务器标识符，缺省值为 1 (可选)&lt;br&gt;-ORBInitialPort 初始端口（必需）&lt;br&gt;-ORBInitialHost 初始主机名称（必需）&lt;br&gt;&lt;br&gt;====================&lt;br&gt;policytool.exe&lt;br&gt;&lt;br&gt;用法：policytool [选项]&lt;br&gt;&lt;br&gt;[-file &amp;lt;file&amp;gt;] 规则文件位置&lt;br&gt;&lt;br&gt;====================&lt;br&gt;rmic.exe&lt;br&gt;&lt;br&gt;用法：rmic &amp;lt;选项&amp;gt; &amp;lt;类名&amp;gt;&lt;br&gt;&lt;br&gt;其中 &amp;lt;选项&amp;gt; 包括：&lt;br&gt;-keep 不删除中间生成的源文件&lt;br&gt;-keepgenerated （同 &amp;quot;-keep&amp;quot;)&lt;br&gt;-v1.1 为 1.1 stub 协议版本创建 stubs/skeleton&lt;br&gt;-vcompat （缺省）创建与 1.1 和&lt;br&gt;1.2 stub 协议版本兼容的 stubs/skeleton&lt;br&gt;-v1.2 仅为 1.2 stub 协议版本创建 stubs&lt;br&gt;-iiop 为 IIOP 创建 stubs。当使用该选项时，&amp;lt;选项&amp;gt;还应包括：&lt;br&gt;&lt;br&gt;-always 总创建 stubs （即使在它们同时出现时〕&lt;br&gt;-alwaysgenerate (同 &amp;quot;-always&amp;quot;)&lt;br&gt;-nolocalstubs 不创建为同一进程优化的 stubs&lt;br&gt;&lt;br&gt;-idl 创建 IDL。当使用该选项时，&amp;lt;选项&amp;gt;还应包括：&lt;br&gt;&lt;br&gt;-noValueMethods 不生成值类型的方法&lt;br&gt;-always 总创建 IDL （即使在它们同时出现时〕&lt;br&gt;-alwaysgenerate (同 &amp;quot;-always&amp;quot;)&lt;br&gt;&lt;br&gt;-g 一般调试信息&lt;br&gt;-depend 以递归方式重编译过期的文件&lt;br&gt;-nowarn 不警告&lt;br&gt;-nowrite 不将编译过的类写入到文件系统&lt;br&gt;-verbose 输出有关编译器所做工作的信息&lt;br&gt;-classpath &amp;lt;path&amp;gt; 指定输入源和类文件的查找位置&lt;br&gt;-sourcepath &amp;lt;path&amp;gt; 指定用户源文件的查找位置&lt;br&gt;-bootclasspath &amp;lt;path&amp;gt; 覆盖自举类文件的位置&lt;br&gt;-extdirs &amp;lt;path&amp;gt; 覆盖安装扩展类的位置&lt;br&gt;-d &amp;lt;directory&amp;gt; 指定所生成类文件的放置位置&lt;br&gt;-J&amp;lt;runtime flag&amp;gt; 将参数传给 java 解释程序&lt;br&gt;&lt;br&gt;====================&lt;br&gt;rmid.exe&lt;br&gt;&lt;br&gt;用法：rmid &amp;lt;option&amp;gt;&lt;br&gt;&lt;br&gt;其中，&amp;lt;option&amp;gt; 包括:&lt;br&gt;-port &amp;lt;option&amp;gt; 指定供 rmid 使用的端口&lt;br&gt;-log &amp;lt;directory&amp;gt; 指定 rmid 将日志写入的目录&lt;br&gt;-stop 停止当前的 rmid 调用（对指定端口）&lt;br&gt;-C&amp;lt;runtime 标记&amp;gt; 向每个子进程传递参数（激活组）&lt;br&gt;-J&amp;lt;runtime 标记&amp;gt; 向 java 解释程序传递参数&lt;br&gt;&lt;br&gt;====================&lt;br&gt;rmiregistry.exe&lt;br&gt;&lt;br&gt;用法： rmiregistry &amp;lt;选项&amp;gt; &amp;lt;端口&amp;gt;&lt;br&gt;&lt;br&gt;其中，&amp;lt;选项&amp;gt; 包括：&lt;br&gt;-J&amp;lt;runtime 标记&amp;gt; 将参数传递到 java 解释程序&lt;br&gt;&lt;br&gt;====================&lt;br&gt;serialver.exe&lt;br&gt;&lt;br&gt;用法：serialver [-classpath classpath] [-show] [classname...]&lt;br&gt;&lt;br&gt;====================&lt;br&gt;servertool.exe&lt;br&gt;&lt;br&gt;欢迎使用 Java IDL 服务器工具&lt;br&gt;请在提示处输入命令&lt;br&gt;&lt;br&gt;servertool &amp;gt; help&lt;br&gt;&lt;br&gt;可用命令：&lt;br&gt;-------------------&lt;br&gt;&lt;br&gt;register - 注册一个可激活的服务器&lt;br&gt;unregister - 取消服务器注册&lt;br&gt;getserverid - 返回应用程序名称的服务器标识符&lt;br&gt;list - 列举所有已注册服务器&lt;br&gt;listappnames - 列举当前定义的应用程序名称&lt;br&gt;listactive - 列举当前活动的服务器&lt;br&gt;locate - 将已注册服务器定位在特定类型的端口&lt;br&gt;locateperorb - 为已注册服务器的特定对象请求代理程序定位端口。&lt;br&gt;orblist - 对象请求代理程序 (orb) 名称及其映射列表&lt;br&gt;shutdown - 关闭一个已注册服务器&lt;br&gt;startup - 启动一个已注册服务器&lt;br&gt;help - 取得帮助&lt;br&gt;quit - 退出此工具&lt;/span&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+java+-Xbootclasspath%e7%9a%84%e7%94%a8%e6%b3%95.&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!111.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!111.entry</guid><pubDate>Wed, 14 Sep 2005 02:28:09 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!111/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!111.entry#comment</wfw:comment><dcterms:modified>2005-09-14T02:28:45Z</dcterms:modified></item></channel></rss>