??xml version="1.0" encoding="utf-8" standalone="yes"?>色偷偷av亚洲男人的天堂,亚洲精品黄网在线观看,五月天国产在线http://www.aygfsteel.com/caizh2009/category/39984.html与大家共同成?/description>zh-cnSat, 12 Dec 2009 02:09:20 GMTSat, 12 Dec 2009 02:09:20 GMT60J2EE 规范Qjava eeQ?/title><link>http://www.aygfsteel.com/caizh2009/articles/305220.html</link><dc:creator>菜毛毛</dc:creator><author>菜毛毛</author><pubDate>Tue, 08 Dec 2009 14:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/caizh2009/articles/305220.html</guid><wfw:comment>http://www.aygfsteel.com/caizh2009/comments/305220.html</wfw:comment><comments>http://www.aygfsteel.com/caizh2009/articles/305220.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/caizh2009/comments/commentRss/305220.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/caizh2009/services/trackbacks/305220.html</trackback:ping><description><![CDATA[Java EEJava 企业pȝ李涛Technology EvangelistSun Microsystems Inc.<br /> --------------------------------------------------------------------------------<br /> Page 2 <br /> 学习(fn)目标• 宏观C?Java EE> 什么是 Java EE> Z么要?Java EE> Java EE 的核心概?gt; Java EE ?API<br /> --------------------------------------------------------------------------------<br /> Page 3 <br /> Java ?Java EE<br /> --------------------------------------------------------------------------------<br /> Page 4 <br /> Java q_Java EEJava SEJava ME Java Card<br /> --------------------------------------------------------------------------------<br /> Page 5 <br /> Java 概况• Java Standard Edition (Java SE)> ~译器,常用工具 , Java q行环境?Java 应用开发的 API• Java Enterprise Edition (Java EE)> 开发,部v和管理服务器端的Q分散的Q多层的Zlg的企业应用pȝ• Java Micro Edition (Java ME)> J2SE 的一个子集,用于开发在型的,可移动的讑֤上的应用E序<br /> --------------------------------------------------------------------------------<br /> Page 6 <br /> The Java™ PlatformHigh-EndServerJava TechnologyEnabled DesktopWorkgroupServerJava TechnologyEnabled Devices<br /> --------------------------------------------------------------------------------<br /> Page 7 <br /> 企业U应?br /> --------------------------------------------------------------------------------<br /> Page 8 <br /> 什么是企业U应用??企业U应用是以服务器Z心,通过|络把服务器和分散的用户联系在一L(fng)应用。|上银行Q新信息网Q校园网늽l可以是 Internet Q也可以是无U电(sh)话网?br /> --------------------------------------------------------------------------------<br /> Page 9 <br /> 企业U应用的演变• 单层pȝ> 庞大 , 直接相连• 两层pȝ> 客户端逻辑复杂 (rich client)• 三层pȝ> Browser, Web Server, DB> 商业逻辑的处理集中在中间件上。DBSQLDBSQLHTTP<br /> --------------------------------------------------------------------------------<br /> Page 10 <br /> 企业U系l的发展势• 由单层和两层pȝ向多层结构演?#8226; 由庞大的Q整体的pȝ向独立组件的pȝ演变• 客户端由“ Rich Client” 向类似网l浏览器?#8220; Thin Client” 演变• 客户端更多样?gt; PC> 手机> 掌上?sh)?br /> --------------------------------------------------------------------------------<br /> Page 11 <br /> 由此产生的问?.“ 中间?#8221;很复?gt; “ 中间?#8221;Q应用中q行在应用服务器上的部分2.每一个应用都?x)重复一些基本的pȝ服务> 协调对共享资源的调用> 保证对共享资源的事务性操?gt; ׃n资源的^衡负?gt; 保护׃n资源的安全?br /> --------------------------------------------------------------------------------<br /> Page 12 <br /> 什么是 Java EE Q?br /> --------------------------------------------------------------------------------<br /> Page 13 <br /> 什么是 Java EE Q Java EE ?Sun 公司针对C企业U应用的解决Ҏ(gu)?涉及企业U应用的开发,部v和管?br /> --------------------------------------------------------------------------------<br /> Page 14 <br /> Java EE 针对解决了企业应用的问?#8226; Java EE 通过提供> 一套标准的 API> 以组件ؓ(f)基础的架?gt; 一个新的容器概念,通过容器来提供标准的pȝ服务大大减低?#8220;中间?#8221;的复杂程?#8226; l承?Java 的特?gt; 安全?gt; 高可UL?br /> --------------------------------------------------------------------------------<br /> Page 15 <br /> Java EE 包含的技术内?#8226; q_标准> 容器的技术规?#8226; API 接口规范> lg开?#8226; 参考实?#8226; 开发工?#8226; 兼容性测试包• 蓝图> pȝ架构设计指导<br /> --------------------------------------------------------------------------------<br /> Page 16 <br /> Java EE q_架构<br /> --------------------------------------------------------------------------------<br /> Page 17 <br /> Java EE 5.0 ?APIs 和技术基QJava SE 5.0表现层:(x)ServletJSPJSF中间Ӟ(x)EJBJAX-WSJavaMailJMSConnectorJTAJAX-RPCJava EE ManagementJava EE DeploymentJMXJAXRJACCJAF <br /> --------------------------------------------------------------------------------<br /> Page 18 <br /> Java EE 的发展过E?br /> --------------------------------------------------------------------------------<br /> Page 19 <br /> Java EE q_的发展过E?8 q?5 ?99 q?12 ?01 q?9 ?03 q?11 ?06 q?5 月JPEProjectJ2EE 1.2Servlet,JSP, EJB,JMS, JTA,JNDI,RMI/IIOPJ2EE 1.3EJB 2.0,ConnectorArchitectureJ2EE 1.4Web Services,Management,Deployment,Async.ConnectorJava EE5Annotations,EJB 3.0,PersistanceAPI,JSF,Renewed WebServices企业q_初始E_性Web 服务开发的易?br /> --------------------------------------------------------------------------------<br /> Page 20 <br /> Footnote position, 12 pts.o<br /> --------------------------------------------------------------------------------<br /> Page 21 <br /> Java EE 的优?br /> --------------------------------------------------------------------------------<br /> Page 22 <br /> 大量的开发h?#8226; Ҏ(gu)学习(fn)Q容易上?gt; Java> 有许多可选择的开发工?gt;NetBeans• Ҏ(gu)搭徏环境> Java EE 实现可免费获得,免费q用>Sun Q?Apache Q?JBoss• 大量的学?fn)资?gt; 书籍> |络学习(fn)资料<br /> --------------------------------------------------------------------------------<br /> Page 23 <br /> 大量的中间g提供?#8226; Java EE 标准的制定是公开?gt; 各厂商共同制定标?gt; 厂商有不同的实现但支持相同的标准• 在不影响lg间交互性的情况下,厂商有够的I间来发挥自q创造性,提高自己产品的竞争力?#8226; 需求大Q商机多<br /> --------------------------------------------------------------------------------<br /> Page 24 <br /> 吸引商业客户• 应用的可UL性高> 不同的操作系l?gt; 不同的中间g• 供选择?Java EE 产品?gt; h> 可扩展?gt; 可靠?gt; 性能• Ҏ(gu)扑ֈ开发h?br /> --------------------------------------------------------------------------------<br /> Page 25 <br /> Java EE d了现代的企业U应?br /> --------------------------------------------------------------------------------<br /> Page 26 <br /> 怎样学习(fn) Java EE<br /> --------------------------------------------------------------------------------<br /> Page 27 <br /> 步骤 1: 针对初学?#8226; 下蝲Java EE SDK Q试用其中的例子> http://java.sun.com/javaee/downloads/index.jsp>Java SE 5.0>Sun application server 9.0>例子>API 文档• 下蝲 Java EE 在线教材> http://java.sun.com/javaee/5/docs/tutorial/doc/> W二章:(x) Web Application h> W三章:(x) Servlet> W四章:(x) JSP<br /> --------------------------------------------------------------------------------<br /> Page 28 <br /> 步骤 2: 学习(fn)使用 IDE• NetBeans IDE> http://www.netbeans.org> 免费且开?gt; 非常杰出?Java EE 支持>下蝲即用Q完整的 Java EE 环境• Eclipse<br /> --------------------------------------------------------------------------------<br /> Page 29 <br /> 步骤 3: 学习(fn)使用 Java EE 架构• 架构提供解决Ҏ(gu)Q简化开?gt; Struts, JSF Q?Tapestry (Web ?)> Spring framework> JUnit ( 单元试架构 )> Log4j ( 日志架构 )> Hibernate (O/R mapping)> JDO ( 数据持久化框?)<br /> --------------------------------------------------------------------------------<br /> Page 30 <br /> 步骤 4: 时刻保持技术更?• http://gceclub.sun.com.cn/>中国 Java 开发者社?#8226; http://www.csdn.net/• http://java.sun.com/Javaee• www.theserverside.com<br /> --------------------------------------------------------------------------------<br /> Page 31 <br /> ȝ<br /> --------------------------------------------------------------------------------<br /> Page 32 <br /> ȝ• Java EE 是标准的企业U应用的规范集合• Java EE 是开发现代的Z|络的企业应用的首选^ <img src ="http://www.aygfsteel.com/caizh2009/aggbug/305220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/caizh2009/" target="_blank">菜毛毛</a> 2009-12-08 22:32 <a href="http://www.aygfsteel.com/caizh2009/articles/305220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转脓(chung)]System.getProperty()参数大全http://www.aygfsteel.com/caizh2009/articles/304982.html菜毛毛菜毛毛Mon, 07 Dec 2009 04:04:00 GMThttp://www.aygfsteel.com/caizh2009/articles/304982.htmlhttp://www.aygfsteel.com/caizh2009/comments/304982.htmlhttp://www.aygfsteel.com/caizh2009/articles/304982.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/304982.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/304982.html
java 代码
 
  1.   System.getProperty()参数大全  
  2.   
  3. java.version            Java Runtime Environment version  
  4. java.vendor            Java Runtime Environment vendor  
  5. java.vendor.url            Java vendor URL  
  6. java.home            Java installation directory  
  7. java.vm.specification.version                    Java Virtual Machine specification version  
  8. java.vm.specification.vendor                    Java Virtual Machine specification vendor  
  9. java.vm.specification.name                    Java Virtual Machine specification name  
  10. java.vm.version            Java Virtual Machine implementation version  
  11. java.vm.vendor            Java Virtual Machine implementation vendor  
  12. java.vm.name            Java Virtual Machine implementation name  
  13. java.specification.version                Java Runtime Environment specification version  
  14. java.specification.vendor             Java Runtime Environment specification vendor  
  15. java.specification.name        Java Runtime Environment specification name  
  16. java.class.version                        Java class format version number  
  17. java.class.path                  Java class path  
  18. java.library.path                        List of paths to search when loading libraries  
  19. java.io.tmpdir                Default temp file path  
  20. java.compiler            Name of JIT compiler to use  
  21. java.ext.dirs            Path of extension directory or directories  
  22. os.name                Operating system name  
  23. os.arch                Operating system architecture  
  24. os.version            Operating system version  
  25. file.separator            File separator ("/" on UNIX)  
  26. path.separator            Path separator (":" on UNIX)  
  27. line.separator            Line separator ("\n" on UNIX)  
  28. user.name            User's account name  
  29. user.home            User's home directory  
  30. user.dir                User's current working directory   
使用Ҏ(gu)很简单:(x)System.getProperty("user.dir")  

菜毛毛 2009-12-07 12:04 发表评论
]]>
JAVA中cache的处?单实?/title><link>http://www.aygfsteel.com/caizh2009/articles/304963.html</link><dc:creator>菜毛毛</dc:creator><author>菜毛毛</author><pubDate>Mon, 07 Dec 2009 02:10:00 GMT</pubDate><guid>http://www.aygfsteel.com/caizh2009/articles/304963.html</guid><wfw:comment>http://www.aygfsteel.com/caizh2009/comments/304963.html</wfw:comment><comments>http://www.aygfsteel.com/caizh2009/articles/304963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/caizh2009/comments/commentRss/304963.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/caizh2009/services/trackbacks/304963.html</trackback:ping><description><![CDATA[public class Cache {<br style="line-height: normal" />         private String key;<br style="line-height: normal" />         private Object value;<br style="line-height: normal" />         private long timeOut;<br style="line-height: normal" />         private boolean expired; <p style="line-height: normal"><font style="line-height: normal" color="#000080">        public Cache() {<br style="line-height: normal" />                 super();<br style="line-height: normal" />         }<br style="line-height: normal" />                 <br style="line-height: normal" />         public Cache(String key, String value, long timeOut, boolean expired) {<br style="line-height: normal" />                 this.key = key;<br style="line-height: normal" />                 this.value = value;<br style="line-height: normal" />                 this.timeOut = timeOut;<br style="line-height: normal" />                 this.expired = expired;<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        public String getKey() {<br style="line-height: normal" />                 return key;<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        public long getTimeOut() {<br style="line-height: normal" />                 return timeOut;<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        public Object getValue() {<br style="line-height: normal" />                 return value;<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        public void setKey(String string) {<br style="line-height: normal" />                 key = string;<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        public void setTimeOut(long l) {<br style="line-height: normal" />                 timeOut = l;<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        public void setValue(Object object) {<br style="line-height: normal" />                 value = object;<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        public boolean isExpired() {<br style="line-height: normal" />                 return expired;<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        public void setExpired(boolean b) {<br style="line-height: normal" />                 expired = b;<br style="line-height: normal" />         }<br style="line-height: normal" /> }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">另外一个类Q?br style="line-height: normal" /> import <a onclick="javascript:tagshow(event, 'java');" href="javascript:;" target="_self"><u><strong>java</strong></u></a>.util.Date;<br style="line-height: normal" /> import java.util.HashMap;</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">public class CacheManager {<br style="line-height: normal" />         private static HashMap cacheMap = new HashMap();</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        /**<br style="line-height: normal" />          * This class is singleton so private constructor is used.<br style="line-height: normal" />          */<br style="line-height: normal" />         private CacheManager() {<br style="line-height: normal" />                 super();<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        /**<br style="line-height: normal" />          * returns cache item from hashmap<br style="line-height: normal" />          * @param key<br style="line-height: normal" />          * @return Cache<br style="line-height: normal" />          */<br style="line-height: normal" />         private synchronized static Cache getCache(String key) {<br style="line-height: normal" />                 return (Cache)cacheMap.get(key);<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        /**<br style="line-height: normal" />          * Looks at <a onclick="javascript:tagshow(event, 'the');" href="javascript:;" target="_self"><u><strong>the</strong></u></a> hashmap if a cache item exists or <a onclick="javascript:tagshow(event, 'not');" href="javascript:;" target="_self"><u><strong>not</strong></u></a><br style="line-height: normal" />          * @param key<br style="line-height: normal" />          * @return Cache<br style="line-height: normal" />          */<br style="line-height: normal" />         private synchronized static boolean hasCache(String key) {<br style="line-height: normal" />                 return cacheMap.containsKey(key);<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        /**<br style="line-height: normal" />          * Invalidates all cache<br style="line-height: normal" />          */<br style="line-height: normal" />         public synchronized static void invalidateAll() {<br style="line-height: normal" />                 cacheMap.clear();<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        /**<br style="line-height: normal" />          * Invalidates a single cache item<br style="line-height: normal" />          * @param key<br style="line-height: normal" />          */<br style="line-height: normal" />         public synchronized static void invalidate(String key) {<br style="line-height: normal" />                 cacheMap.remove(key);<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        /**<br style="line-height: normal" />          * Adds new item to cache hashmap<br style="line-height: normal" />          * @param key<br style="line-height: normal" />          * @return Cache<br style="line-height: normal" />          */<br style="line-height: normal" />         private synchronized static void putCache(String key, Cache object) {<br style="line-height: normal" />            cacheMap.put(key, object);<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        /**<br style="line-height: normal" />          * Reads a cache item's content<br style="line-height: normal" />          * @param key<br style="line-height: normal" />          * @return<br style="line-height: normal" />          */<br style="line-height: normal" />         public static Cache getContent(String key) {<br style="line-height: normal" />                  if (hasCache(key)) {<br style="line-height: normal" />                         Cache cache = getCache(key);<br style="line-height: normal" />                         if (cacheExpired(cache)) {<br style="line-height: normal" />                                 cache.setExpired(true);<br style="line-height: normal" />                         }<br style="line-height: normal" />                         return cache;<br style="line-height: normal" />                  } else {<br style="line-height: normal" />                          return null;<br style="line-height: normal" />                  }<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">        /**<br style="line-height: normal" />          * <br style="line-height: normal" />          * @param key<br style="line-height: normal" />          * @param content<br style="line-height: normal" />          * @param ttl<br style="line-height: normal" />          */<br style="line-height: normal" />         public static void putContent(String key, Object content, long ttl) {<br style="line-height: normal" />                 Cache cache = new Cache();<br style="line-height: normal" />                 cache.setKey(key);<br style="line-height: normal" />                 cache.setValue(content);<br style="line-height: normal" />                 cache.setTimeOut(ttl + new Date().getTime());<br style="line-height: normal" />                 cache.setExpired(false);<br style="line-height: normal" />                 putCache(key, cache);<br style="line-height: normal" />         }<br style="line-height: normal" />         <br style="line-height: normal" />         /** @modelguid {172828D6-3AB2-46C4-96E2-E72B34264031} */<br style="line-height: normal" />         private static boolean cacheExpired(Cache cache) {<br style="line-height: normal" />                 if (cache == null) {<br style="line-height: normal" />                         return false;<br style="line-height: normal" />                 }<br style="line-height: normal" />                 long milisNow = new Date().getTime();<br style="line-height: normal" />                 long milisExpire = cache.getTimeOut();<br style="line-height: normal" />                 if (milisExpire < 0) {                // Cache never expires <br style="line-height: normal" />                         return false;<br style="line-height: normal" />                 } else if (milisNow >= milisExpire) {<br style="line-height: normal" />                         return true;<br style="line-height: normal" />                 } else {<br style="line-height: normal" />                         return false;<br style="line-height: normal" />                 }<br style="line-height: normal" />         }</font></p> <p style="line-height: normal"><font style="line-height: normal" color="#000080">}</font></p> <img src ="http://www.aygfsteel.com/caizh2009/aggbug/304963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/caizh2009/" target="_blank">菜毛毛</a> 2009-12-07 10:10 <a href="http://www.aygfsteel.com/caizh2009/articles/304963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java操作IM的一些资?/title><link>http://www.aygfsteel.com/caizh2009/articles/293207.html</link><dc:creator>菜毛毛</dc:creator><author>菜毛毛</author><pubDate>Sun, 30 Aug 2009 10:11:00 GMT</pubDate><guid>http://www.aygfsteel.com/caizh2009/articles/293207.html</guid><wfw:comment>http://www.aygfsteel.com/caizh2009/comments/293207.html</wfw:comment><comments>http://www.aygfsteel.com/caizh2009/articles/293207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/caizh2009/comments/commentRss/293207.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/caizh2009/services/trackbacks/293207.html</trackback:ping><description><![CDATA[Q?strong>Java IM</strong> <br /> SourceForge 上一Ƒּ源IM软gQA simple and straightforeward instant messaging program written in Java for all platforms developed with ease of use and efficiency in mind.<br /> <a target="_blank">http://sourceforge.net/projects/im-java/</a> <br /> <br /> Q?strong>Java Instant Messenger</strong> <p>Java Instant Messenger (or JIM) is an application to allow instant messaging over a network. JIM does not have a centralized server. Instead, users run the server on one of the computers on the network and other users connect to that server.</p> <p>(This Description is auto-translated)<br /> <a target="_blank">http://zh.sourceforge.jp/projects/sfnet_jinstantmessage/</a> <br /> <br /> 3?strong>IM客户?<span style="text-decoration: underline">Spark</span> </strong><br /> Spark是一个开源,跨^台IM客户端。它的特性支持集l聊天,?sh)话集成和强大安全性能。如果企业内部部|IM使用Openfire+Spark是最佳的l合?br /> <a target="_blank">http://www.oschina.net/p/spark</a> <br /> <a target="_blank">http://blog.csdn.net/masterjames/archive/2009/08/21/4465255.aspx</a> <br /> <br /> <br /> Q?strong>LumaQQ  </strong><br />  LumaQQ 是一个独立的   Java   QQ   客户端,h可重用的UJava核心和基于SWT的仿   QQ   界面。我们遵循GNU   General   Public   License   许可证(UGPLQ发布。该条款的原文可见和   LumaQQ   源代码一同发布的   COPYING   文g?    <br />       需要特别声明的?  LumaQQ   是以研究和学?fn)?f)目的的,我们q没有违?  QQ   的版权许可的东西。一切的协议分析都是?  QQ   当作黑箱分析Q我们所做的一切都遵@中华人民共和国《计机软g保护条例》?<br /> <a target="_blank">http://lumaqq.linuxsir.org/main/index.php</a> <br /> <br /> Q?strong>Openfire</strong> <br /> Openfire 是实时的ZWEB的即时消息传输^収ͼ是原来的Jive Messenger<br /> <a target="_blank">http://www.oschina.net/p/openfire</a> <br /> <br /> Q?strong>cMQQ的聊天Y件JAVA版源码(附设计文档)<br /> </strong>作者:(x)其实像QQ聊天q样的Y件有很多Q但基本上都没有公开源代码,而且也只是提供Y件客L(fng)Q有一些像ICQ的Y件虽提供服务端但却不公开源代码。本人很想知道它的运行机理,惛_明白它是怎么一回事Q所以就试着做了一个,虽然没有正式公司的那么复杂和友好的界面,但至可以给你点启发Q对学习(fn)是有帮助的?br /> <a target="_blank">http://www.codefans.net/soft/1472.shtml</a> <br /> <a target="_blank">http://www.chinajia.com/soft/downinfo/3383.html</a> <br /> <br /> Q?strong>JavaQQ.</strong> <br /> 用java写的单QQQ共?span class="t_tag" onclick="tagshow(event)">学习(fn)</span> ?br /> <a target="_blank">http://www.itxuexi.com/bbs/thread-13226-1-1.html</a> <br /> <a target="_blank">http://download.csdn.net/source/745684</a> <br /> </p> <img src ="http://www.aygfsteel.com/caizh2009/aggbug/293207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/caizh2009/" target="_blank">菜毛毛</a> 2009-08-30 18:11 <a href="http://www.aygfsteel.com/caizh2009/articles/293207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是java的path和classpath?http://www.aygfsteel.com/caizh2009/articles/292849.html菜毛毛菜毛毛Thu, 27 Aug 2009 09:07:00 GMThttp://www.aygfsteel.com/caizh2009/articles/292849.htmlhttp://www.aygfsteel.com/caizh2009/comments/292849.htmlhttp://www.aygfsteel.com/caizh2009/articles/292849.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/292849.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/292849.html1.什么是java的path和classpath?

Java 中的 ClassPath ?Package

前言:

׃q两个问题新手问得较? 且回{比较零? 很难l一整理, 所
以就直接写了一? q请大家见谅.


正文:

一, c\?(class path)

当你满怀着希望安装好了 java, 然后兴冲冲地写了?hello world,然后~译,
q行, q着那两个美好的单词出现在眼? 可是不幸的是, 只看C Can't find
class HelloWorld 或?Exception in thread "main" java.lang.NoSuchMethodError: ma
in.
Z么呢? ~译好的 class 明明在呀.
我们一h看一?java E序的运行过E? 我们已经知道 java 是通过 java


发信? SuperMMX (W天?, 信区: Java
?? [整理] Java ?Class Path ?Package
发信? BBS 水木清华?(Mon Apr 9 08:15:01 2001)

Java 中的 ClassPath ?Package

前言:

׃q两个问题新手问得较? 且回{比较零? 很难l一整理, 所
以就直接写了一? q请大家见谅.


正文:

一, c\?(class path)

当你满怀着希望安装好了 java, 然后兴冲冲地写了?hello world,然后~译,
q行, q着那两个美好的单词出现在眼? 可是不幸的是, 只看C Can't find
class HelloWorld 或?Exception in thread "main" java.lang.NoSuchMethodError: ma
in.
Z么呢? ~译好的 class 明明在呀.
我们一h看一?java E序的运行过E? 我们已经知道 java 是通过 java


虚拟机来解释q行? 也就是通过 java 命o(h), javac ~译生成?.class
文g是虚拟执行的代? UC为字节码(bytecode), 虚拟机通过 classloader
来装载这些字节码, 也就是通常意义上的c? q里有一个问? classloader ?br /> 哪里知道 java 本n的类库及用户自己的类在什么地方呢? 或者有着~省?当前路径).
或者要有一个用h定的变量来表? q个变量是c\?classpath), 或者在q行
的时候传参数l虚拟机. q也是指明 classpath 的三个方? ~译的过E和q行
的过E大同小? 只是一个是扑և来编? 另一个是扑և来装?
实际?java 虚拟机是?java luncher 初始化的, 也就?java (?java.exe)
q个E序来做? 虚拟机按以下序搜烦q装载所有需要的c?
1, 引导c? l成 java q_的类, 包含 rt.jar ?i18n.jar 中的c?
2, 扩展c? 使用 java 扩展机制的类, 都是位于扩展目录($JAVA_HOME/jre/lib/ext)
中的 .jar 档案?
3, 用户c? 开发者定义的cL者没有?java 扩展机制的第三方产品. 你必d
命o(h)行中使用 -classpath 选项或者?CLASSPATH 环境变量来确定这些类的位|? ?br /> 们在上面所说的用户自己的类是Ҏ(gu)q些c?
q样, 一般来? 用户只需指定用户cȝ位置, 引导cd扩展cL"自动"L?
那么到底该怎么做呢? 用户c\径就是一些包含类文g的目? .jar, .zip 文g?br /> 列表, 至于cd体怎么? 因ؓ(f)牉|?package 的问? 下面会(x)说到, 暂时可认?br /> 只要包含了这个类q扑ֈ了这个类. Ҏ(gu)q_的不同分隔符略有不同, c?unix 的系
l基本上都是 ":", windows 多是 ";". 其可能的来源?

* ".", 卛_前目? q个是缺省?


* CLASSPATH 环境变量, 一旦设|? 缺省D?
* 命o(h)行参?-cp 或?-classpath, 一旦指? 上两者覆?
* ?-jar 参数指定?.jar 档案? 把所有其他的D? 所有的c都来自q个?br /> 定的档案包中. ׃生成可执行的 .jar 文g, q需要其他一些知? 比如 package, q有
特定的配|文? 本文的最后会(x)提到. 可先看看 jdk 自带的一些例?

我们举个 HelloWorld 的例子来说明. 先做以下假设:
* 当前目录?/HelloWorld (?c:\HelloWorld, 以后都用前一?
* jdk 版本?1.2.2 (linux 下的)
* PATH 环境变量讄正确. (q样可以在Q何目录下都可以用工?
* 文g?HelloWorld.java, 内容?

public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello World!\n");
System.exit(0);
}
}

首先q个文g一定要写对, 如果?c 熟?zhn)的? 很有可能写成q样:

 

public static void main(int argc, String[] argv)
{
....
}

q样是不对的, 不信可以试一? ׃手头没有 java 的规? 所?br /> 作如下猜? java ?application E序, 必须?public static void main(String[])
开? 其他不一L(fng)都不?

到现在ؓ(f)? 我们讄斚w只设|了 PATH.

1, 当前路径是指你?.class 文g在当前目录下,

[HelloWorld]$ javac HelloWorld.java //q一步不?x)有多大问?
[HelloWorld]$ java HelloWorld // q一步可能就?x)有问?

如果Z象开头那L(fng)问题, 首先定不是׃敲错命o(h)而出? 如果没有敲错命o(h),
那么接着?

[HelloWorld]$ echo $CLASSPATH
或?/p>


c:\HelloWorld>echo %CLASSPATH%

看看 CLASSPATH 环境变量是否讄? 如果讄? 那么用以下命?

[HelloWorld]$ CLASSPATH=
或?br /> c:\HelloWorld> set CLASSPATH=

来它ؓ(f)I? 然后重新q行. q次用户c\径缺省的?".", 所以应该不?x)有?br /> 同的问题? q有一个方法就是把 "." 加入?CLASSPATH ?

[/]$ CLASSPATH=$CLASSPATH:.
或?br /> c:\HelloWorld> set CLASSPATH=%CLASSPATH%;.

同样也可以成? Good Luck.

2, 当你的程序需要第三方的类库支? 而且比较常用, 可以采用此U方?比如?br /> 用的数据库驱动程? ?servlet 需要的 servlet 包等{? 讄Ҏ(gu)是在环境变量中
加入 CLASSPATH. 然后可以直接编译运行了. q是?HelloWorld Z, 比如你想在根
目录中运行它, 那么你直接在根目录下执行

 

$ java HelloWorld
或?br /> c:\>java HelloWorld

q样肯定?x)出? 如果你的 CLASSPATH 没有改动的话. 我想大家应该知道Z么错?br /> ? 那么怎么改呢? 前面说过, 用户c\径就是一些包含你所需要的cȝ目录, .jar 档案
? .zip ? 现在没有生成? 所以只好把 HelloWorld.class 所在的目录加到 CLASSPAT
H
? Ҏ(gu)前面的做? 再运行一? 看看, 呵呵, 成功? 换个路径, 又成功了!! 不仅?br /> ?br /> 以直接运行其中的c? 当你?import 其中的某些类? 同样处理.
不知道你惛_没有, 随着你的pȝ的不断的扩充, (当然? 都是一些需?java 的东
?
如果都加到这个环境变量里, 那这个变量会(x)来臃? 虽然环境变量I间可以开很大, ?br /> 觉得有些不舒? 看看下面一个方?

3, 在命令行参数中指?classpath.

q是和上面相同的目标, 在Q何目录下执行 HelloWorld, 用这个方法怎么实现?

[/]$ java -cp /HelloWorld HelloWorld
或?/p>


c:\>java -cp c:\HelloWorld HelloWorld

可以了. q是q种Ҏ(gu)的最单的应用? 当你使用了另外的包的时? q可以采?br /> q?br /> U方? 例如:

$ javac -classpath aPath/aPackage.jar:. myJava.java
$ java -cp aPath/aPackage.jar:. myJava
或?br /> c:\> javac -classpath aPath\aPackage.jar;. myJava.java
c:\> java -cp aPath\aPackage.jar;. myJava

q种Ҏ(gu)也有一个不方便的的地方是当第三方包所在的路径较长或者需要两个以上包
?br /> 时? 每次~译q行都要写很? 非常不方? q时候可以写脚本来解? 比如一个例?

compile (文g, 权限改ؓ(f)可执? 当前目录)

$ cat compile
---------------------------
#!/bin/bash

 

javac -classpath aPath\aPackage.jar:anotherPath\anotherPackage.jar:. myJav
a.java
---------------------------

run (文g, 权限改ؓ(f)可执? 当前目录)

$cat run
---------------------------
#!/bin/bash

java -cp aPath\aPackage.jar:anotherPath\anotherPackage.jar:. myJava
---------------------------

或?

compile.bat

c:\HelloWorld> type compile.bat
-------------------------
javac -classpath aPath\aPackage.jar:anotherPath\anotherPackage.jar:. myJav
a.java
-------------------------

 

run.bat

c:\HelloWorld> type run.bat
------------------------
java -cp aPath\aPackage.jar:anotherPath\anotherPackage.jar:. myJava
------------------------
可以了. 试试?
前面提到了扩展类, 扩展cL什么呢? java 的扩展类是应用E序开发者用?br /> 扩展核心q_功能?java cȝ?或者是 native code). 虚拟像用系l类一
样用这些扩展类. 有h可以把包攑օ扩展目录? q样, CLASSPATH 也不用设?
也不用指定了, 岂不是很方便? 实可以正确q行, 但是个h认ؓ(f)q样不好, 不能什?br /> 东西都往里搁, 一些标准的扩展包可? 比如, JavaServlet, Java3D {等. 可以提个
, 加一个环境变? 比如?JARPATH, 指定一个目? 专门存放用户?jar zip
{包, q个要等 SUN 公司来做?


windows98 ? 我原来安装的时? 一直装不上, LL, 好不Ҏ(gu)装上? ~?br /> 省的是不能运行正的, 然后?tool.jar 攑օ CLASSPATH 后工作正? 现在作测?
L仍然是正的. l过多次试, 发现如果原来曾装q?jdk 的都很好, 没有装过?br /> 装的时候会(x)L, 多装几次可以了. 如果你发现正安装后, 不能正常工作, 把
tools.jar 加入 CLASSPATH, 试一?

 


? ?(package)

Java 中的 "? 是一个比较重要的概念, package 是这样定义的:

Definition: A package is a collection of related classes and interfaces
that provides access protection and namespace management.

也就? 一个包是一些提供访问保护和命名I间理的相关类与接口的集合.
使用包的目的是使类Ҏ(gu)查找使用, 防止命名冲突, 以及控制讉K.
q里我们不讨论关于包的过多的东西, 只讨论和~译, q行, c\径相关的东西.
至于包的其他内容, 误己查阅相x?

单一Ҏ(gu)? 包就是一个目? 下面的子包就是子目录, q个包里的类是
q个目录下的文g. 我们用一个例子来说明.
首先建目录结构如? PackageTest/source/, 以后根目录指的是 PackageTest
目录, 我们的源E序攑֜ source 目录? 源程序如?

PackageTest.java

package pktest;

 

import pktest.subpk.*;

public class PackageTest
{
private String value;

public PackageTest(String s)
{
value = s;
}

public void printvalue()
{
System.out.println("value of PackageTest is " + value);
}

public static void main(String[] args)
{
PackageTest test = new PackageTest("This is a Test Package");
test.printvalue();
PackageSecond second = new PackageSecond("I am in PackageTest");


second.printvalue();
PackageSub sub = new PackageSub("I am in PackageTest");
sub.printvalue();
System.exit(0);
}
}

PackageSecond.java

package pktest;

public class PackageSecond
{
private String value;

public PackageSecond(String s)
{
value = s;
}

public void printvalue()
{


System.out.println("value of PackageSecond is " + value);
}
}

PackageSub.java

package pktest.subpk;

import pktest.*;

public class PackageSub
{
private String value;

public PackageSub(String s)
{
value = s;
}

public void printvalue()
{
PackageSecond second = new PackageSecond("I am in subpackage.");


second.printvalue();
System.out.println("value of PackageSub is " + value);
}

}

Main.java

import pktest.*;
import pktest.subpk.*;

public class Main()
{
public static void main()
{
PackageSecond second = new PackageSecond("I am in Main");
second.printvalue();
PackageSub sub = new PackageSub("I am in Main");
sub.printvalue();
System.exit(0);
}
}

 

其中, Main.java 是包之外的一个程? 用来试包外的程序访问包内的c?
PackageTest.java 属于 pktest q个? 也是ȝ? PackageSecond.java ?br /> 属于 pktest, PackageSub 属于 pktest 下的 subpk ? 也就?pktest.subpk.
详细使用情况, 请参看源E序.
好了, 先把源程序都攑֜ source 目录? ?source 成ؓ(f)当前目录, 然后~?br /> 译一? 呵呵, 出错?

Main.java:1: Package pktest not found in import.
import pktest.*;

q里涉及到类路径中包是怎么查找? 前面我们做了一点假? "只要包含?br /> q个cd找Cq个c?, 现在有问题? 其实 jdk ?工具 javac java
javadoc 都需要查扄, 看见目录, p为是包的名字, 对于 import 语句来说,
一个包对应一个目? q个例子? import pktest.*, 我们知道c\径可以包
含一个目? 那么׃那个目录为根, 比如有个目录 /myclass, 那么׃(x)在查?br /> /myclass/pktest 目录及其下的c? 所有的都找? 如果没有׃(x)报错. ׃现在
的类路径只有当前目录, 而当前目录下没有 pktest 目录, 所以就?x)出? c\?br /> q可以包?.jar .zip 文g, q些是可以带目录的压羃? 可以?.jar .zip
文g看做一个虚拟的目录, 然后和目录一样对待了.
好了, 应该知道怎么做了? 修改后的目录l构如下:

 

PackageTest
|
|__source Main.java
|
|__pktest PackageTest.java PackageSecond.java
|
|__subpk PackageSub.java

然后重新~译, q行, 哈哈, 通过? 我们再来q行一?PackageTest.

[source]$ java pktest/PackageTest

怎么又出错了?

Exception in thread "main" java.lang.NoClassDefFoundError: pktest/PackageTest

是这L(fng), java 所要运行的是一个类的名? 它可不管你的cd什么地? p
我们前面所讨论的一h查找q个c? 所以它?pktest/PackageTest 看成是一个类?br /> 名字? 当然?x)出错? 应该q么?

[source]$ java pktest.PackageTest

 

大家应该明白道理? 我就不多说了. 注意 javac 不一? 是可以指明源文g路径
? javac 只编? 不运? 查找cM只有在源文g中碰?import 时才?x)? 与源文g
所在的包没有关p?
gq又些不好的地方, 怎么生成?.class 文gq么分散呀, 看着真别? 别?
javac 有一?-d 命o(h)行参? 可以指定一个目? 把生成的 .class 文g按照包给?br /> 好好地搁在这个目录里?

[source]$ mkdir classes
[source]$ javac -d classes pktest/PackageTest.java
[source]$ javac -d classes Main.java

那么q行怎么q行?

[source]$ cd classes
[classes]$ java pktest.PackageTest
[classes]$ java Main

可以了. 其实 jdk 的这一套工具小巧简? 功能强大, 不会(x)用或者用错其
实不兛_L(fng)? 关键是明白工兯后的一些原理和必要的知? 集成环境是很?
但是它屏蔽了很多底层的知? 不出错还? 一旦出? 如果没有q些必要的知?br /> 很隑֊, 只好?bbs ? 别h只告诉了你解决的具体Ҏ(gu), 下一ơ遇到稍微变?br /> 一点的问题又不懂了. 所以不要拘泥于工具, java 的这一套工L(fng)合v来? ?/p>


型工程(五六十个c?, q是应付得下来的.


? jar 文g

以下?.jar .zip 都看做是 .jar 文g.


1, 从前面我们可以看出来 jar 文g?java 中非帔R? 极大地方便了用户?br /> 使用. 我们也可以做自己?.jar ?
q是使用前面那个例子, Main.java 是包之外的东? 用了 pktest 包中的类,
我们现在是要把 pktest 做成一?.jar ? 很简? 刚才我们已经?pktest
中的 .class 都集中v来了,

[classes]$ jar -cvf mypackage.jar pktest

׃(x)生成 mypackage.jar 文g, 试一? 刚才我们生成?Main.class 在
classes 目录? 所? 从前面可以知?

[classes]$ java -cp mypackage.jar:. Main

可以运行了.

 

2, 如果你看q?jdk 所带的例子, 你就?x)知? .jar q可以直接运?

[/demo]$ java -jar aJar.jar

那好, 那我们的试一?

[classes]$ java -jar mypackage.jar
Failed to load Main-Class manifest attribute from
mypackage.jar

看来我们?jar 和它?jar q不一? 有什么不一样呢? 拿它一个例子出?
重新~译, 生成 .jar 文g, 比较后发? ?.jar 压羃包中 META-INF/MANIFEST.MF
文g不一? 多了一? Main-Class: xxxxx, 再看看出错信? 原来是没有指?br /> Main-Class, 看看 jar 命o(h), 发现有一个参?-m,

-m include manifest information from specified manifest file

和出错信息有点关p? 看来它要M个配制文? 只好照猫画虎写一个了.

[classes]$ cat myManifest
Manifest-Version: 1.0


Main-Class: pktest.PackageTest
Created-By: 1.2.2 (Sun Microsystems Inc.)

[classes]$ jar cvfm mypackage.jar myManifest pktest
added manifest
adding: pktest/(in = 0) (out= 0)(stored 0%)
adding: pktest/PackageSecond.class(in = 659) (out= 395)(deflated 40%)
adding: pktest/subpk/(in = 0) (out= 0)(stored 0%)
adding: pktest/subpk/PackageSub.class(in = 744) (out= 454)(deflated 38%)
adding: pktest/PackageTest.class(in = 1041) (out= 602)(deflated 42%)

[classes]$ java -jar mypackage.jar
value of PackageTest is This is a Test Package
value of PackageSecond is I am in PackageTest
value of PackageSecond is I am in subpackage.
value of PackageSub is I am in PackageTest

好了, 成功? q样做好了一个可以直接执行的 .jar 文g. 大家可以自己试一?br /> 做一个以 Main ZE序的可执行?jar.


结:

 

q篇文章? 我们讨论?java 中的 class path, package, jar {基本但比较
重要的东? 主要?class path. q不是简单的一?CLASSPATH 的完全功? 而是
试图让读者明白其原理, 自己思? 自己动手. 其实大多C襉K?sun ?java doc
中都? 我只不过l合例子E微谈了一? 希望能有所帮助. ׃条g所? 只测试了
jdk1.2.2 ?98 ?linux 的情? 其他版本?jdk 和^台请大家自己试, 错误?br /> 所隑օ, q请指正.

下面是一些需要注意的问题:

1, 如果c\径中需要用?.jar 文g, 必须?jar 文g的文件名攑օc\? 而不?br /> 其所在的目录.
2, 在Q何时? cd必须带有完全的包?
3, "." 当前目录最好在你的c\径中.

下面是一些常见的~译和运行的模式.

4. To compile HelloWorld.java app in the default package in C:\MyDir, use
CD \MyDir
C:\jdk1.3\bin\Javac.exe -classpath . HelloWorld.java
5. To run a HelloWorld.class app, in the default package in C:\MyDir, use
CD \MyDir


C:\jdk1.3\bin\Java.exe -classpath . HelloWorld
6. To run a HelloWorld.class app, in the default package in a jar in C:\MyDir, u
se
CD \MyDir
C:\jdk1.3\bin\Java.exe -classpath HelloWorld.jar HelloWorld
7. To compile a HelloWorld.java app in C:\MyPackage, in package MyPackage, use
CD \
C:\jdk1.3\bin\Javac.exe -classpath . MyPackage\HelloWorld.java
8. To run a HelloWorld.class app in C:\MyPackage, in package MyPackage, use
CD \
C:\jdk1.3\bin\Java.exe -classpath . MyPackage.HelloWorld
9. To run a HelloWorld.class app in C:\MyPackage, in a jar in package MyPackage,
use
CD \MyDir
C:\jdk1.3\bin\Java.exe -classpath HelloWorld.jar MyPackage.HelloWorl
d

(? default package 指的是在E序中不指定M?.

最后一个小的, ?sun ?jdk tools documentQtion 好好地看一?
?jdk 的那些工?java javac javadoc jar javap jdb......好好用一? ?br /> 有好处的. The Simplest Is The Best.

 

 2.如何一ơ把一个目录下的所?jar加入到classpath?

tomcat的做?br /> //tomcat.bat
...
set _LIBJARS=
for %%i in (%TOMCAT_HOME%\lib\*.jar) do call
%TOMCAT_HOME%\bin\cpappend.bat %%i
...

//cpappend.bat
set _LIBJARS=%_LIBJARS%;%1
 

 

3.classspath 的默认值是什?

?JDK 1.2 中,有三个搜索\径用于查扄Q?br /> 1) java 搜烦cȝW一个位|是自Dc\径?br /> 可通过调用 System.getProperty("sun.boot.class.path") 查该路径的倹{?br /> 注意Q其中前~“sun.”昄臛_到现在ؓ(f)止,该属性是特定?Sun 公司的实现?br /> 2) java 查找cȝW二个位|是扩展目录?br /> 可通过调用 System.getProperty("java.ext.dirs") 查目录列表?br /> 3) java 查找cȝW三个位|是应用E序c\径?br /> 可通过调用 System.getProperty("java.class.path") 查该路径的倹{?/p>

you can get:

1) java_base\jre\lib\rt.jar
java_base\jre\lib\i18n.jar
java_base\jre\classes
2) java_base\jre\lib\ext


4.怎样扑ֈE序q行需要的c?

~译的时候用选项 javac -verbose ********
可以看你的程序都用到了类库中的哪些类 .

java -verbose
javac -verbose
是jdk很好的调试功?/p>


5. Linux下Path和ClassPath是怎么讄?
修改文g /etc/profile
CLASSPATH = pathAathBathC
export CLASSPATH

JAVA_HOMEcM
和windows下设|的主要区别应该在分隔符?/p>


6.如何修改path和classpath?

Ҏ(gu)一Q用cmdq入控制収ͼ输入set命o(h)Q你?x)看C机子上的所有环境变量的名称和|
然后你再输入set classpath=你要讄目录。就可以了!Q!
Ҏ(gu)二:(x)
2000,控制面板-》系l?》高U?》环境变?》系l变量,如果没有CLASSPATH变量p己新?br /> 一?br /> xp:
开?> 我的?sh)?>属?>高Q>环境变量->新徏
JAVA_HOME
CLASSPATH
PATH

 


本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/yicikou/archive/2004/06/28/28715.aspx



菜毛毛 2009-08-27 17:07 发表评论
]]>
Java学习(fn)从入门到_N?/title><link>http://www.aygfsteel.com/caizh2009/articles/290020.html</link><dc:creator>菜毛毛</dc:creator><author>菜毛毛</author><pubDate>Thu, 06 Aug 2009 00:38:00 GMT</pubDate><guid>http://www.aygfsteel.com/caizh2009/articles/290020.html</guid><wfw:comment>http://www.aygfsteel.com/caizh2009/comments/290020.html</wfw:comment><comments>http://www.aygfsteel.com/caizh2009/articles/290020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/caizh2009/comments/commentRss/290020.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/caizh2009/services/trackbacks/290020.html</trackback:ping><description><![CDATA[<table id="forum_main" cellspacing="1"> <tbody id="posts"> <tr id="102"> <td class="postcontent"> <div id="wmqeeuq" class="postbody clearfix">Java Learning Path Q一Q、工L(fng) <br /> <br /> <br /> 一?JDK (Java Development Kit) <br /> <br /> JDK是整个Java的核心,包括了Javaq行环境QJava Runtime EnvirnmentQ,一堆Java工具和Java基础的类?rt.jar)。不Z么Java应用服务器实质都是内|了某个版本的JDK。因此掌握JDK是学好Java的第一步。最L的JDK是Sun公司发布的JDKQ除了Sun之外Q还有很多公司和l织都开发了自己的JDKQ例如IBM公司开发的JDKQBEA公司的JrocketQ还有GNUl织开发的JDK{等。其中IBM的JDK包含的JVMQJava Virtual MachineQ运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86q_的Jrocket在服务端q行效率也要比Sun JDK好很多。但不管怎么_(d)我们q是需要先把Sun JDK掌握好?<br /> <br /> 1?JDK的下载和安装 <br /> JDK又叫做J2SEQJava2 SDK Standard EditionQ,可以从Sun的Java|站上下载到Qhttp://java.sun.com/j2se/downloads.html QJDK当前最新的版本是J2SDK1.4.2Q徏议下载该版本的JDKQ下载页面在q里Qhttp://java.sun.com/j2se/1.4.2/download.html?<br /> <br /> 下蝲好的JDK是一个可执行安装E序Q默认安装完毕后?x)在C:\Program Files\Java\目录下安装一套JREQ供览器来使用Q,在C:\j2sdk1.4.2下安装一套JDKQ也包括一套JREQ。然后我们需要在环境变量PATH的最前面增加java的\径C:\j2sdk1.4.2\bin。这样JDK安装好了?<br /> <br /> 2?JDK的命令工?<br /> JDK的最重要命o(h)行工P(x) <br /> javaQ?启动JVM执行class <br /> javacQ?Java~译?<br /> jarQ?Java打包工具 <br /> javadocQ?Java文档生成?<br /> q些命o(h)行必要非常非常熟?zhn)Q对于每个参数都要很_N才行。对于这些命令的学习(fn)QJDK Documentation上有详细的文档?<br /> <br /> <br /> 二?JDK Documentation <br /> <br /> Documentation在JDK的下载页面也有下载连接,同时下蝲Documentation。Documentation是最最重要的编E手册,늛了整个Java所有方面的内容的描q。可以这栯Q学?fn)Java~程Q大部分旉都是花在看这个Documentation上面的。我是随w携带的Q写Java代码的时候,随时查看Q须臾不L?<br /> <br /> <br /> 三?应用服务?App Server) <br /> <br /> App Server是运行Java企业lg的^収ͼ构成了应用Y件的主要q行环境。当前主的App Server是BEA公司的Weblogic Server和IBM公司的Websphere以及免费的JbossQ选择其中一个进行学?fn)就可以了,个h推荐WeblogicQ因为它的体pȝ构更加干净Q开发和部v更加方便Q是Java企业软g开发h员首选的开发^台。下面简要介l几U常用的App ServerQ?<br /> <br /> 1?Tomcat <br /> Tomcat严格意义上ƈ不是一个真正的App ServerQ它只是一个可以支持运行Serlvet/JSP的Web容器Q不qTomcat也扩展了一些App Server的功能,如JNDIQ数据库q接池,用户事务处理{等。Tomcat被非常广泛的应用在中规模的Java Web应用中,因此本文做一点下载、安装和配置Tomcat的介l:(x) <br /> <br /> Tomcat是Apachel织下Jakarta目下的一个子目Q它的主|站是:(x)http://jakarta.apache.org/tomcat/ QTomcat最新版本是Tomcat4.1.27QY件下载的q接是:(x)http://www.apache.org/dist/jakarta/tomcat-4/binaries/ ?<br /> <br /> 下蝲Tomcat既可以直接下载zip包,也可以下载exe安装包(个hzip更干净些)Q不哪U情况,下蝲完毕安装好以后(zip直接解压~就可以了)。需要设|两个环境变量:(x) <br /> <br /> JAVA_HOME=C:\j2sdk1.4.2 <br /> CATALINA_HOME=D:\tomcat4 (你的Tomcat安装目录) <br /> <br /> q样安装好了,启动Tomcatq行CATALINA_HOME\bin\startup.batQ关闭Tomcatq行shutdown.bat脚本。Tomcat启动以后Q默认?080端口Q因此可以用览器访问http://localhost:8080来测试Tomcat是否正常启动?<br /> <br /> Tomcat提供了两个Web界面的管理工PURL分别是:(x) <br /> http://localhost:8080/admin/index.jsp <br /> http://localhost:8080/manager/html <br /> 在启用这两个理工具之前Q先需要手工配|一下管理员用户和口令。用一个文本工h开CATALINA_HOME\conf\tomcat-users.xmlq个文gQ加入如下几行:(x) <br /> <br />   &lt;role rolename="manager"/&gt; <br />   &lt;role rolename="admin"/&gt; <br />   &lt;user username="robbin" password="12345678" roles="admin,manager,tomcat"/&gt; <br /> <br /> q样用户“robbin”具备了񔽎理员权限。重新启动Tomcat以后Q你可以用该用户来登陆如上的两个理工具Q通过Web方式q行Tomcat的配|和理了?<br /> <br /> 2?BEA Weblogic <br /> Weblogic可以到BEA的网站上免费注册之后下蝲到最新的Weblogic8.1企业版,License可以免费使用1q时_(d)其实q已l完全够了。Weblogic的下载连接:(x)http://commerce.bea.com/index.jspQW(xu)eblogic的在U文档:(x)http://edocs.bea.com/ ?<br /> <br /> 3?IBM Webshpere <br /> Websphere同样可以下蝲到免费的试用版本Q到IBM的developerWorks|站可以看到Websphere试用产品的下载和相关的Websphere的资料,developerWorks中文|站的连接是Qhttp://www-900.ibm.com/developerWorks/cn/wsdd/ QW(xu)ebsphere的下载连接:(x)http://www7b.software.ibm.com/wsdd/downloads/WASsupport.html ?<br /> <br /> 4?Jboss <br /> Jboss是免费开源的App ServerQ可以免费的从Jboss|站下蝲Qhttp://www.jboss.org/index.htmlQ然而Jboss的文档是不免费,需要花p乎ͼ所以ؓ(f)我们学习(fn)Jboss讄了一定的障碍。在Jdon上有几篇不错的Jboss配置文档Q可以用来参考:(x)http://www.jdon.com/idea.html <br /> <br /> <br /> 四?Java应用的运行环?<br /> <br /> Java的应用可以简单分Z下几个方面:(x) <br /> <br /> 1?Java的桌面应?<br /> 桌面应用一般仅仅需要JRE的支持就_了?<br /> <br /> 2?Java Web应用 <br /> Java的Web应用臛_需要安装JDK和一个web容器Q例如TomcatQ,以及一个多用户数据库,W(xu)eb应用臛_分ؓ(f)三层Q?<br /> Browser层:(x)览器显C用户页?<br /> Web层:(x)q行Servlet/JSP <br /> DB层:(x)后端数据库,向JavaE序提供数据讉K服务 <br /> <br /> 3?Java企业U应?<br /> 企业U应用比较复杂,可以扩展到n层,最单情况会(x)分ؓ(f)4层:(x) <br /> Browser层:(x)览器显C用户页?<br /> Client层:(x)Java客户端图形程序(或者嵌入式讑֤的程序)直接和W(xu)eb层或者EJB层交?<br /> Web层:(x)q行Servlet/JSP <br /> EJB层:(x)q行EJBQ完成业务逻辑q算 <br /> DB层:(x)后端数据库,向JavaE序提供数据讉K服务 <br /> <br /> 4?Java嵌入式应?<br /> Java嵌入式应用是一个方兴未艄领域Q从事嵌入式开发,需要从Sun下蝲J2ME开发包QJ2ME包含了嵌入式讑֤专用虚拟机KVMQ和普通的JDK中包含的JVM有所不同。另外还需要到特定的嵌入式厂商那里下蝲模拟器?<br /> <br /> <br /> Java Learning PathQ二Q、书c篇 <br /> <br /> 学习(fn)一门新的知识,不可能指望只看一本,或者两本书p够完全掌握。需要有一个@序渐q的阅读q程。我推荐Oreilly出版的Javapd书籍?<br /> <br /> 在这里我只想补充一点看法,很多人学?fn)Java是从《Thinking in Java》这本书入手的,但是我认本书是不适合初学者的。我认ؓ(f)正确的用这本书的方法应该是作ؓ(f)辅助的读物。《Thinking in Java》ƈ不是在完整的介绍Java的整个体p,而是一U蟩跃式的写作方法,是一U类似tips的方法来对Java很多知识点进行了深入的分析和解释?<br /> <br /> 对于初学者来_(d)最好是找一本Java入门的书c,但是比较完整的@序的介绍Java的语法,面向对象的特性,核心cd{等Q在看这本书的同Ӟ可以同步来看《Thinking in Java》,来加深对Java的理解和原理的运用,同时又可以完整的了解Java的整个体pR?<br /> <br /> 对于Java的入门书c,蔡学镛推荐的是Oreilly的《Exploring Java, 2nd Edition?或者《Java in a Nutshell,2nd EditionQ针对C++背景Q》,我ƈ没有看过q两本书。其实我觉得?sh)子工业出版C《Java 2~程详解》或者《Java 2从入门到_N》就很不错?<br /> <br /> 在所有的Java书籍当中Q其实最最有用的,q不是O'reilly?Java SerialsQ真正最最有用处是JDK的DocumentationQ几乎你惌得的所有的知识在Documentation里面全部都有Q其中最主要的部分当然是Java基础cd的API文档Q是按照package来组l的Q对于每一个class都有详细的解释,它的l承关系Q是否实C某个接口Q通常用在哪些场合Q还可以查到它所有的public的属性和Ҏ(gu)Q每个属性的解释Q意义,每个Ҏ(gu)的用途,调用的参敎ͼ参数的意义,q回值的cdQ以及方法可能抛出的异常{等。可以这h_(d)所有关于Java~程斚w的书c其实都不过是在用比较通俗易懂的语aQ和良好的组l方式来介绍Documentation里面的某个package里面包含的一些类的用法而已。所以万变不d宗,如果你有_的能力来直接通过Documentation来学?fn)Java的类库,那么基本上就不需要看其他的书c了。除此之外,Documentation也是~程必备的手册,我的桌面上有三个Documentation的快h式,分别是J2SDK1.4.1的DocumentationQServlet2.3的Documentation和J2SDKEE1.3.1的Documentation。有了这个三个DocumentationQ什么其他的书籍都不需要了?<br /> <br /> 对于Java Web ~程来说Q最核心的是要熟(zhn)和掌握HTTP协议Q这个就和Java无关了,在熟(zhn)HTTP协议之后Q就需要熟(zhn)Java的实现HTTP协议的类库,也就是Servlet APIQ所以最重要的东西就是Servlet API。当然对于初学者而言Q直接通过Servlet API来学?fn)Web~程有很大的隑ֺQ我推荐O'reilly的《Java Server Pages 》这本书来学?fn)Web ~程?<br /> <br /> EJB的书c当中,《Enterprise JavaBeans, 2nd Edition》是一本很不错的书Q?EJB的学?fn)门槛是比较高,入门很难Q但是这本书完全降低了学?fn)的隑ֺQ特别重要的一Ҏ(gu)QEJB的学?fn)需要结合一UApp Server的具体实玎ͼ所以在学习(fn)EJB的同Ӟ必须同步的学?fn)某UApp ServerQ而这本书相关的出了三本书Q分别是Weblogic6.1QW(xu)ebsphere4.0和JBoss3.0上面部v书中例子的实做。真是既有理论,又有实践。在学习(fn)EJB的同Ӟ可以边看边做QEJB的学?fn)?x)变得很轻松?<br /> <br /> 但是q本书也有一个问题,是版本比较旧,主要讲EJB1.1规范和部分EJB2.0的规范。而Ed Roman写的《Mastering EJB 2.0》这本书完全是根据EJB2.0规范写的Q深入浅出,覆盖了EJB~程的各个方面,q且q有很多~程l验tipsQ也是学?fn)EJB非常推荐的书c之一?<br /> <br /> 如果是结合Weblogic来学?fn)J2EE的话Q《J2EE应用与BEA Weblogic Server》绝Ҏ(gu)首选读物,虽然是讲q的Weblogic6.0Q仍然值得购买Q这本书是BEA官方推荐的教材,作者也是BEA公司的工E师。现在中文版已经随处可见了。这本书l合Weblogic介绍了J2EE各个斚w的技术在Weblogicq_上的开发和部vQ实跉|导意义非常强?<br /> <br /> 在掌握了Javaq_基础知识和J2EE斚w的知识以后,更进一步的是学?fn)如何运用OO的方法进行Y件的设计Q那么就一定要学习(fn)“设计模式”。Sun公司出版了一本《J2EE核心模式》,是每个开发Java企业q_软g的架构师必备的书c。这本书全面的介l了J2EE体系架构的各U设计模式,是设计师的必Mc?<br /> <br /> Java Learning PathQ三Q过E篇 <br /> <br /> 每个人的学习(fn)Ҏ(gu)是不同的Q一个h的方法不见得适合另一个hQ我只能是谈自己的学?fn)方法。因为我学习(fn)Java是完全自学的Q从来没有问q别人,所以学?fn)的q程基本上完全是自己摸烦出来的。我也不知道q种Ҏ(gu)是否是比较好的方法,只能l大家提供一点参考了?<br /> <br /> 学习(fn)Java的第一步是安装好JDKQ写一个Hello WorldQ?#61514; 其实JDK的学?fn)没有那么简单,关于JDK有两个问题是很容易一直困扰JavaE序员的地方Q一个是CLASSPATH的问题,其实从原理上来说Q是要搞清楚JRE的ClassLoader是如何加载Class的;另一个问题是package和import问题Q如何来Lcȝ路径问题。把q两个问题摸索清楚了Q就扫除了学?fn)Java和用JDK的最大障。推荐看一下王的《Java深度历险》,对这两个问题q行了深入的探讨?<br /> <br /> W二步是学习(fn)Java的语法。Java的语法是cC++的,基本上主的~程语言不是cCQ就是类C++的,没有什么新东西Q所以语法的学习(fn)Q大概就是半天的旉_了。唯一需要注意的是有几个不容易搞清楚的关键字的用法,publicQprotectedQprivateQstaticQ什么时候用Qؓ(f)什么要用,怎么用,q可能需要有人来指点一下,我当初是完全自己琢磨出来的,׃很久的时间。不q后来我看到《Thinking in Java》这本书上面是讲了这些概늚?<br /> <br /> W三步是学习(fn)Java的面向对象的~程语言的特性的地方。比如承,构造器Q抽象类Q接口,Ҏ(gu)的多态,重蝲Q覆盖,Java的异常处理机制。对于一个没有面向对象语a背景的h来说Q我觉得q个q程需要花很长很长旉Q因为学?fn)Java之前没有C++的经验,只有C的经验,我是大概׃一个月左右吧,才彻底把q些概念都搞清楚Q把书上面的例子反复的揣摩,修改Q尝试,把那几章内容反复的看q来Q看q去Q看了不?遍,才彻底领(zhn)了。不q我惛_果有C++l验的话Q应该一两天旉_了。那么在q个q程中,可以多看看《Thinking in Java》这本书Q对面向对象的讲解非帔R彻。可惜的是我学习(fn)的时候,q没有看到这本书Q所以自p了大量的旉Q通过自己的尝试和揣摩来学?x)的?<br /> <br /> W四步就是开始熟(zhn)Java的类库。Java的基cd其实是JDK安装目录下面jre\lib\rt.jarq个包。学?fn)基cd是学习(fn)rt.jar。基cd里面的类非常非常多。据说有3000多个Q我没有l计q。但是真正对于我们来说最核心的只?个,分别?<br /> java.lang.*; <br /> java.io.*; <br /> java.util.*; <br /> java.sql.*; <br /> <br /> q四个包的学?fn),每个包的学?fn)都可以写成一本厚厚的教材Q而O'reilly也确实是q样做的。我觉得如果旉比较紧,是不可能通过d本书来学?fn)。我觉得比较好的学习(fn)Ҏ(gu)是这L(fng)Q?<br /> 首先要通读整个package的框Ӟ了解整个package的classQinterfaceQexception的构成,最好是能够扑ֈ介绍整个包框架的文章。这些专门介l包的书c的前几章应该就是这些M的框架内容介l?<br /> <br /> 对包整体框架的把握ƈ不是要熟(zhn)每个类的用法,C它有哪些属性,Ҏ(gu)。想CC住的。而是要知道包有哪些方面的cL成的Q这些类的用途是什么,最核心的几个类分别是完成什么功能的。我在给人培训的时候一般是一ơ课讲一个包Q所以不可能详细的介l每个类的用法,但是我反复强调,我给你们讲这些包的不是要告诉你们cȝҎ(gu)是怎么调用的,也不要求你们CcȝҎ(gu)调用Q而是要你们了解,Javal我们提供了哪些c,每个cL用在什么场合,当我遇到问题的时候,我知道哪个类Q或者哪几个cȝl合可以解决我的问题QThat'allQ,当我们具体写E序的时候,只要你知道该用哪个类来完成你的工作就_了。编码的时候,具体的方法调用,是边写代码,Ҏ(gu)DocumentationQ所有的东西都在Documentation里面Q不要求你一定记住,实际你也C?000多个cȝd近10万个Ҏ(gu)调用。所以对每个包的M框架的把握就变得极ؓ(f)重要?<br /> <br /> W五步,通过上面的学?fn),如果学的比较扎实的话Q就打好了Java的基了,剩下要做的工作是扫清Documentation里面除了上面4个包之外的其他一些比较有用处的类。相信进展到q一步,Java的自学能力已l被培养出来了,可以C直接学习(fn)Documentation的水q了。除了要做GUI~程之外QJDK里面其他?x)有用处的包是这些?x) <br /> java.text.*; <br /> java.net.*; <br /> javax.naming.*; <br /> q些包里面真正用的比较多的类其实很少Q只有几个,所以不需要花很多旉?<br /> <br /> W六步,Java Web ~程 <br /> Web~程的核心是HTTP协议QHTTP协议和Java无关Q如果不熟?zhn)HTTP协议的话Q虽然也可以学好Servlet/JSP~程Q但是达不到举一反三Q一通百通的境界。所以HTTP协议的学?fn)是必备的。如果熟(zhn)了HTTP协议的话Q又有了Java~程的良好的基础Q学?fn)Servlet/JSP直易如反掌,我学?fn)Servlet/JSPq了不C周的旉Q然后就开始用JSP来做目了?<br /> <br /> 在Servlet/JSP的学?fn)中Q重头仍然是Servlet Documentation。Servlet API最常用的类很少Q花比较?yu)的旉可以掌握了。把q些c都看一遍,多写几个例子试试。Servlet/JSP~程本质是在反复调用这些类来通过HTTP协议在Web Server和Brower之间交谈。另外对JSPQ还需要熟(zhn)几个常用JSP的标讎ͼ具体的写法记不住的话Q(f)时查是了?<br /> <br /> 此外Java Web~程学习(fn)的重点要攑֜Web Application的设计模式上Q如何进行业务逻辑的分析,q且q行合理的设计,按照MVC设计模式的要求,q用Servlet和JSP分别完成不同的逻辑层,掌握如何在Servlet和JSP之间q行程的控制和数据的共享,以及Web Application应该如何配置和部|Ӏ?<br /> <br /> W七步,J2EE~程 <br /> 以上的学?fn)过E如果是比较利的话Q进行到q一步,隑ֺ又陡然提高。因Z面的知识内容都是只涉及一个方面,而像EJBQJMSQJTA{核心的J2EE规范往往是几UJava技术的l合q用的结Ӟ所以掌握v来难度比较大?<br /> <br /> 首先一定要学习(fn)好JNDIQJNDI是App Server定位服务器资源(EJBlgQDatasouceQJMSQ查找方法,如果对JNDI不熟(zhn)的话,EJBQJMSq些东西几乎学不下去。JNDI其实是javax.naming.*q个包,q用h很简单。难点在于服务器资源文g的配|。对于服务器资源文g的配|,需要看看专门的文档规范了,比如web.xml的写法,ejb-jar.xml的写法等{。针Ҏ(gu)U不同的App ServerQ还有自q服务资源配置文gQ也是需要熟(zhn)的?<br /> <br /> 然后可以学习(fn)JTAQ主要是要理解JTA对于事务的控制的Ҏ(gu)Q以及该在什么场合用JTA。这里可以简单的举个例子Q我们知道一般情况可以对于一个数据库q接q行事务控制(conn.setAutoCommit(false),....,conn.commit())Q做Z个原子操作,但是假设我的业务需求是要把对两个不同数据库的操作做Z个原子操作,你能做的到吗Q这时候只能用JTA了。假设操作过E是先往A数据库插一条记录,然后删除B数据库另一个记录,我们自己写代码是控制不了把整个操作做Z个原子操作的。用JTA的话Q由App Server来完成控制?<br /> <br /> 在学?fn)EJB之前要学?fn)对象序列化和RMIQRMI是EJB的基。接着学习(fn)JMS和EJBQ对于EJB来说Q最关键是要理解EJB是如何通过RMI来实现对q端对象的调用的Q以及在什么情况下要用到EJB?<br /> <br /> 在学?fn)完EJBQJMSq些东西之后Q你可能?x)意识到要急不可待学习(fn)两个领域的知识,一个是UMLQ另一个是Design Pattern。Java企业软g的设计非帔R视框?Framework)的设计,一个好的Y件框架是软g开发成功的必要条g。在q个时候,应该开始把学习(fn)的重Ҏ(gu)在设计模式和框架的学?fn)上Q通过学习(fn)和实际的~程l验来掌握EJB的设计模式和J2EE的核心模式?<br /> <br /> J2EE规范里面Q除了EJBQJMSQJTAQServlet/JSPQJDBC之外q有很多很多的企业技术,q里不一一q行介绍了?<br /> <br /> 另外q有一个最新领域Web Services。Web Services也完全没有Q何新东西Q它像是一U黏合剂Q可以把不同的服务统一h提供一个统一的调用接口,作ؓ(f)使用者来_(d)我只要获得服务提供者给我的WSDLQ对服务的描qͼQ就够了Q我完全不知道服务器提供者提供的服务I竟是EJBlgQ还?NetlgQ还是什么CORBAlgQ还是其他的什么实玎ͼ我也不需要知道。Web Services最伟大的地方就在于通过l一的服务提供方式和调用方式Q实C整个Internet服务的共享,是一个非o(h)人激动的技术领域。Web Services好像目前q没有什么很好的书籍Q但是可以通过在网l上面查资料的方式来学习(fn)?<br /> <br /> Java Learning PathQ四Q?Ҏ(gu)?<br /> <br /> Java作ؓ(f)一门编E语aQ最好的学习(fn)Ҏ(gu)是写代码。当你学?fn)一个类以后Q你可以自己写个简单的例子E序来运行一下,看看有什么结果,然后再多调用几个cȝҎ(gu)Q看看运行结果,q样非常直观的把cȝ学会(x)了,而且记忆非常深刻。然后不应该满把代码调通,你应该想想看如果我不q样写,换个方式Q再试试行不行。记得哪个高q学?fn)编E就是个破坏的过E,把书上的例子Q自己学?fn)Documentation~写的例子在q行通过以后Q不断的试着用不同的Ҏ(gu)实现Q不断的试破坏代码的结构,看看它会(x)有什么结果。通过q样的方式,你会(x)很彻底的很精通的掌握Java?<br /> <br /> 举个例子Q我们都~过Hello World <br /> <br /> public class HelloWorld { <br />   public static void main(String[] args) { <br />     System.out.println("Hello World"); <br />   } <br /> } <br /> <br /> 很多初学者不是很理解Z么mainҎ(gu)一定要q样来定义public static void main(String[] args)Q能不能不这样写Q包括我刚学?fn)Java的时候也有这L(fng)疑问。想知道{案吗?很简单,你把main改个名字q行一下,看看报什么错误,然后Ҏ(gu)出错信息q行分析Q把main的public取掉Q在试试看,报什么错误;staticLq能不能q行Q不知道mainҎ(gu)是否一定要传一个String[]数组的,把String[]Ҏ(gu)Q改成int[]Q或者String试试看;不知道是否必dargs参数名称的,也可以把argsҎ(gu)别的名字Q看看运行结果如何?<br /> <br /> 我当初学?fn)Java的时候就是这样做的,把Hello WorldE序反复改了七八ơ,不断q行Q分析运行结果,最后就d明白Z么了mainҎ(gu)是这样定义的了?<br /> <br /> 此外Q我对于staicQpublicQprivateQExceptionQtry{ }catch {}finally{}{等{等一开始都不是很懂Q都是把参考书上面的例子运行成功,然后开始破坏它Q不断的Ҏ(gu)自己心里面的疑问来重新改写程序,看看能不能运行,q行出来是个什么样子,是否可以得到预期的结果。这栯然比较费旉Q不q一个例子程序这样反复破坏几ơ之后。我对q个相关的知识彻底学通了。有时候甚x意写一些错误的代码来运行,看看能否得到预期的运行错误。这样对于编E的掌握是及其深ȝ?<br /> <br /> 其中特别值得一提的是JDK有一个非常棒的调试功能,-verbose <br /> java –verbose <br /> javac –verbose 以及其它很多JDK工具都有q个选项 <br /> -verbose 可以昄在命令执行的q程中,JVM都依ơ加载哪里ClassQ通过q些宝贵的调试信息,可以帮助我们分析出JVM在执行的q程中都q了些什么?<br /> <br /> 另外Q自己在学习(fn)q程中,写的很多的这U破坏例E,应该有意识的分门别类的保存下来,在工作中U篏的典型例E也应该定期整理Q日U月累,自己有了一个代码库了。遇到类似的问题Q到代码库里?Copy & Paste QSearch & ReplaceQ就好了Q极大提高了开发速度。最理想的情冉|把一些通用的例E自己再抽象一层,形成一个通用的类库,装好。那么可复用性就更强了?<br /> <br /> 所以我觉得其实不是特别需要例E的Q自己写的破坏例E就是最好的例子Q如果你实在对自己写的代码不攑ֿ的话Q我强烈推荐你看看JDK基础cd的Java源代码。在JDK安装目录下面?x)有一个src.zipQ解开来就可以完整的看到整个JDK基础cdQ也是rt.jar的Java源代码,你可以参考一下Sun是怎么写JavaE序的,规范是什么样子的。我自己在学?fn)Java的类库的时候,当有些地方理解的不是很清楚的时候,或者想更加清晰的理解运作的l节的时候,往往?x)打开相应的类的源代码Q通过看源代码Q所有的问题都会(x)一扫而空?<br /> <br /> Java Learning PathQ五Q资源篇 <br /> <br /> 1?http://java.sun.com/ (英文) <br /> Sun的Java|站Q是一个应该经常去看的地方。不用多说?<br /> <br /> 2、http://www-900.ibm.com/developerWorks/cn/ <br /> IBM的developerWorks|站Q英语好的直接去英文ȝ点看。这里不但是一个极好的面向对象的分析设计网站,也是Web ServicesQJavaQLinux极好的网站。强烈推荐!Q! <br /> <br /> 3、http://www.javaworld.com/ (英文) <br /> 关于Java很多新技术的讨论和新闅R想多了解Java的方斚w面的应用Q这里比较好?<br /> <br /> 4、http://dev2dev.bea.com.cn/index.jsp <br /> BEA的开发者园圎ͼBEA作ؓ(f)最重要的App Server厂商Q有很多独到的技术,在Weblogic上做开发的朋友不容错过?<br /> <br /> 5、http://www.huihoo.com/  <br /> 灰狐动力|站Q一个专业的中间件网站,虽然不是专业的Java|站Q但是在J2EE企业应用技术方面有深厚的造诣?<br /> <br /> 6、http://www.theserverside.com/home/ (英文) <br /> TheServerSide是一个著名的专门面向Java Server端应用的|站?<br /> <br /> 7、http://www.javaresearch.org/ <br /> Java研究l织Q有很多优秀的Java斚w的文章和教程Q特别是在JDO斚w的文章比较丰富?<br /> <br /> 8、http://www.cnjsp.org/ <br /> JSP技术网站,有相当多的Java斚w的文章和资源?<br /> <br /> 9、http://www.jdon.com/ <br /> Jdon论坛Q是一个个人性质的中文J2EE专业技术论坛,在众多的Java的中文论坛中QJdon一个是技术含量非帔RQ帖子质量非常好的论坛?<br /> <br /> 10、http://sourceforge.net/ <br /> SourgeForge是一个开放源代码软g的大本营Q其中也有非帔R怸富的Java的开放源代码的著名的软g?</div> <div class="wmqeeuq" id="topic_copyright">声明QJavaEye文章版权属于作者,受法律保护。没有作者书面许可不得{载?</div> <div class="wmqeeuq" id="forum_advert_f5"><span>推荐链接</span> <ul class="adverts"> <li><a target="_blank"><span style="font-weight: bold; color: blue">?月推荐】JAVA技术沙龙活动通知--Ƣ迎q期待?zhn)的参?</span></a></li> </ul> </div> </td> </tr> <tr> <td class="postauthor"><a >q回楼</a></td> <td class="postcontent"> <div id="wmqeeuq" class="icons"><a class="icon_www" title="览作者的博客" > </a> <a class="icon_profile" title="览作者资? > </a> <a class="icon_pm" title="发送站内短? > </a> <a class="icon_guestbook" title="l作者留a" > </a> </div> </td> </tr> <tr class="sep2"> <td colspan="2"></td> </tr> <tr id="2957"> <td class="postauthor"> <ul> <li id="wmqeeuq" class="name">Arbow <li>{: <img title="五星?x)? alt="五星?x)? src="http://www.javaeye.com/images/star5.gif" /> <li><a target="_blank"><img class="logo" title="Arbow的博? Arbow@JavaEyeQ技术流水̎" alt="Arbow的博? src="http://www.javaeye.com/upload/logo/user/16301/d94f7ba5-70ca-31e1-bd44-69ed147762ea.jpg?1236832337" /></a> <li>文章: 133 <li>U分: 561 <li>来自: q州 <li><img src="http://www.javaeye.com/images/status/offline.gif" alt="" /> </li> </ul> </td> <td class="postcontent"> <div id="wmqeeuq" class="postactions"> <div id="wmqeeuq" class="description">发表旉Q?003-10-04 </div> <div id="wmqeeuq" class="links"><a title="Arbow回帖:Java学习(fn)从入门到_N? >回帖地址</a> <a class="favorite" target="_blank">收藏</a> </div> </div> <div id="wmqeeuq" class="postbody clearfix">感谢高手们分享经验:(x)Q?</div> </td> </tr> <tr> <td class="postauthor"><a >q回楼</a></td> <td class="postcontent"> <div id="wmqeeuq" class="icons"><a class="icon_www" title="览作者的博客" > </a> <a class="icon_profile" title="览作者资? > </a> <a class="icon_pm" title="发送站内短? > </a> <a class="icon_guestbook" title="l作者留a" > </a> </div> <div id="wmqeeuq" class="post_rate_box" id="post_rate_box_2957"><a class="good" title="? onclick='rate_post(2957, "good"); return false;' >0</a> <a class="hidden" title="? onclick='rate_post(2957, "hidden"); return false;' >1</a> </div> </td> </tr> <tr class="sep2"> <td colspan="2"></td> </tr> <tr id="3676"> <td class="postauthor"> <ul> <li id="wmqeeuq" class="name">I心? <li>{: <img title="五星?x)? alt="五星?x)? src="http://www.javaeye.com/images/star5.gif" /> <li><a target="_blank"><img class="logo" title="I心菜的博客: I心? alt="I心菜的博客" src="http://www.javaeye.com/upload/logo/user/245/0f761f8d-36a9-4599-a4fa-07d0092127f1.gif?1236831845" /></a> <li>文章: 38 <li>U分: 785 <li><img src="http://www.javaeye.com/images/status/offline.gif" alt="" /> </li> </ul> </td> <td class="postcontent"> <div id="wmqeeuq" class="postactions"> <div id="wmqeeuq" class="description">发表旉Q?003-10-15 </div> <div id="wmqeeuq" class="links"><a title="I心菜回?Java学习(fn)从入门到_N? >回帖地址</a> <a class="favorite" target="_blank">收藏</a> </div> </div> <div id="wmqeeuq" class="postbody clearfix">如何q速成为Java高手[Tomjava原创]  <br /> 很多|友问我学习(fn)Java有没有什么捷?我说“无他Q唯手熟?#8221;。但是我却很愿意自己学?fn)的一些经验写出来Q以便后来者少走弯?帮助别h是最大的快乐嘛!  <br />   要想学好JavaQ首先要知道Java的大致分cR我们知道,自从Sun推出Java以来Q就力图使之无所不包Q所以Java发展到现在,按应用来分主要分Z大块QJ2SE,J2ME和J2EE,q也是Sun ONE(Open Net Environment)体系。J2SE是Java2的标准版Q主要用于桌面应用Y件的~程QJ2ME主要应用于嵌入是pȝ开发,如手机和PDA的编E;J2EE是Java2的企业版Q主要用于分布式的网l程序的开发,如电(sh)子商务网站和ERPpȝ。J2SE开发桌面应用Y件比起VC,VB,DEPHIq些传统开发语a来说Q优势好象ƈ不明显。J2ME对于初学者来_(d)好象又有Ҏ(gu)奥,而且一般开发者很难有开发环境。所以现在应用最q泛又最好学的就是J2EE了。J2EE又包括许多组Ӟ如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail{。要学习(fn)h可不是一两天的事?nbsp; <br />   那么又该如何学习(fn)J2EE呢?当然Java语法得先看一看的QI/O包,Util包,Lang包你都熟(zhn)了吗?然后再从JSP学v。如果你学过HTMLQ那么事情要好办的多Q如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语aQ有点象ASP。然后你p学一学Servlet了。Servlet是服务器端程序,他负责生成发送给客户端的HTML文g。JSP在执行时Q也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代ServletQ这也是SUN推出JSP的本意,可是Servlet用来控制程跌{q是挺方便的Q也令程序更清晰。接下来你应该学?fn)一下Javabean了,可能你早q不管JSP在HTML中嵌Java代码的؜乱方式了Q这U方式跟ASP又有什么区别呢Q还好,SUN提供了Javabean可以把你的JSP中的Java代码装hQ便于调用也便于重用。接着是EJB了,EJB是Enterprise JavaBean,看名字好象它是JavabeanQ可是它和Javabeanq是有区别的。它是一个体pȝ构,你可以搭建更安全、更E_的企业应用。它的大量代码已׃间gQ也是我们常听到的Weblogic,Websphereq些J2EE服务器)完成了,所以我们要做的E序代码量很,大部分工作都在设计和配置中间件上。至于JDBCQ就不用我多说了Q你如果用java~过存取数据库的E序Q就应该很熟(zhn)。还有,如果你要用Java~发送电(sh)子邮件的E序Q你得看看Javamail了?nbsp; <br />   好了Q对Java和J2EE有了一些基本概念之后,你就应该~一些程序了Q千万不要纸上谈兵哦。最好找一些有实例且带光盘的书来看Q这L(fng)到好的程序就可以直接Ctrl+C再Ctrl+VQ也不用x老大架再亲自把它 再输一遍吧Q再说直接复制还不用怕出错,何乐而不为呢Q还有就是要l常上一些好的Java~程文章Q有好的文章要Cut下来Q有问题管问,只要问题不是太傻Q一般高手都?x)回{你的。下面介l几个好的Java斚w的编E网站:(x)  <br /> CSDN论坛 http://www.csdn.net/  中国最有名的技术论坛,《程序员》杂志就是他们出版的Q你可以在上面提出问题,马上有人回{你Q如果你觉得好,你可以给那h加分Q?nbsp; <br /> Java研究l织http://www.javaresearch.org/  上面有很多原创文章,高手q是挺多的;  <br /> Java开发?http://www.chinajavaworld.com/  那里Java资料比较全;  <br /> java.com.cn  http://www.java.com.cn/  看这域名q道有多牛Q注册用户快接近一万了Q同时在UhC在一千左叻I人气很旺的;  <br /> IBM的开发者网lhttp://www-900.ibm.com/developerWorks/cn/java/index.shtml  IBM永远的蓝色巨人;  <br />   那么我书也看了,E序也做了,别h问我的问题我都能解决了,是不是就成ؓ(f)高手了呢Q当然没那么单,q只是万里长征走完了W一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么l织人员q行开发吗Q你现在脑子里除了一些散q代码之外Q可能再没有别的东西了吧Q你现在最~的是实际的工作l验Q而不是书本上那些凭空惛_来的E序。所以你快去找一份Java的编E工作来做吧Q如果是在校学生可以dD啊)Q在实践中提高自己,那才是最快的。不q你得祈在公司里碰C个高手,而且他还愿意不厌其烦地教你,q样好象有点隑֓Q?nbsp; <br />   q有一个办法就是读开放源码的E序了。我们知道开放源码大都出自高手,他们设计合理Q考虑周到Q再加上有广大的E序员参与,代码的h(hun)D然是字字珠叽Q铿锉|力(对不P偶最q《金装四大才子》看多了Q。学Java必读的两个开源程序就是Jive和Pet Store.。Jive是国外一个非常著名的BBSE序Q完全开放源码。论坛的设计采用了很多先q的技术,如Cache、用戯证、Filter、XML{,而且论坛完全屏蔽了对数据库的讉KQ可以很L的在不同数据库中UL。论坛还有方便的安装和管理程序,q是我们qx~程时容易忽略的一部䆾Q中国程序员一般只注重~程的技术含量,却完全不考虑用户的感受,q就是我们与国外软g的差距所在)。Jive的资料在很多|站上都有,大家可以找来研究一下。相信你d代码后,?x)有p换骨的感觉。遗憄是Jive?.5以后׃再无条g的开放源代码Q同时有licence限制。不q幸好还有中国一的JavaE序员关注它Q外国h不开源了Q中国h׃能开源吗Q这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名鼎鼎的banq在Jive 2.1版本基础上改~而成, 全中文,增加了一些实用功能,如脓(chung)图,用户头像和用戯料查询等Q而且有一个开发团队在不断升。你可以讉Kbanq的网站http://www.jdon.com/  M载,或到同济技术论坛的服务器上ftp://nro.shtdu.edu.cnMQ安装上有什么问题,可以到论坛上L问。Pet Store.Q宠物店Q是SUN公司Z演示其J2EE~程规范而推出的开放源码的E序Q应该很h权威性,惛_J2EE和EJB的朋友不要错q了?nbsp; <br />    你一定会(x)高兴地说Q哈哈,原来成ؓ(f)Java高手p么简单啊!记得Tomjava也曾到q一个项目经理,L(fng)Java很简单,只要三个月就可以学会(x)。其实说q种话的人就如当q小日本L(fng)“三个月拿下中?#8221;一样大a不惭。不是TomjavaghQ你现在只是学到了Java的骨Ӟ却还没有学到Java的精髓。接下来你得研究设计模式了。设计模式是高E序员真正掌握面向对象核心思想的必修课。设计模式ƈ不是一U具?技?,它讲q的是思想Q它不仅仅展CZ接口或抽象类在实际案例中的灵zd用和智慧Q让你能够真正掌握接口或抽象cȝ应用Q从而在原来的Java语言基础上跃q一步,更重要的是,设计模式反复向你一个宗旨:(x)要让你的E序可能的可重用。关于设计模式的资料Q还是向大家推荐banq的网站http://www.jdon.com/  Q他把GOF?3U模式以通俗易懂的方式诠释出来,UJava描述Q真是经怸的经典。有旉再研I一下MVCl构Q把Model-View-Control分离开的设计思想Q吧Q现在很行的Structs是它的一U实现方式,不过Structs用v来实在是很繁Q我们只要学?fn)其_N卛_Q我们完全可以设计自qMVCl构。然后你再研I一下Y件Refactoring(重整)和极限XP~程Q相信你又会(x)上一个台阶?nbsp; <br /> 做完q些Q你不如整理一下你的Java代码Q把那些l典的程序和常见的应用整理出来,再精心打造一番,提高光用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧,你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全Q接下项目来可以q速作完,怿大家以后都会(x)来找你的Q所以Money哗啦啦的来了。。。。。?nbsp; <br /> 当然你也可以参加一些开源项目,一斚w可以提高自己Q另一斚w也是Z国Y件事业做贡献嘛!开发者在互联|上用CVS合作开发,用QQ,MSN,E-mail讨论联系Q天南v北的E序员分散在各地却同时开发同一个YӞ是不是很有意思呢Q?nbsp; <br /> 下面介绍两个好的开源项目网站:(x)  <br /> 湖北省Y件公共开发^台http://gro.clinux.org/   <br /> 共创联盟http://cosoft.org.cn/   <br />   哇,好高兴哦Q我l于成ؓ(f)高手了!非也Q非也。古ZQ?#8220;识时务者ؓ(f)俊杰”。你知道计算机界现在的发展Ş势吗Q你知道微Y?NET蓝图和SUN ONE计划之间的明争暗斗吗?你知道计机技术将向何处发展吗?其实从各大计机厂商最q的动作,都可以看出来“Web服务是下一代互联网应用的制高点”Q而微软的.NET蓝图和SUN ONE计划的斗争焦点,也就是Web服务。Web服务是一个崭新的分布式计模型,它是一pd标准的综合(XML,SOAP,UDDI,WSDL和W(xu)SFL{)。它使得不同语言~写的Y件能够轻易的集成hQɾ|络资源和W(xu)eb站点变成一U服务而不是؜q垃圾场。不q的来Q我们就可以在家里点M下鼠标,可以完成出门旅游的全部准备工作Q包括定飞机,定旅游线路,定好戉K{。请注意Q这所有的一切都是Web站点间自动完成的Q再也不用象现在一P表面上是?sh)子商务Q实际上很多环节都是人工操作。也怽?x)觉得这是天方夜谈,不过p的说Q你也很有可能承接一个项目,要集成两个企业的ERPpȝ。很有可能上怼业的pȝ是用Dephi~的Q而下怼业的pȝ是用Java~的。你说你是Java高手Q大安看者你怎么做呢。所以啊Q你q得学习(fn)新技术,如Web服务Q而且你Dephi也要懂一点吧QDephi6现在已经提供Web服务的控件了Q?你编的JavapȝQ可能要?NET集成Q所以你.NET要懂一点吧Q到最后,你可能发C已经成ؓ(f)Java高手了,但很多时间却在搞别的技术。太极张三丰里说Q最厉害的招式就是没有招式,可能是q个道理吧!  <br /> 因ؓ(f)刚刚兴vQ所以网上Web服务的资料不是很多,我还是给大家推荐几个|站吧:(x)  <br /> 中国UDDI技术联盟http://www.uddi-china.org/   <br /> CSDN的柴晓\专栏http://www.csdn.net/develop/author/ColumnAuthor/fennivel/  Q注Q柴晓\也是互联|上一个有名的人物Q他发表q很多关于Web服务的文章,q出了一书,应该U的上是中国Web服务技术的先行者)  <br /> IBM的开发者网l的XML&Web Service专栏:  <br /> http://www-900.ibm.com/developerWorks/cn/xml/index.shtml?csdn   IBM可是Web服务的力推?nbsp; <br /> ?#8230;你费劲千心万苦,ȝ成ؓ(f)Java高手了,怎叫Z由喜极而泣呢!是啊Q真不容易,真不单,真叫人感动啊Q那么打个电(sh)话告诉我吧,什么?我的?sh)话L(fng)是多?昏到Q你打电(sh)话问不就知道了吗Q真是的…… </div> </td> </tr> </tbody> </table> <img src ="http://www.aygfsteel.com/caizh2009/aggbug/290020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/caizh2009/" target="_blank">菜毛毛</a> 2009-08-06 08:38 <a href="http://www.aygfsteel.com/caizh2009/articles/290020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>提升JSP应用E序的七大绝?/title><link>http://www.aygfsteel.com/caizh2009/articles/289187.html</link><dc:creator>菜毛毛</dc:creator><author>菜毛毛</author><pubDate>Thu, 30 Jul 2009 15:05:00 GMT</pubDate><guid>http://www.aygfsteel.com/caizh2009/articles/289187.html</guid><wfw:comment>http://www.aygfsteel.com/caizh2009/comments/289187.html</wfw:comment><comments>http://www.aygfsteel.com/caizh2009/articles/289187.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/caizh2009/comments/commentRss/289187.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/caizh2009/services/trackbacks/289187.html</trackback:ping><description><![CDATA[你时常被客户抱怨JSP面响应速度很慢吗?你想q当客户讉Kơ数剧增Ӟ你的WEB应用能承受日益增加的讉K量吗Q?br /> <br /> 本文讲述了调整JSP和servlet的一些非常实用的Ҏ(gu)Q它可你的servlet和JSP面响应更快Q扩展性更强。而且在用h增加的情况下Q系l负载会(x)呈现出^滑上长的势。在本文中,我将通过一些实际例子和配置Ҏ(gu)使得你的应用E序的性能有出人意料的提升。其中,某些调优技术是在你的编E工作中实现的。而另一些技术是与应用服务器的配|相关的。在本文中,我们详l地描述怎样通过调整servlet和JSP面Q来提高你的应用E序的M性能。在阅读本文之前Q假设你有基本的servlet和JSP的知识?  <br /> <br /> Ҏ(gu)一Q在servlet的init()Ҏ(gu)中缓存数?br /> <br />   当应用服务器初始化servlet实例之后Qؓ(f)客户端请求提供服务之前,它会(x)调用q个servlet的init()Ҏ(gu)。在一个servlet的生命周期中Qinit()Ҏ(gu)只会(x)被调用一ơ。通过在init()Ҏ(gu)中缓存一些静态的数据或完成一些只需要执行一ơ的、耗时的操作,可大大地提高系l性能?br /> <br />   例如Q通过在init()Ҏ(gu)中徏立一个JDBCq接池是一个最佳例子,假设我们是用jdbc2.0的DataSource接口来取得数据库q接Q在通常的情况下Q我们需要通过JNDI来取得具体的数据源。我们可以想象在一个具体的应用中,如果每次SQLh都要执行一ơJNDI查询的话Q那pȝ性能会(x)急剧下降。解x法是如下代码Q它通过~存DataSourceQ得下一ơSQL调用时仍然可以l利用它Q?public class ControllerServlet extends HttpServlet {  private javax.sql.DataSource testDS = null;  public void init(ServletConfig config) throws ServletException  {   super.init(config);   Context ctx = null;   try   {    ctx = new InitialContext();    testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS");   }   catch(NamingException ne)   {    ne.printStackTrace();   }   catch(Exception e)   {    e.printStackTrace();   }  }  public javax.sql.DataSource getTestDS()  {   return testDS;  }  ...  ... }<br /> <br />   Ҏ(gu) 2:止servlet和JSP 自动重蝲(auto-reloading)<br /> <br />   Servlet/JSP提供了一个实用的技术,卌动重载技术,它ؓ(f)开发h员提供了一个好的开发环境,当你改变servlet和JSP面后而不必重启应用服务器。然而,q种技术在产品q行阶段对系l的资源是一个极大的损耗,因ؓ(f)它会(x)lJSP引擎的类装蝲?classloader)带来极大的负担。因此关闭自动重载功能对pȝ性能的提升是一个极大的帮助?br /> <br />   Ҏ(gu) 3: 不要滥用HttpSession<br /> <br />   在很多应用中Q我们的E序需要保持客L(fng)的状态,以便面之间可以怺联系。但不幸的是׃HTTPh天生无状态性,从而无法保存客L(fng)的状态。因此一般的应用服务器都提供了session来保存客L(fng)状态。在JSP应用服务器中Q是通过HttpSession对像来实现session的功能的Q但在方便的同时Q它也给pȝ带来了不的负担。因为每当你获得或更新sessionӞpȝ者要对它q行Ҏ(gu)的序列化操作。你可以通过对HttpSession的以下几U处理方式来提升pȝ的性能Q?br /> <br /> 如果没有必要Q就应该关闭JSP面中对HttpSession的缺省设|:(x) 如果你没有明指定的话,每个JSP面都会(x)~省地创Z个HttpSession。如果你的JSP中不需要用session的话Q那可以通过如下的JSP面指示W来止它:(x) Q?@ page session="false"%Q?br /> <br /> 不要在HttpSession中存攑֤的数据对像:(x)如果你在HttpSession中存攑֤的数据对像的话,每当对它q行dӞ应用服务器都对其进行序列化Q从而增加了pȝ的额外负担。你在HttpSession中存攄数据对像大Q那pȝ的性能׃降得快?br /> <br /> 当你不需要HttpSessionӞ快地释攑֮Q当你不再需要sessionӞ你可以通过调用HttpSession.invalidate()Ҏ(gu)来释攑֮?br /> <br /> 量session的超时时间设得短一点:(x)在JSP应用服务器中Q有一个缺省的session的超时时间。当客户在这个时间之后没有进行Q何操作的话,pȝ?x)将相关的session自动从内存中释放。超时时间设得越大,pȝ的性能׃(x)低Q因此最好的Ҏ(gu)是量使得它的g持在一个较低的水^?br /> <br />  Ҏ(gu) 4: 页面输行压~?br /> <br />   压羃是解x据冗余的一个好的方法,特别是在|络带宽不够发达的今天。有的浏览器支持gzip(GNU zip)q行来对HTML文gq行压羃Q这U方法可以戏剧性地减少HTML文g的下载时间。因此,如果你将servlet或JSP面生成的HTML面q行压羃的话Q那用户׃(x)觉得面览速度?x)非常快。但不幸的是Q不是所有的览器都支持gzip压羃Q但你可以通过在你的程序中查客L(fng)览器是否支持它。下面就是关于这U方法实现的一个代码片D:(x)<br /> <br /> public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {  OutputStream out = null  String encoding = request.getHeader("Accept-Encoding");  if (encoding != null && encoding.indexOf("gzip") != -1)  {   request.setHeader("Content-Encoding" , "gzip");   out = new GZIPOutputStream(request.getOutputStream());  }  else if (encoding != null && encoding.indexOf("compress") != -1)  {   request.setHeader("Content-Encoding" , "compress");   out = new ZIPOutputStream(request.getOutputStream());  }  else  {   out = request.getOutputStream();  }  ...  ... }<br /> <br />   Ҏ(gu) 5: 使用U程?br /> <br />   应用服务器缺省地为每个不同的客户端请求创Z个线E进行处理,qؓ(f)它们分派service()Ҏ(gu)Q当service()Ҏ(gu)调用完成后,与之相应的线E也随之撤消。由于创建和撤消U程?x)耗费一定的pȝ资源Q这U缺省模式降低了pȝ的性能。但所q的是我们可以通过创徏一个线E池来改变这U状c另外,我们q要个线E池讄一个最线E数和一个最大线E数。在应用服务器启动时Q它?x)创建数量等于最线E数的一个线E池Q当客户有请求时Q相应地从池从取Z个线E来q行处理Q当处理完成后,再将U程重新攑օ到池中。如果池中的U程不够地话Q系l会(x)自动地增加池中线E的数量Q但总量不能过最大线E数。通过使用U程池,当客L(fng)h急剧增加Ӟpȝ的负载就?x)呈现的qx的上升曲U,从而提高的pȝ的可伸羃性?br /> <br />   Ҏ(gu) 6: 选择正确的页面包含机?br />   在JSP中有两种Ҏ(gu)可以用来包含另一个页?、用include指示W?Q?@ includee file=”test.jsp” %Q??、用jsp指示W?Qjsp:includee page=”test.jsp” flush=”true”/Q?。在实际中我发现Q如果用第一U方法的话,可以使得pȝ性能更高?br /> <br />   Ҏ(gu) 7:正确地确定javabean的生命周?br /> <br />   JSP的一个强大的地方是对javabean的支持。通过在JSP面中用<jsp:useBeanQ标{,可以javabean直接插入C个JSP面中。它的用方法如下:(x) Qjsp:useBean id="name" scope="page|request|session|application" class= "package.className" type="typeName"Q</jsp:useBeanQ?br /> <br />   其中scope属性指Zq个bean的生命周期。缺省的生命周期为page。如果你没有正确地选择bean的生命周期的话,它将影响pȝ的性能?br /> <br />   举例来说Q如果你只想在一ơ请求中使用某个beanQ但你却这个bean的生命周期设|成了sessionQ那当这ơ请求结束后Q这个bean仍然保留在内存中,除非session时或用户关闭浏览器。这样会(x)耗费一定的内存Qƈ无谓的增加了JVM垃圾攉器的工作量。因此ؓ(f)bean讄正确的生命周期,q在bean的命结束后快地清理它们,?x)用系l性能有一个提高?br /> <br />   其它一些有用的Ҏ(gu)   ? 在字W串q接操作中尽量不使用“Q?#8221;操作W:(x)在java~程中,我们常常使用“Q?#8221;操作W来几个字W串q接hQ但你或总来没有想到过它居然会(x)对系l性能造成影响吧?׃字符串是帔RQ因此JVM?x)生一些(f)时的对像。你使用?#8220;Q?#8221;多Q生成的临时对像p多,q样也会(x)l系l性能带来一些媄响。解决的Ҏ(gu)是用StringBuffer对像来代?#8220;Q?#8221;操作W?br /> <br />   ? 避免使用System.out.println()Ҏ(gu)Q由于System.out.println()是一U同步调用,卛_调用它时Q磁盘I(y)/O操作必须{待它的完成Q因此我们要量避免对它的调用。但我们在调试程序时它又是一个必不可的方便工具Qؓ(f)了解册个矛盾,我徏议你最好用Log4j工具(http://Jakarta.apache.org ; )Q它既可以方便调试,而不?x)生System.out.println()q样的方法?br /> <br />   ? ServletOutputStream ?PrintWriter的权?使用PrintWriter可能?x)带来一些小的开销Q因为它?yu)所有的原始输出都{换ؓ(f)字符来输出Q因此如果用它来作为页面输出的话,pȝ要负担一个{换过E。而用ServletOutputStream作ؓ(f)面输出的话׃存在一个问题,但它是以二进制进行输出的。因此在实际应用中要权衡两者的利弊?br /> <br />   ȝ?br /> <br /> 本文的目的是通过对servlet和JSP的一些调优技术来极大地提高你的应用程序的性能Qƈ因此提升整个J2EE应用的性能。通过q些调优技术,你可以发现其实ƈ不是某种技术^収ͼ比如J2EE?NET之争Q决定了你的应用E序的性能Q重要是你要对这U^台有一个较为深入的了解Q这样你才能从根本上对自q应用E序做一个优化! <br /> <br /> - mokey1的专?- CSDN博客 <img src ="http://www.aygfsteel.com/caizh2009/aggbug/289187.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/caizh2009/" target="_blank">菜毛毛</a> 2009-07-30 23:05 <a href="http://www.aygfsteel.com/caizh2009/articles/289187.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java class文g解析Q?Q?/title><link>http://www.aygfsteel.com/caizh2009/articles/279778.html</link><dc:creator>菜毛毛</dc:creator><author>菜毛毛</author><pubDate>Wed, 03 Jun 2009 04:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/caizh2009/articles/279778.html</guid><wfw:comment>http://www.aygfsteel.com/caizh2009/comments/279778.html</wfw:comment><comments>http://www.aygfsteel.com/caizh2009/articles/279778.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/caizh2009/comments/commentRss/279778.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/caizh2009/services/trackbacks/279778.html</trackback:ping><description><![CDATA[<strong>关键? class</strong> <div> <p style="margin-left: 42pt; text-indent: -21pt; line-height: 115%"><span style="color: #ff0000">Fields_count ?fields </span></p> <p style="margin-left: 42pt; text-indent: 0cm; line-height: 115%"> 紧接着 interfaces 后面的是对该cL者接口中所生命的字D늚描述。首先是计数 fields_count Q它是类变量和实例变量的字段的数量d。在q个计数后面有相应数目个 field_info 表。此表包含了字段的名字、描q符和修饰符。如果该字段被声明ؓ(f) final Q?field_info q会(x)展示其常量倹{?</p> <p style="margin-left: 42pt; text-indent: 0cm; line-height: 115%; text-align: center" align="center">?2 Q?field_info 表的格式 </p> <p style="margin-left: 42pt; text-indent: 0cm; line-height: 115%"><em>自上而下分别为:(x)讉K标志Q简单名Uͼ非全限定名)Q字D|q符Q属性。字D|q符卌字段的型别?</em></p> <p style="margin-left: 42pt; text-indent: 0cm; line-height: 115%"> Ҏ(gu)表与Ҏ(gu)表计数。方法表的格式与 field_info cMQ区别在于其描述的是Ҏ(gu)。故不再赘述?</p> <p style="margin-left: 42pt; text-indent: 0cm; line-height: 115%"> Java 虚拟机实现定义了两种属?----SourceCode ?InnerClasses Q它们出现在 ClassFile 表中的属性列表中?</p> <p style="margin-left: 42pt; text-indent: 0cm; line-height: 115%"><span style="color: #0000ff">  </span></p> <p style="line-height: 115%; text-align: left" align="left"><span style="color: #0000ff"><strong>Class </strong></span><strong><span style="color: #0000ff">的生命周?</span></strong></p> <p style="line-height: 115%; text-align: left" align="left"><strong>        </strong></p> <p style="margin-left: 5.15pt; text-indent: 36pt; line-height: 115%; text-align: left" align="left">Java 虚拟机通过装蝲、连接和初始化一?java cdQ该类型可以被正在q行?java E序所使用。其中,装蝲是把二q制形式?java cdd java 虚拟ZQ而连接就是把q种已经d虚拟机的二进制Ş式的cd数据合ƈ到虚拟机的运行时状态中。连接阶D分Z个子步骤 ----- 验证、准备、解析?#8220;验证”保?java cd数据格式正确q且适于 java 虚拟机的使用。?#8220;准备”步骤则负责ؓ(f)该类型分配它所需的内存,比如为它的类变量分配内存?#8220;解析”步骤则负责把帔R池中的符号引用{换ؓ(f)直接引用?</p> <p style="margin-left: 5.15pt; text-indent: 36pt; line-height: 115%; text-align: left" align="left">    <strong>       </strong></p> <p style="margin-left: 42pt; text-indent: 0cm; line-height: 115%; text-align: center" align="center">?3 Q类型生命周期的开?</p> <p style="margin-left: 42pt; text-indent: 0cm; line-height: 115%"><strong>装蝲 </strong></p> <p style="margin-left: 42pt; text-indent: 0cm; line-height: 115%">要装载一个类型, java 虚拟机必:(x) </p> <p style="margin-left: 63pt; text-indent: -21pt; line-height: 115%">通过该类型的完全限定名,产生一个代表该cd的二q制数据?</p> <p style="margin-left: 63pt; text-indent: -21pt; line-height: 115%">解析q个二进制数据流为方法去内的内部数据l构 </p> <p style="margin-left: 63pt; text-indent: -21pt; line-height: 115%">创徏一个俄表示该类型的 <span style="font-size: 9pt; line-height: 115%">java.lang.Class</span> cȝ实例 </p> <p style="margin-left: 21.3pt; text-indent: 0cm; line-height: 115%">装蝲步骤的最l品就是一?java.lang.Class 的实例对象,而这个对象就是该cd在虚拟机中的“注册”Q要讉K该类型的信息Q程序就要调用该cd对应?class 实例对象的方法?</p> <p style="margin-left: 21.3pt; text-indent: 0cm; line-height: 115%">   所有类都由c装载器载入Q蝲入内存中的类对应一?java.lang.Class 实例。存在一?Bootstrap Loader Q以下简UCؓ(f) BL Q,?C++ 写成Q负责在虚拟机启动后一ơ性加?Java 基础cd中的所有类。其他的c装载器?java 写成Q都?java.lang.ClassLoader 的子cR除 BL 之外的所有类装蝲器都有一?parent 属性,指向其父装蝲器?</p> <p style="margin-left: 21.3pt; text-indent: 0cm; line-height: 115%">   用户自定义的c装载器?java.lang.ClassLoader 的子cȝ实例Q它以定制的方式装入cR?</p> <p style="margin-left: 21pt; text-indent: 18pt; line-height: 115%">装蝲一个类Ӟ首先要装载该cȝ基类及其接口 </p> <p style="margin-left: 21pt; text-indent: 18pt; line-height: 115%"><span style="font-size: 9pt; line-height: 115%">Java </span>基础cȝ <span style="font-size: 9pt; line-height: 115%">BL </span>在虚拟机启动时一ơ性蝲?</p> <p style="margin-left: 21pt; text-indent: 18pt; line-height: 115%">包含 <span style="font-size: 9pt; line-height: 115%">main() </span>的入口类?<span style="font-size: 9pt; line-height: 115%">AL </span>?<span style="font-size: 9pt; line-height: 115%">loadClass() </span>Ҏ(gu)载入?</p> <p style="margin-left: 21pt; text-indent: 18pt; line-height: 115%"><span style="font-size: 9pt; line-height: 115%">  </span>?<span style="font-size: 9pt; line-height: 115%">new </span>关键字创Z个类的实例。该cȝq行时刻包含?<span style="font-size: 9pt; line-height: 115%">new </span>语句的类实例的类装蝲器( <span style="font-size: 9pt; line-height: 115%">ClassLoader.getCallerClassLoader() </span>Q的 <span style="font-size: 9pt; line-height: 115%">loadClass() </span>Ҏ(gu)载入 </p> <p style="margin-left: 21pt; text-indent: 18pt; line-height: 115%"><strong>q接 </strong></p> <p style="margin-left: 57pt; text-indent: 0cm; line-height: 115%">验证    </p> <p style="margin-left: 21.3pt; text-indent: 10.5pt; line-height: 115%">  q接q程的第一步是验证 - 认cdW合 JAVA 语言的语义,q且它不?x)危及虚拟机的完整性。确保每?final cM含有子类Q?final Ҏ(gu)不能被覆盖,以及帔R池中所有的域引用和Ҏ(gu)引用有有效的名字和类型描q符受?     </p> <p style="margin-left: 42.3pt; text-indent: 5.25pt; line-height: 115%"> 准备 </p> <p style="margin-left: 42.3pt; text-indent: 0cm; line-height: 115%">       JAVA 虚拟Zؓ(f)cd量分配内存,讄默认初始|非初始化时的默认|?</p> <p style="margin-left: 42.3pt; text-indent: 5.25pt; line-height: 115%"> 解析 </p> <p style="margin-left: 42.3pt; text-indent: 0cm; line-height: 115%"><strong>初始?</strong></p> <p style="margin-left: 73.8pt; text-indent: -31.5pt; line-height: 115%">       在初始化阶段Q?Java 虚拟计者需要将cd量赋予正的初始倹{?          <clinit> Ҏ(gu)Q类变量初始化语句与静态初始化?</p> </div> <img src ="http://www.aygfsteel.com/caizh2009/aggbug/279778.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/caizh2009/" target="_blank">菜毛毛</a> 2009-06-03 12:21 <a href="http://www.aygfsteel.com/caizh2009/articles/279778.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java class文g的解析(1Q?/title><link>http://www.aygfsteel.com/caizh2009/articles/279777.html</link><dc:creator>菜毛毛</dc:creator><author>菜毛毛</author><pubDate>Wed, 03 Jun 2009 04:20:00 GMT</pubDate><guid>http://www.aygfsteel.com/caizh2009/articles/279777.html</guid><wfw:comment>http://www.aygfsteel.com/caizh2009/comments/279777.html</wfw:comment><comments>http://www.aygfsteel.com/caizh2009/articles/279777.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/caizh2009/comments/commentRss/279777.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/caizh2009/services/trackbacks/279777.html</trackback:ping><description><![CDATA[<p><span style="color: #0000ff">从今天开始分几节介绍Java中最重要的class文g?/span> </p> <p><span style="color: #0000ff">包括class文g的结构、class是如何进入到虚拟Z的(c装载)、class的消亡(垃圾攉Q?/span> </p> <p style="text-align: left" align="left"><strong>Class </strong><strong>的结?</strong></p> <p style="text-align: left" align="left"><strong>   </strong>Class 文g?java 代码~译而来Q每个类都会(x)生成一?.class 文g?Java class 文g中包含了 java 虚拟机所需知道的、关于类或接口的所有信息。这些信息用表格的Ş式来说明Q我们可以得?classfile 表:(x)如图 1 </p> <p><img alt="" src="http://iamjordan.javaeye.com/upload/attachment/63518/f099cec3-89ad-352a-a5b3-12be1f1ae907.jpg" /> </p> <p style="text-align: center" align="center">?1 classfile 表的格式 </p> <p style="text-indent: 21pt">其中cd或者ؓ(f)表名Q或者如?1 所C的“基本cd”。所有存储在cd u2 ?u4 ?u8 中的|?class 文g中以高位在前的Ş式出现?</p> <div> <table style="border-top-width: 1px; border-left-width: 1px; border-left-color: #000000; border-bottom-width: 1px; border-bottom-color: #000000; border-top-color: #000000; border-collapse: collapse; border-right-width: 1px; border-right-color: #000000" cellspacing="0" cellpadding="0" border="1" frame="all"> <tbody> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: black 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1pt solid; width: 97.55pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="130"> <p style="text-align: center" align="center">U1 </p> </td> <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 184.3pt; padding-top: 0cm" valign="top" width="246"> <p>1 个字节,无符h?</p> </td> </tr> <tr> <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 97.55pt; padding-top: 0cm" valign="top" width="130"> <p style="text-align: center" align="center">U2 </p> </td> <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 184.3pt; padding-top: 0cm" valign="top" width="246"> <p>1 个字节,无符h?</p> </td> </tr> <tr> <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 97.55pt; padding-top: 0cm" valign="top" width="130"> <p style="text-align: center" align="center">U3 </p> </td> <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 184.3pt; padding-top: 0cm" valign="top" width="246"> <p>1 个字节,无符h?</p> </td> </tr> <tr> <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 97.55pt; padding-top: 0cm" valign="top" width="130"> <p style="text-align: center" align="center">U4 </p> </td> <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 184.3pt; padding-top: 0cm" valign="top" width="246"> <p>1 个字节,无符h?</p> </td> </tr> </tbody> </table> </div> <p style="text-indent: 21pt; text-align: center" align="center">?1 class 文g“基本cd” </p> <p style="text-indent: 21pt">Classfile 表中各项介如下:(x) </p> <p style="margin-left: 42pt; text-indent: -21pt"><span style="color: #ff0000">1)         Magic( 数 ) </span></p> <p style="margin-left: 42pt; text-indent: 10.5pt">每个 java class 文g的前 4 个字节被UCؓ(f) magic number Q?0xCAFEBABE 。魔数的作用在于Q可以轻杄分L?java class 文g和非 java class 文g?</p> <p style="margin-left: 42pt; text-indent: 0cm"> Class 文g的下?4 个字节包含了L版本受随着 java 技术的发展Q?java class 文g格式可能?x)加入新?gu)?Class 文g格式一旦发生变化,版本号也?x)随之变化。如?class 文g的版本号出?java 虚拟机所能处理的有效范围Q?java 虚拟机将不会(x)处理该文件?</p> <p style="margin-left: 42pt; text-indent: 0cm"> 之后的是帔R池。其中包含了与文件中cd接口相关的常量。常量池中存储了诸如文字字符丌Ӏ?final 变量倹{类名和Ҏ(gu)名的帔R?Java 虚拟机把帔R池组lؓ(f)入口列表的Ş式。在实际列表 constant_pool 之前Q是入口在列表中的计?constant_pool_count ?</p> <p style="margin-left: 42pt; text-indent: 0cm"> 帔R池中的许多入口都指向其他的常量池入口Q而且 class 文g中紧随着帔R池的许多条目也会(x)指向帔R池中的入口。在整个 class 文g中,指示帔R池入口在帔R池列表中位置的整数烦引都指向q些帔R池入口。列表中的一烦引gؓ(f) 1 Q第二项索引gؓ(f) 2 Q以此类推?</p> <p style="margin-left: 42pt; text-indent: 0cm; text-align: left" align="left">例:(x) act.class 的常量池?</p> <p style="margin-left: 42pt; text-indent: 0cm; text-align: left" align="left">“ { }V ”<em>表示一个返回类型ؓ(f)</em> <em>void </em><em>的方法?</em></p> <p style="margin-left: 42pt; text-indent: 0cm"> 讉K标志。这个字D表C的意思指明了文g中定义的是类q是接口Q还定义了在cL接口的声明中Q用了哪种修饰W:(x)是抽象的q是公共的,或者是 final 。类的类型可以ؓ(f) final Q?final cM可能是抽象的Q同时接口也不能?final cd?</p> <p style="margin-left: 42pt; text-indent: 0cm"> q个cȝ名字和超cd字。特D的Q对?object c, super_class ?0 Q除此以?super_class 对于所有的cd有效。对于接口,在常量池入口 super_class 位置的项?java.lang.object </p> <p style="margin-left: 42pt; text-indent: 0cm">?</p> <p> 紧接着 super_class 的是 Interfaces_count 。此的含义为:(x)在文件中pcȝ接实现或者由该接口所扩展的父接口的数量。在q个技术的后面Q是名ؓ(f) interfaces 的数l,它包含了Ҏ(gu)个由pcȝ接实现或者由该接口所扩展的父接口的常量池索引?</p> <img src ="http://www.aygfsteel.com/caizh2009/aggbug/279777.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/caizh2009/" target="_blank">菜毛毛</a> 2009-06-03 12:20 <a href="http://www.aygfsteel.com/caizh2009/articles/279777.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̫</a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">DZ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ȫ</a>| <a href="http://" target="_blank">Ĭ</a>| <a href="http://" target="_blank">̴</a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">±</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¹</a>| <a href="http://" target="_blank">·</a>| <a href="http://" target="_blank">կ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">᯹</a>| <a href="http://" target="_blank">ͨ</a>| <a href="http://" target="_blank">ֺ</a>| <a href="http://" target="_blank">Ѿ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>