﻿<?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-天空-随笔分类-JSP</title><link>http://www.blogjava.net/haogj/category/8077.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 06:35:25 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 06:35:25 GMT</pubDate><ttl>60</ttl><item><title>利用JSP 2.0开发Web应用程序</title><link>http://www.blogjava.net/haogj/archive/2006/07/06/57046.html</link><dc:creator>haogj</dc:creator><author>haogj</author><pubDate>Thu, 06 Jul 2006 14:44:00 GMT</pubDate><guid>http://www.blogjava.net/haogj/archive/2006/07/06/57046.html</guid><wfw:comment>http://www.blogjava.net/haogj/comments/57046.html</wfw:comment><comments>http://www.blogjava.net/haogj/archive/2006/07/06/57046.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/haogj/comments/commentRss/57046.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haogj/services/trackbacks/57046.html</trackback:ping><description><![CDATA[
		<a href="http://www.phome.net/document/java/200504/java111245789013746.html">http://www.phome.net/document/java/200504/java111245789013746.html</a>
<img src ="http://www.blogjava.net/haogj/aggbug/57046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haogj/" target="_blank">haogj</a> 2006-07-06 22:44 <a href="http://www.blogjava.net/haogj/archive/2006/07/06/57046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>彻底解决 Tomcat 5 下文字乱码问题</title><link>http://www.blogjava.net/haogj/archive/2006/06/25/55017.html</link><dc:creator>haogj</dc:creator><author>haogj</author><pubDate>Sun, 25 Jun 2006 14:04:00 GMT</pubDate><guid>http://www.blogjava.net/haogj/archive/2006/06/25/55017.html</guid><wfw:comment>http://www.blogjava.net/haogj/comments/55017.html</wfw:comment><comments>http://www.blogjava.net/haogj/archive/2006/06/25/55017.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/haogj/comments/commentRss/55017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haogj/services/trackbacks/55017.html</trackback:ping><description><![CDATA[<P>使用 tomcat 时，相信大家都回遇到中文乱码的问题，具体表现为通过表单取得的中文数据为乱码。<BR><BR><STRONG>一、初级解决方法</STRONG><BR><BR>通过一番检索后，许多人采用了如下办法，首先对取得字符串按照 iso8859-1 进行解码转换，然后再按照 gb2312 进行编码，最后得到正确的内容。示例代码如下：<BR><BR>String&nbsp; para = new String( request.getParameter("para").getBytes("iso8859-1"), "gb2312");<BR><BR>具体的原因是因为美国人在写 tomcat 时默认使用 iso8859-1 进行编码造成的。<BR><BR>&nbsp;然而，在我们的 servlet 和 jsp 页面中有大量的参数需要进行传递，这样转换的话会带来大量的转换代码，非常不便。<BR><BR><STRONG>二、入门级解决方法<BR></STRONG><BR>后来，大家开始写一个过滤器，在取得客户端传过来的参数之前，通过过滤器首先将取得的参数编码设定为 gb2312 ，然后就可以直接使用 getParameter 取得正确的参数了。这个过滤器在 tomcat 的示例代码 <BR>jsp-examples 中有详细的使用示例,&nbsp;&nbsp;&nbsp;其中过滤器在 web.xml 中的设定如下，示例中使用的是日文的编码，我们只要修改为 gb2312 即可<BR><BR>&nbsp;&nbsp;&nbsp; &lt;filter&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;filters.SetCharacterEncodingFilter&lt;/filter-class&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;encoding&lt;/param-name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;<FONT style="BACKGROUND-COLOR: #ff0000">EUC_JP</FONT>&lt;/param-value&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/filter&gt;<BR><BR>过滤器的代码如下：<BR>public class SetCharacterEncodingFilter implements Filter {</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;// 编码的字符串<BR>&nbsp;&nbsp;&nbsp; protected String encoding = null;</P>
<P>&nbsp;&nbsp; // 过滤器的配置<BR>&nbsp;&nbsp;&nbsp; protected FilterConfig filterConfig = null;</P>
<P>&nbsp;&nbsp; // 是否忽略客户端的编码<BR>&nbsp;&nbsp;&nbsp; protected boolean ignore = true;</P>
<P>&nbsp;&nbsp; // 销毁过滤器<BR>&nbsp;&nbsp;&nbsp; public void destroy() {</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.encoding = null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.filterConfig = null;</P>
<P>&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp; // 过滤方法<BR>&nbsp;&nbsp;&nbsp; public void doFilter(ServletRequest request, ServletResponse response,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FilterChain chain)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws IOException, ServletException {</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;如果使用过滤器，忽略客户端的编码，那么使用通过过滤器设定编码<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ignore || (request.getCharacterEncoding() == null)) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String encoding = selectEncoding(request);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (encoding != null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.setCharacterEncoding(encoding);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//&nbsp;传送给下一个过滤器<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chain.doFilter(request, response);</P>
<P>&nbsp;&nbsp;&nbsp; }</P>
<P><BR>&nbsp;&nbsp;&nbsp; // 初始化过滤器<BR>&nbsp;&nbsp;&nbsp; public void init(FilterConfig filterConfig) throws ServletException {</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;this.filterConfig = filterConfig;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.encoding = filterConfig.getInitParameter("encoding");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String value = filterConfig.getInitParameter("ignore");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (value == null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ignore = true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (value.equalsIgnoreCase("true"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ignore = true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (value.equalsIgnoreCase("yes"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ignore = true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ignore = false;</P>
<P>&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;返回过滤器设定的编码<BR>&nbsp;&nbsp;&nbsp; protected String selectEncoding(ServletRequest request) {</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (this.encoding);</P>
<P>&nbsp;&nbsp;&nbsp; }<BR>}<BR><BR>然而在 tomcat5 中，即使使用过滤器，仍然可能取得乱码，原因何在呢？<BR><BR><STRONG>三、高级解决方法</STRONG><BR><BR>这是因为，<FONT face="Courier New">在 tomcat4 和 tomcat5 中对参数的处理是不一样的，在 tomcat4 中 get 与 post 的编码是一样的，所以只要在过滤器中通过 request.setCharacterEncoding 设定一次就可以解决 get 与 post 的问题。然而，在 tomcat5 中，get 与 post 的处理是分开进行的</FONT><BR><BR>在 tomcat 5 中，为了解决编码问题，tomcat 的作者作了很多努力，具体表现为在 tomcat 的配置文件 server.xml 中对 Connector 元素增加了如下的配置参数，专门用来对编码进行直接的配置<BR><BR><FONT face="Courier New"><EM><FONT style="BACKGROUND-COLOR: #ffa500">URIEncoding</FONT></EM>&nbsp;&nbsp; 用来设定通过 URI 传递的内容使用的编码，tomcat 将使用这里指定的编码对客户端传送的内容进行编码。<BR><BR>什么是 URI 呢？<BR>java doc 的说明中如下说明：URI 是统一资源<I>标识符</I>，而 URL 是统一资源<I>定位符</I>。因此，笼统地说，每个 URL 都是 URI，但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类，即统一资源<I>名称</I> (URN)，它命名资源但不指定如何定位资源。<BR><BR>也就是说，<FONT style="BACKGROUND-COLOR: #ffff00">我们通过 get 方法提交的参数实际上都是通过 uri 提交的，都由这个参数管理</FONT>，如果没有设定这个参数，则 tomcat 将使用默认的 iso8859-1 对客户端的内容进行编码。<BR><BR><FONT style="BACKGROUND-COLOR: #ffa500">useBodyEncodingForURI</FONT> 使用与 Body 一样的编码来处理 URI, 这个设定是为了与 tomcat4保持兼容，原来在 tomcat4 和 tomcat5 中队参数的处理是不一样的，在 tomcat4 中 get 与 post 的编码是一样的，所以只要在过滤器中通过 request.setCharacterEncoding 设定一次就可以解决 get 与 post 的问题。然而，在 tomcat5 中，get 与 post 的处理是分开进行的，对 get 的处理通过 前面的 URIEncoding 进行处理，对 post 的内容依然通过 request.setCharacterEncoding 处理，为了保持兼容，就有了这个设定。<BR><BR><FONT style="BACKGROUND-COLOR: #ffff00">将 useBodyEncodingForURI 设定为真后，就可以通过&nbsp;request.setCharacterEncoding 直接解决 get 和 post 中的乱码问题</FONT>。<BR><BR>这样，我们可以通过在 server.xml 中设定 URIEncoding 来解决 get 方法中的参数问题，使用过滤器来解决 post 方法中的问题。<BR><BR>或者也可以通过在 server.xml 中设定 useBodyEncodingForURI 为 true ，配合过滤器来解决编码的问题。<BR><BR>在这里，我强烈建议在网站的创作过程中，全程使用 utf-8 编码来彻底解决乱码问题。<BR><BR>具体操作如下：<BR><FONT color=#008000>1、页面内容使用 utf-8 格式保存，在页面中加入 &lt;mete http-equiv="contentType" content="text/html;charst=utf-8"&gt;<BR><BR>2、服务器端的 server.xml 中设定 useBodyEncodingForURI = true<BR><BR>3、使用过滤器，过滤器设定编码为 utf-8</FONT><BR><BR><BR></FONT><BR></P><img src ="http://www.blogjava.net/haogj/aggbug/55017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haogj/" target="_blank">haogj</a> 2006-06-25 22:04 <a href="http://www.blogjava.net/haogj/archive/2006/06/25/55017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>详细介绍在tomcat中配置数据源以及数据源的原理 </title><link>http://www.blogjava.net/haogj/archive/2006/04/24/42893.html</link><dc:creator>haogj</dc:creator><author>haogj</author><pubDate>Mon, 24 Apr 2006 13:21:00 GMT</pubDate><guid>http://www.blogjava.net/haogj/archive/2006/04/24/42893.html</guid><wfw:comment>http://www.blogjava.net/haogj/comments/42893.html</wfw:comment><comments>http://www.blogjava.net/haogj/archive/2006/04/24/42893.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/haogj/comments/commentRss/42893.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haogj/services/trackbacks/42893.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<div>作者:baggio785</div>
				<div>
				</div>
				<div>来源:<a href="http://blog.csdn.net/baggio785" target="_blank"><font color="#0000ff">http://blog.csdn.net/baggio785</font></a></div>
				<div>
				</div>
				<div>
						<font color="#000000">日期：2006-4-24</font>
				</div>
				<div>
				</div>
				<div>
						<font color="#000000">关键词：DataSource(数据源),Tomcat</font>
						<font color="#000000">,连接池</font>
						<br />
				</div>
				<div>
				</div>
				<div>
						<font color="#000000" size="6">
								<strong>
										<br />前言</strong>
								<br />
								<br />
						</font>
				</div>
				<div>
						<strong>
								<font size="6">
								</font>
						</strong>
				</div>
				<div>
						<font color="#000000">本文根据实例详细介绍了如何在tomcat中配置数据源。网上此类文章很多，但是基本都是雷同的，而且对一些特殊问题以及原理并未详细阐述，所以想根据自己的实际经验，并结合例子写一篇详细的文章。</font>
				</div>
				<div>
						<font color="#000000">本文是偶的一些拙见，有不正确的地方请大家多多评论指正</font>
						<font color="#000000">。</font>
				</div>
				<div>
				</div>
				<div>
						<font color="#000000" size="6">
								<strong>
										<br />开发环境</strong>
						</font>
				</div>
				<div>
						<strong>
								<font size="6">
								</font>
						</strong>
				</div>
				<div>
						<br />本文的环境：JDK1.4.2，TOMCAT5.0.28，Oracle9i</div>
				<div>
				</div>
				<div>
						<strong>
								<font size="6">
										<br />JDBC简介</font>
						</strong>
				</div>
				<div>
						<strong>
								<font size="6">
								</font>
						</strong>
				</div>
				<div>
						<br />提到数据源，那就不能不说JDBC。<span style="FONT-SIZE: 12pt">JDBC</span><span style="FONT-SIZE: 12pt">是</span><span style="FONT-SIZE: 12pt">Java Database Connectivity</span><span style="FONT-SIZE: 12pt">的缩写。在</span><span style="FONT-SIZE: 12pt">java.sql</span><span style="FONT-SIZE: 12pt">包中提供了</span><span style="FONT-SIZE: 12pt">JDBC API</span><span style="FONT-SIZE: 12pt">，定义了访问数据库的接口和类。但是</span><span style="FONT-SIZE: 12pt">JDBC API</span><span style="FONT-SIZE: 12pt">不能直接访问数据库，必须依赖于数据库厂商提供的</span><span style="FONT-SIZE: 12pt">JDBC</span><span style="FONT-SIZE: 12pt">驱动程序，即</span><span style="FONT-SIZE: 12pt">JDBC DRIVER</span><span style="FONT-SIZE: 12pt">。</span></div>
				<div>
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">Java.sql</span>
						<span style="FONT-SIZE: 12pt">中常用的接口和类如下：</span>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">       Driver</span>
						<span style="FONT-SIZE: 12pt">接口和</span>
						<span style="FONT-SIZE: 12pt">DriverManager</span>
						<span style="FONT-SIZE: 12pt">类</span>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">       Connection </span>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">       Statement </span>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">       PreparedSataement </span>
				</div>
				<p>
						<span style="FONT-SIZE: 12pt">       ResultSet</span>
				</p>
				<p> </p>
				<div>
						<span style="FONT-SIZE: 12pt">1     Driver</span>
						<span style="FONT-SIZE: 12pt">接口和</span>
						<span style="FONT-SIZE: 12pt">DriverManager</span>
						<span style="FONT-SIZE: 12pt">类</span>
						<span style="FONT-SIZE: 12pt">
								<br />       DriverManager</span>
						<span style="FONT-SIZE: 12pt">类用来建立和数据库的连接以及管理</span>
						<span style="FONT-SIZE: 12pt">JDBC</span>
						<span style="FONT-SIZE: 12pt">驱动程序，常用方法如下：</span>
				</div>
				<table width="90%" border="1">
						<tbody>
								<tr>
										<td align="middle" width="50%" bgcolor="#c0c0c0">
												<span style="FONT-SIZE: 12pt">
														<strong>方法</strong>
												</span>
										</td>
										<td align="middle" width="50%" bgcolor="#c0c0c0">
												<span style="FONT-SIZE: 12pt">
														<strong>描述</strong>
												</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">registerDriver(Driver driver)</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">在</span>
												<span style="FONT-SIZE: 12pt">DriverManager</span>
												<span style="FONT-SIZE: 12pt">中注册</span>
												<span style="FONT-SIZE: 12pt">JDBC</span>
												<span style="FONT-SIZE: 12pt">驱动程序</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">getConnection(String url,String user,String pwd)</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">建立和数据库的连接，返回</span>
												<span style="FONT-SIZE: 12pt">Connection</span>
												<span style="FONT-SIZE: 12pt">对象</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">setLoginTimeOut(int seconds)</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">设定等待数据库连接的最长时间</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">setLogWriter(PrintWriter out)</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">设定输入数据库日至的</span>
												<span style="FONT-SIZE: 12pt">PrintWriter</span>
												<span style="FONT-SIZE: 12pt">对象</span>
										</td>
								</tr>
						</tbody>
				</table>
				<div>
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">2     Connection<br />       Connection</span>
						<span style="FONT-SIZE: 12pt">代表和数据库的连接，其常用方法如下：</span>
				</div>
				<table width="90%" border="1">
						<tbody>
								<tr>
										<td align="middle" width="50%" bgcolor="#c0c0c0">
												<span style="FONT-SIZE: 12pt">
														<strong>方法</strong>
												</span>
										</td>
										<td align="middle" width="50%" bgcolor="#c0c0c0">
												<span style="FONT-SIZE: 12pt">
														<strong>描述</strong>
												</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">getMetaData()</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">返回数据库的</span>
												<span style="FONT-SIZE: 12pt">MetaData</span>
												<span style="FONT-SIZE: 12pt">数据。</span>
												<span style="FONT-SIZE: 12pt">MetaData</span>
												<span style="FONT-SIZE: 12pt">数据包含了数据库的相关信息，例如当前数据库连接的用户名、使用的</span>
												<span style="FONT-SIZE: 12pt">JDBC</span>
												<span style="FONT-SIZE: 12pt">驱动程序、数据库允许的最大连接数、数据库的版本等等。</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">createStatement()</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">创建并返回</span>
												<span style="FONT-SIZE: 12pt">Statement</span>
												<span style="FONT-SIZE: 12pt">对象</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">PrepareStatement(String sql)</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">创建并返回</span>
												<span style="FONT-SIZE: 12pt">prepareStatement</span>
												<span style="FONT-SIZE: 12pt">对象</span>
										</td>
								</tr>
						</tbody>
				</table>
				<div>
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">3</span>
						<span style="FONT-SIZE: 12pt">     Statement<br />       Statement</span>
						<span style="FONT-SIZE: 12pt">用来执行静态</span>
						<span style="FONT-SIZE: 12pt">sql</span>
						<span style="FONT-SIZE: 12pt">语句。例如，对于</span>
						<span style="FONT-SIZE: 12pt">insert</span>
						<span style="FONT-SIZE: 12pt">、</span>
						<span style="FONT-SIZE: 12pt">update</span>
						<span style="FONT-SIZE: 12pt">、</span>
						<span style="FONT-SIZE: 12pt">delete</span>
						<span style="FONT-SIZE: 12pt">语句，调用</span>
						<span style="FONT-SIZE: 12pt">executeUpdate(String sql)</span>
						<span style="FONT-SIZE: 12pt">方法，而</span>
						<span style="FONT-SIZE: 12pt">select</span>
						<span style="FONT-SIZE: 12pt">语句可以调用</span>
						<span style="FONT-SIZE: 12pt">executeQuery(String sql)</span>
						<span style="FONT-SIZE: 12pt">方法，</span>
						<span style="FONT-SIZE: 12pt">executeQuery(String sql)</span>
						<span style="FONT-SIZE: 12pt">方法返回</span>
						<span style="FONT-SIZE: 12pt">ResultSet</span>
						<span style="FONT-SIZE: 12pt">对象。</span>
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">4</span>
						<span style="FONT-SIZE: 12pt">     </span>
						<span style="FONT-SIZE: 12pt">PrepareStatement<br />   PrepareStatement</span>
						<span style="FONT-SIZE: 12pt">用于执行动态的</span>
						<span style="FONT-SIZE: 12pt">sql</span>
						<span style="FONT-SIZE: 12pt">语句，即允许</span>
						<span style="FONT-SIZE: 12pt">sql</span>
						<span style="FONT-SIZE: 12pt">语句中包含参数。使用方法为：</span>
						<span style="FONT-SIZE: 12pt">
								<br />   String sql = “select col1 from tablename where col2=? And col3=?”;<br />   PrepareStatement perpStmt = conn.preparestatement(sql);<br /></span>   <span style="FONT-SIZE: 12pt">perpStmt.setstring(1,col2Value);<br />      perpStmt.setFloat(2,col3Value);<br />      ResultSet rs = perpStmt.executeQuery();</span></div>
				<div>
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">5</span>
						<span style="FONT-SIZE: 12pt">     </span>
						<span style="FONT-SIZE: 12pt">ResultSet<br />ResultSet</span>
						<span style="FONT-SIZE: 12pt">用来表示</span>
						<span style="FONT-SIZE: 12pt">select</span>
						<span style="FONT-SIZE: 12pt">语句查询得到的记录集，一个</span>
						<span style="FONT-SIZE: 12pt">StateMent</span>
						<span style="FONT-SIZE: 12pt">对象在同一时刻只能打开一个</span>
						<span style="FONT-SIZE: 12pt">ResultSet</span>
						<span style="FONT-SIZE: 12pt">对象。通过</span>
						<span style="FONT-SIZE: 12pt">ResultSet</span>
						<span style="FONT-SIZE: 12pt">的</span>
						<span style="FONT-SIZE: 12pt">getXXX()</span>
						<span style="FONT-SIZE: 12pt">方法来得到字段值。</span>
						<span style="FONT-SIZE: 12pt">ResultSet</span>
						<span style="FONT-SIZE: 12pt">提供了</span>
						<span style="FONT-SIZE: 12pt">getString()</span>
						<span style="FONT-SIZE: 12pt">、</span>
						<span style="FONT-SIZE: 12pt">getFloat()</span>
						<span style="FONT-SIZE: 12pt">、</span>
						<span style="FONT-SIZE: 12pt">getInt()</span>
						<span style="FONT-SIZE: 12pt">等方法。可以通过字段的序号或者字段的名字来制定获取某个字段的值。例如：在上例中</span>
						<span style="FONT-SIZE: 12pt">getString(0),getString(col1)</span>
						<span style="FONT-SIZE: 12pt">都可以获得字段</span>
						<span style="FONT-SIZE: 12pt">col1</span>
						<span style="FONT-SIZE: 12pt">的值。</span>
				</div>
				<div>　<br /></div>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">
								<strong>事务处理</strong>
						</span>
				</div>
				<span style="FONT-SIZE: 12pt">
						<br />在实际应用中，我们会遇到同时提交多个</span>
				<span style="FONT-SIZE: 12pt">sql</span>
				<span style="FONT-SIZE: 12pt">语句，这些</span>
				<span style="FONT-SIZE: 12pt">sql</span>
				<span style="FONT-SIZE: 12pt">语句要么全部成功，要么全部失败，如果其中一条提交失败，则必须撤销整个事务。为此，</span>
				<span style="FONT-SIZE: 12pt">Connection</span>
				<span style="FONT-SIZE: 12pt">类提供了</span>
				<span style="FONT-SIZE: 12pt">3</span>
				<span style="FONT-SIZE: 12pt">个控制事务的方法：</span>
				<div>　</div>
				<table width="90%" border="1">
						<tbody>
								<tr>
										<td align="middle" width="50%" bgcolor="#c0c0c0">
												<span style="FONT-SIZE: 12pt">
														<strong>方法</strong>
												</span>
										</td>
										<td align="middle" width="50%" bgcolor="#c0c0c0">
												<span style="FONT-SIZE: 12pt">
														<strong>描述</strong>
												</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">setAutoCommit(boolen autoCommit)</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">设置是否自动提交事务，默认为自动提交</span>
												<span style="FONT-SIZE: 12pt">。</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">commit()</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">提交事务</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">rollback()</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">撤销事务</span>
										</td>
								</tr>
						</tbody>
				</table>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">参考例子：</span>
				</div>
				<table width="90%" border="1">
						<tbody>
								<tr>
										<td width="100%" bgcolor="#c0c0c0">
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">try{ </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">conn.SetautoCommit(false); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">stmt = conn.createstatement();<br />stmt.executeUpdate(“delete form table1 where col1=1”);<br />stmt.eecuteUpdate(“delete from table2 where col2=1”); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">conn.comm.it(); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">}catch(Exception e){ </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">       e.printStackTrace; </span>
												</div>
												<div style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">try{ </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">              conn.rollback(); </span>
												</div>
												<div style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">} catch(Exception e1){ </span>
												</div>
												<div style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">       e1.printStackTrace; </span>
												</div>
												<div style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">} </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">}</span>
												</div>
										</td>
								</tr>
						</tbody>
				</table>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">通过一个</span>
						<span style="FONT-SIZE: 12pt">JSP</span>
						<span style="FONT-SIZE: 12pt">例子来访问</span>
						<span style="FONT-SIZE: 12pt">oracle</span>
						<span style="FONT-SIZE: 12pt">数据库：</span>
				</div>
				<table width="90%" border="1">
						<tbody>
								<tr>
										<td width="100%" bgcolor="#c0c0c0">
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;%@ page import=”java.util.*”&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;%@ page import=”java.sql.*”&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;% </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">try{ </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">Connection conn = null; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">Statement stmt = null; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">ResultSet rs = null; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">//</span>
														<span style="FONT-SIZE: 12pt">加载</span>
														<span style="FONT-SIZE: 12pt">oracle</span>
														<span style="FONT-SIZE: 12pt">驱动程序</span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">Class.forName(“oracle.jdbc.driver.OracleDriver.”); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">//</span>
														<span style="FONT-SIZE: 12pt">注册</span>
														<span style="FONT-SIZE: 12pt">oracle</span>
														<span style="FONT-SIZE: 12pt">驱动程序</span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">DriverManager.regidterDriver(new oracle.jdbc.driver.OracleDriver()); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">//</span>
														<span style="FONT-SIZE: 12pt">建立数据库连接</span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">conn=DriverManager.getConnection(“jdbc:oracle:thin:@your db ip:your db port:sid”,dbuser,dbpassword); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">stmt = conn.createStatement(); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">rs = stmt.executeQuery(“select * from tablename”); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">while(rs.next){ </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">       out.print(rs.getstring(“colname”)); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">} </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">}catch(Exception e){ </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">} </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">finally{ </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">rs.close(); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">stmt.close(); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">conn.close(); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">} </span>
												</div>
												<span style="FONT-SIZE: 12pt">%&gt;</span>
										</td>
								</tr>
						</tbody>
				</table>
				<div>
						<br />　</div>
				<div>
						<strong>
								<font size="6">
								</font>
						</strong>
				</div>
				<div>
						<strong>
								<font size="6">数据源简介</font>
								<br />
						</strong>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">
								<br />JDBC2.0</span>
						<span style="FONT-SIZE: 12pt">提供了</span>
						<span style="FONT-SIZE: 12pt">javax.sql.DataSource</span>
						<span style="FONT-SIZE: 12pt">的接口，负责与数据库建立连接，实际应用时不需要编写连接数据库代码，直接从数据源获得数据库的连接。</span>
						<span style="FONT-SIZE: 12pt">Dataource</span>
						<span style="FONT-SIZE: 12pt">中事先建立了多个数据库连接，这些数据库连接保持在数据库连接池中，当程序访问数据库时，只需要从连接池从取出空闲的连接，访问数据库结束，在将这些连接归还给连接池。</span>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">DataSource</span>
						<span style="FONT-SIZE: 12pt">对象由容器（</span>
						<span style="FONT-SIZE: 12pt">Tomcat</span>
						<span style="FONT-SIZE: 12pt">）提供，不能使用创建实例的方法来生成</span>
						<span style="FONT-SIZE: 12pt">DataSource</span>
						<span style="FONT-SIZE: 12pt">对象，要采用</span>
						<span style="FONT-SIZE: 12pt">JAVA</span>
						<span style="FONT-SIZE: 12pt">的</span>
						<span style="FONT-SIZE: 12pt">JNDI</span>
						<span style="FONT-SIZE: 12pt">（</span>
						<span style="FONT-SIZE: 12pt">Java Nameing and Directory Interface</span>
						<span style="FONT-SIZE: 12pt">，</span>
						<span style="FONT-SIZE: 12pt">java</span>
						<span style="FONT-SIZE: 12pt">命名和目录接口）来获得</span>
						<span style="FONT-SIZE: 12pt">DataSource</span>
						<span style="FONT-SIZE: 12pt">对象的引用。（另有一种说法：“其实从技术上来说，数据源连接方式是不需要目录服务的，我们同样可以通过序列化数据源对象直接访问文件系统。这点是需要明确的。”感兴趣的朋友可以试试。）</span>
						<span style="FONT-SIZE: 12pt">JNDI</span>
						<span style="FONT-SIZE: 12pt">是一种将对象和名字绑定的技术，对象工厂负责生产出对象，这些对象都和唯一的名字相绑定。程序中可以通过这个名字来获得对象的引用。</span>
						<span style="FONT-SIZE: 12pt">Tomcat</span>
						<span style="FONT-SIZE: 12pt">把</span>
						<span style="FONT-SIZE: 12pt">DataSource</span>
						<span style="FONT-SIZE: 12pt">作为一种可配置的</span>
						<span style="FONT-SIZE: 12pt">JNDI</span>
						<span style="FONT-SIZE: 12pt">资源来处理，生成</span>
						<span style="FONT-SIZE: 12pt">DataSource</span>
						<span style="FONT-SIZE: 12pt">对象的工厂为</span>
						<span style="FONT-SIZE: 12pt">org.apache.comm.ons.dbcp.BasicDataSourceFactory</span>
						<span style="FONT-SIZE: 12pt">。</span>
						<span style="FONT-SIZE: 12pt">  </span>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<strong>
								<font size="6">
								</font>
						</strong>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<strong>
								<font size="6">
								</font>
						</strong>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<strong>
								<font size="6">
										<br />配置数据源</font>
						</strong>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<div style="LINE-HEIGHT: 150%">
						<span style="FONT-SIZE: 12pt">
								<br />配置数据源其实相当简单：</span>
				</div>
				<span style="FONT-SIZE: 12pt">首先在</span>
				<span style="FONT-SIZE: 12pt">server.xml</span>
				<span style="FONT-SIZE: 12pt">中加入</span>
				<span style="FONT-SIZE: 12pt">&lt;Resource&gt;</span>
				<span style="FONT-SIZE: 12pt">元素，打开</span>
				<span style="FONT-SIZE: 12pt">server.xml</span>
				<span style="FONT-SIZE: 12pt">，在</span>
				<span style="FONT-SIZE: 12pt">&lt;Context&gt;</span>
				<span style="FONT-SIZE: 12pt">中加入以下代码（以</span>
				<span style="FONT-SIZE: 12pt">oracle</span>
				<span style="FONT-SIZE: 12pt">为例）：</span>
				<div>　</div>
				<table width="90%" border="1">
						<tbody>
								<tr>
										<td width="100%" bgcolor="#c0c0c0">
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;Resource name="jdbc/ JNDI</span>
														<span style="FONT-SIZE: 12pt">名字</span>
														<span style="FONT-SIZE: 12pt">" </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">               auth="Container" </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">               type="javax.sql.DataSource"/&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt"> &lt;ResourceParams name="jdbc/JNDI</span>
														<span style="FONT-SIZE: 12pt">名字</span>
														<span style="FONT-SIZE: 12pt">"&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;parameter&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">     &lt;name&gt;factory&lt;/name&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">      &lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;/parameter&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;parameter&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">      &lt;name&gt;maxActive&lt;/name&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">      &lt;value&gt;100&lt;/value&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;/parameter&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;parameter&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">      &lt;name&gt;maxIdle&lt;/name&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">      &lt;value&gt;30&lt;/value&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;/parameter&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">  </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;parameter&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">      &lt;name&gt;maxWait&lt;/name&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">      &lt;value&gt;10000&lt;/value&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;/parameter&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">  </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;parameter&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">     &lt;name&gt;username&lt;/name&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">     &lt;value&gt;</span>
														<span style="FONT-SIZE: 12pt">用户名</span>
														<span style="FONT-SIZE: 12pt">&lt;/value&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;/parameter&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;parameter&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">     &lt;name&gt;password&lt;/name&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">     &lt;value&gt;</span>
														<span style="FONT-SIZE: 12pt">密码</span>
														<span style="FONT-SIZE: 12pt">&lt;/value&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;/parameter&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">  </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;parameter&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">       &lt;name&gt;driverClassName&lt;/name&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">       &lt;value&gt;oracle.jdbc.driver.OracleDriver&lt;/value&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;/parameter&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">  </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;parameter&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">      &lt;name&gt;url&lt;/name&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">      &lt;value&gt;jdbc:oracle:thin:@ip:</span>
														<span style="FONT-SIZE: 12pt">端口</span>
														<span style="FONT-SIZE: 12pt">:sid &lt;/value&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">    &lt;/parameter&gt; </span>
												</div>
												<span style="FONT-SIZE: 12pt"> &lt;/ResourceParams&gt;</span>
										</td>
								</tr>
						</tbody>
				</table>
				<div>
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">&lt;Resource&gt;</span>
						<span style="FONT-SIZE: 12pt">元素的属性如下：</span>
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<table width="90%" border="1">
						<tbody>
								<tr>
										<td align="middle" width="50%" bgcolor="#c0c0c0">
												<strong>
														<span style="FONT-SIZE: 12pt">属性</span>
												</strong>
										</td>
										<td align="middle" width="50%" bgcolor="#c0c0c0">
												<span style="FONT-SIZE: 12pt">
														<strong>描述</strong>
												</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">name</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">指定</span>
												<span style="FONT-SIZE: 12pt">Resource</span>
												<span style="FONT-SIZE: 12pt">的</span>
												<span style="FONT-SIZE: 12pt">JNDI</span>
												<span style="FONT-SIZE: 12pt">的名字</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">auth</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">指定管理</span>
												<span style="FONT-SIZE: 12pt">Resource</span>
												<span style="FONT-SIZE: 12pt">的</span>
												<span style="FONT-SIZE: 12pt">Manager</span>
												<span style="FONT-SIZE: 12pt">，由两个可选值：</span>
												<span style="FONT-SIZE: 12pt">Container</span>
												<span style="FONT-SIZE: 12pt">和</span>
												<span style="FONT-SIZE: 12pt">Application</span>
												<span style="FONT-SIZE: 12pt">。</span>
												<span style="FONT-SIZE: 12pt">Container</span>
												<span style="FONT-SIZE: 12pt">表示由容器来创建和管理</span>
												<span style="FONT-SIZE: 12pt">Resource</span>
												<span style="FONT-SIZE: 12pt">，</span>
												<span style="FONT-SIZE: 12pt">Application</span>
												<span style="FONT-SIZE: 12pt">表示由</span>
												<span style="FONT-SIZE: 12pt">WEB</span>
												<span style="FONT-SIZE: 12pt">应用来创建和管理</span>
												<span style="FONT-SIZE: 12pt">Resource</span>
												<span style="FONT-SIZE: 12pt">。如果在</span>
												<span style="FONT-SIZE: 12pt">web application deployment descriptor</span>
												<span style="FONT-SIZE: 12pt">中使用</span>
												<span style="FONT-SIZE: 12pt">&lt;resource-ref&gt;</span>
												<span style="FONT-SIZE: 12pt">，这个属性是必需的，如果使用</span>
												<span style="FONT-SIZE: 12pt">&lt;resource-env-ref&gt;</span>
												<span style="FONT-SIZE: 12pt">，这个属性是可选的。</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">type</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">指定</span>
												<span style="FONT-SIZE: 12pt">Resource</span>
												<span style="FONT-SIZE: 12pt">所属的</span>
												<span style="FONT-SIZE: 12pt">java</span>
												<span style="FONT-SIZE: 12pt">类名</span>
										</td>
								</tr>
						</tbody>
				</table>
				<div>
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">&lt;ResourceParams&gt;</span>
						<span style="FONT-SIZE: 12pt">元素的属性如下：</span>
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<table width="90%" border="1">
						<tbody>
								<tr>
										<td align="middle" width="50%" bgcolor="#c0c0c0">
												<strong>
														<span style="FONT-SIZE: 12pt">属性</span>
												</strong>
										</td>
										<td align="middle" width="50%" bgcolor="#c0c0c0">
												<span style="FONT-SIZE: 12pt">
														<strong>描述</strong>
												</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">name</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">指定</span>
												<span style="FONT-SIZE: 12pt">ResourceParams</span>
												<span style="FONT-SIZE: 12pt">的</span>
												<span style="FONT-SIZE: 12pt">JNDI</span>
												<span style="FONT-SIZE: 12pt">的名字，必须和</span>
												<span style="FONT-SIZE: 12pt">Resource</span>
												<span style="FONT-SIZE: 12pt">的</span>
												<span style="FONT-SIZE: 12pt">name</span>
												<span style="FONT-SIZE: 12pt">保持一致</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">factory</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">指定生成</span>
												<span style="FONT-SIZE: 12pt">DataSource</span>
												<span style="FONT-SIZE: 12pt">对象的</span>
												<span style="FONT-SIZE: 12pt">factory</span>
												<span style="FONT-SIZE: 12pt">的类名</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">maxActive</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">指定数据库连接池中处于活动状态的数据库连接最大数目，</span>
												<span style="FONT-SIZE: 12pt">0</span>
												<span style="FONT-SIZE: 12pt">表示不受限制</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">maxIdle</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">指定数据库连接池中</span>
												<span style="FONT-SIZE: 12pt">处于</span>
												<span style="FONT-SIZE: 12pt">空闲状态的数据库连接的最大数目，</span>
												<span style="FONT-SIZE: 12pt">0</span>
												<span style="FONT-SIZE: 12pt">表示不受限制</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">maxWait</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">指定数据库连接池中的数据库连接处于空闲状态的最长时间（单位为毫秒），超过这一事件，将会抛出异常。</span>
												<span style="FONT-SIZE: 12pt">-1</span>
												<span style="FONT-SIZE: 12pt">表示可以无限期等待。</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">username</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">指定连接数据库的用户名</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">password</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">指定连接数据库的密码</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">driverClassName</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">指定连接数据库的</span>
												<span style="FONT-SIZE: 12pt">JDBC</span>
												<span style="FONT-SIZE: 12pt">驱动程序</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">url</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">指定连接数据库的</span>
												<span style="FONT-SIZE: 12pt">URL</span>
										</td>
								</tr>
						</tbody>
				</table>
				<div>
				</div>
				<div>
						<br />其他文章说以上配置就OK了，对于web.xml的配置可有可无，其实不是这样子的。<span style="FONT-SIZE: 12pt">如果在</span><span style="FONT-SIZE: 12pt">web</span><span style="FONT-SIZE: 12pt">应用中访问了由</span><span style="FONT-SIZE: 12pt">Servlet</span><span style="FONT-SIZE: 12pt">容器管理的某个</span><span style="FONT-SIZE: 12pt">JNDI Resource</span><span style="FONT-SIZE: 12pt">，则必须在</span><span style="FONT-SIZE: 12pt">web.xml</span><span style="FONT-SIZE: 12pt">中声明对这个</span><span style="FONT-SIZE: 12pt">JNDI Resource</span><span style="FONT-SIZE: 12pt">的引用。表示资源引用的元素为</span><span style="FONT-SIZE: 12pt">&lt;resource-ref&gt;,</span><span style="FONT-SIZE: 12pt">该元素加在</span><span style="FONT-SIZE: 12pt">&lt;wepapp&gt;&lt;/ wepapp &gt;</span><span style="FONT-SIZE: 12pt">中。<br /></span></div>
				<div>
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<br />
				<table width="90%" border="1">
						<tbody>
								<tr>
										<td width="100%" bgcolor="#c0c0c0">
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;resource-ref&gt;</span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">     &lt;descryiption&gt;DB Connection&lt;/descryiption&gt; </span>
												</div>
												<div style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;res-ref-name&gt;jdbc/JNDI</span>
														<span style="FONT-SIZE: 12pt">名字</span>
														<span style="FONT-SIZE: 12pt">&lt;/ res-ref-name&gt; </span>
												</div>
												<div style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;res-type&gt;javax.sql.DataSource &lt;/ res- type&gt; </span>
												</div>
												<div style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;res-auth&gt;Container &lt;/ res- auth&gt; </span>
												</div>
												<span style="FONT-SIZE: 12pt">&lt;/resource-ref&gt;</span>
										</td>
								</tr>
						</tbody>
				</table>
				<div>
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">
								<br />&lt;resource-ref&gt;</span>
						<span style="FONT-SIZE: 12pt">元素的属性如下：</span>
						<br />
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<br />
				<table width="90%" border="1">
						<tbody>
								<tr>
										<td align="middle" width="50%" bgcolor="#c0c0c0">
												<strong>
														<span style="FONT-SIZE: 12pt">属性</span>
												</strong>
										</td>
										<td align="middle" width="50%" bgcolor="#c0c0c0">
												<span style="FONT-SIZE: 12pt">
														<strong>描述</strong>
												</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">description</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">对所引用的资源的说明</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">res-ref-name</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">指定所引用资源的</span>
												<span style="FONT-SIZE: 12pt">JNDI</span>
												<span style="FONT-SIZE: 12pt">名字，与</span>
												<span style="FONT-SIZE: 12pt">&lt;Resource&gt;</span>
												<span style="FONT-SIZE: 12pt">元素中的</span>
												<span style="FONT-SIZE: 12pt">name</span>
												<span style="FONT-SIZE: 12pt">属性保持一致</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">res-type</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">指定所引用资源的类名字，与</span>
												<span style="FONT-SIZE: 12pt">&lt;Resource&gt;</span>
												<span style="FONT-SIZE: 12pt">元素中的</span>
												<span style="FONT-SIZE: 12pt">type</span>
												<span style="FONT-SIZE: 12pt">属性保持一致</span>
										</td>
								</tr>
								<tr>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">res-auth</span>
										</td>
										<td width="50%">
												<span style="FONT-SIZE: 12pt">指定所引用资源的</span>
												<span style="FONT-SIZE: 12pt">Manager</span>
												<span style="FONT-SIZE: 12pt">，与</span>
												<span style="FONT-SIZE: 12pt">&lt;Resource&gt;</span>
												<span style="FONT-SIZE: 12pt">元素中的</span>
												<span style="FONT-SIZE: 12pt">auth</span>
												<span style="FONT-SIZE: 12pt">属性保持一致</span>
										</td>
								</tr>
						</tbody>
				</table>
				<div>
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">
								<br />到这里，数据源就已经配置成功了。但是我在测试的时候除了一点小麻烦，主要原因是对DataSource的概念没搞清楚。我是这么测试的，写一个测试类，然后在eclipse中进行junit测试，</span>
						<span style="FONT-SIZE: 12pt">捕获的异常为：</span>
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">
								<u>
										<span style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: navy">javax.naming.NoInitialContextException</span>
								</u>
								<span style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black">: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initia</span>
								<span style="FONT-SIZE: 10pt; BACKGROUND: white">l</span>
						</span>
						<span style="BACKGROUND-POSITION: 0% 50%; FONT-SIZE: 12pt; BACKGROUND-ATTACHMENT: scroll; BACKGROUND-REPEAT: repeat; BACKGROUND-COLOR: white">。</span>
				</div>
				<div>
						<span style="BACKGROUND-POSITION: 0% 50%; FONT-SIZE: 12pt; BACKGROUND-ATTACHMENT: scroll; BACKGROUND-REPEAT: repeat; BACKGROUND-COLOR: white">
						</span>
				</div>
				<div>
						<span style="BACKGROUND-POSITION: 0% 50%; FONT-SIZE: 12pt; BACKGROUND-ATTACHMENT: scroll; BACKGROUND-REPEAT: repeat; BACKGROUND-COLOR: white">同样的代码在JSP文件中正常运行，后来翻了一些资料，终于找到了问题的所在了。原来DataSource是由容器（TOMCAT）提供的，所以我的测试会抛出异常。为了再次验证想法是否正确，在jsp文件中import刚才抛出异常的类，在进行连接数据库，结果一切正常。</span>
				</div>
				<div>
						<span style="BACKGROUND-POSITION: 0% 50%; FONT-SIZE: 12pt; BACKGROUND-ATTACHMENT: scroll; BACKGROUND-REPEAT: repeat; BACKGROUND-COLOR: white">
						</span>
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">下面的例子是实际应用中使用</span>
						<span style="FONT-SIZE: 12pt">DataSource</span>
						<span style="FONT-SIZE: 12pt">，在</span>
						<span style="FONT-SIZE: 12pt">jsp</span>
						<span style="FONT-SIZE: 12pt">文件中连接</span>
						<span style="FONT-SIZE: 12pt">oracle</span>
						<span style="FONT-SIZE: 12pt">。</span>
				</div>
				<div>
						<span style="FONT-SIZE: 12pt">
						</span>
				</div>
				<table width="90%" border="1">
						<tbody>
								<tr>
										<td width="100%" bgcolor="#c0c0c0">
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;%@ page import="java.sql.*"%&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;%@ page import="javax.naming.*"%&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;%@ page import="javax.sql.*"%&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;html&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt"> &lt;head&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt"> &lt;/head&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;body&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">&lt;% </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">Context initContext = new InitialContext(); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">Context envContext = (Context) initContext.lookup("java:/comp/env"); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">DataSource db = (DataSource)envContext.lookup("jdbc/javablogorl"); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">// javablogorl</span>
														<span style="FONT-SIZE: 12pt">为</span>
														<span style="FONT-SIZE: 12pt">&lt;Resource&gt;</span>
														<span style="FONT-SIZE: 12pt">元素中</span>
														<span style="FONT-SIZE: 12pt">name</span>
														<span style="FONT-SIZE: 12pt">属性的值</span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">Connection conn = db.getConnection( ); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">Statement stmt = conn.createStatement(); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">ResultSet rs = stmt.executeQuery("SELECT * FROM blog_systemadmin"); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">while(rs.next()){ </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">       out.print(rs.getString("admin_name")+" "); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">       out.print(rs.getString("admin_password")+"&lt;br&gt;"); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">} </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">rs.close(); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">stmt.close(); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">conn.close(); </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt">%&gt; </span>
												</div>
												<div style="LINE-HEIGHT: 150%">
														<span style="FONT-SIZE: 12pt"> &lt;/body&gt; </span>
												</div>
												<span style="FONT-SIZE: 12pt">&lt;/html&gt;</span>
										</td>
								</tr>
						</tbody>
				</table>
				<div>　</div>
				<br />
				<br />
				<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=674822</p>
		</div>
<img src ="http://www.blogjava.net/haogj/aggbug/42893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haogj/" target="_blank">haogj</a> 2006-04-24 21:21 <a href="http://www.blogjava.net/haogj/archive/2006/04/24/42893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>奇怪的 Java 日期</title><link>http://www.blogjava.net/haogj/archive/2006/04/18/41746.html</link><dc:creator>haogj</dc:creator><author>haogj</author><pubDate>Tue, 18 Apr 2006 13:04:00 GMT</pubDate><guid>http://www.blogjava.net/haogj/archive/2006/04/18/41746.html</guid><wfw:comment>http://www.blogjava.net/haogj/comments/41746.html</wfw:comment><comments>http://www.blogjava.net/haogj/archive/2006/04/18/41746.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/haogj/comments/commentRss/41746.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haogj/services/trackbacks/41746.html</trackback:ping><description><![CDATA[
		<br />  Calendar cal = Calendar.getInstance();<br />  cal.set(1999, 12, 31);<br />  System.out.println( cal.get(Calendar.YEAR) +"");<br /><br />这三行代码的执行结果是什么？<br /><br />是 1999 吗？<br /><br />但是它没有，结果是 2000。是千年虫问题吗？<br /><br />        事情比我们想象的还要糟糕：这是致命的 Date/Calendar 问题。在 Java 1.0 发布的时候，，它唯一支持的日历计算类就是 Date 类。由于这个类有许多的问题，因此，在 1.1 版的时候，Calendar 类被添加到 Java 中，以纠正 Date 的缺点，不幸的是，问题更多了。<br />  <br />        我们习惯上将第一个月当作 1，因此 12  可以用来表示 12 月，不幸的是，Date 的月份表示从 0 开始，因此 12 月将用 11 来表示，而且 Calendar 继续延续了这个错误。因此上面的代码将月份设置为了 13 月，但是实际的月份只有 12 个月，代码应该抛出一个异常，通知我们发生了什么，他应该这么做，可是，它没有，它直接认为这应该是下一个月，也就是 2000 年的 1 月。因此我们上面的代码输出结果为 2000。<br /><br />Date d = cal.getTime();<br />System.out.println( d.getDay());<br /><br />再看这两行代码的结果是什么？<br /><br />是 31 吗?<br /><br />结果是 1<br /><br />        我们在前面将日期设为了 31 日，在 cal.getTime() 中返回了一个 Date 类型的日期，这个日期也应该是 31 ，为什么是 1 呢？<br /><br />        还是查一下 JavaDoc 吧， Date.getDay 返回的实际上是日期的星期数，也就是返回的结果是星期几，而不是月份中的日期。这个值从星期天开始计算，从 0 开始，因此，打印 1  表示 2000年12月31日是星期一。注意一下吧， Calendar 的方法 get( Calendar.DAY_OF_WEEK) 不知道为什么返回的是基于 1 开始的星期日期，而不是基于 0 开始的星期日期。<br /><br />    以上内容取自 《Java 解惑》 P144<br />        <br /><br /><br /><img src ="http://www.blogjava.net/haogj/aggbug/41746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haogj/" target="_blank">haogj</a> 2006-04-18 21:04 <a href="http://www.blogjava.net/haogj/archive/2006/04/18/41746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>