<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>关注Java</title>
	<atom:link href="http://www.gbsou.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.gbsou.com</link>
	<description>关注Java,spring,hibernate,javascript</description>
	<lastBuildDate>Tue, 07 Feb 2012 00:36:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Effective Java (目录)</title>
		<link>http://www.gbsou.com/2012/02/06/8566.html</link>
		<comments>http://www.gbsou.com/2012/02/06/8566.html#comments</comments>
		<pubDate>Mon, 06 Feb 2012 15:57:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.gbsou.com/?p=8566</guid>
		<description><![CDATA[SyndContentImpl.value= &#160;&#160;&#160;&#160;&#160; 在从事软件开发的十多年间，我曾有幸读过多种开发语言的Effective系列，如《Effective C++》、《More Effective C++》、《Effective Java》(第一版/第二版)、《Effective C#》和《More Effective C#》，单单从这一点看也算是Effective系列的忠实拥趸了。毋庸置疑，这个系列的书籍对我们研习各种开发语言的进阶都有着极为重要的意义。&#160;&#160;&#160;&#160;&#160; 在与很多初、中、高级程序员一起合作开发期间，曾多次向他们推荐经典的专业书籍，尽管每种开发语言都有着属于自己的代表作，如C++ Primer、Thinking in Java和Essential C#等，然而无一例外的是，我都会建议他们去阅读各自语言的Effective系列，因为他们确实是经典中的经典，特别是当你对该编程语言已经有了一定的开发基础和理解之后再去学习和研究书中阐述的每一个细节，就会发现书中介绍的case往往就是我们在开发中经常会用到但却又容易忽视的问题，而程序中的隐患也恰恰来自于我们的视而不见。所以我认为对于该书的阅读是应该建立在一系列的反复思考与实践之上的，可能这样的迭代过程会需要很长一段时间，然而在我看来(仅代表个人观点，如有不同，欢迎交流)，它却是通向编程高手的必经之路。&#160;&#160;&#160;&#160;&#160; OK，现在已经显而易见了，相信网友们也已经清楚了，这个系列的博客是源自《Effective Java》的读书笔记。最后，请大家继续关注本人后面的有关其他技术主题的系列博客。 Effective Java (创建和销毁对象)http://www.cnblogs.com/stephen-liu74/archive/2012/01/13/2228354.html一、考虑用静态工厂方法代替构造器二、遇到多个构造参数时要考虑用构建器(Builder模式)三、用私有构造器或者枚举类型强化Singleton属性四、通过私有构造器强化不可实例化的能力五、避免创建不必要的对象六、消除过期的对象引用七、避免使用终结方法 Effective Java (对象通用方法)http://www.cnblogs.com/stephen-liu74/archive/2012/01/16/2228360.html八、覆盖equals时请遵守通用约定九、覆盖equals时总要覆盖hashCode十、始终要覆盖toString十二、考虑实现Comparable接口 Effective Java (类和接口)http://www.cnblogs.com/stephen-liu74/archive/2012/01/18/2228349.html十三、使类和成员的可访问性最小化十四、在公有类中使用访问方法而非公有域十五、使可变性最小化十六、复合优先于继承十七、要么为继承而设计，并提供文档说明，要么就禁止继承十八、接口优先于抽象类十九、接口只用于定义类型二十、类层次优于标签类二十一、用函数对象表示策略二十二、优先考虑静态成员类 Effective Java (泛型)http://www.cnblogs.com/stephen-liu74/archive/2012/01/20/2228938.html二十三、请不要在新代码中使用原生态类型二十四、消除非受检警告二十五、列表优先于数组二十六、优先考虑泛型二十七、优先考虑泛型方法二十八、利用有限制通配符来提升API的灵活性二十九、优先考虑类型安全的异构容器 Effective Java (枚举)http://www.cnblogs.com/stephen-liu74/archive/2012/01/23/2232218.html三十、用enum代替int常量三十一、用实例域代替序数三十二、用EnumSet代替位域三十三、用EnumMap代替序数索引三十四、用接口模拟可伸缩的枚举 Effective Java (方法)http://www.cnblogs.com/stephen-liu74/archive/2012/01/25/2245971.html三十八、检查参数的有效性三十九、必要时进行保护性拷贝四十一、谨慎重载四十二、慎用可变参数四十三、返回零长度的数组或者集合，而不是null Effective Java (通用程序设计)http://www.cnblogs.com/stephen-liu74/archive/2012/01/27/2261576.html四十五、将局部变量的作用域最小化四十六、for-each循环优先于传统的for循环四十八：如果需要精确的答案，请避免使用float和double四十九、基本类型优先于基本装箱类型五十一、当心字符串连接的性能五十二、通过接口引用对象五十三、接口优先于反射机制五十四、谨慎地使用本地方法 Effective Java (异常)http://www.cnblogs.com/stephen-liu74/archive/2012/01/30/2263585.html五十七、只针对异常情况才使用异常五十八、对可恢复的情况使用受检异常，对编程错误使用运行时异常五十九、避免不必要的使用受检异常六十、优先使用标准异常六十一、抛出与抽象相对应的异常六十三、在细节中包含能捕获失败的信息六十四、努力使失败保持原子性六十五、不要忽略异常 Effective Java (并发)http://www.cnblogs.com/stephen-liu74/archive/2012/02/01/2270868.html六十六、同步访问共享的可变数据六十七、避免过度同步六十八、executor和task优先于线程六十九、并发工具优先于wait和notify七十一、慎用延迟初始化 Effective Java (序列化)http://www.cnblogs.com/stephen-liu74/archive/2012/02/03/2284306.html七十五、考虑使用自定义的序列化形式七十六、保护性的编写readObject方法 作者: Stephen_Liu 发表于 2012-02-06 07:48 原文链接 评论: 0　查看评论　发表评论 [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-8566"></span></p>
<p>SyndContentImpl.value=
<p><span style="font-size: 15px;">&#160;&#160;&#160;&#160;&#160; 在从事软件开发的十多年间，我曾有幸读过多种开发语言的Effective系列，如《Effective C++》、《More Effective C++》、《Effective Java》(第一版/第二版)、《Effective C#》和《More Effective C#》，单单从这一点看也算是Effective系列的忠实拥趸了。毋庸置疑，这个系列的书籍对我们研习各种开发语言的进阶都有着极为重要的意义。</span><br /><span style="font-size: 15px;">&#160;&#160;&#160;&#160;&#160; 在与很多初、中、高级程序员一起合作开发期间，曾多次向他们推荐经典的专业书籍，尽管每种开发语言都有着属于自己的代表作，如C++ Primer、Thinking in Java和Essential C#等，然而无一例外的是，我都会建议他们去阅读各自语言的Effective系列，因为他们确实是经典中的经典，特别是当你对该编程语言已经有了一定的开发基础和理解之后再去学习和研究书中阐述的每一个细节，就会发现书中介绍的case往往就是我们在开发中经常会用到但却又容易忽视的问题，而程序中的隐患也恰恰来自于我们的视而不见。所以我认为对于该书的阅读是应该建立在一系列的反复<span style="font-size: 15px;">思考</span>与<span style="font-size: 15px;">实践</span>之上的，可能这样的迭代过程会需要很长一段时间，然而在我看来(仅代表个人观点，如有不同，欢迎交流)，它却是通向编程高手的必经之路。</span><br /><span style="font-size: 15px;">&#160;&#160;&#160;&#160;&#160; OK，现在已经显而易见了，相信网友们也已经清楚了，这个系列的博客是源自《Effective Java》的读书笔记。最后，请大家继续关注本人后面的有关其他技术主题的系列博客。<br /></span></p>
<p><span style="font-size: 15px;"><span style="font-size: 16px;"><strong><span style="color: #ff6600;">Effective Java (创建和销毁对象)</span></strong></span><br /><a href="http://www.cnblogs.com/stephen-liu74/archive/2012/01/13/2228354.html" target="_blank">http://www.cnblogs.com/stephen-liu74/archive/2012/01/13/2228354.html</a><br />一、考虑用静态工厂方法代替构造器<br />二、遇到多个构造参数时要考虑用构建器(Builder模式)<br />三、用私有构造器或者枚举类型强化Singleton属性<br />四、通过私有构造器强化不可实例化的能力<br />五、避免创建不必要的对象<br />六、消除过期的对象引用<br />七、避免使用终结方法</p>
<p><span style="font-size: 16px;"><strong><span style="color: #ff6600;">Effective Java (对象通用方法)</span></strong></span><br /><a href="http://www.cnblogs.com/stephen-liu74/archive/2012/01/16/2228360.html" target="_blank">http://www.cnblogs.com/stephen-liu74/archive/2012/01/16/2228360.html</a><br />八、覆盖equals时请遵守通用约定<br />九、覆盖equals时总要覆盖hashCode<br />十、始终要覆盖toString<br />十二、考虑实现Comparable接口</p>
<p><span style="font-size: 16px;"><strong><span style="color: #ff6600;">Effective Java (类和接口)</span></strong></span><br /><a href="http://www.cnblogs.com/stephen-liu74/archive/2012/01/18/2228349.html" target="_blank">http://www.cnblogs.com/stephen-liu74/archive/2012/01/18/2228349.html</a><br />十三、使类和成员的可访问性最小化<br />十四、在公有类中使用访问方法而非公有域<br />十五、使可变性最小化<br />十六、复合优先于继承<br />十七、要么为继承而设计，并提供文档说明，要么就禁止继承<br />十八、接口优先于抽象类<br />十九、接口只用于定义类型<br />二十、类层次优于标签类<br />二十一、用函数对象表示策略<br />二十二、优先考虑静态成员类</p>
<p><span style="font-size: 16px;"><strong><span style="color: #ff6600;">Effective Java (泛型)</span></strong></span><br /><a href="http://www.cnblogs.com/stephen-liu74/archive/2012/01/20/2228938.html" target="_blank">http://www.cnblogs.com/stephen-liu74/archive/2012/01/20/2228938.html</a><br />二十三、请不要在新代码中使用原生态类型<br />二十四、消除非受检警告<br />二十五、列表优先于数组<br />二十六、优先考虑泛型<br />二十七、优先考虑泛型方法<br />二十八、利用有限制通配符来提升API的灵活性<br />二十九、优先考虑类型安全的异构容器</p>
<p><span style="color: #ff6600;"><strong><span style="font-size: 16px;">Effective Java (枚举)</span></strong></span><br /><a href="http://www.cnblogs.com/stephen-liu74/archive/2012/01/23/2232218.html" target="_blank">http://www.cnblogs.com/stephen-liu74/archive/2012/01/23/2232218.html</a><br />三十、用enum代替int常量<br />三十一、用实例域代替序数<br />三十二、用EnumSet代替位域<br />三十三、用EnumMap代替序数索引<br />三十四、用接口模拟可伸缩的枚举</p>
<p><span style="font-size: 16px;"><strong><span style="color: #ff6600;">Effective Java (方法)</span></strong></span><br /><a href="http://www.cnblogs.com/stephen-liu74/archive/2012/01/25/2245971.html" target="_blank">http://www.cnblogs.com/stephen-liu74/archive/2012/01/25/2245971.html</a><br />三十八、检查参数的有效性<br />三十九、必要时进行保护性拷贝<br />四十一、谨慎重载<br />四十二、慎用可变参数<br />四十三、返回零长度的数组或者集合，而不是null</p>
<p><span style="font-size: 16px;"><strong><span style="color: #ff6600;">Effective Java (通用程序设计)</span></strong></span><br /><a href="http://www.cnblogs.com/stephen-liu74/archive/2012/01/27/2261576.html" target="_blank">http://www.cnblogs.com/stephen-liu74/archive/2012/01/27/2261576.html</a><br />四十五、将局部变量的作用域最小化<br />四十六、for-each循环优先于传统的for循环<br />四十八：如果需要精确的答案，请避免使用float和double<br />四十九、基本类型优先于基本装箱类型<br />五十一、当心字符串连接的性能<br />五十二、通过接口引用对象<br />五十三、接口优先于反射机制<br />五十四、谨慎地使用本地方法</p>
<p><span style="font-size: 16px;"><strong><span style="color: #ff6600;">Effective Java (异常)</span></strong></span><br /><a href="http://www.cnblogs.com/stephen-liu74/archive/2012/01/30/2263585.html" target="_blank">http://www.cnblogs.com/stephen-liu74/archive/2012/01/30/2263585.html</a><br />五十七、只针对异常情况才使用异常<br />五十八、对可恢复的情况使用受检异常，对编程错误使用运行时异常<br />五十九、避免不必要的使用受检异常<br />六十、优先使用标准异常<br />六十一、抛出与抽象相对应的异常<br />六十三、在细节中包含能捕获失败的信息<br />六十四、努力使失败保持原子性<br />六十五、不要忽略异常</p>
<p><span style="font-size: 16px;"><strong><span style="color: #ff6600;">Effective Java (并发)</span></strong></span><br /><a href="http://www.cnblogs.com/stephen-liu74/archive/2012/02/01/2270868.html" target="_blank">http://www.cnblogs.com/stephen-liu74/archive/2012/02/01/2270868.html</a><br />六十六、同步访问共享的可变数据<br />六十七、避免过度同步<br />六十八、executor和task优先于线程<br />六十九、并发工具优先于wait和notify<br />七十一、慎用延迟初始化</p>
<p><span style="font-size: 16px;"><strong><span style="color: #ff6600;">Effective Java (序列化)</span></strong></span><br /><a href="http://www.cnblogs.com/stephen-liu74/archive/2011/12/11/2284306.html" target="_blank">http://www.cnblogs.com/stephen-liu74/archive/2012/02/03/2284306.html</a><br />七十五、考虑使用自定义的序列化形式<br />七十六、保护性的编写readObject方法<br /></span></p>
<p><img src="aggbug/2329236.html?type=0" width="1" height="1" alt=""/>
<p>作者: <a href="" target="_blank">Stephen_Liu</a> 发表于 2012-02-06 07:48 <a href="http://www.cnblogs.com/stephen-liu74/archive/2012/02/06/2329236.html" target="_blank">原文链接</a></p>
<p>评论: 0　<a href="http://www.cnblogs.com/stephen-liu74/archive/2012/02/06/2329236.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/stephen-liu74/archive/2012/02/06/2329236.html#commentform" target="_blank">发表评论</a></p>
<hr/>
<p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/130244/" target="_blank">金山网络：奇虎360试图转移视线 将提起诉讼</a><span style="color:gray">(2012-02-06 22:55)</span><br/>· <a href="http://news.cnblogs.com/n/130243/" target="_blank">印度35美元平板退货率高 制造与研发商闹内哄</a><span style="color:gray">(2012-02-06 22:43)</span><br/>· <a href="http://news.cnblogs.com/n/130242/" target="_blank">俄罗斯考虑新的火卫一土壤任务</a><span style="color:gray">(2012-02-06 22:17)</span><br/>· <a href="http://news.cnblogs.com/n/130241/" target="_blank">Google隐私策略遭质疑 微软借机力推IE9</a><span style="color:gray">(2012-02-06 21:37)</span><br/>· <a href="http://news.cnblogs.com/n/130240/" target="_blank">知名BT搜索引擎BTjunkie为避免起诉主动关站</a><span style="color:gray">(2012-02-06 21:34)</span><br/></p>
<p>编辑推荐：<a href="http://kb.cnblogs.com/page/130103/" target="_blank">一个老程序员的十年回顾</a><br/></p>
<p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&#160;&#160;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&#160;&#160;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&#160;&#160;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&#160;&#160;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&#160;&#160;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>
<p>SyndContentImpl.interface=interface com.sun.syndication.feed.synd.SyndContent<br />
SyndContentImpl.type=text/plain</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gbsou.com/2012/02/06/8566.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>json学习(java篇)</title>
		<link>http://www.gbsou.com/2012/02/06/8564.html</link>
		<comments>http://www.gbsou.com/2012/02/06/8564.html#comments</comments>
		<pubDate>Mon, 06 Feb 2012 15:56:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.gbsou.com/?p=8564</guid>
		<description><![CDATA[SyndContentImpl.value= 　　前一个小项目中用到了json：服务器返回的数据有xml或者json格式的数据，由于json简洁、轻量、高性能等优点，我们当时就采用的是json格式的数据。上个月没有心情学习啊，就索性多玩会儿，不过今年得有个目标，至少博客得多写写，质量上也希望比前几个月有所提升，那就开始吧。 　　先从json基础知识开始学起。官网不用多说了吧：json.org。 　　json是一种轻量型的数据交互格式。它很容易被人们阅读和书写，也易于机器解析和生成。它给予javasrcipt,是一种文本格式的、完全独立的语言。 　　json中有两种数据结构： 名称/值对的集合（你也可以简单理解为Map）。在不同的语言，这是作为一个对象，记录，结构，字典，哈希表，键列表或关联数组实现。 值的有序列表(通常是Array)。在大多数语言中，实现由一个数组，向量，列表，或序列。 　　这些都是通用的数据结构。几乎所有的现代编程语言都支持这种或那种形式。也正是如此，使json格式的数据可以在不同的编程语言中交互。 　　在JSON中，他们采取这些形式： 　　一个json对象是一个无序的名称/值对。一个对象以 &#8216; { &#8217; 开始，以 &#8216; } &#8217; 结束。每个名称后跟&#8216;：&#8216;(冒号)，名称/值对的分隔符为&#8216;，&#8217;(逗号)。 　　一个json对象如下： &#160;&#160;&#160;&#160;&#160;&#160; 　　有上图可以看出：名称/值对中的名称必须是String型的数据结构，那么value又有什么类型的数据结构呢？ 　　 　　这里得说说array数据类型了，也就是上面的所说的&#8220;值的有序列表&#8221;。这个数组以&#8216; [ &#8217;(左括号)开始,以 &#8217; ] &#8216;结束，以&#8217;，&#8217;(逗号)作为分隔符号。 　　 　　 　　解释下value里面的string,number,null这个三个元素。 　　string是由0个或多个Unicode字符组成，由双引号包裹，非常想c或java中的字符串。number在c或java中都有这样的数据类型就不多说了。但是null又是什么呢？null是json里的一个特殊的value,它可以在你需要的时候转化成任何数据类型。 　　废话不多说，举例吧： 　　 //Merge two JSON objects JSONObject obj1 = new JSONObject(); obj1.put("name","foo"); obj1.put("num",new Integer(100)); obj1.put("balance",new Double(1000.21)); JSONObject obj2 = new JSONObject(); obj2.put("is_vip",new Boolean(true)); [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-8564"></span></p>
<p>SyndContentImpl.value=
<p>　　前一个小项目中用到了json：服务器返回的数据有xml或者json格式的数据，由于json简洁、轻量、高性能等优点，我们当时就采用的是json格式的数据。上个月没有心情学习啊，就索性多玩会儿，不过今年得有个目标，至少博客得多写写，质量上也希望比前几个月有所提升，那就开始吧。</p>
<p>　　<span style="font-size: 15px;">先从json基础知识开始学起。官网不用多说了吧：json.org。</span></p>
<p><span style="font-size: 15px;">　　json是一种轻量型的数据交互格式。它很容易被人们阅读和书写，也易于机器解析和生成。它给予javasrcipt,是一种文本格式的、完全独立的语言。</span></p>
<p><span style="font-size: 15px;">　　json中有两种数据结构：</span></p>
<ul>
<li><span id="result_box" lang="zh-CN"><span style="background-color: #ffffff; color: #ff0000;">名称/值对的集合</span><span>（你也可以简单理解为Map）。</span><span>在</span><span>不同的语言</span><span>，这是</span><span>作为</span><span>一个对象，</span><span>记录，</span><span>结构</span><span>，字典</span><span>，哈希表</span><span>，</span><span>键列表</span><span>或关联数组</span><span>实现</span><span>。</span></span></li>
<li><span id="result_box" lang="zh-CN"><span><span id="result_box" lang="zh-CN"><span style="color: #ff0000;">值的有序列表</span><span>(通常是Array)。</span><span>在大多数语言中</span><span>，</span><span>实现</span><span>由一个数组，</span><span>向量，</span><span>列表</span><span>，</span><span>或序列</span><span>。</span></span></span></span></li>
</ul>
<p><span id="result_box" style="font-size: 15px;" lang="zh-CN"><span id="result_box" lang="zh-CN">　　<span id="result_box" lang="zh-CN"><span class="gt-trans-draggable">这些都是</span><span class="gt-trans-draggable">通用的数据</span><span class="gt-trans-draggable">结构</span><span class="gt-trans-draggable">。</span><span class="gt-trans-draggable">几乎所有的现代</span><span class="gt-trans-draggable">编程语言都支持</span><span class="gt-trans-draggable">这种或那种形式</span><span class="gt-trans-draggable">。</span><span class="gt-trans-draggable">也正是如此，使json格式的数据可以在不同的编程语言中交互。</span></span></span></span></p>
<p><span id="result_box" style="font-size: 15px;" lang="zh-CN"><span id="result_box" lang="zh-CN">　　<span id="result_box" lang="zh-CN"><span class="gt-trans-draggable">在JSON中</span><span class="gt-trans-draggable">，他们采取</span><span class="gt-trans-draggable">这些形式</span><span class="gt-trans-draggable">：</span></span></span></span></p>
<p><span id="result_box" style="font-size: 15px;" lang="zh-CN"><span id="result_box" lang="zh-CN">　　<span id="result_box" lang="zh-CN"><span class="gt-trans-draggable">一个json对象</span><span class="gt-trans-draggable">是一个<span style="color: #ff0000;">无序</span></span><span class="gt-trans-draggable" style="color: #ff0000;">的</span><span class="gt-trans-draggable">名称/值对</span><span class="gt-trans-draggable">。</span><span class="gt-trans-draggable">一个</span><span class="gt-trans-draggable">对象</span><span class="gt-trans-draggable">以 &lsquo; <span style="color: #ff0000;">{</span> &rsquo;</span><span class="gt-trans-draggable"> 开始</span><span class="gt-trans-draggable">，以 &lsquo; <span style="color: #ff0000;">}</span> &rsquo; </span><span class="gt-trans-draggable">结束</span><span class="gt-trans-draggable">。</span><span class="gt-trans-draggable">每个名称</span><span class="gt-trans-draggable">后跟</span><span class="gt-trans-draggable">&#8216;<span style="color: #ff0000;">：</span>&#8216;(冒号)，</span><span class="gt-trans-draggable">名称/值</span><span class="gt-trans-draggable">对的分隔符为&lsquo;<span style="color: #ff0000;">，</span>&rsquo;(逗号)</span><span class="gt-trans-draggable">。</span></span></span></span></p>
<p><span style="font-size: 15px;" lang="zh-CN"><span lang="zh-CN"><span lang="zh-CN"><span class="gt-trans-draggable">　　一个json对象如下：</span></span></span></span></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160; <img src="http://pic002.cnblogs.com/images/2012/320771/2012020222533037.png" alt="" /></p>
<p>　　<span style="font-size: 15px;">有上图可以看出：名称/值对中的名称必须是String型的数据结构，那么value又有什么类型的数据结构呢？</span></p>
<p>　　<img src="http://pic002.cnblogs.com/images/2012/320771/2012020223001452.png" alt="" /></p>
<p>　　<span style="font-size: 15px;">这里得说说array数据类型了，也就是上面的所说的&ldquo;值的有序列表&rdquo;。<span id="result_box" class="short_text" lang="zh-CN">这个数组以&lsquo; [ &rsquo;(左括号)开始,以<span id="result_box" class="short_text" lang="zh-CN"> &rsquo; ] </span>&lsquo;结束，以&#8217;，&#8217;(逗号)作为分隔符号。</span></span></p>
<p><span class="short_text" lang="zh-CN"><span>　　</span></span><img src="http://pic002.cnblogs.com/images/2012/320771/2012020223123054.png" alt="" /></p>
<p>　　</p>
<p>　　<span style="font-size: 15px;">解释下value里面的string,number,null这个三个元素。</span></p>
<p><span style="font-size: 15px;">　　string是由0个或多个<span id="result_box" lang="zh-CN">Unicode字符</span>组成，由双引号包裹，非常想c或java中的字符串。number在c或java中都有这样的数据类型就不多说了。但是null又是什么呢？null是json里的一个特殊的value,它可以在你需要的时候转化成任何数据类型。</span></p>
<p><span style="font-size: 15px;">　　废话不多说，举例吧：</span></p>
<p><span style="font-size: 15px;">　　</span></p>
<div class="cnblogs_code">
<pre>  <span style="color: #008000;">//</span><span style="color: #008000;">Merge two JSON objects</span><span style="color: #008000;"></span>  JSONObject obj1 = <span style="color: #0000ff;">new</span> JSONObject();  obj1.put("name","foo");  obj1.put("num",<span style="color: #0000ff;">new</span> Integer(100));  obj1.put("balance",<span style="color: #0000ff;">new</span> Double(1000.21));

  JSONObject obj2 = <span style="color: #0000ff;">new</span> JSONObject();  obj2.put("is_vip",<span style="color: #0000ff;">new</span> Boolean(<span style="color: #0000ff;">true</span>));  obj2.put("nickname",<span style="color: #0000ff;">null</span>);  obj2.putAll(obj1);  System.out.print(obj2);</pre>
</div>
<p><span style="font-size: 15px;">&#160;</span></p>
<p>&#160;</p>
<div class="cnblogs_code">
<pre> String json = "{"         + "  \"query\": \"Pizza\", "         + "  \"locations\": [ 94043, 90210 ] "         + "}";

 JSONObject object = (JSONObject) <span style="color: #0000ff;">new</span>  JSONTokener(json).nextValue(); String query = object.getString("query"); JSONArray locations = object.getJSONArray("locations");</pre>
</div>
<p><span style="font-size: 15px;"><br /></span></p>
<p><span style="font-size: 15px;"></p>
<p></span></p>
<p>　　</p>
<p>&#160;</p>
<p><img src="aggbug/2336356.html?type=0" width="1" height="1" alt=""/>
<p>作者: <a href="" target="_blank">slider</a> 发表于 2012-02-06 09:54 <a href="http://www.cnblogs.com/slider/archive/2012/02/06/2336356.html" target="_blank">原文链接</a></p>
<p>评论: 0　<a href="http://www.cnblogs.com/slider/archive/2012/02/06/2336356.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/slider/archive/2012/02/06/2336356.html#commentform" target="_blank">发表评论</a></p>
<hr/>
<p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/130244/" target="_blank">金山网络：奇虎360试图转移视线 将提起诉讼</a><span style="color:gray">(2012-02-06 22:55)</span><br/>· <a href="http://news.cnblogs.com/n/130243/" target="_blank">印度35美元平板退货率高 制造与研发商闹内哄</a><span style="color:gray">(2012-02-06 22:43)</span><br/>· <a href="http://news.cnblogs.com/n/130242/" target="_blank">俄罗斯考虑新的火卫一土壤任务</a><span style="color:gray">(2012-02-06 22:17)</span><br/>· <a href="http://news.cnblogs.com/n/130241/" target="_blank">Google隐私策略遭质疑 微软借机力推IE9</a><span style="color:gray">(2012-02-06 21:37)</span><br/>· <a href="http://news.cnblogs.com/n/130240/" target="_blank">知名BT搜索引擎BTjunkie为避免起诉主动关站</a><span style="color:gray">(2012-02-06 21:34)</span><br/></p>
<p>编辑推荐：<a href="http://kb.cnblogs.com/page/130103/" target="_blank">一个老程序员的十年回顾</a><br/></p>
<p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&#160;&#160;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&#160;&#160;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&#160;&#160;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&#160;&#160;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&#160;&#160;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>
<p>SyndContentImpl.interface=interface com.sun.syndication.feed.synd.SyndContent<br />
SyndContentImpl.type=text/plain</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gbsou.com/2012/02/06/8564.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【转】Java集合框架学习笔记</title>
		<link>http://www.gbsou.com/2012/02/06/8562.html</link>
		<comments>http://www.gbsou.com/2012/02/06/8562.html#comments</comments>
		<pubDate>Mon, 06 Feb 2012 15:56:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.gbsou.com/?p=8562</guid>
		<description><![CDATA[SyndContentImpl.value= 从集合框架图中可以看出，分为两类 以Collection为接口的元素集合类型，以Map为接口的映射集合类型Collection类型又分为两大类Set和List 所有集合的实现类都不是直接实现集合类接口，而是都继承一个相应的抽象类Set集合的特征：就是元素无重复，但是无序（所以Set接口以及实现类没有按位置index操作的添加、删除、访问方法） List集合的特征：集合有序排列，可以有重复元素，可以随机访问（使用位置index添加、删除、访问元素） List的实现类有ArrayList，LinkedList，这两个都是非线程安全的，Vector是线程安全的List实现类，Stack是vector的子类 ArrayList的内部实现是基于内部数组Object[]，所以从概念上讲，它更像数组，但LinkedList的内部实现是基于一组连接的记录，所以，它更像一个链表结构 在ArrayList的前面或中间插入数据时，必须将其后的所有数据相应的后移，这样必然要花费较多时间，所以，当你的操作是在一列数据的后面添加数据而不是在前面或中间，并且需要随机地访问其中的元素时，使用ArrayList会提供比较好的性能； 而访问链表中的某个元素时，就必须从链表的一端开始沿着连接方向一个一个元素地去查找，直到找到所需的元素为止，所以，当你的操作是在一列数据的前面或中间添加或删除数据，并且按照顺序访问其中的元素时，就应该使用LinkedList了。 Set的实现类有HashSet，TreeSet以及子类LinkedHashSet，这三个类是非线程安全的TreeSet是基于树结构的集合，LinkedHashSet具备按照插入先后顺序访问的功能，HashSet访问元素的顺序是不确定的，TreeSet的访问顺序是按照树接口的顺序访问的Map的实现类有HashMap，IdentityHashMap，WeakHashMap，TreeMap，以及LinkedHashMap子类，这些类都是非线程安全的，WeakHashMap是一种改进的HashMap，它对key实行“弱引用”，如果一个key不再被外部所引用，那么该key可以被GC回收。 HashTable是线性安全的，HashTable不能插入null空元素 作者: clarkhan 发表于 2012-02-06 13:16 原文链接 评论: 0　查看评论　发表评论 最新新闻：· 金山网络：奇虎360试图转移视线 将提起诉讼(2012-02-06 22:55)· 印度35美元平板退货率高 制造与研发商闹内哄(2012-02-06 22:43)· 俄罗斯考虑新的火卫一土壤任务(2012-02-06 22:17)· Google隐私策略遭质疑 微软借机力推IE9(2012-02-06 21:37)· 知名BT搜索引擎BTjunkie为避免起诉主动关站(2012-02-06 21:34) 编辑推荐：一个老程序员的十年回顾 网站导航：博客园首页&#160;&#160;我的园子&#160;&#160;新闻&#160;&#160;闪存&#160;&#160;博问&#160;&#160;知识库 SyndContentImpl.interface=interface com.sun.syndication.feed.synd.SyndContent SyndContentImpl.type=text/plain]]></description>
			<content:encoded><![CDATA[<p><span id="more-8562"></span></p>
<p>SyndContentImpl.value=
<p><img alt="Java框架图" src="http://images.51cto.com/files/uploadimg/20090629/170011989.jpg" width="498">
<p>从集合框架图中可以看出，分为两类
<p>以Collection为接口的元素集合类型，以Map为接口的映射集合类型<br /><strong>Collection类型又分为两大类Set和List</strong>
<p>所有集合的实现类都不是直接实现集合类接口，而是都继承一个相应的抽象类<br />Set集合的特征：就是元素无重复，但是无序（所以Set接口以及实现类没有按位置index操作的添加、删除、访问方法）
<p>List集合的特征：集合有序排列，可以有重复元素，可以随机访问（使用位置index添加、删除、访问元素）
<p>List的实现类有ArrayList，LinkedList，这两个都是非线程安全的，Vector是线程安全的List实现类，Stack是vector的子类
<p>ArrayList的内部实现是基于内部数组Object[]，所以从概念上讲，它更像数组，但LinkedList的内部实现是基于一组连接的记录，所以，它更像一个链表结构
<p>在ArrayList的前面或中间插入数据时，必须将其后的所有数据相应的后移，这样必然要花费较多时间，所以，当你的操作是在一列数据的后面添加数据而不是在前面或中间，并且需要随机地访问其中的元素时，使用ArrayList会提供比较好的性能；
<p>而访问链表中的某个元素时，就必须从链表的一端开始沿着连接方向一个一个元素地去查找，直到找到所需的元素为止，所以，当你的操作是在一列数据的前面或中间添加或删除数据，并且按照顺序访问其中的元素时，就应该使用LinkedList了。
<p>Set的实现类有HashSet，TreeSet以及子类LinkedHashSet，这三个类是非线程安全的TreeSet是基于树结构的集合，LinkedHashSet具备按照插入先后顺序访问的功能，HashSet访问元素的顺序是不确定的，TreeSet的访问顺序是按照树接口的顺序访问的Map的实现类有HashMap，IdentityHashMap，WeakHashMap，TreeMap，以及LinkedHashMap子类，这些类都是非线程安全的，WeakHashMap是一种改进的HashMap，它对key实行“弱引用”，如果一个key不再被外部所引用，那么该key可以被GC回收。
<p>HashTable是线性安全的，HashTable不能插入null空元素  <img src="aggbug/2339948.html?type=0" width="1" height="1" alt=""/>
<p>作者: <a href="" target="_blank">clarkhan</a> 发表于 2012-02-06 13:16 <a href="http://www.cnblogs.com/clarkhan/archive/2012/02/06/2339948.html" target="_blank">原文链接</a></p>
<p>评论: 0　<a href="http://www.cnblogs.com/clarkhan/archive/2012/02/06/2339948.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/clarkhan/archive/2012/02/06/2339948.html#commentform" target="_blank">发表评论</a></p>
<hr/>
<p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/130244/" target="_blank">金山网络：奇虎360试图转移视线 将提起诉讼</a><span style="color:gray">(2012-02-06 22:55)</span><br/>· <a href="http://news.cnblogs.com/n/130243/" target="_blank">印度35美元平板退货率高 制造与研发商闹内哄</a><span style="color:gray">(2012-02-06 22:43)</span><br/>· <a href="http://news.cnblogs.com/n/130242/" target="_blank">俄罗斯考虑新的火卫一土壤任务</a><span style="color:gray">(2012-02-06 22:17)</span><br/>· <a href="http://news.cnblogs.com/n/130241/" target="_blank">Google隐私策略遭质疑 微软借机力推IE9</a><span style="color:gray">(2012-02-06 21:37)</span><br/>· <a href="http://news.cnblogs.com/n/130240/" target="_blank">知名BT搜索引擎BTjunkie为避免起诉主动关站</a><span style="color:gray">(2012-02-06 21:34)</span><br/></p>
<p>编辑推荐：<a href="http://kb.cnblogs.com/page/130103/" target="_blank">一个老程序员的十年回顾</a><br/></p>
<p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&#160;&#160;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&#160;&#160;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&#160;&#160;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&#160;&#160;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&#160;&#160;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>
<p>SyndContentImpl.interface=interface com.sun.syndication.feed.synd.SyndContent<br />
SyndContentImpl.type=text/plain</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gbsou.com/2012/02/06/8562.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Core Java  Swing</title>
		<link>http://www.gbsou.com/2012/02/05/8560.html</link>
		<comments>http://www.gbsou.com/2012/02/05/8560.html#comments</comments>
		<pubDate>Sun, 05 Feb 2012 15:56:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.gbsou.com/?p=8560</guid>
		<description><![CDATA[SyndContentImpl.value= 只有注册用户登录后才能阅读该文。阅读全文。 作者: shuigee 发表于 2012-02-05 12:24 原文链接 评论: 1　查看评论　发表评论 最新新闻：· Google停止支持CDMA设备(2012-02-05 22:56)· 四款优秀的Linux剧本创作工具(2012-02-05 22:55)· 你可以在那台“老旧慢”的电脑上禁用 Google Instant(2012-02-05 19:31)· 马化腾：中国互联网将从学生变老师(2012-02-05 19:29)· 卫星电话加密算法被破解(2012-02-05 19:26) 编辑推荐：一个老程序员的十年回顾 网站导航：博客园首页&#160;&#160;我的园子&#160;&#160;新闻&#160;&#160;闪存&#160;&#160;博问&#160;&#160;知识库 SyndContentImpl.interface=interface com.sun.syndication.feed.synd.SyndContent SyndContentImpl.type=text/plain]]></description>
			<content:encoded><![CDATA[<p><span id="more-8560"></span></p>
<p>SyndContentImpl.value=
<p>只有注册用户登录后才能阅读该文。<a href='http://www.cnblogs.com/shuigee/archive/2012/02/05/2338900.html'>阅读全文</a>。<img src="aggbug/2338900.html?type=0" width="1" height="1" alt=""/>
<p>作者: <a href="" target="_blank">shuigee</a> 发表于 2012-02-05 12:24 <a href="http://www.cnblogs.com/shuigee/archive/2012/02/05/2338900.html" target="_blank">原文链接</a></p>
<p>评论: 1　<a href="http://www.cnblogs.com/shuigee/archive/2012/02/05/2338900.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/shuigee/archive/2012/02/05/2338900.html#commentform" target="_blank">发表评论</a></p>
<hr/>
<p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/130115/" target="_blank">Google停止支持CDMA设备</a><span style="color:gray">(2012-02-05 22:56)</span><br/>· <a href="http://news.cnblogs.com/n/130114/" target="_blank">四款优秀的Linux剧本创作工具</a><span style="color:gray">(2012-02-05 22:55)</span><br/>· <a href="http://news.cnblogs.com/n/130111/" target="_blank">你可以在那台“老旧慢”的电脑上禁用 Google Instant</a><span style="color:gray">(2012-02-05 19:31)</span><br/>· <a href="http://news.cnblogs.com/n/130110/" target="_blank">马化腾：中国互联网将从学生变老师</a><span style="color:gray">(2012-02-05 19:29)</span><br/>· <a href="http://news.cnblogs.com/n/130109/" target="_blank">卫星电话加密算法被破解</a><span style="color:gray">(2012-02-05 19:26)</span><br/></p>
<p>编辑推荐：<a href="http://kb.cnblogs.com/page/130103/" target="_blank">一个老程序员的十年回顾</a><br/></p>
<p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&#160;&#160;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&#160;&#160;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&#160;&#160;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&#160;&#160;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&#160;&#160;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>
<p>SyndContentImpl.interface=interface com.sun.syndication.feed.synd.SyndContent<br />
SyndContentImpl.type=text/plain</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gbsou.com/2012/02/05/8560.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Core Java OOP</title>
		<link>http://www.gbsou.com/2012/02/05/8558.html</link>
		<comments>http://www.gbsou.com/2012/02/05/8558.html#comments</comments>
		<pubDate>Sun, 05 Feb 2012 15:56:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.gbsou.com/?p=8558</guid>
		<description><![CDATA[SyndContentImpl.value= 只有注册用户登录后才能阅读该文。阅读全文。 作者: shuigee 发表于 2012-02-05 23:51 原文链接 评论: 0　查看评论　发表评论 最新新闻：· Google停止支持CDMA设备(2012-02-05 22:56)· 四款优秀的Linux剧本创作工具(2012-02-05 22:55)· 你可以在那台“老旧慢”的电脑上禁用 Google Instant(2012-02-05 19:31)· 马化腾：中国互联网将从学生变老师(2012-02-05 19:29)· 卫星电话加密算法被破解(2012-02-05 19:26) 编辑推荐：一个老程序员的十年回顾 网站导航：博客园首页&#160;&#160;我的园子&#160;&#160;新闻&#160;&#160;闪存&#160;&#160;博问&#160;&#160;知识库 SyndContentImpl.interface=interface com.sun.syndication.feed.synd.SyndContent SyndContentImpl.type=text/plain]]></description>
			<content:encoded><![CDATA[<p><span id="more-8558"></span></p>
<p>SyndContentImpl.value=
<p>只有注册用户登录后才能阅读该文。<a href='http://www.cnblogs.com/shuigee/archive/2012/02/05/2339416.html'>阅读全文</a>。<img src="aggbug/2339416.html?type=0" width="1" height="1" alt=""/>
<p>作者: <a href="" target="_blank">shuigee</a> 发表于 2012-02-05 23:51 <a href="http://www.cnblogs.com/shuigee/archive/2012/02/05/2339416.html" target="_blank">原文链接</a></p>
<p>评论: 0　<a href="http://www.cnblogs.com/shuigee/archive/2012/02/05/2339416.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/shuigee/archive/2012/02/05/2339416.html#commentform" target="_blank">发表评论</a></p>
<hr/>
<p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/130115/" target="_blank">Google停止支持CDMA设备</a><span style="color:gray">(2012-02-05 22:56)</span><br/>· <a href="http://news.cnblogs.com/n/130114/" target="_blank">四款优秀的Linux剧本创作工具</a><span style="color:gray">(2012-02-05 22:55)</span><br/>· <a href="http://news.cnblogs.com/n/130111/" target="_blank">你可以在那台“老旧慢”的电脑上禁用 Google Instant</a><span style="color:gray">(2012-02-05 19:31)</span><br/>· <a href="http://news.cnblogs.com/n/130110/" target="_blank">马化腾：中国互联网将从学生变老师</a><span style="color:gray">(2012-02-05 19:29)</span><br/>· <a href="http://news.cnblogs.com/n/130109/" target="_blank">卫星电话加密算法被破解</a><span style="color:gray">(2012-02-05 19:26)</span><br/></p>
<p>编辑推荐：<a href="http://kb.cnblogs.com/page/130103/" target="_blank">一个老程序员的十年回顾</a><br/></p>
<p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&#160;&#160;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&#160;&#160;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&#160;&#160;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&#160;&#160;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&#160;&#160;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>
<p>SyndContentImpl.interface=interface com.sun.syndication.feed.synd.SyndContent<br />
SyndContentImpl.type=text/plain</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gbsou.com/2012/02/05/8558.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JVM探索之路之Class文件结构解析（三）：访问修饰符、类索引、父类索引与接口索引集合</title>
		<link>http://www.gbsou.com/2012/02/04/8556.html</link>
		<comments>http://www.gbsou.com/2012/02/04/8556.html#comments</comments>
		<pubDate>Sat, 04 Feb 2012 15:57:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.gbsou.com/?p=8556</guid>
		<description><![CDATA[SyndContentImpl.value= &#160; JVM 学习笔记目录： JVM探索之路之Class文件结构解析（一）：Class文件的格式与定义&#160; JVM探索之路之Class文件结构解析（二）：常量池 &#160; &#160; JVM探索之路之Class文件结构解析（三） 先将分析需要的资源信息列出来： &#160;case： package com.beliefbetrayal.clazz; public class ClassFileTest { private int m; public int getM() { return m; } public void setM(int m) { this.m = m; }} Class文件结构表： javap工具分析Class文件信息常量池部分： 在上一次分析Class文件的博文中已经详细分析了如何手工解析Class文件中的constant_pool信息，现在接着分析Class文件结构中紧随constan_pool的访问标示符(access_flag)。使用WinHex打开ClassFileTest.class文件，并找到contant_pool结束的位置： 　　查看”javap工具分析Class文件信息常量池部分“找到最后一个常量，其值为”ClassFileTest.java”，注意”;”并不是Class文件中数据，在WinHex中找到它对应的值，以确定常量池结束的位置。查看”Class文件结构表“，可知紧随constan_pool的是2个字节代表的访问标志，这个标志的作用是用于识别一些类或者接口层次的访问信息，例如：这个Class是类还是接口，是否定义为public，是否定义为abstract，如果是类的话，是否被定义为final类型的之类的信息。具体的标志位及标志的含义如下表： 访问标志&#160; 标志名称 标志值 含义 ACC_PUBLIC 0&#215;0001 是否为public类型 ACC_FINAL 0&#215;0010 是否被声明为final，只有类可以设置，接口不能设置该标志 ACC_SUPER 0&#215;0020 是否允许使用invokespecial字节码指令（查了一下该命令的作用为”调用超类的构造方法，实例的构造方法，私有方法”），JDK1.2以后的编译器编译出来的class文件该标志都为真 ACC_INTERFACE 0&#215;0200 [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-8556"></span></p>
<p>SyndContentImpl.value=
<p style="text-align: left;">&#160;</p>
<p style="text-align: left;"><span style="font-size: 14pt; font-family: 'webdings';">JVM 学习笔记目录：</span></p>
<p style="text-align: left;"><span style="font-size: 14pt; font-family: 'webdings';"><a href="http://www.cnblogs.com/beliefbetrayal/archive/2012/02/01/2334100.html">JVM探索之路之Class文件结构解析（一）：Class文件的格式与定义</a></span><span style="font-size: 14pt; font-family: 'webdings';">&#160;</span></p>
<p style="text-align: left;"><span style="font-size: 14pt; font-family: 'webdings';"> <span style="font-size: 14pt;"><a href="http://www.cnblogs.com/beliefbetrayal/archive/2012/02/01/2334582.html">JVM探索之路之Class文件结构解析（二）：常量池</a> </span> &#160;</span></p>
<p style="text-align: left;"><strong><span style="font-family: 'webdings'; font-size: 18pt;">&#160;</span></strong></p>
<p style="text-align: center;"><strong><span style="font-family: 'webdings'; font-size: 18pt;">JVM探索之路之Class文件结构解析（三）</span></strong></p>
<p><span style="font-size: 14pt; font-family: 'webdings';">先将分析需要的资源信息列出来：</span></p>
<p><span style="font-size: 14pt; font-family: 'webdings';">&#160;case：<a name="case"></a></span></p>
<div class="cnblogs_code">
<pre><span style="color: #0000ff;">package</span> com.beliefbetrayal.clazz;

<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> ClassFileTest {

    <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">int</span> m;

    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> getM() {        <span style="color: #0000ff;">return</span> m;    }

    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> setM(<span style="color: #0000ff;">int</span> m) {        <span style="color: #0000ff;">this</span>.m = m;    }}</pre>
</div>
<p><span style="font-size: 14pt; font-family: 'webdings';">Class文件结构表：<a name="classtable"></a></span></p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/371575/2012020323202563.png" alt="" /></p>
<p><span style="font-size: 14pt; font-family: 'webdings';">javap工具分析Class文件信息常量池部分：<a name="javap"></a></span></p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/371575/2012020323213733.png" alt="" /></p>
<p><span style="font-size: 14pt; font-family: 'webdings';">在上一次分析Class文件的博文中已经详细分析了如何手工解析Class文件中的constant_pool信息，现在接着分析Class文件结构中紧随constan_pool的访问标示符(access_flag)。使用WinHex打开ClassFileTest.class文件，并找到contant_pool结束的位置：</span></p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/371575/2012020323294619.png" alt="" /></p>
<p><span style="font-size: 14pt; font-family: 'webdings';">　　查看”<span style="font-size: 14pt; font-family: 'webdings';"><a href="#javap">javap工具分析Class文件信息常量池部分</a></span>“找到最后一个常量，其值为”ClassFileTest.java”，注意”;”并不是Class文件中数据，在WinHex中找到它对应的值，以确定常量池结束的位置。查看”<span style="font-size: 14pt; font-family: 'webdings';"><a href="#classtable">Class文件结构表</a></span>“，可知紧随constan_pool的是2个字节代表的访问标志，这个标志的作用是用于识别一些类或者接口层次的访问信息，例如：这个Class是类还是接口，是否定义为public，是否定义为abstract，如果是类的话，是否被定义为final类型的之类的信息。具体的标志位及标志的含义如下表：</span></p>
<table class="cnblogs_code_Collapse" style="border-width: 1px; border-color: #241ce3; border-style: solid; height: 200px;" border="1" align="center">
<caption><strong>访问标志</strong><a name="accessflag"></a>&#160;</caption>
<tbody>
<tr>
<td style="text-align: center;">标志名称</td>
<td>标志值</td>
<td style="text-align: center;">含义</td>
</tr>
<tr>
<td style="text-align: center;">ACC_PUBLIC</td>
<td>0&#215;0001</td>
<td style="text-align: center;">是否为public类型</td>
</tr>
<tr>
<td style="text-align: center;">ACC_FINAL</td>
<td>0&#215;0010</td>
<td style="text-align: center;">是否被声明为final，只有类可以设置，接口不能设置该标志</td>
</tr>
<tr>
<td style="text-align: center;">ACC_SUPER</td>
<td>0&#215;0020</td>
<td>是否允许使用invokespecial字节码指令（查了一下该命令的作用为”调用超类的构造方法，实例的构造方法，私有方法”），JDK1.2以后的编译器编译出来的class文件该标志都为真</td>
</tr>
<tr>
<td style="text-align: center;">ACC_INTERFACE</td>
<td>0&#215;0200</td>
<td style="text-align: center;">标识这是一个接口&#160;</td>
</tr>
<tr>
<td style="text-align: center;">ACC_ABSTRACT</td>
<td>0&#215;0400</td>
<td style="text-align: center;">&#160;是否被声明为abstract类型，对于接口和抽象类来说此标志为真，其他类为假</td>
</tr>
<tr>
<td style="text-align: center;">ACC_SYNTHETIC</td>
<td>0&#215;1000</td>
<td style="text-align: center;">&#160;标识这个类并非由用户代码生成</td>
</tr>
<tr>
<td style="text-align: center;">ACC_ANNOTATION</td>
<td>0&#215;2000</td>
<td style="text-align: center;">&#160;标识这是一个注解</td>
</tr>
<tr>
<td style="text-align: center;">ACC_ENUM</td>
<td>0&#215;4000</td>
<td style="text-align: center;">&#160;标识这是一个枚举</td>
</tr>
</tbody>
</table>
<p><span style="font-size: 14pt; font-family: 'webdings';">　　查看”<a href="#case">ClassFileTest.java</a>“源代码，可以看到该类被声明为”public”的，JDK1.6编译出来的文件，JVM中没有使用标志为一律为0，所以只有ACC_PUBLIC与ACC_SUPER标志位不为0，因此它access_flag的值为0&#215;0001|0&#215;0020=0&#215;0021(“|”布尔或操作符)，这里省略了其他6个标志的计算，因为”|”操作符，只有全为0才为0，所以虽然要计算8个标志为的值，但是可以简化为2个。</span></p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/371575/2012020400132090.png" alt="" /></p>
<p><span style="font-size: 14pt; font-family: 'webdings';">　　可以看到上图，紧接着2个字节的值为”0&#215;0021&#8243;，与我们计算的一致。access_flag分析完后，紧接着access_flag的是2个字节的类索引(this_class)，2个字节的父类索引(super_class)和一组2个字节的数据集合接口索引(interfaces)。Class文件中就是由这三项数据确定这个类的继承关系。其中类索引this_class用于确定这个类的全限定名：</span></p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/371575/2012020400222988.png" alt="" /></p>
<p><span style="font-size: 14pt; font-family: 'webdings';">　　如图，类索引this_class的值为”0&#215;0001&#8243;，它是一个指向常量池的索引，”0&#215;0001&#8243;转化为十进制为1，表示常量池第一个常量，<span style="font-size: 14pt; font-family: 'webdings';">查看”<span style="font-size: 14pt; font-family: 'webdings';"><a href="#javap">javap工具分析Class文件信息常量池部分</a></span>“找到第一项常量，它指向第二项常量，找到第二项常量，可以看到”com/beliefbetrayal/clazz/ClassFileTest”的字符串，这不正是我们定义的类的全限定名。分析完类索引，接着分析父类索引(super_class)，众所周知Java语言不允许多继承，索引父类只有一个，除了java.lang.Object类，其他类都有父类：</span></span></p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/371575/2012020400321757.png" alt="" /></p>
<p><span style="font-size: 14pt; font-family: 'webdings';">　　如图，父类索引super_class值为”0&#215;0003&#8243;，转换为十进制为3，它与类索引一项指向常量，<span style="font-size: 14pt; font-family: 'webdings';"><span style="font-size: 14pt; font-family: 'webdings';">查看”<span style="font-size: 14pt; font-family: 'webdings';"><a href="#javap">javap工具分析Class文件信息常量池部分</a></span>“找到第三个常量</span></span>，第三个常量又指向第四个常量，看到了”java.lang.Object”的字符串值，这就是为什么显示extends&#160;java.lang.Object也会继承他的原因，编译器干的好事^_^。接着分析接口索引(interfaces)，<span style="font-size: 14pt; font-family: 'webdings';">查看”<span style="font-size: 14pt; font-family: 'webdings';"><a href="#classtable">Class文件结构表</a></span>“，可以看到它有一个2个字节”interfaces_count”前置计数器，用于计算该类实现了多少个接口，而”interfaces”接口索引用于表式类实现的接口，按照implement语句从左到右排列到接口索引集合中：</span></span></p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/371575/2012020400434486.png" alt="" /></p>
<p><span style="font-size: 14pt; font-family: 'webdings';"> 　　因为<span style="font-size: 14pt; font-family: 'webdings';">“<a href="#case">ClassFileTest.java</a>“源代码并没有实现任何接口，所以”interfaces_count”前置计数器为0，如图所示它的值如分析的一样”0&#215;0000&#8243;，因为 <span style="font-size: 14pt; font-family: 'webdings';"><span style="font-size: 14pt; font-family: 'webdings';">“interfaces_count”前置计数器为0</span></span>，Class文件就不必留空间记录接口索引集合(interfaces)，索引<span style="font-size: 14pt; font-family: 'webdings';"><span style="font-size: 14pt; font-family: 'webdings';">接口索引集合(interfaces)信息不会出现在Class文件中。</span></span></span></span></p>
<p><span style="font-size: 14pt; font-family: 'webdings';">&#160;</span></p>
<p style="text-align: right;"><span style="font-size: 14pt; font-family: 'webdings';"> <span style="font-size: 14pt;">个人理解难免疏漏错误，欢迎指正讨论。</span></span><span style="font-size: 14pt; font-family: 'webdings';">&#160;</span></p>
<p><img src="aggbug/2337612.html?type=0" width="1" height="1" alt=""/>
<p>作者: <a href="" target="_blank">信仰や欺骗</a> 发表于 2012-02-04 00:53 <a href="http://www.cnblogs.com/beliefbetrayal/archive/2012/02/04/2337612.html" target="_blank">原文链接</a></p>
<p>评论: 0　<a href="http://www.cnblogs.com/beliefbetrayal/archive/2012/02/04/2337612.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/beliefbetrayal/archive/2012/02/04/2337612.html#commentform" target="_blank">发表评论</a></p>
<hr/>
<p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/130049/" target="_blank">库克暗示Mac不会采用ARM构架处理器</a><span style="color:gray">(2012-02-04 22:39)</span><br/>· <a href="http://news.cnblogs.com/n/130048/" target="_blank">iPhone/iPad在德下架 苹果：We&#39;ll be back!</a><span style="color:gray">(2012-02-04 22:34)</span><br/>· <a href="http://news.cnblogs.com/n/130047/" target="_blank">iPad商标侵权案升级：苹果或遭各地工商逾百亿罚单</a><span style="color:gray">(2012-02-04 22:15)</span><br/>· <a href="http://news.cnblogs.com/n/130046/" target="_blank">美光科技CEO艾普顿驾驶私人飞机失事去世</a><span style="color:gray">(2012-02-04 22:14)</span><br/>· <a href="http://news.cnblogs.com/n/130045/" target="_blank">天上掉馅饼 20位Android用户获微软赠WP7</a><span style="color:gray">(2012-02-04 22:13)</span><br/></p>
<p>编辑推荐：<a href="http://news.cnblogs.com/n/129936/" target="_blank">看NASA怎么用5块钱解决1亿元的问题</a><br/></p>
<p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&#160;&#160;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&#160;&#160;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&#160;&#160;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&#160;&#160;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&#160;&#160;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>
<p>SyndContentImpl.interface=interface com.sun.syndication.feed.synd.SyndContent<br />
SyndContentImpl.type=text/plain</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gbsou.com/2012/02/04/8556.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Core Java note4</title>
		<link>http://www.gbsou.com/2012/02/04/8554.html</link>
		<comments>http://www.gbsou.com/2012/02/04/8554.html#comments</comments>
		<pubDate>Sat, 04 Feb 2012 15:57:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.gbsou.com/?p=8554</guid>
		<description><![CDATA[SyndContentImpl.value= 只有注册用户登录后才能阅读该文。阅读全文。 作者: shuigee 发表于 2012-02-04 14:12 原文链接 评论: 0　查看评论　发表评论 最新新闻：· 库克暗示Mac不会采用ARM构架处理器(2012-02-04 22:39)· iPhone/iPad在德下架 苹果：We&#39;ll be back!(2012-02-04 22:34)· iPad商标侵权案升级：苹果或遭各地工商逾百亿罚单(2012-02-04 22:15)· 美光科技CEO艾普顿驾驶私人飞机失事去世(2012-02-04 22:14)· 天上掉馅饼 20位Android用户获微软赠WP7(2012-02-04 22:13) 编辑推荐：看NASA怎么用5块钱解决1亿元的问题 网站导航：博客园首页&#160;&#160;我的园子&#160;&#160;新闻&#160;&#160;闪存&#160;&#160;博问&#160;&#160;知识库 SyndContentImpl.interface=interface com.sun.syndication.feed.synd.SyndContent SyndContentImpl.type=text/plain]]></description>
			<content:encoded><![CDATA[<p><span id="more-8554"></span></p>
<p>SyndContentImpl.value=
<p>只有注册用户登录后才能阅读该文。<a href='http://www.cnblogs.com/shuigee/archive/2012/02/04/2337945.html'>阅读全文</a>。<img src="aggbug/2337945.html?type=0" width="1" height="1" alt=""/>
<p>作者: <a href="" target="_blank">shuigee</a> 发表于 2012-02-04 14:12 <a href="http://www.cnblogs.com/shuigee/archive/2012/02/04/2337945.html" target="_blank">原文链接</a></p>
<p>评论: 0　<a href="http://www.cnblogs.com/shuigee/archive/2012/02/04/2337945.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/shuigee/archive/2012/02/04/2337945.html#commentform" target="_blank">发表评论</a></p>
<hr/>
<p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/130049/" target="_blank">库克暗示Mac不会采用ARM构架处理器</a><span style="color:gray">(2012-02-04 22:39)</span><br/>· <a href="http://news.cnblogs.com/n/130048/" target="_blank">iPhone/iPad在德下架 苹果：We&#39;ll be back!</a><span style="color:gray">(2012-02-04 22:34)</span><br/>· <a href="http://news.cnblogs.com/n/130047/" target="_blank">iPad商标侵权案升级：苹果或遭各地工商逾百亿罚单</a><span style="color:gray">(2012-02-04 22:15)</span><br/>· <a href="http://news.cnblogs.com/n/130046/" target="_blank">美光科技CEO艾普顿驾驶私人飞机失事去世</a><span style="color:gray">(2012-02-04 22:14)</span><br/>· <a href="http://news.cnblogs.com/n/130045/" target="_blank">天上掉馅饼 20位Android用户获微软赠WP7</a><span style="color:gray">(2012-02-04 22:13)</span><br/></p>
<p>编辑推荐：<a href="http://news.cnblogs.com/n/129936/" target="_blank">看NASA怎么用5块钱解决1亿元的问题</a><br/></p>
<p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&#160;&#160;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&#160;&#160;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&#160;&#160;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&#160;&#160;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&#160;&#160;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>
<p>SyndContentImpl.interface=interface com.sun.syndication.feed.synd.SyndContent<br />
SyndContentImpl.type=text/plain</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gbsou.com/2012/02/04/8554.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>arraylist存入的是对象还是引用呢？？</title>
		<link>http://www.gbsou.com/2012/02/04/8552.html</link>
		<comments>http://www.gbsou.com/2012/02/04/8552.html#comments</comments>
		<pubDate>Sat, 04 Feb 2012 15:57:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.gbsou.com/?p=8552</guid>
		<description><![CDATA[SyndContentImpl.value= arraylist可以说是java编程过程中经常会使用到的一个容器，可是其中存放的究竟是对象的引用还是对象本身呢？？为了弄清楚这个问题，我写了以下这个小程序 import java.util.ArrayList; public class fsd { public static void main(String args[]) { a A=new a(); ArrayList&#60;a&#62; b=new ArrayList&#60;a&#62;(); A.setA(0); A.setB(1); b.add(A); A.setA(3); A.setB(4); System.out.println(b.get(0)); } } class a{ int a,b; public int getA() { return a; } public void setA(int a) { this.a = a; } public int getB() { return b; } [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-8552"></span></p>
<p>SyndContentImpl.value=
<p>arraylist可以说是java编程过程中经常会使用到的一个容器，可是其中存放的究竟是对象的引用还是对象本身呢？？为了弄清楚这个问题，我写了以下这个小程序</p>
<div class="cnblogs_Highlighter">
<pre class="brush:java;gutter:true;">import java.util.ArrayList;

public class fsd {
	public static void main(String args[]) {
		a A=new a();
		ArrayList&lt;a&gt; b=new ArrayList&lt;a&gt;();
		A.setA(0);
		A.setB(1);
		b.add(A);
		A.setA(3);
		A.setB(4);
		System.out.println(b.get(0));
	}
}
class a{
	int a,b;

	public int getA() {
		return a;
	}

	public void setA(int a) {
		this.a = a;
	}

	public int getB() {
		return b;
	}

	public void setB(int b) {
		this.b = b;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "a "+a+" b "+b;
	}

}
</pre>
</div>
<p>　　输出的结果不是”a 0 b 1&#8243;而是”a 3 b 4&#8243;,这样问题就很明显了，<span style="color: #ff0000;">arraylist中存入的是对象的引用而不是对象本身</span></p>
<p><span style="color: #000000;">　　</span></p>
<p><span style="color: #000000;"><br /></span></p>
<p><img src="aggbug/2337996.html?type=0" width="1" height="1" alt=""/>
<p>作者: <a href="" target="_blank">No.47</a> 发表于 2012-02-04 14:54 <a href="http://www.cnblogs.com/Kiro/archive/2012/02/04/2337996.html" target="_blank">原文链接</a></p>
<p>评论: 0　<a href="http://www.cnblogs.com/Kiro/archive/2012/02/04/2337996.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Kiro/archive/2012/02/04/2337996.html#commentform" target="_blank">发表评论</a></p>
<hr/>
<p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/130049/" target="_blank">库克暗示Mac不会采用ARM构架处理器</a><span style="color:gray">(2012-02-04 22:39)</span><br/>· <a href="http://news.cnblogs.com/n/130048/" target="_blank">iPhone/iPad在德下架 苹果：We&#39;ll be back!</a><span style="color:gray">(2012-02-04 22:34)</span><br/>· <a href="http://news.cnblogs.com/n/130047/" target="_blank">iPad商标侵权案升级：苹果或遭各地工商逾百亿罚单</a><span style="color:gray">(2012-02-04 22:15)</span><br/>· <a href="http://news.cnblogs.com/n/130046/" target="_blank">美光科技CEO艾普顿驾驶私人飞机失事去世</a><span style="color:gray">(2012-02-04 22:14)</span><br/>· <a href="http://news.cnblogs.com/n/130045/" target="_blank">天上掉馅饼 20位Android用户获微软赠WP7</a><span style="color:gray">(2012-02-04 22:13)</span><br/></p>
<p>编辑推荐：<a href="http://news.cnblogs.com/n/129936/" target="_blank">看NASA怎么用5块钱解决1亿元的问题</a><br/></p>
<p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&#160;&#160;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&#160;&#160;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&#160;&#160;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&#160;&#160;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&#160;&#160;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>
<p>SyndContentImpl.interface=interface com.sun.syndication.feed.synd.SyndContent<br />
SyndContentImpl.type=text/plain</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gbsou.com/2012/02/04/8552.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JNDI理解与演示</title>
		<link>http://www.gbsou.com/2012/02/04/8550.html</link>
		<comments>http://www.gbsou.com/2012/02/04/8550.html#comments</comments>
		<pubDate>Sat, 04 Feb 2012 15:57:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.gbsou.com/?p=8550</guid>
		<description><![CDATA[SyndContentImpl.value= 环境只需要基本jdk包 先手动实现一个JNDI的服务。 抽象服务接口如下： 1 package loci.jndi; 2 3 /** 4 * @author yaohw 5 * 6 */ 7 public interface JndiIService { 8 9 String fun();10 11 String getField();12 13 } 实现服务：注意需要实现Referenceable，重写getReference方法 package loci.jndi; import javax.naming.NamingException;import javax.naming.Reference;import javax.naming.Referenceable;import javax.naming.StringRefAddr; /** * @author yaohw * */public class JndiService implements Referenceable,JndiIService{ String field; /* (non-Javadoc) * [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-8550"></span></p>
<p>SyndContentImpl.value=
<p>环境只需要基本jdk包</p>
<p>先手动实现一个JNDI的服务。</p>
<p>抽象服务接口如下：</p>
<div class="cnblogs_code">
<pre><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">package</span> loci.jndi;<span style="color: #008080;"> 2</span> <span style="color: #008080;"> 3</span> <span style="color: #008000;">/**</span><span style="color: #008000;"></span><span style="color: #008080;"> 4</span> <span style="color: #008000;"> * </span><span style="color: #808080;">@author</span><span style="color: #008000;"> yaohw</span><span style="color: #008080;"> 5</span> <span style="color: #008000;"> *</span><span style="color: #008080;"> 6</span>  <span style="color: #008000;">*/</span><span style="color: #008080;"> 7</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">interface</span> JndiIService {<span style="color: #008080;"> 8</span>     <span style="color: #008080;"> 9</span>     String fun();<span style="color: #008080;">10</span>     <span style="color: #008080;">11</span>     String getField();<span style="color: #008080;">12</span> <span style="color: #008080;">13</span> }</pre>
</div>
<p>实现服务：注意需要实现Referenceable，重写getReference方法</p>
<div class="cnblogs_code">
<pre><span style="color: #0000ff;">package</span> loci.jndi;

<span style="color: #0000ff;">import</span> javax.naming.NamingException;<span style="color: #0000ff;">import</span> javax.naming.Reference;<span style="color: #0000ff;">import</span> javax.naming.Referenceable;<span style="color: #0000ff;">import</span> javax.naming.StringRefAddr;

<span style="color: #008000;">/**</span><span style="color: #008000;"> * </span><span style="color: #808080;">@author</span><span style="color: #008000;"> yaohw * </span><span style="color: #008000;">*/</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> JndiService <span style="color: #0000ff;">implements</span> Referenceable,JndiIService{

    String field;    <span style="color: #008000;">/*</span><span style="color: #008000;"> (non-Javadoc)     * @see javax.naming.Referenceable#getReference()     </span><span style="color: #008000;">*/</span>    @Override    <span style="color: #0000ff;">public</span> Reference getReference() <span style="color: #0000ff;">throws</span> NamingException {           <span style="color: #008000;">//</span><span style="color: #008000;">Reference是对象的引用，Context中存放的是Reference，为了从Reference中还原出对象实例，           </span><span style="color: #008000;">//</span><span style="color: #008000;">我们需要添加field，它们是创建对象实例的线索。在JndiService中，field是个线索。</span><span style="color: #008000;"></span>           Reference ref=<span style="color: #0000ff;">new</span> Reference(getClass().getName(),JndiServiceFactory.<span style="color: #0000ff;">class</span>.getName(),<span style="color: #0000ff;">null</span>);           ref.add(<span style="color: #0000ff;">new</span> StringRefAddr("field",field));           <span style="color: #0000ff;">return</span> ref;    }

    <span style="color: #008000;">/*</span><span style="color: #008000;"> (non-Javadoc)     * @see loci.jndi.JndiIService#fun()     </span><span style="color: #008000;">*/</span>    @Override    <span style="color: #0000ff;">public</span> String fun() {        <span style="color: #008000;">//</span><span style="color: #008000;"> TODO Auto-generated method stub</span><span style="color: #008000;"></span>        System.out.println("test fun from jndi. field:"+field);        <span style="color: #0000ff;">return</span> field;    }

    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> setProperty(<span style="color: #0000ff;">int</span> index,String property){        field=property;    }

    <span style="color: #008000;">/**</span><span style="color: #008000;">     * </span><span style="color: #808080;">@return</span><span style="color: #008000;"> the field     </span><span style="color: #008000;">*/</span>    <span style="color: #0000ff;">public</span> String getField() {        <span style="color: #0000ff;">return</span> field;    }

    <span style="color: #008000;">/**</span><span style="color: #008000;">     * </span><span style="color: #808080;">@param</span><span style="color: #008000;"> field the field to set     </span><span style="color: #008000;">*/</span>    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> setField(String field) {        <span style="color: #0000ff;">this</span>.field = field;    }}</pre>
</div>
<pre></pre>
<pre>JndiServiceFactory的实现为：</pre>
<div class="cnblogs_code">
<pre><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">import</span> javax.naming.Context;<span style="color: #008080;"> 2</span> <span style="color: #0000ff;">import</span> javax.naming.Name;<span style="color: #008080;"> 3</span> <span style="color: #0000ff;">import</span> javax.naming.Reference;<span style="color: #008080;"> 4</span> <span style="color: #0000ff;">import</span> javax.naming.spi.ObjectFactory;<span style="color: #008080;"> 5</span> <span style="color: #008080;"> 6</span> <span style="color: #008000;">/**</span><span style="color: #008000;"></span><span style="color: #008080;"> 7</span> <span style="color: #008000;"> * </span><span style="color: #808080;">@author</span><span style="color: #008000;"> yaohw</span><span style="color: #008080;"> 8</span> <span style="color: #008000;"> * </span><span style="color: #008080;"> 9</span>  <span style="color: #008000;">*/</span><span style="color: #008080;">10</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> JndiServiceFactory <span style="color: #0000ff;">implements</span> ObjectFactory {<span style="color: #008080;">11</span> <span style="color: #008080;">12</span>     <span style="color: #008000;">/*</span><span style="color: #008000;"></span><span style="color: #008080;">13</span> <span style="color: #008000;">     * (non-Javadoc)</span><span style="color: #008080;">14</span> <span style="color: #008000;">     * @see javax.naming.spi.ObjectFactory#getObjectInstance(java.lang.Object,</span><span style="color: #008080;">15</span> <span style="color: #008000;">     * javax.naming.Name, javax.naming.Context, java.util.Hashtable)</span><span style="color: #008080;">16</span> <span style="color: #008000;">*/</span><span style="color: #008080;">17</span>     @Override<span style="color: #008080;">18</span>     <span style="color: #0000ff;">public</span> Object getObjectInstance(Object obj, Name name, Context nameCtx,<span style="color: #008080;">19</span>             Hashtable&lt;?, ?&gt; environment) <span style="color: #0000ff;">throws</span> Exception {<span style="color: #008080;">20</span>         <span style="color: #0000ff;">if</span> (obj <span style="color: #0000ff;">instanceof</span> Reference) {<span style="color: #008080;">21</span>             JndiService jndiService = <span style="color: #0000ff;">new</span> JndiService();<span style="color: #008080;">22</span>             Reference ref=(Reference)obj;<span style="color: #008080;">23</span>             String field = (String)ref.get("field").getContent();<span style="color: #008080;">24</span>             jndiService.setProperty(0, field);<span style="color: #008080;">25</span>             <span style="color: #0000ff;">return</span> jndiService;<span style="color: #008080;">26</span>         }<span style="color: #008080;">27</span>         <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">null</span>;<span style="color: #008080;">28</span>     }<span style="color: #008080;">29</span> <span style="color: #008080;">30</span> }</pre>
</div>
<pre>服务已经准备好了，接下来就是注册到JNDI上，并从JNDI获取</pre>
<pre>注册过程在JndiContainer中完成：</pre>
<div class="cnblogs_code">
<pre><span style="color: #0000ff;">package</span> loci.jndi;

<span style="color: #0000ff;">import</span> java.io.InputStream;<span style="color: #0000ff;">import</span> java.util.Hashtable;<span style="color: #0000ff;">import</span> java.util.Properties;

<span style="color: #0000ff;">import</span> javax.naming.Context;<span style="color: #0000ff;">import</span> javax.naming.InitialContext;<span style="color: #0000ff;">import</span> javax.naming.NamingException;

<span style="color: #008000;">/**</span><span style="color: #008000;"> * </span><span style="color: #808080;">@author</span><span style="color: #008000;"> yaohw *  </span><span style="color: #008000;">*/</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> JndiContainer {

    <span style="color: #0000ff;">private</span> Context ctx = <span style="color: #0000ff;">null</span>;

    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> init() <span style="color: #0000ff;">throws</span> Exception {        <span style="color: #008000;">//</span><span style="color: #008000;"> 初始化JNDI提供者。</span><span style="color: #008000;"></span>        Hashtable env = <span style="color: #0000ff;">new</span> Hashtable();        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");        env.put(Context.PROVIDER_URL, "file:/c:/sample"); <span style="color: #008000;">//</span><span style="color: #008000;"> fscontext的初始目录，我们需要在c:\下创建sample目录。</span><span style="color: #008000;"></span>        ctx = <span style="color: #0000ff;">new</span> InitialContext(env);        loadServices();    }

    <span style="color: #008000;">//</span><span style="color: #008000;"> 从配置文件JNDIContainer.properties中读取JndiService的实现，绑定到Context中。</span><span style="color: #008000;"></span>    <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> loadServices() <span style="color: #0000ff;">throws</span> Exception {        InputStream in = getClass().getResourceAsStream("JndiContainer.properties");        Properties props = <span style="color: #0000ff;">new</span> Properties();        props.load(in);

        <span style="color: #008000;">//</span><span style="color: #008000;"> inject jndiservice</span><span style="color: #008000;"></span>        String s = props.getProperty("JndiServiceClass");        Object obj = Class.forName(s).newInstance();        <span style="color: #0000ff;">if</span> (obj <span style="color: #0000ff;">instanceof</span> JndiService) {            JndiService service = (JndiService) obj;            String[] ss = props.getProperty("JndiServiceProperty").split(";");            <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = 0; i &lt; ss.length; i++)                service.setProperty(i, ss[i]);            ctx.rebind(props.getProperty("JndiServiceName"), service);        }    }

    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> close() <span style="color: #0000ff;">throws</span> NamingException {        ctx.close();    }

    <span style="color: #0000ff;">public</span> Context getContext() {        <span style="color: #0000ff;">return</span> ctx;    }}</pre>
</div>
<pre>注册是从属性文件中读取注册信息：</pre>
<div class="cnblogs_code">
<pre>##和JndiContainer.java文件位于同一目录JndiServiceName=JndiServiceJndiServiceClass=loci.jndi.JndiServiceJndiServiceProperty="test"</pre>
</div>
<pre>测试使用JNDI：</pre>
<div class="cnblogs_code">
<pre><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">package</span> loci.jndi;<span style="color: #008080;"> 2</span> <span style="color: #008080;"> 3</span> <span style="color: #0000ff;">import</span> javax.naming.Context;<span style="color: #008080;"> 4</span> <span style="color: #008080;"> 5</span> <span style="color: #008000;">/**</span><span style="color: #008000;"></span><span style="color: #008080;"> 6</span> <span style="color: #008000;"> * </span><span style="color: #808080;">@author</span><span style="color: #008000;"> yaohw</span><span style="color: #008080;"> 7</span> <span style="color: #008000;"> *</span><span style="color: #008080;"> 8</span>  <span style="color: #008000;">*/</span><span style="color: #008080;"> 9</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> JndiClient {<span style="color: #008080;">10</span> <span style="color: #008080;">11</span>     <span style="color: #008080;">12</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> main(String[] args){<span style="color: #008080;">13</span>            <span style="color: #0000ff;">try</span>{<span style="color: #008080;">14</span>             JndiContainer container=<span style="color: #0000ff;">new</span> JndiContainer();<span style="color: #008080;">15</span>             container.init();<span style="color: #008080;">16</span>            <span style="color: #008080;">17</span>               <span style="color: #008000;">//</span><span style="color: #008000;">JNDI客户端使用标准JNDI接口访问命名服务。</span><span style="color: #008000;"></span><span style="color: #008080;">18</span>               Context ctx=container.getContext();<span style="color: #008080;">19</span>               JndiIService jndiIService=(JndiIService)ctx.lookup("JndiService");<span style="color: #008080;">20</span>               System.out.println("service field is:"+jndiIService.getField());<span style="color: #008080;">21</span>               jndiIService.fun();<span style="color: #008080;">22</span>               container.close();<span style="color: #008080;">23</span>            }<span style="color: #008080;">24</span>            <span style="color: #0000ff;">catch</span>(Exception e){<span style="color: #008080;">25</span>             e.printStackTrace();<span style="color: #008080;">26</span>            }<span style="color: #008080;">27</span>         }<span style="color: #008080;">28</span> }</pre>
</div>
<pre>
</pre>
<p><img src="aggbug/2338123.html?type=0" width="1" height="1" alt=""/>
<p>作者: <a href="" target="_blank">猿人来了</a> 发表于 2012-02-04 17:23 <a href="http://www.cnblogs.com/yaohonv/archive/2012/02/04/jndi.html" target="_blank">原文链接</a></p>
<p>评论: 0　<a href="http://www.cnblogs.com/yaohonv/archive/2012/02/04/jndi.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/yaohonv/archive/2012/02/04/jndi.html#commentform" target="_blank">发表评论</a></p>
<hr/>
<p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/130049/" target="_blank">库克暗示Mac不会采用ARM构架处理器</a><span style="color:gray">(2012-02-04 22:39)</span><br/>· <a href="http://news.cnblogs.com/n/130048/" target="_blank">iPhone/iPad在德下架 苹果：We&#39;ll be back!</a><span style="color:gray">(2012-02-04 22:34)</span><br/>· <a href="http://news.cnblogs.com/n/130047/" target="_blank">iPad商标侵权案升级：苹果或遭各地工商逾百亿罚单</a><span style="color:gray">(2012-02-04 22:15)</span><br/>· <a href="http://news.cnblogs.com/n/130046/" target="_blank">美光科技CEO艾普顿驾驶私人飞机失事去世</a><span style="color:gray">(2012-02-04 22:14)</span><br/>· <a href="http://news.cnblogs.com/n/130045/" target="_blank">天上掉馅饼 20位Android用户获微软赠WP7</a><span style="color:gray">(2012-02-04 22:13)</span><br/></p>
<p>编辑推荐：<a href="http://news.cnblogs.com/n/129936/" target="_blank">看NASA怎么用5块钱解决1亿元的问题</a><br/></p>
<p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&#160;&#160;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&#160;&#160;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&#160;&#160;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&#160;&#160;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&#160;&#160;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>
<p>SyndContentImpl.interface=interface com.sun.syndication.feed.synd.SyndContent<br />
SyndContentImpl.type=text/plain</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gbsou.com/2012/02/04/8550.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Servlet实现验证码功能</title>
		<link>http://www.gbsou.com/2012/02/04/8548.html</link>
		<comments>http://www.gbsou.com/2012/02/04/8548.html#comments</comments>
		<pubDate>Sat, 04 Feb 2012 15:56:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.gbsou.com/?p=8548</guid>
		<description><![CDATA[SyndContentImpl.value= 今天闲的没事儿干. 就看着书实现了基于Servlet验证码功能. 不试不知道,一试才发现.垃圾玩意儿太繁琐.废话不多说直接上代码与图 package com; import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.PrintWriter;import java.util.Random; import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageDecoder;import com.sun.image.codec.jpeg.JPEGImageEncoder;import com.sun.jndi.url.corbaname.corbanameURLContextFactory; public class servletFirst extends HttpServlet { private static final long serialVersionUID = 1L; public static final char[] CHARS = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-8548"></span></p>
<p>SyndContentImpl.value=
<p>今天闲的没事儿干. 就看着书实现了基于Servlet验证码功能.</p>
<p>不试不知道,一试才发现.垃圾玩意儿太繁琐.废话不多说直接上代码与图</p>
<p><img src="http://pic002.cnblogs.com/images/2012/298924/2012020417302181.gif" alt="" /></p>
<div class="cnblogs_code">
<pre><span style="color: #0000ff;">package</span> com;

<span style="color: #0000ff;">import</span> java.awt.Color;<span style="color: #0000ff;">import</span> java.awt.Font;<span style="color: #0000ff;">import</span> java.awt.Graphics2D;<span style="color: #0000ff;">import</span> java.awt.image.BufferedImage;<span style="color: #0000ff;">import</span> java.io.IOException;<span style="color: #0000ff;">import</span> java.io.PrintWriter;<span style="color: #0000ff;">import</span> java.util.Random;

<span style="color: #0000ff;">import</span> javax.servlet.ServletException;<span style="color: #0000ff;">import</span> javax.servlet.ServletOutputStream;<span style="color: #0000ff;">import</span> javax.servlet.http.HttpServlet;<span style="color: #0000ff;">import</span> javax.servlet.http.HttpServletRequest;<span style="color: #0000ff;">import</span> javax.servlet.http.HttpServletResponse;

<span style="color: #0000ff;">import</span> com.sun.image.codec.jpeg.JPEGCodec;<span style="color: #0000ff;">import</span> com.sun.image.codec.jpeg.JPEGImageDecoder;<span style="color: #0000ff;">import</span> com.sun.image.codec.jpeg.JPEGImageEncoder;<span style="color: #0000ff;">import</span> com.sun.jndi.url.corbaname.corbanameURLContextFactory;

<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> servletFirst <span style="color: #0000ff;">extends</span> HttpServlet {

    <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">final</span> <span style="color: #0000ff;">long</span> serialVersionUID = 1L;

    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">final</span> <span style="color: #0000ff;">char</span>[] CHARS = { '1', '2', '3', '4', '5', '6', '7',            '8', '9', '0', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',            'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',            'X', 'Y', 'Z', };    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> Random random = <span style="color: #0000ff;">new</span> Random();

    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> String getRandomString() {        StringBuffer buffer = <span style="color: #0000ff;">new</span> StringBuffer();        <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = 0; i &lt; 9; i++) {            buffer.append(CHARS[random.nextInt(CHARS.length)]);        }        <span style="color: #0000ff;">return</span> buffer.toString();    }

    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> Color getRandomColor() {        <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">new</span> Color(random.nextInt(255), random.nextInt(255), random                .nextInt(255));    }

    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> Color getReverseColor(Color c) {        <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">new</span> Color(255 - c.getRed(), 255 - c.getGreen(), 255 - c                .getBlue());    }

    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> doGet(HttpServletRequest request, HttpServletResponse response)            <span style="color: #0000ff;">throws</span> ServletException, IOException {        response.setContentType("image/jpeg");        String radomString = getRandomString();        request.getSession(<span style="color: #0000ff;">true</span>).setAttribute("radomString", radomString);        Color color = getRandomColor();        Color reverse = getReverseColor(color);        BufferedImage bi = <span style="color: #0000ff;">new</span> BufferedImage(100, 30, BufferedImage.TYPE_INT_RGB);        Graphics2D g = bi.createGraphics();        g.setFont(<span style="color: #0000ff;">new</span> Font(Font.SANS_SERIF,Font.BOLD,16));        g.setColor(color);        g.fillRect(0,0,100,30);        g.setColor(reverse);        g.drawString(radomString,18,20);        <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = 0,n = random.nextInt(100); i&lt;n; i++) {            g.drawRect(random.nextInt(100), random.nextInt(30), 1, 1);        }        ServletOutputStream out = response.getOutputStream();        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);        encoder.encode(bi);        out.flush();    }}</pre>
</div>
<p>&#160;</p>
<div class="cnblogs_code">
<pre><span style="background-color: #ffff00; color: #000000;">&lt;%</span><span style="background-color: #f5f5f5; color: #000000;">@ page language</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #800000;">"</span><span style="background-color: #f5f5f5; color: #800000;">java</span><span style="background-color: #f5f5f5; color: #800000;">"</span><span style="background-color: #f5f5f5; color: #000000;"> import</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #800000;">"</span><span style="background-color: #f5f5f5; color: #800000;">java.util.*</span><span style="background-color: #f5f5f5; color: #800000;">"</span><span style="background-color: #f5f5f5; color: #000000;"> pageEncoding</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #800000;">"</span><span style="background-color: #f5f5f5; color: #800000;">UTF-8</span><span style="background-color: #f5f5f5; color: #800000;">"</span><span style="background-color: #ffff00; color: #000000;">%&gt;</span><span style="background-color: #ffff00; color: #000000;">&lt;%</span><span style="background-color: #f5f5f5; color: #000000;"></span><span style="background-color: #f5f5f5; color: #0000ff;">String</span><span style="background-color: #f5f5f5; color: #000000;"> path </span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;"> request.getContextPath();</span><span style="background-color: #f5f5f5; color: #0000ff;">String</span><span style="background-color: #f5f5f5; color: #000000;"> basePath </span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;"> request.getScheme()</span><span style="background-color: #f5f5f5; color: #000000;">+</span><span style="background-color: #f5f5f5; color: #800000;">"</span><span style="background-color: #f5f5f5; color: #800000;">://</span><span style="background-color: #f5f5f5; color: #800000;">"</span><span style="background-color: #f5f5f5; color: #000000;">+</span><span style="background-color: #f5f5f5; color: #000000;">request.getServerName()</span><span style="background-color: #f5f5f5; color: #000000;">+</span><span style="background-color: #f5f5f5; color: #800000;">"</span><span style="background-color: #f5f5f5; color: #800000;">:</span><span style="background-color: #f5f5f5; color: #800000;">"</span><span style="background-color: #f5f5f5; color: #000000;">+</span><span style="background-color: #f5f5f5; color: #000000;">request.getServerPort()</span><span style="background-color: #f5f5f5; color: #000000;">+</span><span style="background-color: #f5f5f5; color: #000000;">path</span><span style="background-color: #f5f5f5; color: #000000;">+</span><span style="background-color: #f5f5f5; color: #800000;">"</span><span style="background-color: #f5f5f5; color: #800000;">/</span><span style="background-color: #f5f5f5; color: #800000;">"</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #ffff00; color: #000000;">%&gt;</span>

<span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"</span><span style="color: #0000ff;">&gt;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span>  <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">base </span><span style="color: #ff0000;">href</span><span style="color: #0000ff;">="&lt;%=basePath%&gt;"</span><span style="color: #0000ff;">&gt;</span>

    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span>My JSP 'index.jsp' starting page<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta </span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="pragma"</span><span style="color: #ff0000;"> content</span><span style="color: #0000ff;">="no-cache"</span><span style="color: #0000ff;">&gt;</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta </span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="cache-control"</span><span style="color: #ff0000;"> content</span><span style="color: #0000ff;">="no-cache"</span><span style="color: #0000ff;">&gt;</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta </span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="expires"</span><span style="color: #ff0000;"> content</span><span style="color: #0000ff;">="0"</span><span style="color: #0000ff;">&gt;</span>        <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta </span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="keywords"</span><span style="color: #ff0000;"> content</span><span style="color: #0000ff;">="keyword1,keyword2,keyword3"</span><span style="color: #0000ff;">&gt;</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta </span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="description"</span><span style="color: #ff0000;"> content</span><span style="color: #0000ff;">="This is my page"</span><span style="color: #0000ff;">&gt;</span>    <span style="color: #008000;">&lt;!--</span><span style="color: #008000;">    &lt;link rel="stylesheet" type="text/css" href="styles.css"&gt;    </span><span style="color: #008000;">--&gt;</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #000000;">        </span><span style="background-color: #f5f5f5; color: #0000ff;">function</span><span style="background-color: #f5f5f5; color: #000000;"> reloadImage(){            document.getElementById(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">btn</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">).disabled</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #0000ff;">true</span><span style="background-color: #f5f5f5; color: #000000;">;            document.getElementById(</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">imgservlet</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">).src</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">'</span><span style="background-color: #f5f5f5; color: #000000;">servlet/servletFirst?ts=</span><span style="background-color: #f5f5f5; color: #000000;">'</span><span style="background-color: #f5f5f5; color: #000000;">+</span><span style="background-color: #f5f5f5; color: #0000ff;">new</span><span style="background-color: #f5f5f5; color: #000000;"> Date().getTime();        }    </span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span>  <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span>

  <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span>    &lt;img src="servlet/servletFirst" id="imgservlet" onload="btn.disabled=false;" onclick="onclick="reloadImage()""/&gt;    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">input </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="button"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="换张图片"</span><span style="color: #ff0000;"> onclick</span><span style="color: #0000ff;">="reloadImage()"</span><span style="color: #ff0000;"> id</span><span style="color: #0000ff;">="btn"</span><span style="color: #0000ff;">&gt;</span>  <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span></pre>
</div>
<p>以上就是核心代码.有兴趣的朋友可以看看</p>
<p><img src="aggbug/2338133.html?type=0" width="1" height="1" alt=""/>
<p>作者: <a href="" target="_blank">少爵</a> 发表于 2012-02-04 17:34 <a href="http://www.cnblogs.com/XiaoGer/archive/2012/02/04/2338133.html" target="_blank">原文链接</a></p>
<p>评论: 0　<a href="http://www.cnblogs.com/XiaoGer/archive/2012/02/04/2338133.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/XiaoGer/archive/2012/02/04/2338133.html#commentform" target="_blank">发表评论</a></p>
<hr/>
<p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/130049/" target="_blank">库克暗示Mac不会采用ARM构架处理器</a><span style="color:gray">(2012-02-04 22:39)</span><br/>· <a href="http://news.cnblogs.com/n/130048/" target="_blank">iPhone/iPad在德下架 苹果：We&#39;ll be back!</a><span style="color:gray">(2012-02-04 22:34)</span><br/>· <a href="http://news.cnblogs.com/n/130047/" target="_blank">iPad商标侵权案升级：苹果或遭各地工商逾百亿罚单</a><span style="color:gray">(2012-02-04 22:15)</span><br/>· <a href="http://news.cnblogs.com/n/130046/" target="_blank">美光科技CEO艾普顿驾驶私人飞机失事去世</a><span style="color:gray">(2012-02-04 22:14)</span><br/>· <a href="http://news.cnblogs.com/n/130045/" target="_blank">天上掉馅饼 20位Android用户获微软赠WP7</a><span style="color:gray">(2012-02-04 22:13)</span><br/></p>
<p>编辑推荐：<a href="http://news.cnblogs.com/n/129936/" target="_blank">看NASA怎么用5块钱解决1亿元的问题</a><br/></p>
<p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&#160;&#160;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&#160;&#160;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&#160;&#160;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&#160;&#160;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&#160;&#160;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>
<p>SyndContentImpl.interface=interface com.sun.syndication.feed.synd.SyndContent<br />
SyndContentImpl.type=text/plain</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gbsou.com/2012/02/04/8548.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

