﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-小心别让日子把你给混了-随笔分类-JAVA笔记</title><link>http://www.blogjava.net/cenly60/category/21836.html</link><description>光荣在于平淡...艰巨在于漫长...</description><language>zh-cn</language><lastBuildDate>Sat, 05 Sep 2009 10:25:51 GMT</lastBuildDate><pubDate>Sat, 05 Sep 2009 10:25:51 GMT</pubDate><ttl>60</ttl><item><title>[原创]用HttpUrlConnection抓取网页内容</title><link>http://www.blogjava.net/cenly60/archive/2009/09/05/293979.html</link><dc:creator>60</dc:creator><author>60</author><pubDate>Sat, 05 Sep 2009 02:58:00 GMT</pubDate><guid>http://www.blogjava.net/cenly60/archive/2009/09/05/293979.html</guid><wfw:comment>http://www.blogjava.net/cenly60/comments/293979.html</wfw:comment><comments>http://www.blogjava.net/cenly60/archive/2009/09/05/293979.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cenly60/comments/commentRss/293979.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cenly60/services/trackbacks/293979.html</trackback:ping><description><![CDATA[<p>由于项目需求，需要采集一些网站的内容。在JAVA领域中，已经存在很多良好的框架用于该应用，如httpclient，webharvest还有更多强大的框架。但由于本身项目比较单纯，且为了良好的自我控制，就决定直接用JDK中的HttpUrlConnection类来抓取网页内容。并不是说那些框架不好，而只是不适用本项目。</p> <p>说明：本博的一切内容均可转载，但必须注意出处。<a href="http://www.lelelog.com" target="_blank">http://www.lelelog.com</a>(乐乐日志)</p> <p>一、HttpUrlConnection连接之模拟浏览器</p> <p>在诸多的网站中，特别是大型的网站，设置了必须是浏览器的请求才会回应。之所以这样设置，就是为了防止我们这种项目给他产生无意义的请求（往往这种请求都是大批量，对其服务器产生负荷）。那为了解决这个问题，我们需要在http请求中，添加属性。</p> <p>HttpURLConnection urlConn;</p> <p>urlConn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");</p> <p>这样就设置好了，你可以随意设置你的操作系统值，浏览器值，版本，只要正确就OK了。这样就可以正常有效地访问其网站了。他可不知道你是不是浏览器。<font color="#ff00ff">你即使是条狗，他也不知道。</font></p> <p><font color="#ff00ff"></font>&nbsp;</p> <p>二、完整的设置HttpUrlConnection的属性值</p> <p>HttpURLConnection urlConn;  <p>urlConn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; urlConn.setRequestProperty("Accept",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; urlConn.setRequestProperty("Accept-Language", "zh-cn");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; urlConn.setRequestProperty("UA-CPU", "x86");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; urlConn.setRequestProperty("Accept-Encoding", "gzip");//为什么没有deflate呢<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; urlConn.setRequestProperty("Content-type", "text/html");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; urlConn.setRequestProperty("Connection", "close"); //keep-Alive，有什么用呢，你不是在访问网站，你是在采集。嘿嘿。减轻别人的压力，也是减轻自己。  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; urlConn.setUseCaches(false);//不要用cache，用了也没有什么用，因为我们不会经常对一个链接频繁访问。（针对程序）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; urlConn.setConnectTimeout(6 * 1000);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; urlConn.setReadTimeout(6*1000);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; urlConn.setDoOutput(true);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; urlConn.setDoInput(true);  <p>有什么疑问的话，可以查看JDK的API文档，这个可以实时看。至于为什么要设置 gzip，而又不设置deflate，原因如下，有些网站他不管你能接受什么压缩格式，统统也会压缩网页内容传给你。当然IE，FF能处理好这些内容。所以我们通过浏览器查看的时候完全正常。一般gzip的压缩可以将一个33K的文件压缩成7K，这样会节约不少带宽，但服务器的负荷并没有减轻，因为他要压缩文件呀。至于为什么不用deflate，是由于绝大多数网站的压缩方式是用gzip，而在有些网站中，明明是用的gzip却返回deflate的压缩标识。这有什么意义呢，所以干脆就告诉服务器，我不接受deflate，因为他太丑了，又长，哪像gzip这么潮呀。呵呵，对于浏览量大的静态网页服务器，这样做很是必要。100M的独享服务器，他也只有100M呀。</p> <p>三、开始采集某个网页的内容</p> <p>该方法就是传入一个HttpUrlConnection的链接，和该文件的字符集编码，就可以返回其网页内容了。</p> <p>public static String getContentFromIn(HttpURLConnection urlConn, String charset) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader br = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuilder content = new StringBuilder(200);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStream in = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(null == urlConn){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (StringTools.isNotEmpty(urlConn.getContentEncoding())) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String encode = urlConn.getContentEncoding().toLowerCase();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (StringTools.isNotEmpty(encode) &amp;&amp; encode.indexOf("gzip") &gt;= 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in = new GZIPInputStream(urlConn.getInputStream());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (null == in) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in = urlConn.getInputStream();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (null != in) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; br = new BufferedReader(new InputStreamReader(in, charset));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String line = "";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((line = br.readLine()) != null) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; content.append(line);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (UnsupportedEncodingException e) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } finally {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (null != in) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (null != br) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; br.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return content.toString();<br>&nbsp;&nbsp;&nbsp; }  <p>至此一个简单的采集工具类诞生了，他的优美在于，代码少，不用引入任何包。纯JDK，一样能干许多事。有时不希望把本来简单的事情搞得复杂化。虽然不要创造重复的轮子，但我们不能纯拿来主义，就像这样一个简单的功能，不需要搞得太复杂。只要不DRY就可以了，这样自己也能一点点地进步。  <p>以上有什么错误，还请包涵。。。。。。该文章来自:<a href="http://www.lelelog.com" target="_blank">乐乐日志</a>(记下每个快乐的日子)。    <img src ="http://www.blogjava.net/cenly60/aggbug/293979.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cenly60/" target="_blank">60</a> 2009-09-05 10:58 <a href="http://www.blogjava.net/cenly60/archive/2009/09/05/293979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java性能优化</title><link>http://www.blogjava.net/cenly60/archive/2009/06/17/282859.html</link><dc:creator>60</dc:creator><author>60</author><pubDate>Wed, 17 Jun 2009 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/cenly60/archive/2009/06/17/282859.html</guid><wfw:comment>http://www.blogjava.net/cenly60/comments/282859.html</wfw:comment><comments>http://www.blogjava.net/cenly60/archive/2009/06/17/282859.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cenly60/comments/commentRss/282859.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cenly60/services/trackbacks/282859.html</trackback:ping><description><![CDATA[<br />
原文地址：&nbsp;<a href="http://blogs.oracle.com/olaf/2009/04/java_performance_the_return_of.html">http://blogs.oracle.com/olaf/2009/04/java_performance_the_return_of.html</a>
<img src ="http://www.blogjava.net/cenly60/aggbug/282859.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cenly60/" target="_blank">60</a> 2009-06-17 15:23 <a href="http://www.blogjava.net/cenly60/archive/2009/06/17/282859.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Map 集合类简介</title><link>http://www.blogjava.net/cenly60/archive/2009/06/17/282854.html</link><dc:creator>60</dc:creator><author>60</author><pubDate>Wed, 17 Jun 2009 06:53:00 GMT</pubDate><guid>http://www.blogjava.net/cenly60/archive/2009/06/17/282854.html</guid><wfw:comment>http://www.blogjava.net/cenly60/comments/282854.html</wfw:comment><comments>http://www.blogjava.net/cenly60/archive/2009/06/17/282854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cenly60/comments/commentRss/282854.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cenly60/services/trackbacks/282854.html</trackback:ping><description><![CDATA[<p><span class="bodycopy">java.util 中的集合类包含 Java 中某些最常用的类。 最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector，它们是可变大小的列表，比较适合构建、存储和操作任何类型对象元素列表。 List 适用于按数值索引访问元素的情形。</span> </p>
<p><span class="bodycopy">Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对（称作&#8220;键&#8221;和&#8220;值&#8221;），其中每个键映射到一个值。 从概念上而言，您可以将 List 看作是具有数值键的 Map。 而实际上，除了 List 和 Map 都在定义 java.util 中外，两者并没有直接的联系。本文将着重介绍核心 Java 发行套件中附带的 Map，同时还将介绍如何采用或实现更适用于您应用程序特定数据的专用 Map。</span> </p>
<br />
原文地址：<a href="http://www.oracle.com/technology/global/cn/pub/articles/maps1.html">http://www.oracle.com/technology/global/cn/pub/articles/maps1.html</a>
<img src ="http://www.blogjava.net/cenly60/aggbug/282854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cenly60/" target="_blank">60</a> 2009-06-17 14:53 <a href="http://www.blogjava.net/cenly60/archive/2009/06/17/282854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java的内存泄漏</title><link>http://www.blogjava.net/cenly60/archive/2009/06/17/282802.html</link><dc:creator>60</dc:creator><author>60</author><pubDate>Wed, 17 Jun 2009 03:30:00 GMT</pubDate><guid>http://www.blogjava.net/cenly60/archive/2009/06/17/282802.html</guid><wfw:comment>http://www.blogjava.net/cenly60/comments/282802.html</wfw:comment><comments>http://www.blogjava.net/cenly60/archive/2009/06/17/282802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cenly60/comments/commentRss/282802.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cenly60/services/trackbacks/282802.html</trackback:ping><description><![CDATA[Java的一个重要优点就是通过垃圾收集器(Garbage Collection，GC)自动管理内存的回收，程序员不需要通过调用函数来释放内存。因此，很多程序员认为Java不存在内存泄漏问题，或者认为即使有内存泄漏也不是程序的责任，而是GC或JVM的问题。其实，这种想法是不正确的，因为Java也存在内存泄露，但它的表现与C++不同。<br />
<br />
见原文：<a href="http://www.ibm.com/developerworks/cn/java/l-JavaMemoryLeak/">http://www.ibm.com/developerworks/cn/java/l-JavaMemoryLeak/</a>
<img src ="http://www.blogjava.net/cenly60/aggbug/282802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cenly60/" target="_blank">60</a> 2009-06-17 11:30 <a href="http://www.blogjava.net/cenly60/archive/2009/06/17/282802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在 JSF 的 Managed Bean 中获得request session对象</title><link>http://www.blogjava.net/cenly60/archive/2007/12/25/170416.html</link><dc:creator>60</dc:creator><author>60</author><pubDate>Tue, 25 Dec 2007 14:56:00 GMT</pubDate><guid>http://www.blogjava.net/cenly60/archive/2007/12/25/170416.html</guid><wfw:comment>http://www.blogjava.net/cenly60/comments/170416.html</wfw:comment><comments>http://www.blogjava.net/cenly60/archive/2007/12/25/170416.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cenly60/comments/commentRss/170416.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cenly60/services/trackbacks/170416.html</trackback:ping><description><![CDATA[request:<br />
------------------------------------------------------------------------<br />
FacesContext context = FacesContext.getCurrentInstance();<br />
ExternalContext ec = context.getExternalContext();<br />
HttpServletRequest request = (HttpServletRequest) ec.getRequest();<br />
<br />
<br />
session:<br />
------------------------------------------------------------------------<br />
FacesContext context = FacesContext.getCurrentInstance();<br />
ExternalContext ec = context.getExternalContext();<br />
HttpSession session = (HttpSession) ec.getSession(true);<br />
<br />
<br />
------------------------------------------------------------------------<br />
获得session后，便可以利用session来获得一些其它有用的东东了。比如：<br />
session.getServletContext().getRealPath("/"); // 磁盘路径
<img src ="http://www.blogjava.net/cenly60/aggbug/170416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cenly60/" target="_blank">60</a> 2007-12-25 22:56 <a href="http://www.blogjava.net/cenly60/archive/2007/12/25/170416.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Something About Final</title><link>http://www.blogjava.net/cenly60/archive/2007/06/26/126247.html</link><dc:creator>60</dc:creator><author>60</author><pubDate>Tue, 26 Jun 2007 01:15:00 GMT</pubDate><guid>http://www.blogjava.net/cenly60/archive/2007/06/26/126247.html</guid><wfw:comment>http://www.blogjava.net/cenly60/comments/126247.html</wfw:comment><comments>http://www.blogjava.net/cenly60/archive/2007/06/26/126247.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cenly60/comments/commentRss/126247.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cenly60/services/trackbacks/126247.html</trackback:ping><description><![CDATA[<p><span style="COLOR: red"><strong style="FONT-SIZE: 18pt">Final <br><br></strong></span>when using <span style="COLOR: red">final </span>object references rather than primitives the meaning gets a bit confusing.With a primitive, final makes the value a constant, but with an object refercence,final makes the reference a constant.</p>
<p><span style="COLOR: red"><strong>1. blank finals<br></strong></span>java allows the creation of <span style="COLOR: red">blank finals</span>, which are fields that are declared as final but are <span style="COLOR: red; BACKGROUND-COLOR: yellow">not given an initialization</span> value. in all cases, the blank final must be initialized before it is used, and the compiler ensures this.However, blank finals provied much more flexibility in the use of the final keyword since.the blank final should be initialized in the<span style="BACKGROUND-COLOR: yellow"> constructor</span>. <br><br><strong><span style="COLOR: red">2. Final methods</span><br></strong>&nbsp;&nbsp; Tow reasons for final methods. The first is to put a "lock" on the method to prevent any inheriting class from changing its meaning. This is done for design reasons when you want to make sure that a method's behavior is retained during inheritance and <span style="BACKGROUND-COLOR: yellow">cannot be overidden</span>.<br>&nbsp;&nbsp; The second reason for final methods is efficiency. If u make a method final,you are allowing the compiler to turn any calls to that method into <span style="BACKGROUND-COLOR: yellow">inline calls</span>.&nbsp;<br>&nbsp;&nbsp; However,<span style="BACKGROUND-COLOR: yellow"> it's better to not trust that</span> the compiler is able to do this and make a method final only if it's quite small&nbsp;or if you&nbsp;want to explicitly prevent overriding.<br><br><span style="COLOR: red"><strong>3.Final class</strong></span><br>&nbsp; Defining the class as final simply<span style="BACKGROUND-COLOR: yellow"> prevents inheritance</span> nothing more.<br>&nbsp;&nbsp; </p>
<img src ="http://www.blogjava.net/cenly60/aggbug/126247.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cenly60/" target="_blank">60</a> 2007-06-26 09:15 <a href="http://www.blogjava.net/cenly60/archive/2007/06/26/126247.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]浅谈JNI技术在嵌入式软件开发中的应用 </title><link>http://www.blogjava.net/cenly60/archive/2007/04/21/112399.html</link><dc:creator>60</dc:creator><author>60</author><pubDate>Sat, 21 Apr 2007 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/cenly60/archive/2007/04/21/112399.html</guid><wfw:comment>http://www.blogjava.net/cenly60/comments/112399.html</wfw:comment><comments>http://www.blogjava.net/cenly60/archive/2007/04/21/112399.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cenly60/comments/commentRss/112399.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cenly60/services/trackbacks/112399.html</trackback:ping><description><![CDATA[收藏一下<img src="http://blog.csdn.net/cenly60/aggbug/875591.aspx" height="1" width="1"><br>文章来源:<a href="http://blog.csdn.net/CenLY60/archive/2006/07/04/875591.aspx">http://blog.csdn.net/CenLY60/archive/2006/07/04/875591.aspx</a>  <img src ="http://www.blogjava.net/cenly60/aggbug/112399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cenly60/" target="_blank">60</a> 2007-04-21 10:38 <a href="http://www.blogjava.net/cenly60/archive/2007/04/21/112399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>