﻿<?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-nbtymm-随笔分类-Servele&amp;JSP和js</title><link>http://www.blogjava.net/nbtymm/category/11241.html</link><description>&lt;/br&gt;&lt;a href="http://www.fastonlineusers.com"&gt;&lt;b&gt;&lt;font color=red&gt;共有&lt;script src=http://fastonlineusers.com/online.php?d=bluedavy.blogjava.net&gt;&lt;/script&gt;人在同时阅读此Blog&lt;/font&gt;&lt;/b&gt;&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 07:08:37 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 07:08:37 GMT</pubDate><ttl>60</ttl><item><title>JSTL详解(九)</title><link>http://www.blogjava.net/nbtymm/archive/2007/01/18/94664.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Thu, 18 Jan 2007 07:22:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2007/01/18/94664.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/94664.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2007/01/18/94664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/94664.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/94664.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 9.9 																																																																																																														完整示例																																																...&nbsp;&nbsp;<a href='http://www.blogjava.net/nbtymm/archive/2007/01/18/94664.html'>阅读全文</a><img src ="http://www.blogjava.net/nbtymm/aggbug/94664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2007-01-18 15:22 <a href="http://www.blogjava.net/nbtymm/archive/2007/01/18/94664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL详解(八)</title><link>http://www.blogjava.net/nbtymm/archive/2007/01/18/94661.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Thu, 18 Jan 2007 07:21:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2007/01/18/94661.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/94661.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2007/01/18/94661.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/94661.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/94661.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 9.8 Struts																																																																																																														与																																													...&nbsp;&nbsp;<a href='http://www.blogjava.net/nbtymm/archive/2007/01/18/94661.html'>阅读全文</a><img src ="http://www.blogjava.net/nbtymm/aggbug/94661.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2007-01-18 15:21 <a href="http://www.blogjava.net/nbtymm/archive/2007/01/18/94661.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL详解(七)</title><link>http://www.blogjava.net/nbtymm/archive/2007/01/18/94658.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Thu, 18 Jan 2007 07:19:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2007/01/18/94658.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/94658.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2007/01/18/94658.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/94658.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/94658.html</trackback:ping><description><![CDATA[
		<h2 align="center">
				<a name="_Toc134092076">
				</a>
				<a name="_Toc133721064">
				</a>
				<a name="_Toc133394915">
				</a>
				<a name="_Toc132191857">
				</a>
				<a name="_Toc132021692">
						<span>
								<span>
										<span>
												<span>
														<span>9.7 Functions</span>
												</span>
										</span>
								</span>
						</span>
				</a>
				<font face="Arial">
						<span>
								<span>
										<span>
												<span>
														<span>
																<span>标签库</span>
														</span>
												</span>
										</span>
								</span>
						</span>
				</font>
		</h2>
		<p>
				<span>称呼</span>
				<span>
						<font face="Times New Roman">Functions</font>
				</span>
				<span>标签库为标签库，倒不如称呼其为函数库来得更容易理解些。因为</span>
				<span>
						<font face="Times New Roman">Functions</font>
				</span>
				<span>标签库并没有提供传统的标签来为</span>
				<span>
						<font face="Times New Roman">JSP</font>
				</span>
				<span>页面的<nobr><a oncontextmenu="return false;" onmousemove="kwM(6);" onmouseover="kwE(event,6);" onclick="window.open('http://58.53.192.49/search.php?keyword=工作','_blank');" onmouseout="kwL(event);" target="_blank">工作</a></nobr>服务，而是被用于</span>
				<span>
						<font face="Times New Roman">EL</font>
				</span>
				<span>表达式语句中。在</span>
				<span>
						<font face="Times New Roman">JSP2.0</font>
				</span>
				<span>规范下出现的</span>
				<span>
						<font face="Times New Roman">Functions</font>
				</span>
				<span>标签库为</span>
				<span>
						<font face="Times New Roman">EL</font>
				</span>
				<span>表达式语句提供了许多更为有用的功能。</span>
				<span>
						<font face="Times New Roman">Functions</font>
				</span>
				<span>标签库分为两大类，共</span>
				<span>
						<font face="Times New Roman">16</font>
				</span>
				<span>个函数。</span>
		</p>
		<p>
				<span>
						<span>q<span>         </span></span>
				</span>
				<span>长度函数：</span>
				<span>
						<font face="Times New Roman">fn:length</font>
				</span>
		</p>
		<p>
				<span>
						<span>q<span>         </span></span>
				</span>
				<span>字符串处理函数：</span>
				<span>
						<font face="Times New Roman">fn:contains</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">fn:containsIgnoreCase</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">fn:endsWith</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">fn:escapeXml</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">fn:indexOf</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">fn:join</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">fn:replace</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">fn:split</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">fn:startsWith</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">fn:substring</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">fn:substringAfter</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">fn:substringBefore</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">fn:toLowerCase</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">fn:toUpperCase</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">fn:trim</font>
				</span>
		</p>
		<p>
				<span>以下是各个函数的用途和属性以及简单示例。</span>
		</p>
		<h3>
				<a name="_Toc134092077">
				</a>
				<a name="_Toc133721065">
				</a>
				<a name="_Toc133394916">
						<span>
								<span>
										<span>
												<font face="Arial">9.7.1 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>长度函数</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">fn:length</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>函数</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>长度函数</span>
				<span>
						<font face="Times New Roman">fn:length</font>
				</span>
				<span>的出现有重要的意义。在</span>
				<span>
						<font face="Times New Roman">JSTL1.0</font>
				</span>
				<span>中，有一个功能被忽略了，那就是对集合的长度取值。虽然</span>
				<span>
						<font face="Times New Roman">java.util.Collection</font>
				</span>
				<span>接口定义了</span>
				<span>
						<font face="Times New Roman">size</font>
				</span>
				<span>方法，但是该方法不是一个标准的</span>
				<span>
						<font face="Times New Roman">JavaBean</font>
				</span>
				<span>属性方法（没有</span>
				<span>
						<font face="Times New Roman">get,set</font>
				</span>
				<span>方法），因此，无法通过</span>
				<span>
						<font face="Times New Roman">EL</font>
				</span>
				<span>表达式“</span>
				<span>
						<font face="Times New Roman">${collection.size}</font>
				</span>
				<span>”来轻松取得。</span>
		</p>
		<p>
				<span>
						<font face="Times New Roman">fn:length</font>
				</span>
				<span>函数正是为了解决这个问题而被<nobr><a oncontextmenu="return false;" onmousemove="kwM(3);" onmouseover="kwE(event,3);" onclick="window.open('http://58.53.192.49/search.php?keyword=设计','_blank');" onmouseout="kwL(event);" target="_blank">设计</a></nobr>出来的。它的参数为</span>
				<span>
						<font face="Times New Roman">input</font>
				</span>
				<span>，将计算通过该属性传入的对象长度。该对象应该为集合类型或</span>
				<span>
						<font face="Times New Roman">String</font>
				</span>
				<span>类型。其返回结果是一个</span>
				<span>
						<font face="Times New Roman">int</font>
				</span>
				<span>类型的值。下面看一个示例。</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;%ArrayList arrayList1 = new ArrayList();</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">
										<span>                            </span>arrayList1.add("aa");</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">
										<span>                            </span>arrayList1.add("bb");</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">
										<span>                            </span>arrayList1.add("cc");</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">%&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;%request.getSession().setAttribute("arrayList1", arrayList1);%&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:length(sessionScope.arrayList1)}</font>
						</font>
				</span>
		</p>
		<p>
				<span>假设一个</span>
				<span>
						<font face="Times New Roman">ArrayList</font>
				</span>
				<span>类型的实例“</span>
				<span>
						<font face="Times New Roman">arrayList1</font>
				</span>
				<span>”，并为其添加三个字符串对象，使用</span>
				<span>
						<font face="Times New Roman">fn:length</font>
				</span>
				<span>函数后就可以取得返回结果为“</span>
				<span>
						<font face="Times New Roman">3</font>
				</span>
				<span>”。</span>
		</p>
		<h3>
				<a name="_Toc134092078">
				</a>
				<a name="_Toc133721066">
				</a>
				<a name="_Toc133394917">
						<span>
								<span>
										<span>
												<font face="Arial">9.7.2 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>判断函数</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">fn:contains</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>函数</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">fn:contains</font>
				</span>
				<span>函数用来判断源字符串是否包含子字符串。它包括</span>
				<span>
						<font face="Times New Roman">string</font>
				</span>
				<span>和</span>
				<span>
						<font face="Times New Roman">substring</font>
				</span>
				<span>两个参数，它们都是</span>
				<span>
						<font face="Times New Roman">String</font>
				</span>
				<span>类型，分布表示源字符串和子字符串。其返回结果为一个</span>
				<span>
						<font face="Times New Roman">boolean</font>
				</span>
				<span>类型的值。下面看一个示例。</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:contains("ABC", "a")}&lt;br&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:contains("ABC", "A")}&lt;br&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>前者返回“</span>
				<span>
						<font face="Times New Roman">false</font>
				</span>
				<span>”，后者返回“</span>
				<span>
						<font face="Times New Roman">true</font>
				</span>
				<span>”。</span>
		</p>
		<h3>
				<a name="_Toc134092079">
				</a>
				<a name="_Toc133721067">
				</a>
				<a name="_Toc133394918">
						<span>
								<span>
										<span>
												<font face="Arial">9.7.3 fn:containsIgnoreCase</font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>函数</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">fn:containsIgnoreCase</font>
				</span>
				<span>函数与</span>
				<span>
						<font face="Times New Roman">fn:contains</font>
				</span>
				<span>函数的功能差不多，唯一的区别是</span>
				<span>
						<font face="Times New Roman">fn:containsIgnoreCase</font>
				</span>
				<span>函数对于子字符串的包含比较将忽略大小写。它与</span>
				<span>
						<font face="Times New Roman">fn:contains</font>
				</span>
				<span>函数相同，包括</span>
				<span>
						<font face="Times New Roman">string</font>
				</span>
				<span>和</span>
				<span>
						<font face="Times New Roman">substring</font>
				</span>
				<span>两个参数，并返回一个</span>
				<span>
						<font face="Times New Roman">boolean</font>
				</span>
				<span>类型的值。下面看一个示例。</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:containsIgnoreCase("ABC", "a")}&lt;br&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:containsIgnoreCase("ABC", "A")}&lt;br&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>前者和后者都会返回“</span>
				<span>
						<font face="Times New Roman">true</font>
				</span>
				<span>”。</span>
		</p>
		<h3>
				<a name="_Toc134092080">
				</a>
				<a name="_Toc133721068">
				</a>
				<a name="_Toc133394919">
						<span>
								<span>
										<span>
												<font face="Arial">9.7.4 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>词头判断函数</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">fn:startsWith</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>函数</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">fn:startsWith</font>
				</span>
				<span>函数用来判断源字符串是否符合一连串的特定词头。它除了包含一个</span>
				<span>
						<font face="Times New Roman">string</font>
				</span>
				<span>参数外，还包含一个</span>
				<span>
						<font face="Times New Roman">subffx</font>
				</span>
				<span>参数，表示词头字符串，同样是</span>
				<span>
						<font face="Times New Roman">String</font>
				</span>
				<span>类型。该函数返回一个</span>
				<span>
						<font face="Times New Roman">boolean</font>
				</span>
				<span>类型的值。下面看一个示例。</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:startsWith ("ABC", "ab")}&lt;br&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:startsWith ("ABC", "AB")}&lt;br&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>前者返回“</span>
				<span>
						<font face="Times New Roman">false</font>
				</span>
				<span>”，后者返回“</span>
				<span>
						<font face="Times New Roman">true</font>
				</span>
				<span>”。</span>
		</p>
		<h3>
				<a name="_Toc134092081">
				</a>
				<a name="_Toc133721069">
				</a>
				<a name="_Toc133394920">
						<span>
								<span>
										<span>
												<font face="Arial">9.7.5 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>词尾判断函数</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">fn:endsWith</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>函数</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">fn:endsWith</font>
				</span>
				<span>函数用来判断源字符串是否符合一连串的特定词尾。它与</span>
				<span>
						<font face="Times New Roman">fn:startsWith</font>
				</span>
				<span>函数相同，包括</span>
				<span>
						<font face="Times New Roman">string</font>
				</span>
				<span>和</span>
				<span>
						<font face="Times New Roman">subffx</font>
				</span>
				<span>两个参数，并返回一个</span>
				<span>
						<font face="Times New Roman">boolean</font>
				</span>
				<span>类型的值。下面看一个示例。</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:endsWith("ABC", "bc")}&lt;br&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:endsWith("ABC", "BC")}&lt;br&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>前者返回“</span>
				<span>
						<font face="Times New Roman">false</font>
				</span>
				<span>”，后者返回“</span>
				<span>
						<font face="Times New Roman">true</font>
				</span>
				<span>”。</span>
		</p>
		<h3>
				<a name="_Toc134092082">
				</a>
				<a name="_Toc133721070">
				</a>
				<a name="_Toc133394921">
						<span>
								<span>
										<span>
												<font face="Arial">9.7.6 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>字符实体转换函数</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">fn:escapeXml</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>函数</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">fn:escapeXml</font>
				</span>
				<span>函数用于将所有特殊字符转化为字符实体码。它只包含一个</span>
				<span>
						<font face="Times New Roman">string</font>
				</span>
				<span>参数，返回一个</span>
				<span>
						<font face="Times New Roman">String</font>
				</span>
				<span>类型的值。</span>
				<a name="_Toc133721071">
				</a>
				<a name="_Toc133394922">
						<span>
						</span>
				</a>
		</p>
		<h3>
				<span>
						<span>
								<a name="_Toc134092083">
										<span>
												<font face="Arial">9.7.8 </font>
										</span>
								</a>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>字符匹配函数</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">fn:indexOf</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>函数</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">fn:indexOf</font>
				</span>
				<span>函数用于取得子字符串与源字符串匹配的开始位置，若子字符串与源字符串中的内容没有匹配成功将返回“</span>
				<span>
						<font face="Times New Roman">-1</font>
				</span>
				<span>”。它包括</span>
				<span>
						<font face="Times New Roman">string</font>
				</span>
				<span>和</span>
				<span>
						<font face="Times New Roman">substring</font>
				</span>
				<span>两个参数，返回结果为</span>
				<span>
						<font face="Times New Roman">int</font>
				</span>
				<span>类型。下面看一个示例。</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:indexOf("ABCD","aBC")}&lt;br&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:indexOf("ABCD","BC")}&lt;br&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>前者由于没有匹配成功，所以返回</span>
				<span>
						<font face="Times New Roman">-1</font>
				</span>
				<span>，后者匹配成功将返回位置的下标，为</span>
				<span>
						<font face="Times New Roman">1</font>
				</span>
				<span>。</span>
		</p>
		<h3>
				<a name="_Toc134092084">
				</a>
				<a name="_Toc133721072">
				</a>
				<a name="_Toc133394923">
						<span>
								<span>
										<span>
												<font face="Arial">9.7.9 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>分隔符函数</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">fn:join</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>函数</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">fn:join</font>
				</span>
				<span>函数允许为一个字符串数组中的每一个字符串加上分隔符，并连接起来。它的参数、返回结果和描述如表</span>
				<span>
						<font face="Times New Roman">9.25</font>
				</span>
				<span>所示：</span>
		</p>
		<p>
				<span>表</span>
				<span>
						<font face="Arial">9.25</font>
				</span>
				<span>　</span>
				<span>
						<font face="Arial">fn:join</font>
				</span>
				<span>函数</span>
		</p>
		<div align="center">
				<table cellspacing="0" cellpadding="0" width="281" border="1">
						<tbody>
								<tr>
										<td width="65">
												<p>
														<span>参数</span>
												</p>
										</td>
										<td width="216">
												<p>
														<span>描述</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="65">
												<p>
														<span>
																<font face="Times New Roman">array</font>
														</span>
												</p>
										</td>
										<td width="216">
												<p>
														<span>字符串数组。其类型必须为</span>
														<span>
																<font face="Times New Roman">String[]</font>
														</span>
														<span>类型</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="65">
												<p>
														<span>
																<font face="Times New Roman">separator</font>
														</span>
												</p>
										</td>
										<td width="216">
												<p>
														<span>分隔符。其类型必须为</span>
														<span>
																<font face="Times New Roman">String</font>
														</span>
														<span>类型</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="65">
												<p>
														<span>返回结果</span>
												</p>
										</td>
										<td width="216">
												<p>
														<span>返回一个</span>
														<span>
																<font face="Times New Roman">String</font>
														</span>
														<span>类型的值</span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>
				<span>下面看一个示例。</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;% String[] stringArray = {"a","b","c"}; %&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;%request.getSession().setAttribute("stringArray", stringArray);%&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:join(sessionScope.stringArray,";")}&lt;br&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>定义数组并放置到</span>
				<span>
						<font face="Times New Roman">Session</font>
				</span>
				<span>中，然后通过</span>
				<span>
						<font face="Times New Roman">Session</font>
				</span>
				<span>得到该字符串数组，使用</span>
				<span>
						<font face="Times New Roman">fn:join</font>
				</span>
				<span>函数并传入分隔符“</span>
				<span>
						<font face="Times New Roman">;</font>
				</span>
				<span>”，得到的结果为“</span>
				<span>
						<font face="Times New Roman">a;b;c</font>
				</span>
				<span>”。</span>
		</p>
		<span>
				<h3>
						<a name="_Toc134092085">
						</a>
						<a name="_Toc133721073">
						</a>
						<a name="_Toc133394924">
								<span>
										<span>
												<span>
														<font face="Arial">9.7.10 </font>
												</span>
										</span>
								</span>
						</a>
						<span>
								<span>
										<span>
												<span>替换函数</span>
										</span>
								</span>
						</span>
						<span>
								<span>
										<span>
												<span>
														<font face="Arial">fn:replace</font>
												</span>
										</span>
								</span>
						</span>
						<span>
								<span>
										<span>
												<span>函数</span>
										</span>
								</span>
						</span>
				</h3>
				<p>
						<span>
								<font face="Times New Roman">fn:replace</font>
						</span>
						<span>函数允许为源字符串做替换的工作。它的参数、返回结果和描述如表</span>
						<span>
								<font face="Times New Roman">9.26</font>
						</span>
						<span>所示：</span>
				</p>
				<p>
						<span>表</span>
						<span>
								<font face="Arial">9.26</font>
						</span>
						<span>　</span>
						<span>
								<font face="Arial"> fn:replace</font>
						</span>
						<span>函数</span>
				</p>
				<div align="center">
						<table cellspacing="0" cellpadding="0" width="353" border="1">
								<tbody>
										<tr>
												<td width="105">
														<p>
																<span>参数</span>
														</p>
												</td>
												<td width="249">
														<p>
																<span>描述</span>
														</p>
												</td>
										</tr>
										<tr>
												<td width="105">
														<p>
																<span>
																		<font face="Times New Roman">inputString</font>
																</span>
														</p>
												</td>
												<td width="249">
														<p>
																<span>源字符串。其类型必须为</span>
																<span>
																		<font face="Times New Roman">String</font>
																</span>
																<span>类型</span>
														</p>
												</td>
										</tr>
										<tr>
												<td width="105">
														<p>
																<span>
																		<font face="Times New Roman">beforeSubstring</font>
																</span>
														</p>
												</td>
												<td width="249">
														<p>
																<span>指定被替换字符串。其类型必须为</span>
																<span>
																		<font face="Times New Roman">String</font>
																</span>
																<span>类型</span>
														</p>
												</td>
										</tr>
										<tr>
												<td width="105">
														<p>
																<span>
																		<font face="Times New Roman">afterSubstring</font>
																</span>
														</p>
												</td>
												<td width="249">
														<p>
																<span>指定替换字符串。其类型必须为</span>
																<span>
																		<font face="Times New Roman">String</font>
																</span>
																<span>类型</span>
														</p>
												</td>
										</tr>
										<tr>
												<td width="105">
														<p>
																<span>返回结果</span>
														</p>
												</td>
												<td width="249">
														<p>
																<span>返回一个</span>
																<span>
																		<font face="Times New Roman">String</font>
																</span>
																<span>类型的值</span>
														</p>
												</td>
										</tr>
								</tbody>
						</table>
				</div>
				<p>
						<span>下面看一个示例。</span>
				</p>
				<p>
						<span>
								<font size="+0">
										<font face="Arial">${fn:replace("ABC","A","B")}&lt;br&gt;</font>
								</font>
						</span>
				</p>
				<p>
						<span>将“</span>
						<span>
								<font face="Times New Roman">ABC</font>
						</span>
						<span>”字符串替换为“</span>
						<span>
								<font face="Times New Roman">BBC</font>
						</span>
						<span>”，在“</span>
						<span>
								<font face="Times New Roman">ABC</font>
						</span>
						<span>”字符串中用“</span>
						<span>
								<font face="Times New Roman">B</font>
						</span>
						<span>”替换了“</span>
						<span>
								<font face="Times New Roman">A</font>
						</span>
						<span>”。</span>
				</p>
				<h3>
						<a name="_Toc134092086">
						</a>
						<a name="_Toc133721074">
						</a>
						<a name="_Toc133394925">
								<span>
										<span>
												<span>
														<font face="Arial">9.7.11 </font>
												</span>
										</span>
								</span>
						</a>
						<span>
								<span>
										<span>
												<span>分隔符转换数组函数</span>
										</span>
								</span>
						</span>
						<span>
								<span>
										<span>
												<span>
														<font face="Arial">fn:split</font>
												</span>
										</span>
								</span>
						</span>
						<span>
								<span>
										<span>
												<span>函数</span>
										</span>
								</span>
						</span>
				</h3>
				<p>
						<span>
								<font face="Times New Roman">fn:split</font>
						</span>
						<span>函数用于将一组由分隔符分隔的字符串转换成字符串数组。它的参数、返回结果和描述如表</span>
						<span>
								<font face="Times New Roman">9.27</font>
						</span>
						<span>所示：</span>
				</p>
				<p>
						<span>表</span>
						<span>
								<font face="Arial">9.27</font>
						</span>
						<span>　</span>
						<span>
								<font face="Arial"> fn:<span>split</span></font>
						</span>
						<span>函数</span>
				</p>
				<div align="center">
						<table cellspacing="0" cellpadding="0" width="281" border="1">
								<tbody>
										<tr>
												<td width="65">
														<p>
																<span>参数</span>
														</p>
												</td>
												<td width="216">
														<p>
																<span>描述</span>
														</p>
												</td>
										</tr>
										<tr>
												<td width="65">
														<p>
																<span>
																		<font face="Times New Roman">string</font>
																</span>
														</p>
												</td>
												<td width="216">
														<p>
																<span>源字符串。其类型必须为</span>
																<span>
																		<font face="Times New Roman">String</font>
																</span>
																<span>类型</span>
														</p>
												</td>
										</tr>
										<tr>
												<td width="65">
														<p>
																<span>
																		<font face="Times New Roman">delimiters</font>
																</span>
														</p>
												</td>
												<td width="216">
														<p>
																<span>指定分隔符。其类型必须为</span>
																<span>
																		<font face="Times New Roman">String</font>
																</span>
																<span>类型</span>
														</p>
												</td>
										</tr>
										<tr>
												<td width="65">
														<p>
																<span>返回结果</span>
														</p>
												</td>
												<td width="216">
														<p>
																<span>返回一个</span>
																<span>
																		<font face="Times New Roman">String[]</font>
																</span>
																<span>类型的值</span>
														</p>
												</td>
										</tr>
								</tbody>
						</table>
				</div>
				<p>
						<span>下面看一个示例。</span>
				</p>
				<p>
						<span>
								<font size="+0">
										<font face="Arial">${fn:split("A,B,C",",")}&lt;br&gt;</font>
								</font>
						</span>
				</p>
				<p>
						<span>将“</span>
						<span>
								<font face="Times New Roman">A,B,C</font>
						</span>
						<span>”字符串转换为数组</span>
						<span>
								<font face="Times New Roman">{A,B,C}</font>
						</span>
						<span>。</span>
				</p>
				<h3>
						<a name="_Toc134092087">
						</a>
						<a name="_Toc133721075">
						</a>
						<a name="_Toc133394926">
								<span>
										<span>
												<span>
														<font face="Arial">9.7.12 </font>
												</span>
										</span>
								</span>
						</a>
						<span>
								<span>
										<span>
												<span>字符串截取函数</span>
										</span>
								</span>
						</span>
						<span>
								<span>
										<span>
												<span>
														<font face="Arial">fn:substring</font>
												</span>
										</span>
								</span>
						</span>
						<span>
								<span>
										<span>
												<span>函数</span>
										</span>
								</span>
						</span>
				</h3>
				<p>
						<span>
								<font face="Times New Roman">fn:substring</font>
						</span>
						<span>函数用于截取字符串。它的参数、返回结果和描述如表</span>
						<span>
								<font face="Times New Roman">9.28</font>
						</span>
						<span>所示：</span>
				</p>
				<p>
						<span>表</span>
						<span>
								<font face="Arial">9.28</font>
						</span>
						<span>　</span>
						<span>
								<font face="Arial"> fn:<span>substring</span></font>
						</span>
						<span>函数</span>
				</p>
				<div align="center">
						<table cellspacing="0" cellpadding="0" width="353" border="1">
								<tbody>
										<tr>
												<td width="68">
														<p>
																<span>参数</span>
														</p>
												</td>
												<td width="285">
														<p>
																<span>描述</span>
														</p>
												</td>
										</tr>
										<tr>
												<td width="68">
														<p>
																<span>
																		<font face="Times New Roman">string</font>
																</span>
														</p>
												</td>
												<td width="285">
														<p>
																<span>源字符串。其类型必须为</span>
																<span>
																		<font face="Times New Roman">String</font>
																</span>
																<span>类型</span>
														</p>
												</td>
										</tr>
										<tr>
												<td width="68">
														<p>
																<span>
																		<font face="Times New Roman">beginIndex</font>
																</span>
														</p>
												</td>
												<td width="285">
														<p>
																<span>指定起始下标（值从</span>
																<span>
																		<font face="Times New Roman">0</font>
																</span>
																<span>开始）。其类型必须为</span>
																<span>
																		<font face="Times New Roman">int</font>
																</span>
																<span>类型</span>
														</p>
												</td>
										</tr>
										<tr>
												<td width="68">
														<p>
																<span>
																		<font face="Times New Roman">endIndex</font>
																</span>
														</p>
												</td>
												<td width="285">
														<p>
																<span>指定结束下标（值从</span>
																<span>
																		<font face="Times New Roman">0</font>
																</span>
																<span>开始）。其类型必须为</span>
																<span>
																		<font face="Times New Roman">int</font>
																</span>
																<span>类型</span>
														</p>
												</td>
										</tr>
										<tr>
												<td width="68">
														<p>
																<span>返回结果</span>
														</p>
												</td>
												<td width="285">
														<p>
																<span>返回一个</span>
																<span>
																		<font face="Times New Roman">String</font>
																</span>
																<span>类型的值</span>
														</p>
												</td>
										</tr>
								</tbody>
						</table>
				</div>
				<p>
						<span>下面看一个示例。</span>
				</p>
				<p>
						<span>
								<font size="+0">
										<font face="Arial">${fn:substring("ABC","1","2")}&lt;br&gt;</font>
								</font>
						</span>
				</p>
				<div>
						<span>截取结果为“</span>
						<span>
								<font face="Times New Roman">B</font>
						</span>
						<span>”。</span>
				</div>
		</span>
		<br />
		<br />
		<h3>
				<a name="_Toc134092089">
				</a>
				<a name="_Toc133721077">
				</a>
				<a name="_Toc133394928">
						<span>
								<span>
										<span>
												<font face="Arial">9.7.14 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>起始到定位截取字符串函数</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">fn:substringBefore</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>函数</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">fn:substringBefore</font>
				</span>
				<span>函数允许截取源字符从开始到某个字符串。它的参数和</span>
				<span>
						<font face="Times New Roman">fn:substringAfter</font>
				</span>
				<span>函数相同，不同的是</span>
				<span>
						<font face="Times New Roman">substring</font>
				</span>
				<span>表示的是结束字符串。下面看一个示例。</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:substringBefore("ABCD","BC")}&lt;br&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>截取的结果为“</span>
				<span>
						<font face="Times New Roman">A</font>
				</span>
				<span>”。</span>
		</p>
		<h3>
				<a name="_Toc134092090">
				</a>
				<a name="_Toc133721078">
				</a>
				<a name="_Toc133394929">
						<span>
								<span>
										<span>
												<font face="Arial">9.7.15 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>小写转换函数</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">fn:toLowerCase</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>函数</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">fn:toLowerCase</font>
				</span>
				<span>函数允许将源字符串中的字符全部转换成小写字符。它只有一个表示源字符串的参数</span>
				<span>
						<font face="Times New Roman">string</font>
				</span>
				<span>，函数返回一个</span>
				<span>
						<font face="Times New Roman">String</font>
				</span>
				<span>类型的值。下面看一个示例。</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:toLowerCase("ABCD")}&lt;br&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>转换的结果为“</span>
				<span>
						<font face="Times New Roman">abcd</font>
				</span>
				<span>”。</span>
		</p>
		<h3>
				<a name="_Toc134092091">
				</a>
				<a name="_Toc133721079">
				</a>
				<a name="_Toc133394930">
						<span>
								<span>
										<span>
												<font face="Arial">9.7.16 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>大写转换函数</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">fn:toUpperCase</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>函数</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">fn:toUpperCase</font>
				</span>
				<span>函数允许将源字符串中的字符全部转换成大写字符。它与</span>
				<span>
						<font face="Times New Roman">fn:toLowerCase</font>
				</span>
				<span>函数相同，也只有一个</span>
				<span>
						<font face="Times New Roman">String</font>
				</span>
				<span>参数，并返回一个</span>
				<span>
						<font face="Times New Roman">String</font>
				</span>
				<span>类型的值。下面看一个示例。</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:toUpperCase("abcd")}&lt;br&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>转换的结果为“</span>
				<span>
						<font face="Times New Roman">ABCD</font>
				</span>
				<span>”。</span>
		</p>
		<h3>
				<a name="_Toc134092092">
				</a>
				<a name="_Toc133721080">
				</a>
				<a name="_Toc133394931">
						<span>
								<span>
										<span>
												<font face="Arial">9.7.17 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>空格删除函数</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">fn:trim</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>函数</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">fn:trim</font>
				</span>
				<span>函数将删除源字符串中结尾部分的“空格”以产生一个新的字符串。它与</span>
				<span>
						<font face="Times New Roman">fn:toLowerCase</font>
				</span>
				<span>函数相同，只有一个</span>
				<span>
						<font face="Times New Roman">String</font>
				</span>
				<span>参数，并返回一个</span>
				<span>
						<font face="Times New Roman">String</font>
				</span>
				<span>类型的值。下面看一个示例。</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">${fn:trim("AB C ")}D&lt;br&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>转换的结果为“</span>
				<span>
						<font face="Times New Roman">AB CD</font>
				</span>
				<span>”，注意，它将只删除词尾的空格而不是全部，因此“</span>
				<span>
						<font face="Times New Roman">B</font>
				</span>
				<span>”和“</span>
				<span>
						<font face="Times New Roman">C</font>
				</span>
				<span>”之间仍然留有一个空格。</span>
		</p>
<img src ="http://www.blogjava.net/nbtymm/aggbug/94658.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2007-01-18 15:19 <a href="http://www.blogjava.net/nbtymm/archive/2007/01/18/94658.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL详解(五)</title><link>http://www.blogjava.net/nbtymm/archive/2007/01/18/94653.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Thu, 18 Jan 2007 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2007/01/18/94653.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/94653.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2007/01/18/94653.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/94653.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/94653.html</trackback:ping><description><![CDATA[
		<h2 align="center">
				<a name="_Toc132021690">
						<span>
								<span>
										<span>
												<span>
														<span>9.5  I18N formatting</span>
												</span>
										</span>
								</span>
						</span>
				</a>
				<font face="Arial">
						<span>
								<span>
										<span>
												<span>
														<span>
																<span>标签库</span>
														</span>
												</span>
										</span>
								</span>
						</span>
				</font>
		</h2>
		<p>
				<span>看到</span>
				<span>
						<font face="Times New Roman">I18N</font>
				</span>
				<span>就应该想到知识“国际化”，</span>
				<span>
						<font face="Times New Roman">I18N formatting</font>
				</span>
				<span>标签库就是用于在</span>
				<span>
						<font face="Times New Roman">JSP</font>
				</span>
				<span>页面中做国际化的动作。在该标签库中的标签一共有</span>
				<span>
						<font face="Times New Roman">12</font>
				</span>
				<span>个，被分为了两类，分别是：</span>
		</p>
		<p>
				<span>
						<span>q<span>         </span></span>
				</span>
				<span>国际化核心标签：</span>
				<span>
						<font face="Times New Roman">&lt;fmt:setLocale&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;fmt:bundle&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;fmt:setBundle&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;fmt:message&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;fmt:param&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;fmt:requestEncoding&gt;</font>
				</span>
				<span>。</span>
		</p>
		<p>
				<span>
						<span>q<span>         </span></span>
				</span>
				<span>格式化标签：</span>
				<span>
						<font face="Times New Roman">&lt;fmt:timeZone&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;fmt:setTimeZone&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;fmt:formatNumber&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;fmt:parseNumber&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;fmt:formatDate&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;fmt:parseDate&gt;</font>
				</span>
				<span>。</span>
		</p>
		<p>
				<span>下面只选择其中常见的一些标签和属性进行介绍。</span>
		</p>
		<h3>
				<a name="_Toc134092060">
				</a>
				<a name="_Toc133721048">
				</a>
				<a name="_Toc133394899">
						<span>
								<span>
										<span>
												<font face="Arial">9.5.1 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>用于设置本地化环境的</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;fmt:setLocale&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>标签</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">&lt;fmt:setLocale&gt;</font>
				</span>
				<span>标签用于设置</span>
				<span>
						<font face="Times New Roman">Locale</font>
				</span>
				<span>环境。它的属性和描述如表</span>
				<span>
						<font face="Times New Roman">9.17</font>
				</span>
				<span>所示：</span>
		</p>
		<p>
				<span>表</span>
				<span>
						<font face="Arial">9.17</font>
				</span>
				<span>　</span>
				<span>
						<font face="Arial">&lt;fmt:setLocale&gt;</font>
				</span>
				<span>标签属性和说明</span>
		</p>
		<div align="center">
				<table cellspacing="0" cellpadding="0" width="385" border="1">
						<tbody>
								<tr>
										<td width="49">
												<p>
														<span>属性</span>
												</p>
										</td>
										<td width="336">
												<p>
														<span>描述</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="49">
												<p>
														<span>
																<font face="Times New Roman">value</font>
														</span>
												</p>
										</td>
										<td width="336">
												<p>
														<span>
																<font face="Times New Roman">Locale</font>
														</span>
														<span>环境的指定，可以是</span>
														<span>
																<font face="Times New Roman">java.util.Locale</font>
														</span>
														<span>或</span>
														<span>
																<font face="Times New Roman">String</font>
														</span>
														<span>类型的实例</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="49">
												<p>
														<span>
																<font face="Times New Roman">scope</font>
														</span>
												</p>
										</td>
										<td width="336">
												<p>
														<span>
																<font face="Times New Roman">Locale</font>
														</span>
														<span>环境变量的作用范围（可选）</span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>
				<span>下面看一个示例：</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;fmt:setLocale value="zh_TW"/&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>表示设置本地环境为繁体中文。</span>
		</p>
		<h3>
				<a name="_Toc134092061">
				</a>
				<a name="_Toc133721049">
				</a>
				<a name="_Toc133394900">
						<span>
								<span>
										<span>
												<font face="Arial">9.5.2 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>用于资源文件绑定的</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;fmt:bundle&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>、</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;fmt:setBundle&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>标签</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>这两组标签用于资源配置文件的绑定，唯一不同的是</span>
				<span>
						<font face="Times New Roman">&lt;fmt:bundle&gt;</font>
				</span>
				<span>标签将资源配置文件绑定于它标签体中的显示，</span>
				<span>
						<font face="Times New Roman">&lt;fmt:setBundle&gt;</font>
				</span>
				<span>标签则允许将资源配置文件保存为一个变量，在之后的<nobr><a oncontextmenu="return false;" onmousemove="kwM(5);" onmouseover="kwE(event,5);" onclick="window.open('http://58.53.192.49/search.php?keyword=工作','_blank');" onmouseout="kwL(event);" target="_blank">工作</a></nobr>可以根据该变量来进行。</span>
		</p>
		<p>
				<span>根据</span>
				<span>
						<font face="Times New Roman">Locale</font>
				</span>
				<span>环境的不同将查找不同后缀的资源配置文件，这点在国际化的任何技术上都是一致的，通常来说，这两种标签单独使用是没有意义的，它们都会与</span>
				<span>
						<font face="Times New Roman">I18N formatting</font>
				</span>
				<span>标签库中的其他标签配合使用。它们的属性和描述如表</span>
				<span>
						<font face="Times New Roman">9.18</font>
				</span>
				<span>所示：</span>
		</p>
		<p>
				<span>表</span>
				<span>
						<font face="Arial">9.18</font>
				</span>
				<span>　</span>
				<span>
						<font face="Arial">&lt;fmt:bundle&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Arial">&lt;fmt:setBundle&gt;</font>
				</span>
				<span>标签属性和说明</span>
		</p>
		<div align="center">
				<table cellspacing="0" cellpadding="0" width="490" border="1">
						<tbody>
								<tr>
										<td width="69">
												<p>
														<span>属性</span>
												</p>
										</td>
										<td width="421">
												<p>
														<span>描述</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="69">
												<p>
														<span>
																<font face="Times New Roman">basename</font>
														</span>
												</p>
										</td>
										<td width="421">
												<p>
														<span>资源配置文件的指定，只需要指定文件名而无须扩展名，二组标签共有的属性</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="69">
												<p>
														<span>
																<font face="Times New Roman">var</font>
														</span>
												</p>
										</td>
										<td width="421">
												<p>
														<span>
																<font face="Times New Roman">&lt;fmt:setBundle&gt;</font>
														</span>
														<span>独有的属性，用于保存资源配置文件为一个变量</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="69">
												<p>
														<span>
																<font face="Times New Roman">scope</font>
														</span>
												</p>
										</td>
										<td width="421">
												<p>
														<span>变量的作用范围</span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>
				<span>下面看一个示例</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;fmt:setLocale value="zh_CN"/&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;fmt:setBundle basename="applicationMessage" var="applicationBundle"/&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>该示例将会查找一个名为</span>
				<span>
						<font face="Times New Roman">applicationMessage_zh_CN.properties</font>
				</span>
				<span>的资源配置文件，来作为显示的</span>
				<span>
						<font face="Times New Roman">Resource</font>
				</span>
				<span>绑定。</span>
		</p>
		<h3>
				<a name="_Toc134092062">
				</a>
				<a name="_Toc133721050">
				</a>
				<a name="_Toc133394901">
						<span>
								<span>
										<span>
												<font face="Arial">9.5.3 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>用于显示资源配置文件信息的</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;fmt:message&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>标签</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>用于信息显示的标签，将显示资源配置文件中定义的信息。它的属性和描述如表</span>
				<span>
						<font face="Times New Roman">9.19</font>
				</span>
				<span>所示：</span>
		</p>
		<p>
				<span>表</span>
				<span>
						<font face="Arial">9.19</font>
				</span>
				<span>　</span>
				<span>
						<font face="Arial">&lt;fmt:<span>message</span>&gt;</font>
				</span>
				<span>标签属性和说明</span>
		</p>
		<div align="center">
				<table cellspacing="0" cellpadding="0" width="568" border="1">
						<tbody>
								<tr>
										<td width="55">
												<p>
														<span>属性</span>
												</p>
										</td>
										<td width="513">
												<p>
														<span>描述</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="55">
												<p>
														<span>
																<font face="Times New Roman">key</font>
														</span>
												</p>
										</td>
										<td width="513">
												<p>
														<span>资源配置文件的“键”指定</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="55">
												<p>
														<span>
																<font face="Times New Roman">bundle</font>
														</span>
												</p>
										</td>
										<td width="513">
												<p>
														<span>若使用</span>
														<span>
																<font face="Times New Roman">&lt;fmt:setBundle&gt;</font>
														</span>
														<span>保存了资源配置文件，该属性就可以从保存的资源配置文件中进行查找</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="55">
												<p>
														<span>
																<font face="Times New Roman">var</font>
														</span>
												</p>
										</td>
										<td width="513">
												<p>
														<span>将显示信息保存为一个变量</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="55">
												<p>
														<span>
																<font face="Times New Roman">scope</font>
														</span>
												</p>
										</td>
										<td width="513">
												<p>
														<span>变量的作用范围</span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>
				<span>下面看一个示例：</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;fmt:setBundle basename="applicationMessage" var="applicationBundle"/&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;fmt:bundle basename="applicationAllMessage"&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">
										<span>         </span>&lt;fmt:message key="userName" /&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">
										<span>         </span>&lt;p&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">
										<span>         </span>&lt;fmt:message key="passWord" bundle="${applicationBundle}" /&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;/fmt:bundle&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>该示例使用了两种资源配置文件的绑定的做法，“</span>
				<span>
						<font face="Times New Roman">applicationMessage</font>
				</span>
				<span>”资源配置文件利用</span>
				<span>
						<font face="Times New Roman">&lt;fmt:setBundle&gt;</font>
				</span>
				<span>标签被赋于了变量“</span>
				<span>
						<font face="Times New Roman">applicationBundle</font>
				</span>
				<span>”，而作为</span>
				<span>
						<font face="Times New Roman">&lt;fmt:bundle&gt;</font>
				</span>
				<span>标签定义的“</span>
				<span>
						<font face="Times New Roman">applicationAllMessage</font>
				</span>
				<span>”资源配置文件作用于其标签体内的显示。</span>
		</p>
		<p>
				<span>
						<span>q<span>         </span></span>
				</span>
				<span>第一个</span>
				<span>
						<font face="Times New Roman">&lt;fmt:message&gt;</font>
				</span>
				<span>标签将使用“</span>
				<span>
						<font face="Times New Roman">applicationAllMessage</font>
				</span>
				<span>”资源配置文件中“键”为“</span>
				<span>
						<font face="Times New Roman">userName</font>
				</span>
				<span>”的信息显示。</span>
		</p>
		<p>
				<span>
						<span>q<span>         </span></span>
				</span>
				<span>第二个</span>
				<span>
						<font face="Times New Roman">&lt;fmt:message&gt;</font>
				</span>
				<span>标签虽然被定义在</span>
				<span>
						<font face="Times New Roman">&lt;fmt:bundle&gt;</font>
				</span>
				<span>标签体内，但是它使用了</span>
				<span>
						<font face="Times New Roman">bundle</font>
				</span>
				<span>属性，因此将指定之前由</span>
				<span>
						<font face="Times New Roman">&lt;fmt:setBundle&gt;</font>
				</span>
				<span>标签保存的“</span>
				<span>
						<font face="Times New Roman">applicationMessage</font>
				</span>
				<span>”资源配置文件，该“键”为“</span>
				<span>
						<font face="Times New Roman">passWord</font>
				</span>
				<span>”的信息显示。</span>
		</p>
		<h3>
				<a name="_Toc134092063">
				</a>
				<a name="_Toc133721051">
				</a>
				<a name="_Toc133394902">
						<span>
								<span>
										<span>
												<font face="Arial">9.5.4 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>用于参数传递的</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;fmt:param&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>标签</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">&lt;fmt:param&gt;</font>
				</span>
				<span>标签应该位于</span>
				<span>
						<font face="Times New Roman">&lt;fmt:message&gt;</font>
				</span>
				<span>标签内，将为该消息标签提供参数值。它只有一个属性</span>
				<span>
						<font face="Times New Roman">value</font>
				</span>
				<span>。</span>
		</p>
		<p>
				<span>
						<font face="Times New Roman">&lt;fmt:param&gt;</font>
				</span>
				<span>标签有两种使用版本，一种是直接将参数值写在</span>
				<span>
						<font face="Times New Roman">value</font>
				</span>
				<span>属性中，另一种是将参数值写在标签体内。</span>
		</p>
		<h3>
				<a name="_Toc134092064">
				</a>
				<a name="_Toc133721052">
				</a>
				<a name="_Toc133394903">
						<span>
								<span>
										<span>
												<font face="Arial">9.5.6 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>用于为请求设置字符编码的</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;fmt:requestEncoding&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>标签</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">&lt;fmt:requestEncoding&gt;</font>
				</span>
				<span>标签用于为请求设置字符编码。它只有一个属性</span>
				<span>
						<font face="Times New Roman">value</font>
				</span>
				<span>，在该属性中可以定义字符编码。</span>
		</p>
		<h3>
				<a name="_Toc134092065">
				</a>
				<a name="_Toc133721053">
				</a>
				<a name="_Toc133394904">
						<span>
								<span>
										<span>
												<font face="Arial">9.5.7 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>用于设定时区的</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;fmt:timeZone&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>、</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;fmt:setTimeZone&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>标签</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>这两组标签都用于设定一个时区。唯一不同的是</span>
				<span>
						<font face="Times New Roman">&lt;fmt:timeZone&gt;</font>
				</span>
				<span>标签将使得在其标签体内的工作可以使用该时区设置，</span>
				<span>
						<font face="Times New Roman">&lt;fmt:setBundle&gt;</font>
				</span>
				<span>标签则允许将时区设置保存为一个变量，在之后的工作可以根据该变量来进行。它们的属性和描述如表</span>
				<span>
						<font face="Times New Roman">9.20</font>
				</span>
				<span>所示：</span>
		</p>
		<p>
				<span>表</span>
				<span>
						<font face="Arial">9.20</font>
				</span>
				<span>　</span>
				<span>
						<font face="Arial">&lt;fmt:timeZone&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Arial">&lt;fmt:setTimeZone&gt;</font>
				</span>
				<span>标签</span>
				<span>属性和说明</span>
		</p>
		<div align="center">
				<table cellspacing="0" cellpadding="0" width="365" border="1">
						<tbody>
								<tr>
										<td width="53">
												<p>
														<span>属性</span>
												</p>
										</td>
										<td width="312">
												<p>
														<span>描述</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="53">
												<p>
														<span>
																<font face="Times New Roman">value</font>
														</span>
												</p>
										</td>
										<td width="312">
												<p>
														<span>时区的设置</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="53">
												<p>
														<span>
																<font face="Times New Roman">var</font>
														</span>
												</p>
										</td>
										<td width="312">
												<p>
														<span>
																<font face="Times New Roman">&lt;fmt:setTimeZone&gt;</font>
														</span>
														<span>独有的属性，用于保存时区为一个变量</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="53">
												<p>
														<span>
																<font face="Times New Roman">scope</font>
														</span>
												</p>
										</td>
										<td width="312">
												<p>
														<span>变量的作用范围</span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<h3>
				<a name="_Toc134092066">
				</a>
				<a name="_Toc133721054">
				</a>
				<a name="_Toc133394905">
						<span>
								<span>
										<span>
												<font face="Arial">9.5.8 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>用于格式化数字的</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;fmt:formatNumber&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>标签</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<font face="Times New Roman">
						<span>&lt;fmt:</span>
						<span>formatNumber</span>
						<span>&gt;</span>
				</font>
				<span>标</span>
				<span>签用于格式化数字。它的属性和描述如表</span>
				<span>
						<font face="Times New Roman">9.21</font>
				</span>
				<span>所示：</span>
		</p>
		<p>
				<span>表</span>
				<span>
						<font face="Arial">9.21</font>
				</span>
				<span>　</span>
				<span>
						<font face="Arial">&lt;fmt:formatNumber&gt;</font>
				</span>
				<span>标签属性和说明</span>
		</p>
		<div align="center">
				<table cellspacing="0" cellpadding="0" width="489" border="1">
						<tbody>
								<tr>
										<td width="104">
												<p>
														<span>属性</span>
												</p>
										</td>
										<td width="384">
												<p>
														<span>描述</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="104">
												<p>
														<span>
																<font face="Times New Roman">value</font>
														</span>
												</p>
										</td>
										<td width="384">
												<p>
														<span>格式化的数字，该数值可以是</span>
														<span>
																<font face="Times New Roman">String</font>
														</span>
														<span>类型或</span>
														<span>
																<font face="Times New Roman">java.lang.Number</font>
														</span>
														<span>类型的实例</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="104">
												<p>
														<span>
																<font face="Times New Roman">type</font>
														</span>
												</p>
										</td>
										<td width="384">
												<p>
														<span>格式化的类型</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="104">
												<p>
														<span>
																<font face="Times New Roman">pattern</font>
														</span>
												</p>
										</td>
										<td width="384">
												<p>
														<span>格式化模式</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="104">
												<p>
														<span>
																<font face="Times New Roman">var</font>
														</span>
												</p>
										</td>
										<td width="384">
												<p>
														<span>结果保存变量</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="104">
												<p>
														<span>
																<font face="Times New Roman">scope</font>
														</span>
												</p>
										</td>
										<td width="384">
												<p>
														<span>变量的作用范围</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="104">
												<p>
														<span>
																<font face="Times New Roman">maxIntegerDigits</font>
														</span>
												</p>
										</td>
										<td width="384">
												<p>
														<span>指定格式化结果的最大值</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="104">
												<p>
														<span>
																<font face="Times New Roman">minIntegerDigits</font>
														</span>
												</p>
										</td>
										<td width="384">
												<p>
														<span>指定格式化结果的最小值</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="104">
												<p>
														<span>
																<font face="Times New Roman">maxFractionDigits</font>
														</span>
												</p>
										</td>
										<td width="384">
												<p>
														<span>指定格式化结果的最大值，带小数</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="104">
												<p>
														<span>
																<font face="Times New Roman">minFractionDigits</font>
														</span>
												</p>
										</td>
										<td width="384">
												<p>
														<span>指定格式化结果的最小值，带小数</span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>
				<span>
						<font face="Times New Roman">&lt;fmt:formatNumber&gt;</font>
				</span>
				<span>标签实际是对应</span>
				<span>
						<font face="Times New Roman">java.util.NumberFormat</font>
				</span>
				<span>类，</span>
				<span>
						<font face="Times New Roman">type</font>
				</span>
				<span>属性的可能值包括</span>
				<span>
						<font face="Times New Roman">currency</font>
				</span>
				<span>（货币）、</span>
				<span>
						<font face="Times New Roman">number</font>
				</span>
				<span>（数字）和</span>
				<span>
						<font face="Times New Roman">percent</font>
				</span>
				<span>（百分比）。</span>
		</p>
		<p>
				<span>下面看一个示例。</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;fmt:formatNumber value="1000.888" type="currency" var="money"/&gt;</font>
						</font>
				</span>
		</p>
		<div>
				<span>该结果将被保存在“</span>
				<span>
						<font face="Times New Roman">money</font>
				</span>
				<span>”变量中，将根据</span>
				<span>
						<font face="Times New Roman">Locale</font>
				</span>
				<span>环境显示当地的货币格式。</span>
				<span>
				</span>
		</div>
		<div>
				<br />
		</div>
		<h3>
				<a name="_Toc134092067">
				</a>
				<a name="_Toc133721055">
				</a>
				<a name="_Toc133394906">
						<span>
								<span>
										<span>
												<font face="Arial">9.5.9 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>用于解析数字的</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;fmt:parseNumber&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>标签</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">&lt;fmt:parseNumber&gt;</font>
				</span>
				<span>标签用于解析一个数字，并将结果作为</span>
				<span>
						<font face="Times New Roman">java.lang.Number</font>
				</span>
				<span>类的实例返回。</span>
				<span>
						<font face="Times New Roman">&lt;fmt:parseNumber&gt;</font>
				</span>
				<span>标签看起来和</span>
				<span>
						<font face="Times New Roman">&lt;fmt:formatNumber&gt;</font>
				</span>
				<span>标签的作用正好相反。它的属性和描述如表</span>
				<span>
						<font face="Times New Roman">9.22</font>
				</span>
				<span>所示：</span>
		</p>
		<p>
				<span>表</span>
				<span>
						<font face="Arial">9.22</font>
				</span>
				<span>　</span>
				<span>
						<font face="Arial">&lt;fmt:<span>parseNumber</span>&gt;</font>
				</span>
				<span>标签属性和说明</span>
		</p>
		<div align="center">
				<table cellspacing="0" cellpadding="0" width="535" border="1">
						<tbody>
								<tr>
										<td width="72">
												<p>
														<span>属性</span>
												</p>
										</td>
										<td width="463">
												<p>
														<span>描述</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="72">
												<p>
														<span>
																<font face="Times New Roman">value</font>
														</span>
												</p>
										</td>
										<td width="463">
												<p>
														<span>将被解析的字符串</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="72">
												<p>
														<span>
																<font face="Times New Roman">type</font>
														</span>
												</p>
										</td>
										<td width="463">
												<p>
														<span>解析格式化的类型</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="72">
												<p>
														<span>
																<font face="Times New Roman">pattern</font>
														</span>
												</p>
										</td>
										<td width="463">
												<p>
														<span>解析格式化模式</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="72">
												<p>
														<span>
																<font face="Times New Roman">var</font>
														</span>
												</p>
										</td>
										<td width="463">
												<p>
														<span>结果保存变量，类型为</span>
														<span>
																<font face="Times New Roman">java.lang.Number</font>
														</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="72">
												<p>
														<span>
																<font face="Times New Roman">scope</font>
														</span>
												</p>
										</td>
										<td width="463">
												<p>
														<span>变量的作用范围</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="72">
												<p>
														<span>
																<font face="Times New Roman">parseLocale</font>
														</span>
												</p>
										</td>
										<td width="463">
												<p>
														<span>以本地化的形式来解析字符串，该属性的内容应为</span>
														<span>
																<font face="Times New Roman">String</font>
														</span>
														<span>或</span>
														<span>
																<font face="Times New Roman">java.util.Locale</font>
														</span>
														<span>类型的实例</span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>
				<span>下面看一个示例。</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;fmt:parseNumber value="15%" type="percent" var="num"/&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>解析之后的结果为“</span>
				<span>
						<font face="Times New Roman">0.15</font>
				</span>
				<span>”。</span>
		</p>
		<h3>
				<a name="_Toc134092068">
				</a>
				<a name="_Toc133721056">
				</a>
				<a name="_Toc133394907">
						<span>
								<span>
										<span>
												<font face="Arial">9.5.10 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>用于格式化日期的</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;fmt:formatDate&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>标签</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">&lt;fmt:formatDate&gt;</font>
				</span>
				<span>标签用于格式化日期。它的属性和描述如表</span>
				<span>
						<font face="Times New Roman">9.23</font>
				</span>
				<span>所示：</span>
		</p>
		<p>
				<span>表</span>
				<span>
						<font face="Arial">9.23</font>
				</span>
				<span>　</span>
				<span>
						<font face="Arial">&lt;fmt:<span>formatDate</span>&gt;</font>
				</span>
				<span>标签属性和说明</span>
		</p>
		<div align="center">
				<table cellspacing="0" cellpadding="0" width="448" border="1">
						<tbody>
								<tr>
										<td width="105">
												<p>
														<span>属性</span>
												</p>
										</td>
										<td width="343">
												<p>
														<span>描述</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="105">
												<p>
														<span>
																<font face="Times New Roman">value</font>
														</span>
												</p>
										</td>
										<td width="343">
												<p>
														<span>格式化的日期，该属性的内容应该是</span>
														<span>
																<font face="Times New Roman">java.util.Date</font>
														</span>
														<span>类型的实例</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="105">
												<p>
														<span>
																<font face="Times New Roman">type</font>
														</span>
												</p>
										</td>
										<td width="343">
												<p>
														<span>格式化的类型</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="105">
												<p>
														<span>
																<font face="Times New Roman">pattern</font>
														</span>
												</p>
										</td>
										<td width="343">
												<p>
														<span>格式化模式</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="105">
												<p>
														<span>
																<font face="Times New Roman">var</font>
														</span>
												</p>
										</td>
										<td width="343">
												<p>
														<span>结果保存变量</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="105">
												<p>
														<span>
																<font face="Times New Roman">scope</font>
														</span>
												</p>
										</td>
										<td width="343">
												<p>
														<span>变量的作用范围</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="105">
												<p>
														<span>
																<font face="Times New Roman">timeZone</font>
														</span>
												</p>
										</td>
										<td width="343">
												<p>
														<span>指定格式化日期的时区</span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>
				<span>
						<font face="Times New Roman">&lt;fmt:formatDate&gt;</font>
				</span>
				<span>标签与</span>
				<span>
						<font face="Times New Roman">&lt;fmt:timeZone&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;fmt:setTimeZone&gt;</font>
				</span>
				<span>两组标签的关系密切。若没有指定</span>
				<span>timeZone属性，</span>
				<span>也可以通过</span>
				<span>
						<font face="Times New Roman">&lt;fmt:timeZone&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;fmt:setTimeZone&gt;</font>
				</span>
				<span>两组标签设定的时区来格式化最后的结果。</span>
		</p>
		<h3>
				<a name="_Toc134092069">
				</a>
				<a name="_Toc133721057">
				</a>
				<a name="_Toc133394908">
						<span>
								<span>
										<span>
												<font face="Arial">9.5.11 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>用于解析日期的</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;fmt:parseDate&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>标签</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">&lt;fmt:parseDate&gt;</font>
				</span>
				<span>标签用于解析一个日期，并将结果作为</span>
				<span>
						<font face="Times New Roman">java.lang.Date</font>
				</span>
				<span>类型的实例返回。</span>
				<span>
						<font face="Times New Roman">&lt;fmt:parseDate&gt;</font>
				</span>
				<span>标签看起来和</span>
				<span>
						<font face="Times New Roman">&lt;fmt:formatDate&gt;</font>
				</span>
				<span>标签的作用正好相反。它的属性和描述如表</span>
				<span>
						<font face="Times New Roman">9.24</font>
				</span>
				<span>所示：</span>
		</p>
		<p>
				<span>表</span>
				<span>
						<font face="Arial">9.24</font>
				</span>
				<span>　</span>
				<span>
						<font face="Arial">&lt;fmt:parseDate&gt;</font>
				</span>
				<span>标签属性和说明</span>
		</p>
		<div align="center">
				<table cellspacing="0" cellpadding="0" width="523" border="1">
						<tbody>
								<tr>
										<td width="72">
												<p>
														<span>属性</span>
												</p>
										</td>
										<td width="451">
												<p>
														<span>描述</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="72">
												<p>
														<span>
																<font face="Times New Roman">value</font>
														</span>
												</p>
										</td>
										<td width="451">
												<p>
														<span>将被解析的字符串</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="72">
												<p>
														<span>
																<font face="Times New Roman">type</font>
														</span>
												</p>
										</td>
										<td width="451">
												<p>
														<span>解析格式化的类型</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="72">
												<p>
														<span>
																<font face="Times New Roman">pattern</font>
														</span>
												</p>
										</td>
										<td width="451">
												<p>
														<span>解析格式化模式</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="72">
												<p>
														<span>
																<font face="Times New Roman">var</font>
														</span>
												</p>
										</td>
										<td width="451">
												<p>
														<span>结果保存变量，类型为</span>
														<span>
																<font face="Times New Roman">java.lang.Date</font>
														</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="72">
												<p>
														<span>
																<font face="Times New Roman">scope</font>
														</span>
												</p>
										</td>
										<td width="451">
												<p>
														<span>变量的作用范围</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="72">
												<p>
														<span>
																<font face="Times New Roman">parseLocale</font>
														</span>
												</p>
										</td>
										<td width="451">
												<p>
														<span>以本地化的形式来解析字符串，该属性的内容为</span>
														<span>
																<font face="Times New Roman">String</font>
														</span>
														<span>或</span>
														<span>
																<font face="Times New Roman"> java.util.Locale</font>
														</span>
														<span>类型的实例</span>
												</p>
										</td>
								</tr>
								<tr>
										<td width="72">
												<p>
														<span>
																<font face="Times New Roman">timeZone</font>
														</span>
												</p>
										</td>
										<td width="451">
												<p>
														<span>指定解析格式化日期的时区</span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>
				<span>
						<font face="Times New Roman">&lt;fmt:parseNumber&gt;</font>
				</span>
				<span>和</span>
				<span>
						<font face="Times New Roman">&lt;fmt:parseDate&gt;</font>
				</span>
				<span>两组标签都实现解析字符串为一个具体对象实例的工作，因此，这两组解析标签对</span>
				<span>
						<font face="Times New Roman">var</font>
				</span>
				<span>属性的字符串参数要求非常严格。就</span>
				<span>
						<font face="Times New Roman">JSP</font>
				</span>
				<span>页面的表示层前段来说，处理这种解析本不属于份内之事，因此</span>
				<span>
						<font face="Times New Roman">&lt;fmt:parseNumber&gt;</font>
				</span>
				<span>和</span>
				<span>
						<font face="Times New Roman">&lt;fmt:parseDate&gt;</font>
				</span>
				<span>两组标签应该尽量少用，替代工作的地方应该在服务器端表示层的后段，比如在</span>
				<span>
						<font face="Times New Roman">Servlet</font>
				</span>
				<span>中。</span>
		</p>
<img src ="http://www.blogjava.net/nbtymm/aggbug/94653.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2007-01-18 15:17 <a href="http://www.blogjava.net/nbtymm/archive/2007/01/18/94653.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL详解(四)</title><link>http://www.blogjava.net/nbtymm/archive/2007/01/18/94599.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Thu, 18 Jan 2007 03:45:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2007/01/18/94599.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/94599.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2007/01/18/94599.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/94599.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/94599.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 9.3.9  																																																																				用于包含页面的																																																										&lt;c:import&gt;								...&nbsp;&nbsp;<a href='http://www.blogjava.net/nbtymm/archive/2007/01/18/94599.html'>阅读全文</a><img src ="http://www.blogjava.net/nbtymm/aggbug/94599.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2007-01-18 11:45 <a href="http://www.blogjava.net/nbtymm/archive/2007/01/18/94599.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL详解(三)</title><link>http://www.blogjava.net/nbtymm/archive/2007/01/18/94593.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Thu, 18 Jan 2007 03:25:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2007/01/18/94593.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/94593.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2007/01/18/94593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/94593.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/94593.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 9.3.2  																																																																				用于赋值的																																																										&lt;c:set&gt;											...&nbsp;&nbsp;<a href='http://www.blogjava.net/nbtymm/archive/2007/01/18/94593.html'>阅读全文</a><img src ="http://www.blogjava.net/nbtymm/aggbug/94593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2007-01-18 11:25 <a href="http://www.blogjava.net/nbtymm/archive/2007/01/18/94593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL详解(二)</title><link>http://www.blogjava.net/nbtymm/archive/2007/01/18/94562.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Thu, 18 Jan 2007 02:02:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2007/01/18/94562.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/94562.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2007/01/18/94562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/94562.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/94562.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 9.2.3  EL																																																																								表达式的操作符																																																																										...&nbsp;&nbsp;<a href='http://www.blogjava.net/nbtymm/archive/2007/01/18/94562.html'>阅读全文</a><img src ="http://www.blogjava.net/nbtymm/aggbug/94562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2007-01-18 10:02 <a href="http://www.blogjava.net/nbtymm/archive/2007/01/18/94562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL详解(一)</title><link>http://www.blogjava.net/nbtymm/archive/2007/01/18/94558.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Thu, 18 Jan 2007 01:57:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2007/01/18/94558.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/94558.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2007/01/18/94558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/94558.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/94558.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 概述																																																																																																																																																																		...&nbsp;&nbsp;<a href='http://www.blogjava.net/nbtymm/archive/2007/01/18/94558.html'>阅读全文</a><img src ="http://www.blogjava.net/nbtymm/aggbug/94558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2007-01-18 09:57 <a href="http://www.blogjava.net/nbtymm/archive/2007/01/18/94558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Excel报表之js版</title><link>http://www.blogjava.net/nbtymm/archive/2006/08/07/62118.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Mon, 07 Aug 2006 02:16:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2006/08/07/62118.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/62118.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2006/08/07/62118.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/62118.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/62118.html</trackback:ping><description><![CDATA[(转自--http://www.blogjava.net/beyondduke/archive/2006/08/05/61911.html)<br />半年以前做过server端生成excel的简单引擎，总感觉不够轻便，尤其在一些固定格式，数据量又不是很大的情况下，上周写了一<br /><br />个根据表单数据在client端用js生成excle的demo，令我我激动了半天------js太强了！<br /><br />下面分享一下这段js： <br />  
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> excel  </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ActiveXObject(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Excel.Application</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建AX对象excel</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">excel.visible </span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置excel可见属性</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> workbook </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> excel.Workbooks.Add; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取workbook对象</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> sheet1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> xlBook.Worksheets(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建sheet1</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> sheet2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> xlBook.Worksheets(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建sheet2</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">sheet1.Range(sheet1.Cells(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">),sheet1.Cells(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">14</span><span style="COLOR: #000000">)).mergecells</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">合并单元格</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">sheet1.Range(sheet1.Cells(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">),sheet1.Cells(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">14</span><span style="COLOR: #000000">)).value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">员工月考核成绩</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置单元格内容</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">sheet1.Range(sheet1.Cells(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">),sheet1.Cells(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">14</span><span style="COLOR: #000000">)).Interior.ColorIndex</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置底色 </span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">sheet1.Range(sheet1.Cells(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">),sheet1.Cells(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">14</span><span style="COLOR: #000000">)).Font.ColorIndex</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置字体色 </span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">sheet1.Rows(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">).RowHeight </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置列高</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">sheet1.Rows(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">).Font.Size</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">;  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置文字大小</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">sheet1.Rows(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">).Font.Name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">宋体</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置字体</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />//</span><span style="COLOR: #008000">设置每一列的标题</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">工程师考核项</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">总分</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">研发进度</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">出勤率</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">执行力</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">责任心</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">工作规范</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">协作精神</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">进取性</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">工作合理性</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">解决问题能力</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">应变能力</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">人际技能</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">14</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">理解能力</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">从表单循环控件中取出数据逐行插入对应列的数据</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">29</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> count </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetAttributeValue('Repeat','Count');<br /></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img id="Codehighlighter1_1253_2657_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1253_2657_Open_Text.style.display='none'; Codehighlighter1_1253_2657_Closed_Image.style.display='inline'; Codehighlighter1_1253_2657_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1253_2657_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1253_2657_Closed_Text.style.display='none'; Codehighlighter1_1253_2657_Open_Image.style.display='inline'; Codehighlighter1_1253_2657_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> line</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;line</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">count;line</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id="Codehighlighter1_1253_2657_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1253_2657_Open_Text"><span style="COLOR: #000000">{ </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">begin for</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> name  </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].name');<br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> total</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].total');<br /></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> yfjd </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].yfjd');<br /></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> jh </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].jh');<br /></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> gcgj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].gcgj');<br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> cql </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].cql');<br /></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> zxl </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].zxl');<br /></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> gzgf </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].gzgf');<br /></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> zrx </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].zrx');<br /></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> xzjs </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].xzjs');<br /></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> jqx </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].jqx');<br /></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> gzhl </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].gzh');<br /></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> jjwt </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].jjwt');<br /></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> ybnl </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].ybnl');<br /></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> rjjn </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].rjjn');<br /></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> ljnl </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sfform.GetValue('Repeat['</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">'].ljnl');<br /></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">name;<br /></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">total;<br /></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">yfjd;<br /></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">cql;<br /></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">zxl;<br /></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">gzgf;<br /></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line,</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">zrx;<br /></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line,</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">xzjs;<br /></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line,</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">jqx;<br /></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line,</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">gzhl;<br /></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line,</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">jjwt;<br /></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line,</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ybnl;<br /></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line,</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">rjjn;<br /></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  sheet1.Cells(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line,</span><span style="COLOR: #000000">14</span><span style="COLOR: #000000">).Value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ljnl;<br /></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">end for</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">63</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />基本的代码已经实现了，生成excel的格式和一些统计计算，用js写应该是很方便的，以后有例子再作补充。<br /><br />从代码角度来看这种写法不是很灵活，但在能满足用户的需求前提下，这种生成方式还是很受欢迎的，给用户的感觉就是轻<br /><br />便。个人认为简单就是美！ <img src ="http://www.blogjava.net/nbtymm/aggbug/62118.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2006-08-07 10:16 <a href="http://www.blogjava.net/nbtymm/archive/2006/08/07/62118.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>统计在线人数</title><link>http://www.blogjava.net/nbtymm/archive/2006/08/03/61442.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Thu, 03 Aug 2006 00:33:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2006/08/03/61442.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/61442.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2006/08/03/61442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/61442.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/61442.html</trackback:ping><description><![CDATA[
		<span id="post1" style="FONT-SIZE: 12px; COLOR: #000000">//SessionCounter.java<font color="#ffffff">\ozdvw</font><br />package SessionCount;<font color="#ffffff">e?</font><br />import javax.servlet.*; <font color="#ffffff">L9k0</font><br />import javax.servlet.http.*; <font color="#ffffff">plT</font><br />import java.io.*; <font color="#ffffff">w;</font><br />import java.util.*; <font color="#ffffff">JC;@</font><br /><font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　@b!Q5</font><br />public class SessionCounter extends HttpServlet  implements HttpSessionListener { <font color="#ffffff">2#</font><br />private static final String CONTENT_TYPE = "text/html; charset=GBK"; <font color="#ffffff">bd35</font><br />private static int activeSessions = 1; <font color="#ffffff">xZi"Yx</font><br />//Initialize global variables <font color="#ffffff">+iRX;1</font><br />public void init() throws ServletException { <font color="#ffffff">n3</font><br /><font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　{Ytdk</font><br />} <font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　ri04&amp;</font><br /><font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　C</font><br />//Process the HTTP Get request <font color="#ffffff">@8Ob%</font><br />public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { <font color="#ffffff">zH</font><br />  response.setContentType(CONTENT_TYPE); <font color="#ffffff">EPjJ</font><br />  HttpSession session=request.getSession(); <font color="#ffffff">]g</font><br />} <font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　)9lR?P</font><br /><font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　!S</font><br />//Clean up resources <font color="#ffffff">UxUNe</font><br />public void destroy() { <font color="#ffffff">:=e2NM</font><br />} <font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　W'F</font><br /><font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　aHW&amp;x9</font><br />public void sessionCreated(HttpSessionEvent httpSessionEvent) { <font color="#ffffff">HH</font><br />  activeSessions++; <font color="#ffffff">DyZpv</font><br />} <font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　4WJ</font><br /><font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　8)#.</font><br />public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { <font color="#ffffff">\s,_t</font><br />  activeSessions--; <font color="#ffffff">*z</font><br />  System.out.println("test test");<font color="#ffffff">$s0T@W</font><br />//  System.out.println("---111"); <font color="#ffffff">ZF+</font><br />} <font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　MX</font><br />public static int getActiveSessions() { <font color="#ffffff">tQ</font><br /> return activeSessions; <font color="#ffffff">)a4</font><br />} <font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　y%s</font><br />} <font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　n-=u*</font><br />／／／／<font color="#ffffff">$E</font><br />／／／／<font color="#ffffff">1^[</font><br />//count.jsp<font color="#ffffff">?</font><br />&lt;%@ page import="SessionCount.SessionCounter"%&gt; <font color="#ffffff">r-cXS</font><br />&lt;%@ page language="java"  contentType="text/html; charset=gb2312"<font color="#ffffff">{Z</font><br />   pageEncoding="gb2312"%&gt;<font color="#ffffff">~|Q"eP</font><br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<font color="#ffffff">, l</font><br />&lt;html&gt;<font color="#ffffff">z&gt;</font><br />&lt;head&gt;<font color="#ffffff">&amp;5)~</font><br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<font color="#ffffff">%G*M?</font><br />&lt;title&gt;Insert title here&lt;/title&gt;<font color="#ffffff">ij7z</font><br />&lt;/head&gt;<font color="#ffffff">$i:</font><br />&lt;script language="javascript" type="text/javascript"&gt;<font color="#ffffff">?.k</font><br />&lt;!--<font color="#ffffff">#*&gt;}</font><br />function MM_callJS(jsStr) { //v2.0<font color="#ffffff">mnu)IK</font><br /> return eval(jsStr)<font color="#ffffff">-A</font><br />}<font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　]M\-</font><br />//--&gt;<font color="#ffffff">#}q</font><br />&lt;/script&gt;<font color="#ffffff">rs(</font><br />&lt;script language="javascript"&gt;<font color="#ffffff">Ax%Qs3</font><br />function removeline(){<font color="#ffffff">Q \@</font><br />if(event.clientX&lt;0&amp;&amp;event.clientY&lt;0)<font color="#ffffff">.45</font><br />{<font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　y!Rw%u</font><br />document.write('&lt;iframe width="100" height="100" src="remove.jsp"&gt;&lt;/iframe&gt;&lt;OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0  id=WebBrowser width=0&gt;&lt;/OBJECT&gt;');<font color="#ffffff">Dgo!x</font><br />document.all.WebBrowser.ExecWB(45,1);<font color="#ffffff">[</font><br />}<font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　ad6+ </font><br />}<font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　1`maF</font><br />&lt;/script&gt;<font color="#ffffff">0.</font><br /><font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　9</font><br />&lt;body onUnload="MM_callJS('removeline()')"&gt;<font color="#ffffff">I=QwN</font><br />在线：&lt;%= SessionCounter.getActiveSessions() %&gt; <font color="#ffffff">Abd\</font><br />&lt;/body&gt;<font color="#ffffff">.</font><br />&lt;/html&gt;<font color="#ffffff">YZmy</font><br />////////////////////////////////<font color="#ffffff">6K6(k</font><br />///////////////////////////////<font color="#ffffff">HoW?y</font><br />remove.jsp<font color="#ffffff">Z{&gt;=</font><br />/////<font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　]|65(</font><br />&lt;%@ page language="java" contentType="text/html; charset=gb2312"<font color="#ffffff">!</font><br />   pageEncoding="gb2312"%&gt;<font color="#ffffff">4"cD</font><br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<font color="#ffffff">|r&lt;G</font><br />&lt;html&gt;<font color="#ffffff">8</font><br />&lt;head&gt;<font color="#ffffff">m.</font><br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<font color="#ffffff">$#9</font><br />&lt;title&gt;Insert title here&lt;/title&gt;<font color="#ffffff">H/hoe0</font><br />&lt;/head&gt;<font color="#ffffff">z_g_</font><br />&lt;body&gt;<font color="#ffffff">?=9</font><br />&lt;%session.invalidate();%&gt;<font color="#ffffff">i</font><br />&lt;/body&gt;<font color="#ffffff">-r</font><br />&lt;/html&gt;<font color="#ffffff">Lw;7{.</font><br />///////////////////////////<font color="#ffffff">}PiE</font><br />/////////////////////////////<font color="#ffffff">[</font><br />web.html<font color="#ffffff">P&amp;</font><br />＾＾＾＾＾＾＾＾＾＾＾＾加上<font color="#ffffff">Bz2J</font><br />&lt;listener&gt; <font color="#ffffff">y+</font><br />  &lt;listener-class&gt;SessionCount.SessionCounter&lt;/listener-class&gt; <font color="#ffffff">q1d{</font><br />&lt;/listener&gt; <font color="#ffffff">h1</font><br /><span id="post2" style="FONT-SIZE: 12px; COLOR: #000000">if(event.clientX&lt;0&amp;&amp;event.clientY&lt;0)判断浏览器是关闭还是刷新 ，因为刷新也会调用onunload<font color="#f3f6fa">&amp;&amp;</font><br /><font color="#f3f6fa">©达内科技论坛 -- 达内科技论坛　　c07F</font><br />document.all.WebBrowser.ExecWB(45,1);是无提示的关闭浏览器<font color="#f3f6fa">!Q!*pf</font><br />classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 <font color="#f3f6fa">|0gLI</font><br />这个是调用不弹出对话框的方法，实际是调用系统的方法如下 <font color="#f3f6fa">]9M</font><br />document.all.WebBrowser.ExecWB(45,1); <font color="#f3f6fa">f:</font><br />因为在javascript当中不能调用java方法，所以选择另外写一个jsp文件用于调用，<font color="#f3f6fa">;?(5yi</font><br />invalidate()方法，<font color="#f3f6fa">(?A|`K</font><br /><font color="#f3f6fa">©达内科技论坛 -- 达内科技论坛　　xv</font><br />现在这个结果是正确的，因为我把private static int activeSessions = 1; ／／这里改成了1,本来照理应该设为0的，可以我运行第一次http://localhost:8080/servlet/count.jsp的时候得到的是0，所以我才把它改成1的，<font color="#f3f6fa">dKOp0</font><br />那们老师或同学知道的话，麻烦告诉怎么为事，为什么在第一次创建session时不能触发事件sessionCreated()<font color="#f3f6fa">Rw</font><br /><br /><span id="post3" style="FONT-SIZE: 12px; COLOR: #000000">现在这个结果是正确的，因为我把private static int activeSessions = 1; ／／这里改成了1,本来照理应该设为0的，可以我运行第一次http://localhost:8080/servlet/count.jsp的时候得到的是0，所以我才把它改成1的， <font color="#ffffff">h(</font><br />，为什么在第一次创建session时不能触发事件sessionCreated()<font color="#ffffff">g?</font><br /><br /><span id="post4" style="FONT-SIZE: 12px; COLOR: #000000">session是个双向机制，第一次访问的时候，是从客户端发起的，浏览器不知道这个网页是否需要session,所以浏览器不会创建sessionId,当这个请求到达服务器的时候，没有sessionId,<font color="#f3f6fa">d}--5</font><br /><font color="#f3f6fa">©达内科技论坛 -- 达内科技论坛　　r0_/S</font><br />SessionCounter 是被嵌在jsp里的，所以第一次显示的时候，得到jsp页面的session创建是在jsp页面滞后，也就是说SessionCounter是滞后于jsp页面的.<font color="#f3f6fa">xKTZrv</font><br /><font color="#f3f6fa">©达内科技论坛 -- 达内科技论坛　　V@)</font><br />顺便说一句，extends HttpServlet 是多余的。<font color="#f3f6fa">]&amp;</font><br /><br /><span id="post5" style="FONT-SIZE: 12px; COLOR: #000000">在页面里页设置一个退出按钮．调用quit.jsp<font color="#ffffff">=</font><br />它的内容是：<font color="#ffffff">h&gt;</font><br />我们用一个quit.jsp来处理用户退出系统的操作，quit.jsp负责注销session，及时释放资源。<font color="#ffffff">&gt;D6T</font><br /><font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　uj&amp;B</font><br />　　·注销session。<font color="#ffffff">Z5K&amp;</font><br /><font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　##</font><br />　　·关闭浏览器窗口。<font color="#ffffff">@Q(</font><br /><font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　TP^wA</font><br />　　其代码如下所示：<font color="#ffffff">"</font><br /><font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　IWeVHc</font><br />1. ＜%@ page contentType="text/html; charset=GBK" %＞<font color="#ffffff">z</font><br />2. ＜%<font color="#ffffff">E</font><br />3. 　session.invalidate();<font color="#ffffff">F"[}H</font><br />4. %＞<font color="#ffffff">A</font><br />5. ＜script language="javascript" ＞<font color="#ffffff">4_</font><br />6. 　window.opener = null;<font color="#ffffff">`ngL</font><br />7. 　window.close();<font color="#ffffff">M|j%</font><br />8. ＜/script＞ <font color="#ffffff">OnZH?</font><br /><font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　3-L-</font><br />　　其中第3行负责注销session，原先放入session的对象将解绑定，等待垃圾回收以释放资源。对于本例而言，session中有一个名为ses_userBean的userBean对象（它是在switch.jsp中放入session的），调用session.invalidate()后，userBean从session中解绑定，它的valueUnbound()方法会被触发调用，然后再等待垃圾回收。<font color="#ffffff">A/cr</font><br /><font color="#ffffff">©达内科技论坛 -- 达内科技论坛　　+Nb</font><br />　　第5~8行是一段javascript脚本程序，负责关闭窗口，如果网页不是通过脚本程序打开的（window.open()），调用window.close()脚本关闭窗口前，必须先将window.opener对象置为null，如第6行所示，否则浏览器会弹出一个确定关闭的对话框，笔者发现这个问题困扰了不少的Web程序员，故特别指出。<font color="#ffffff">s `|*)</font><br /></span></span></span></span></span>
<img src ="http://www.blogjava.net/nbtymm/aggbug/61442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2006-08-03 08:33 <a href="http://www.blogjava.net/nbtymm/archive/2006/08/03/61442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网页常用小技巧(JavaScript)</title><link>http://www.blogjava.net/nbtymm/archive/2006/07/25/59909.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Tue, 25 Jul 2006 00:42:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2006/07/25/59909.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/59909.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2006/07/25/59909.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/59909.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/59909.html</trackback:ping><description><![CDATA[
		<p>1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键 <br />&lt;table border oncontextmenu=return(false)&gt;&lt;td&gt;no&lt;/table&gt; 可用于Table </p>
		<p>2. &lt;body onselectstart="return false"&gt; 取消选取、防止复制 </p>
		<p>3. onpaste="return false" 不准粘贴 </p>
		<p>4. oncopy="return false;" oncut="return false;" 防止复制 </p>
		<p>5. &lt;link rel="Shortcut Icon" href="favicon.ico"&gt; IE地址栏前换成自己的图标 </p>
		<p>6. &lt;link rel="Bookmark" href="favicon.ico"&gt; 可以在收藏夹中显示出你的图标 </p>
		<p>7. &lt;input style="ime-mode:disabled"&gt; 关闭输入法 </p>
		<p>8. 永远都会带着框架 <br />&lt;script language="JavaScript"&gt;&lt;!-- <br />if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页 <br />// --&gt;&lt;/script&gt; </p>
		<p>9. 防止被人frame <br />&lt;SCRIPT LANGUAGE=JAVASCRIPT&gt;&lt;!--  <br />if (top.location != self.location)top.location=self.location; <br />// --&gt;&lt;/SCRIPT&gt; </p>
		<p>10. 网页将不能被另存为 <br />&lt;noscript&gt;&lt;iframe src=*.html&gt;&lt;/iframe&gt;&lt;/noscript&gt;  </p>
		<p>11. &lt;input type=button value=查看网页源代码  <br />onclick="window.location = "view-source:"+ "<a href="http://www.pconline.com.cn/">http://www.pconline.com.cn</a>""&gt; </p>
		<p>12.删除时确认 <br />&lt;a href="javascript:if(confirm("确实要删除吗?"))location="boos.asp?&amp;areyou=删除&amp;page=1""&gt;删除&lt;/a&gt;  </p>
		<p>13. 取得控件的绝对位置 <br />//Javascript <br />&lt;script language="Javascript"&gt; <br />function getIE(e){ <br />var t=e.offsetTop; <br />var l=e.offsetLeft; <br />while(e=e.offsetParent){ <br />t+=e.offsetTop; <br />l+=e.offsetLeft; <br />} <br />alert("top="+t+"/nleft="+l); <br />} <br />&lt;/script&gt; </p>
		<p>//VBScript <br />&lt;script language="VBScript"&gt;&lt;!-- <br />function getIE() <br />dim t,l,a,b <br />set a=document.all.img1 <br />t=document.all.img1.offsetTop <br />l=document.all.img1.offsetLeft <br />while a.tagName&lt;&gt;"BODY" <br />set a = a.offsetParent <br />t=t+a.offsetTop <br />l=l+a.offsetLeft <br />wend <br />msgbox "top="&amp;t&amp;chr(13)&amp;"left="&amp;l,64,"得到控件的位置" <br />end function <br />--&gt;&lt;/script&gt; </p>
		<p>14. 光标是停在文本框文字的最后 <br />&lt;script language="javascript"&gt; <br />function cc() <br />{ <br />var e = event.srcElement; <br />var r =e.createTextRange(); <br />r.moveStart("character",e.value.length); <br />r.collapse(true); <br />r.select(); <br />} <br />&lt;/script&gt; <br />&lt;input type=text name=text1 value="123" onfocus="cc()"&gt; </p>
		<p>15. 判断上一页的来源 <br />javascript: <br />document.referrer </p>
		<p>16. 最小化、最大化、关闭窗口 <br />&lt;object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"&gt;  <br />&lt;param name="Command" value="Minimize"&gt;&lt;/object&gt; <br />&lt;object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"&gt;  <br />&lt;param name="Command" value="Maximize"&gt;&lt;/object&gt; <br />&lt;OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"&gt; <br />&lt;PARAM NAME="Command" VALUE="Close"&gt;&lt;/OBJECT&gt; <br />&lt;input type=button value=最小化 onclick=hh1.Click()&gt; <br />&lt;input type=button value=最大化 onclick=hh2.Click()&gt; <br />&lt;input type=button value=关闭 onclick=hh3.Click()&gt; <br />本例适用于IE </p>
		<p>17.屏蔽功能键Shift,Alt,Ctrl <br />&lt;script&gt; <br />function look(){  <br />if(event.shiftKey)  <br />alert("禁止按Shift键!"); //可以换成ALT　CTRL <br />}  <br />document.onkeydown=look;  <br />&lt;/script&gt; </p>
		<p>18. 网页不会被缓存 <br />&lt;META HTTP-EQUIV="pragma" CONTENT="no-cache"&gt; <br />&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"&gt; <br />&lt;META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"&gt; <br />或者&lt;META HTTP-EQUIV="expires" CONTENT="0"&gt; </p>
		<p>19.怎样让表单没有凹凸感？ <br />&lt;input type=text style="border:1 solid #000000"&gt;  <br />或 <br />&lt;input type=text style="border-left:none; border-right:none; border-top:none; border-bottom:  </p>
		<p>1 solid #000000"&gt;&lt;/textarea&gt; </p>
		<p>20.&lt;div&gt;&lt;span&gt;&amp;&lt;layer&gt;的区别？  <br />&lt;div&gt;(division)用来定义大段的页面元素，会产生转行  <br />&lt;span&gt;用来定义同一行内的元素，跟&lt;div&gt;的唯一区别是不产生转行  <br />&lt;layer&gt;是ns的标记，ie不支持，相当于&lt;div&gt; </p>
		<p>21.让弹出窗口总是在最上面: <br />&lt;body onblur="this.focus();"&gt; </p>
		<p>22.不要滚动条?  <br />让竖条没有:  <br />&lt;body style="overflow:scroll;overflow-y:hidden"&gt;  <br />&lt;/body&gt;  <br />让横条没有:  <br />&lt;body style="overflow:scroll;overflow-x:hidden"&gt;  <br />&lt;/body&gt;  <br />两个都去掉？更简单了  <br />&lt;body scroll="no"&gt;  <br />&lt;/body&gt;  </p>
		<p>23.怎样去掉图片链接点击后，图片周围的虚线？ <br />&lt;a href="#" onFocus="this.blur()"&gt;&lt;img src="logo.jpg" border=0&gt;&lt;/a&gt; </p>
		<p>24.电子邮件处理提交表单 <br />&lt;form name="form1" method="post" action="<a href="mailto:****@***.com">mailto:****@***.com</a>" enctype="text/plain"&gt;  <br />&lt;input type=submit&gt; <br />&lt;/form&gt; </p>
		<p>25.在打开的子窗口刷新父窗口的代码里如何写？ <br />window.opener.location.reload() </p>
		<p>26.如何设定打开页面的大小 <br />&lt;body onload="top.resizeTo(300,200);"&gt; <br />打开页面的位置&lt;body onload="top.moveBy(300,200);"&gt; </p>
		<p>27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动  <br />&lt;STYLE&gt;  <br />body  <br />{background-image:url(logo.gif); background-repeat:no-repeat;  <br />background-position:center;background-attachment: fixed}  <br />&lt;/STYLE&gt;  </p>
		<p>28. 检查一段字符串是否全由数字组成 <br />&lt;script language="Javascript"&gt;&lt;!-- <br />function checkNum(str){return str.match(//D/)==null} <br />alert(checkNum("1232142141")) <br />alert(checkNum("123214214a1")) <br />// --&gt;&lt;/script&gt; </p>
		<p>29. 获得一个窗口的大小 <br />document.body.clientWidth; document.body.clientHeight </p>
		<p>30. 怎么判断是否是字符 <br />if (/[^/x00-/xff]/g.test(s)) alert("含有汉字"); <br />else alert("全是字符"); </p>
		<p>31.TEXTAREA自适应文字行数的多少 <br />&lt;textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight"&gt; <br />&lt;/textarea&gt; <br />32. 日期减去天数等于第二个日期 <br />&lt;script language=Javascript&gt; <br />function cc(dd,dadd) <br />{ <br />//可以加上错误处理 <br />var a = new Date(dd) <br />a = a.valueOf() <br />a = a - dadd * 24 * 60 * 60 * 1000 <br />a = new Date(a) <br />alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日") <br />} <br />cc("12/23/2002",2) <br />&lt;/script&gt; </p>
		<p>33. 选择了哪一个Radio <br />&lt;HTML&gt;&lt;script language="vbscript"&gt; <br />function checkme() <br />for each ob in radio1 <br />if ob.checked then window.alert ob.value <br />next <br />end function <br />&lt;/script&gt;&lt;BODY&gt; <br />&lt;INPUT name="radio1" type="radio" value="style" checked&gt;Style <br />&lt;INPUT name="radio1" type="radio" value="barcode"&gt;Barcode <br />&lt;INPUT type="button" value="check" onclick="checkme()"&gt; <br />&lt;/BODY&gt;&lt;/HTML&gt; </p>
		<p>34.脚本永不出错 <br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />&lt;!-- Hide  <br />function killErrors() {  <br />return true;  <br />}  <br />window.onerror = killErrors;  <br />// --&gt;  <br />&lt;/SCRIPT&gt; </p>
		<p>35.ENTER键可以让光标移到下一个输入框 <br />&lt;input onkeydown="if(event.keyCode==13)event.keyCode=9"&gt; </p>
		<p>36. 检测某个网站的链接速度： <br />把如下代码加入&lt;body&gt;区域中: <br />&lt;script language=Javascript&gt; <br />tim=1 <br />setInterval("tim++",100) <br />b=1 <br />var autourl=new Array() <br />autourl[1]="<a href="http://www.njcatv.net/">www.njcatv.net</a>" <br />autourl[2]="javacool.3322.net" <br />autourl[3]="<a href="http://www.sina.com.cn/">www.sina.com.cn</a>" <br />autourl[4]="<a href="http://www.nuaa.edu.cn/">www.nuaa.edu.cn</a>" <br />autourl[5]="<a href="http://www.cctv.com/">www.cctv.com</a>" <br />function butt(){ <br />document.write("&lt;form name=autof&gt;") <br />for(var i=1;i&lt;autourl.length;i++) <br />document.write("&lt;input type=text name=txt"+i+" size=10 value=测试中……&gt; =》&lt;input type=text  <br />name=url"+i+" size=40&gt; =》&lt;input type=button value=GO  </p>
		<p>onclick=window.open(this.form.url"+i+".value)&gt;&lt;br&gt;") <br />document.write("&lt;input type=submit value=刷新&gt;&lt;/form&gt;") <br />} <br />butt() <br />function auto(url){ <br />document.forms[0]["url"+b].value=url <br />if(tim&gt;200) <br />{document.forms[0]["txt"+b].value="链接超时"} <br />else <br />{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"} <br />b++ <br />} <br />function run(){for(var i=1;i&lt;autourl.length;i++)document.write("&lt;img src=http://"+autourl+"/"+Math.random()+" width=1 height=1  </p>
		<p>onerror=auto("<a href="http://&quot;+autourl/">http://"+autourl</a>+"")&gt;")} <br />run()&lt;/script&gt; </p>
		<p>37. 各种样式的光标 <br />auto ：标准光标 <br />default ：标准箭头 <br />hand ：手形光标 <br />wait ：等待光标 <br />text ：I形光标 <br />vertical-text ：水平I形光标 <br />no-drop ：不可拖动光标 <br />not-allowed ：无效光标 <br />help ：?帮助光标 <br />all-scroll ：三角方向标 <br />move ：移动标 <br />crosshair ：十字标 <br />e-resize <br />n-resize <br />nw-resize <br />w-resize <br />s-resize <br />se-resize <br />sw-resize </p>
		<p>38.页面进入和退出的特效 <br />进入页面&lt;meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)"&gt; <br />推出页面&lt;meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)"&gt;  <br />这个是页面被载入和调出时的一些特效。duration表示特效的持续时间，以秒为单位。transition表示使用哪种特效，取值为1-23: <br />　　0 矩形缩小  <br />　　1 矩形扩大  <br />　　2 圆形缩小 <br />　　3 圆形扩大  <br />　　4 下到上刷新  <br />　　5 上到下刷新 <br />　　6 左到右刷新  <br />　　7 右到左刷新  <br />　　8 竖百叶窗 <br />　　9 横百叶窗  <br />　　10 错位横百叶窗  <br />　　11 错位竖百叶窗 <br />　　12 点扩散  <br />　　13 左右到中间刷新  <br />　　14 中间到左右刷新 <br />　　15 中间到上下 <br />　　16 上下到中间  <br />　　17 右下到左上 <br />　　18 右上到左下  <br />　　19 左上到右下  <br />　　20 左下到右上 <br />　　21 横条  <br />　　22 竖条  <br />　　23 以上22种随机选择一种 </p>
		<p>39.在规定时间内跳转 <br />&lt;META http-equiv=V="REFRESH" content="5;URL=http://www.51js.com"&gt;  </p>
		<p>40.网页是否被检索 <br />&lt;meta name="ROBOTS" content="属性值"&gt; <br />　　其中属性值有以下一些: <br />　　属性值为"all": 文件将被检索，且页上链接可被查询； <br />　　属性值为"none": 文件不被检索，而且不查询页上的链接； <br />　　属性值为"index": 文件将被检索； <br />　　属性值为"follow": 查询页上的链接； <br />　　属性值为"noindex": 文件不检索，但可被查询链接； <br />　　属性值为"nofollow": 文件不被检索，但可查询页上的链接。 </p>
		<p>41.<font color="#000080">JAVASCRIPT判断IE是否开启COOKIE</font></p>
		<p>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">script type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text/javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />
						<br />
						<img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />      </span>
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000"> CookieEnable() <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />      { <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />        </span>
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> result</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">false</span>
				<span style="COLOR: #000000">; <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />        </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(navigator.cookiesEnabled) <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />          </span>
				<span style="COLOR: #0000ff">return</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">true</span>
				<span style="COLOR: #000000">; <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />        document.cookie </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">testcookie=yes;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">; <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />        </span>
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> cookieSet </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> document.cookie; <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />        </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> (cookieSet.indexOf(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">testcookie=yes</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">) </span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">) <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />          result</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">true</span>
				<span style="COLOR: #000000">; <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />        document.cookie </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">""</span>
				<span style="COLOR: #000000">; <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />        </span>
				<span style="COLOR: #0000ff">return</span>
				<span style="COLOR: #000000"> result; <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />      } <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" /><br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />      </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(</span>
				<span style="COLOR: #000000">!</span>
				<span style="COLOR: #000000">CookieEnable()) <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />      { <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />        alert(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">对不起，您的浏览器的Cookie功能被禁用，请开启</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">); <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />      } <br /><img height="16" alt="" src="http://yuntian.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" /></span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">script</span>
				<span style="COLOR: #000000">&gt;</span>
		</p>
		<p> </p>
		<p>匹配中文字符的正则表达式： [\u4e00-\u9fa5]<br /><br />匹配双字节字符(包括汉字在内)：[^\x00-\xff]<br /><br />应用：计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）<br /><br />String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}<br /><br />匹配空行的正则表达式：\n[\s| ]*\r<br /><br />匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;/ <br /><br />匹配首尾空格的正则表达式：(^\s*)|(\s*$)<br /><br />应用：javascript中没有像vbscript那样的trim函数，我们就可以利用这个表达式来实现，如下：<br /><br />String.prototype.trim = function()<br />{<br />return this.replace(/(^\s*)|(\s*$)/g, "");<br />}<br /><br />利用正则表达式分解和转换IP地址：<br /><br />下面是利用正则表达式匹配IP地址，并将IP地址转换成对应数值的Javascript程序：<br /><br />function IP2V(ip)<br />{<br />re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式<br />if(re.test(ip))<br />{<br />return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1<br />}<br />else<br />{<br />throw new Error("Not a valid IP address!")<br />}<br />}<br /><br />不过上面的程序如果不用正则表达式，而直接用split函数来分解可能更简单，程序如下：<br /><br />var ip="10.100.20.168"<br />ip=ip.split(".")<br />alert("IP值是："+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))<br /><br />匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*<br /><br />匹配网址URL的正则表达式：http://([\w-]+\.)+[\w-]+(/[\w- ./?%&amp;=]*)?<br /><br />利用正则表达式去除字串中重复的字符的算法程序：<br />[注：此程序不正确，原因见本贴回复]<br /><br />var s="abacabefgeeii"<br />var s1=s.replace(/(.).*\1/g,"$1")<br />var re=new RegExp("["+s1+"]","g")<br />var s2=s.replace(re,"") <br />alert(s1+s2) //结果为：abcefgi<br /><br />我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法，最终没有找到，<br />这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符，<br />再以重复的字符建立第二个表达式，取到不重复的字符，两者串连。<br />这个方法对于字符顺序有要求的字符串可能不适用。<br /><br />得用正则表达式从URL地址中提取文件名的javascript程序，如下结果为page1<br /><br />s="http://www.9499.net/page1.htm"<br />s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")<br />alert(s)<br /><br />利用正则表达式限制网页表单里的文本框输入内容：<br /><br />用正则表达式限制只能输入中文：onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"<br /><br />用正则表达式限制只能输入全角字符： onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"<br /><br />用正则表达式限制只能输入数字：onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"<br /><br />用正则表达式限制只能输入数字和英文：onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"<br /></p>
<img src ="http://www.blogjava.net/nbtymm/aggbug/59909.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2006-07-25 08:42 <a href="http://www.blogjava.net/nbtymm/archive/2006/07/25/59909.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP 70问</title><link>http://www.blogjava.net/nbtymm/archive/2006/07/24/59773.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Mon, 24 Jul 2006 04:04:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2006/07/24/59773.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/59773.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2006/07/24/59773.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/59773.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/59773.html</trackback:ping><description><![CDATA[1. 问：在JAVA与JSP中要调用一个LINUX上的脚本程序,或WINDOWS上的脚本程序,该怎么写？<br />答：System.getRuntime().exec("bash &lt; aaa.sh");<br /><br />2. 问：java中用什么表示双引号<br />答："""<br /><br />3. 问：如何在JSP程序里另起一个线程？<br />答：<br />JSP本身就是独立线程运行而不象CGI都是独立进程.<br />一般:<br />Thread t = new Thread("你的对象");<br />t.start();就可以了.<br />要求你这个对象要实现runnable接口或继承thread.<br /><br />4. 问：jsp如何获得客户端的IP地址？<br />答：<br />request.getRemoteAddr()<br />看看各个webserver的API文档说明，一般都有自带的，resin和tomcat都有<br /><br />5. 问：程序终止与输出终止<br />答：<br />程序中止:return;<br />输出中止out.close();这一句相当于ASP的response.end<br /><br />6. 问：jsp中如何得到上页的URL？<br />答：request.getHeader("referer");<br /><br />7. 问：提交网页的网页过期功能是怎么做的？<br />答：response.setHader("Expires","0");<br /><br />8. 问：在JSP网页中如何知道自已打开的页面的名称<br />答：<br />request.getRequestURI() ;//文件名<br />request.getRequestURL() ;//全部ＵＲＬ<br /><br />9. 问：提交表单后验证没有通过，返回提交页面，如何使原提交页面中的数据保留？<br />答：javascript的go(-1)可以把上页的表单内容重新显示出来,但password域没有<br /><br />10. 问：如何取得http的头信息？<br />答：request.getHader(headerName);<br /><br />11. 问：&amp;&amp;和&amp;的区别？<br />答：<br />&amp;&amp;是短路的与操作，也就是当地一个条件是false的时候，第二个条件不用执行<br />&amp;相反，两个条件总是执行。<br /><br />12. 问：将*以正弦曲线的一个周期显示出来<br />答：<br />public void paint(Graphics g)<br />{<br />for(int i=0;i&lt;200;i++)<br />g.drawString("*",i,(int)(Math.sin(i)*20)+50);<br />}<br />}<br /><br />13. 问：浮点数相乘后结果不精确如100.0 * 0.6 结果等于 60.0004<br />答：<br />这不叫错误,float和double是这样实现的.如果要精确计算，java提供了一个strictfp,它的计算遵循IEEE 754标准.而普通的float和double是<br /><br />由地平台浮点格式或硬件提供的额外精度或表示范围。<br /><br />14. 问：如何获得当前用的cursors的位置？<br />答：<br />int row = rs.getRow()就是当前指针行数,还有isFrist();isBeforeFist();isLast();isAfterLast();可以测试是不是在方法名所说的位置<br /><br />15. 问：表单成功提交了，点后退显示网页过期<br />答：<br />在&lt;head&gt;&lt;/head&gt;里面加以下代码<br />&lt;META HTTP-EQUIV="Pragma" CONTENT="no-cache"&gt; <br />&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"&gt; <br />&lt;META HTTP-EQUIV="Expires" CONTENT="0"&gt; <br />或者在表单页中加上<br />&lt;% <br />response.setHeader("Pragma","no-cache"); <br />response.setHeader("Cache-Control","no-cache"); <br />response.setDateHeader("Expires",0); <br />%&gt;<br /><br />16. 问：接口的简单理解<br />答：接口为了规范,比如我在接口中定义了一个方法:<br />getData()<br />这是用来从不同的数据库中取数据的,就是JDBC的实现对于用户,我不要知道每种数据库是如何做的,但我知道如何它们要实现这个接口就一定有<br /><br />这个方法可以供我调用.这样SUN就把这个接口给各个数据库开发商,让他们自己实现. 但为什么不用继承而用接口哩,因为继承只能从一个你类<br /><br />继承,而接口可以实现多个,就是说我实现的子类有多个规定好的接口中的功能. 这只是简单的理解,等你深入理解抽象的时候就知道抽象到抽象<br /><br />类时为什么还要再抽象到接口.<br /><br />17. 问：怎样编写一个取消按钮（怎样返回上一个页面，象工具栏的后退按钮）？<br />答：<br />javascript把每次浏览过的location都压到了一个栈中,这个栈就是history,然后你如果要回到第几个页面它就做几次POP操作,把最后POP出来<br /><br />的那个LOCATION给你. 这就是JAVASCRIPT在实现history.go(-x)的原理.<br /><br />18. 问：什么是回调？<br />答：<br />简单说,回调用不是让你去监听谁做完了什么事,而是谁做完了什么事就报告给你. 这就是回调用的思想.例子太多了,AWT的事件,SWING事件模型<br /><br />都是这样有. 还有多线程中,如果要控制线程数,不能总是查询每个线程是否结束,要在每个线程结束时让线程自己告诉主线程我结束了,你可以<br /><br />开新的线程了.<br /><br />19. 问：简要介绍一下compareTo方法<br />答：<br />compareTo方法是Comparable 接口必需实现的方法,只要实现Comparable <br /><br />就可以用Arrays.srot()排序就象实现Runnable接口的run就能Thread()一样.<br /><br />20. 问：如何可以从别的Web服务器检索页, 然后把检索到的网页的HTML代码储存在一个变量中返回过来<br />答：这是一个简单的WEB ROBOT实现,用URL类实现从网页中抓内容,然后自己写一个分析程序从中找出新的URL,不断递归下去就行了.<br /><br />21. 问：applet中如何获得键盘的输入<br />答：application的System.in是当前系统的标准输入,applet因为安全的原因不可能读取当前系统(客户端)的标准输入,只能从它的ROOT组件的<br /><br />事件中,比如键盘事件中取得键值.<br /><br />22. 问：怎样计算代码执行所花费的时间？<br />答：<br />代码开始取时间，结束后取时间，相减<br />long t1 = System.currentTimeMillis();<br />///////////////// your code<br />long t2 = System.currentTimeMillis() ;<br />long time = t2-t1;<br /><br />23. 问：如何获在程序中获得一个文件的ContentType？<br />答：<br />URL u = new URL("file:///aaa.txt");<br />URLConnection uc = u.openConnection();<br />String s = uc.getContentType();<br /><br />24. 问：连接池的使用是建立很多连接池，还是一个连接池里用多个连接？<br />答：<br />只有在对象源不同的情况下才会发生多个池化,如果你只连一结一个数据源,永远不要用多个连结池. 所以连结池的初始化一定要做成静态的,而<br /><br />且应该在构造对象之前,也就是只有在类LOAD的时候,别的时候不应该有任何生成新的连结池的时候。<br /><br />25. 问：JavaMail要怎么安装？<br />答：下载两个包，一个是javamail包，另一个是jaf包。下载完直接把这两个包不解压加到CLASSPATH。<br /><br />26. 问：怎样把地址栏里的地址锁定？<br />答：把你的服务器的可访问目录索引选项关闭就行了,任何服务器都有一个conf文件,里面都有这个选项。<br /><br />27. 问：在JAVA中怎么取得环境变量啊。比如： TEMP = C：TEMP ？<br />答：String sss = System.getProperty(key)<br /><br />28. 问：怎样实现四舍五入，保留小数点后两位小数？<br />答：<br />import java.text.*;<br />...<br />NumberFormat nf=NumberFormat.getNumberInstance();<br />nf.setMaximumFractionDigits(2);<br />nf.setMinimumFractionDigits(2);<br />nf.format(numb);<br /><br />29. 问：Applet和form如何通信？<br />答：<br />取得的参数传到param里面<br />&lt;% <br />String xxx = request.getParameter("xxx"); <br />%&gt; <br />&lt;applet&gt; <br />&lt;param value="&lt;%=xxx%&gt;"&gt; <br />&lt;/applet&gt;<br /><br /><br />30. 问：java-plug-in是什么？<br />答：Java Runtime Environment的插件。用来运行java程序。不需要什么特别的设置。等于你的机器里面有了jvm。<br /><br />31. 问：WEB上面怎么样连接上一个EXCEL表格？<br />答：<br />定义页面得contentType="application/vnd.ms-excel"，让页面以excel得形式打开。同样也可以以word得形式打开：application/msword。<br /><br />32. 问：怎样才能避免textarea字数限制？<br />答：是使用了FORM的默认方法的缘故,如果什么也不写默认是GET改用Post即可，在Form中定义mothod="post"。<br /><br />33. 问：为什么加了&lt;%@page contentType="text/html;charset=gb2312" %&gt;插入数据库的中文，依然是乱码？<br />答：<br />这要从环境看,能显示说明你的JSP引擎没有问题,但写入数据库时你的JDBC能不能处理中文,同一公司不同版本的JDBC都有支持中文和不支持中<br /><br />文的情况,RESIN自带的MYSQL JDBC就不支持,MM的就支持,还有你的数据库类型是否支持中文?CHAR的一般支持,但是否用binary存储双字节码<br /><br />34. 问：对于JFrame，hide()，show()与setVisibel()有什么区别吗？<br />答：<br />setVisible()从Component继承过来，而hide(),show()从Window里面继承过来。<br />Makes the Window visible. If the Window and/or its owner are not yet displa yable, both are made displayable. The Window will <br /><br />be validated prior to being made visible. If t he Window is already visible, this will bring the Window to the front. 区别在<br /><br />这。<br />36. 问：sendRedirect为什么不可以转到mms协议的地址的？response.sendRedirect("mms://missiah.adsldns.org:9394");<br />答：java平台目前实现的protocol中并没有mms,你可以取系统属性java.protocol.handler.pkgs看看它的值中有没有mms,所以如果要想重定向<br /><br />到mms://host这样和URL,只有生成客户端的JAVASCRIPT让它来重定向<br /><br />37. 问：JTable中怎样定义各个Columns和Width和怎样设置表格的内容靠做靠右或居中？<br />答：<br />TableColumn tc = table.getColumn("Name");//取得列名为"Name"的列Handle<br />int currentWidth = tc.getPreferredWidth(); //取得该列当前的宽度<br />tc.setPreferredWidth(200); //设置当前列宽<br />tc.setMaxWidth(200); //设置该列最大宽度<br />tc.setMinWidth(50); //设置该列最小宽度<br /><br />38. 问：批操作是否可用于select语句？<br />答：批操作其实是指成批理更新的操作,绝对不可能用于select操作。<br /><br />39. 问：为什么jsp路径太深文件名太长就无法读取文件？<br />答：path不能超过255长度,不然就找不到了.这是作业系统的事。<br /><br />40. 问：如何让页面不保留缓存？<br />答：<br />&lt;% <br />response.setHeader("Pragma","No-cache"); <br />response.setHeader("Cache-Control","no-cache"); <br />response.setDateHeader("Expires", 0); <br />%&gt;<br /><br />41. 问：我的applet code 中用到jbutton 时就出错是否由于ie不支持swing package 请问应怎么办？<br />答：JBUTTON是SWING基本包啊,只要把jdk/jre/lib/rt.jar放在classpath就行了.不要加载任何别的库。<br /><br />42. 问：不知道java是否支持midi格式，如果支持，应该怎么把wave格式转换成midi格式？<br />答：目前还不行,可以看一下JMF三个版中对MIDI的格式支持是read only,而WAVE是read/write,MIDI只能播放,不能生成。<br /><br />43. 问：在jsp里面防止用户直接输入url进去页面，应该怎么做呢？<br />答：<br />一是从web服务器控制,对某一目录的所有访问要通过验证.<br />二是在要访问的页面中加入控制.这个一般用session,也可以用请求状态码实现<br /><br />44. 问：<br />例如后台有一计算应用程序（此程序运算起来很慢，可持续几分钟到几小时，这不管，主要是能激活它），客户机讲任务提交后，服务器对任<br /><br />务进行检测无误后将向服务器后台程序发送信息，并将其激活。要求如下：<br />1）首先将后台程序激活，让它执行此任务（比如，前台将计算的C代码提交上后，后台程序程序能马上调用，并将其运行）<br />2）要在前台JSP页面中显示运行过程信息（由于运行时间长，希望让客户看到运行过程中产生的信息）如何完成？<br /><br />答：<br />活是可以的,运行一个shell让它去运行后台就行,但不可能取出运行信息,因为HTTP的超时限制不可能永远等你后台运行的,而且信息如果要动态<br /><br />实时推出来就得用SERVER PUSH技术。<br /><br />45. 问：数据库是datetime 型 ，插入当前时间到数据库？<br />答：<br />java.sql.Date sqlDate = new java.sql.Date();<br />PreparedStatement pstmt = conn.prepareStatement("insert into foo(time) values(?)");<br />pstmt.setDate(1,sqlDate);<br />pstmt.executeUpdate();<br /><br />46. 问：怎样去掉字符串前后的空格。<br />答：String.trim()<br /><br />47. 问：session怎样存取int类型的变量？<br />答：<br />session.setAttribute("int", i+"");<br />int i = Integer.parseInt(session.getAttribute("int"));<br /><br />48. 问：在javascript中如何使输出的float类型的数据保留两位小数。<br />答：Math.round(aaaaa*100)/100。<br /><br />49. 问：在bean种如何调用session<br />答：<br />你可把session对象作为一个参数传给bean<br />在BEAN中定义HttpServletRequest request;HttpSession session;<br />然后<br />session = request.getSession(false);<br />false为如果session为空,不建立新的session<br />将session作为参数传入.其实只要将request传入就可以<br /><br />50. 问：如何把txt或word文件按原格式显示在jsp页面或servlet上？<br />答：<br />其实一个非常简单的解决方法就是在服务器的MIME中指点定TEXT和WORD的解释方式,然后用JSP或SERVLET生成它就行了,客户端就会自动调用相<br /><br />应程序打开你的文档。<br />如果是希望按原格式的显示在页面上，而不是调用其他程序打开那么你可以试试用WEBDEV协议,可以说这是MS的一个亮点.它是在WEB方式下打开<br /><br />文档,和共享一样.完全符合的要求。<br /><br />51. 问：object的clone方法为什么不能直接调用？<br />答：<br />这个方法在object中是protected<br />为什么要把这个方法定义为protected,这是一个折中,它的目的是想知道你这个方法在Object里只是一个标记,而不是一个实现,比如<br /><br />public class Object<br />{<br />.............<br />protected Object clone()<br />{}<br />}<br /><br />所以直接继承的clone()方法并不能做任何时,你要使用这个方法就要重载这个方法并放宽访问权限为public,或实现cloneable接口. 但它没法<br /><br />这样告诉你它没有真的实现,只好用protected 方法加以警示<br /><br />52. 问：一个页面中如何刷新另外一个页面？<br />答：<br />要求是这些面页必须有关联,一是它们都有一个共同的顶层帧,也就是说是一个帧内的分级页面,当然可以是任意级,帧内再分帧也可以,另一个可<br /><br />能是当前窗口弹出的窗口,如果没有联系,那就不可能用一个页面刷新另一个页面. 帧内只要一级一级引用就行了. <br /><br />比如在左帧中一个页面中写top.right.location.reload();那么名为right的右帧中的页面就会刷新. 弹出的一样,用open时的名称刷新子窗口,<br /><br />子窗口用opener刷新主窗口<br /><br />53. 问：如何在jsp中怎么样向客户端写cookies？<br />答：<br />Cookie coo = new Cookie(name, value);<br />HttpServletResponse.addCookie(name);<br /><br />54. 问：为什么jTextField1.setText("aaabbb");jTextField2.setText("AAABBB"); 得到的字体宽度不一样？<br />答：就是说如果不是指定为等宽字体,每个字体的宽度都是不一样的.因此JAVA中用FontMetrics 类来取字符宽度。<br /><br />55. 问：String kk=application/octet-stream; name="G:/SMBCrack.exe";如何得到SMBCrack.exe？<br />答：<br />这应该是解析上传时候的二进制流得到的这一行里面格式是固定的，取到name="后面的字符串，然后把";去掉。然后取最后一个/后面的所有字<br /><br />符组成一个新字符串就行了。<br /><br />56. 问：如何传值并不刷新页面？<br />答：<br />弹出一个页面进行值的选择或者输入，ok后使用将值传给原窗口，使用javascript关闭打开的窗口即可：<br />window.close();opener.focus();<br /><br />57. 问：有一个字符串："EF0C114EA4"，如何变为a[0] = 0xEF a[1] = 0x0C a[2] = 0x11 a[3] = 0x4E a[4] = 0xA4？<br />答：<br />String str="EF0C114EA4F";<br />out.print(str+"&lt;br&gt;");<br />int l=str.length()/2+str.length()%2,j=0,k=0;<br />String[] a=new String[l];<br />for(int i=0;i&lt;l;i++){<br />if(str.length()-j==1)<br />k=str.length();<br />else<br />k=j+2;<br />a="0x"+str.substring(j,k);<br />out.print("a["+Integer.toString(i)+"]="+a+"&lt;br&gt;");<br />j+=2;<br />}<br /><br />58. 问：怎样将一个int转换成一个四字节的byte数组？<br />答：<br />int x = 1234567;<br />byte[] b = new byte[4];<br />for(int i=0;i&lt;b.length;i++)<br />{<br />b = (x &gt;&gt;( i*8)) &amp; 0xFF;<br />}<br /><br />59. 问：indexOf()的使用需要注意什么？<br />答：参数是指从第几位（1，2，3，...）开始搜索，而返回值是指搜索到的位置（0，1，2，3.......）注意是从零算起的。<br /><br />60. 问：在Java应用程序中如何动态的添加一个按钮？<br />答：<br />这里涉及一个组件重绘的问题,组件要先于panel被显示之处存在,如果一panel已经显示了,那么加在上面你能看到吗?但如果在同一个panel上, <br /><br />先有button A,假如按下它加了butt on B,这时你如果使整个panel重给,那么A本身要重绘,它的事件监听就没有了,当然也就加不成B了,所以如<br /><br />果要先有另一个panel,当按A时把B加在这个panel上并重绘这个paenl,其实更好的方法是先把B加在panel中,同一个也行.把它setVisiable(flas<br /><br />e),按A时设为 true。<br /><br />61. 问：book mybook=new book(bookid);book是servlet,出错。<br />答：<br />book是servlet,能book mybook=new book(bookid);<br />说明自己实现了servlet容器?不然,servlet能让你自己去调用? servlet如果调用其实和EJB连1%的区别都没有,它们都是自己继承或实现一些接<br /><br />口,在这些父类或接口中实现了如果和容器"打交道"的方法,然后容器调用这些方法来管理它,让它生成实例,池化,钝化,销毁,再生等.所以这样<br /><br />写是错误的。<br /><br />62. 问：给定一个字符串5*(5+9)/7怎样计算出结果？<br />答：<br />可有两种方法<br />1。用堆栈完成<br />2。最简单的方法，不用编程，如果有任何一个数据库的化，用select (5*(5+9)/7) from oneTable<br /><br />63. 问：如何实现递交表单内容的加密解密？<br />答：<br />如果你用IE目前只能用SSL协议,这一层不要你考虑,否则只你用你自己的工具加密传输,接收后再解密友,至于如何加解,如果要和公认的系统结<br /><br />合,就用通用的MD5,RAS等公开算法,如果你只是自己传自己解,你随便按你的想法把数据加上一些东西,取回来按规则减掉这些东西,我敢保证除<br /><br />你自己没有任何人能知道解密方法.<br /><br />64. 问：为什么Integer.parseInt("+1");会抛出NumberFormatException的异常？<br />答：因为"+"运行算在JAVA中被重载.系统无法确定你用的是算术加还是字符+。<br />这一点可以在JAVASCRIPT中更好地理解:<br />&lt;form name="t"&gt;&lt;input name=s value=1234&gt;&lt;/form&gt;<br />var a = document.t.s.value+1;<br />这时a = 12345,因为document.t.s.value作为字符串.但var a = document.t.s.value-1;<br />a 就是1233,因为系统知道-运算肯定是算术运行.所以把document.t.s.value转换成数字.<br /><br /><br />65. 问：hashCode() 有什么用为什么有时候需要覆盖Object里的hashcode()方法？<br />答：这就是这个对象的身份证啊,要不如何区分哪个对象。<br /><br />66. 问：怎样在tomcat中实现一个定时执行的东东？<br />答：<br />在应用程序启动时自动运行。servlet2.3中定义了ServletListener,监听Servlet Con text的启动或则关闭（可在配置文件中配置），启动时<br /><br />触发一个守护程序的运行(可以实现java.util.Timer或则 javax.swing.Timer).<br /><br />67. 问：程序可以输出自己吗？<br />答：孔德悖论这个非常有名的法则.就是说任何程序都不可能输出自己.<br /><br />68. 问：能够把字符转化成ASCII码？比如将 A 转化成 65？<br />答：<br />int a='A';<br />out.println(a);<br /><br />69. 问：如何区分输入的文字中的全角与半角？<br />答：由于不能分辨出全角和半角字符的值有什么规律,只好把全角符号牧举出来了.<br /><br />70. 问：用户注册后的自动发信程序该怎么做？<br />答：<br />这种发信程序不考虑性能,因为不可能1秒就有一个人注册,我们说的考虑性能的发信程序是指上百万封信在队列里要不停发送的那种,象你这个<br /><br />随便怎么写一个程序都行,没有必要用JAVAMAIL.只要指定一个发信的服务器然后用cocket连它的25口就行了.自己用SOCKET连SMTP的25口发一封<br /><br />信就好象两个邻居之间送一样东西,直接递过去得了,用JAVAMAIL,消息机制就是你把这个东西从邮局寄给你的邻居了. <img src ="http://www.blogjava.net/nbtymm/aggbug/59773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2006-07-24 12:04 <a href="http://www.blogjava.net/nbtymm/archive/2006/07/24/59773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件上传实现</title><link>http://www.blogjava.net/nbtymm/archive/2006/07/06/56885.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Thu, 06 Jul 2006 00:35:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2006/07/06/56885.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/56885.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2006/07/06/56885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/56885.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/56885.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">文件上传在web应用中非常普遍，要在servlet/jsp环境中实现文件上传功能非常容易，因为网上已经有许多用java开发的组件用于文件上传，本文以commons-fileupload组件为例，为servlet/jsp应用添加文件上传功能。</font>
		</p>
		<p>
				<font size="2">common-fileupload组件是apache的一个开源项目之一，可以从</font>
				<a href="http://jakarta.apache.org/commons/fileupload/">
						<font color="#1d58d1">
								<font size="2">http://jakarta.apache.org/commons/fileupload/</font>
						</font>
				</a>
				<font size="2">下载。该组件简单易用，可实现一次上传一个或多个文件，并可限制文件大小。</font>
		</p>
		<p>
				<font size="2">下载后解压zip包，将commons-fileupload-1.0.jar复制到tomcat的webapps\你的webapp\WEB-INF\lib\下，如果目录不存在请自建目录。</font>
		</p>
		<p>
				<font size="2">新建一个servlet: Upload.java用于文件上传：</font>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font size="2">
						<span style="COLOR: #008080"> 1</span> <span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.io.</span><span style="COLOR: #000000">*</span></font>
				<font size="2">
						<span style="COLOR: #000000">;<br /></span>
						<span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.util.</span><span style="COLOR: #000000">*</span></font>
				<font size="2">
						<span style="COLOR: #000000">;<br /></span>
						<span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.servlet.</span><span style="COLOR: #000000">*</span></font>
				<font size="2">
						<span style="COLOR: #000000">;<br /></span>
						<span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.servlet.http.</span><span style="COLOR: #000000">*</span></font>
				<font size="2">
						<span style="COLOR: #000000">;<br /></span>
						<span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.apache.commons.fileupload.</span><span style="COLOR: #000000">*</span></font>
				<font size="2">
						<span style="COLOR: #000000">;<br /></span>
						<span style="COLOR: #008080"> 6</span> </font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Upload </span><span style="COLOR: #0000ff">extends</span></font>
				<font size="2">
						<span style="COLOR: #000000"> HttpServlet {<br /></span>
						<span style="COLOR: #008080"> 8</span> </font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String uploadPath </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">C:\\upload\\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 用于存放上传文件的目录</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">10</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String tempPath </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">C:\\upload\\tmp\\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 用于存放临时文件的目录</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">11</span> <span style="COLOR: #008000"></span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">12</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span></font>
				<font size="2">
						<span style="COLOR: #000000"> doPost(HttpServletRequest request, HttpServletResponse response)<br /></span>
						<span style="COLOR: #008080">13</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">throws</span></font>
				<font size="2">
						<span style="COLOR: #000000"> IOException, ServletException<br /></span>
						<span style="COLOR: #008080">14</span> </font>
				<font size="2">
						<span style="COLOR: #000000">    {<br /></span>
						<span style="COLOR: #008080">15</span> </font>
				<font size="2">
						<span style="COLOR: #000000">    }<br /></span>
						<span style="COLOR: #008080">16</span> </font>
				<font size="2">
						<span style="COLOR: #000000">}<br /></span>
						<span style="COLOR: #008080">17</span> </font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">18</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">当servlet收到浏览器发出的Post请求后，在doPost()方法中实现文件上传。以下是示例代码：</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">19</span> <span style="COLOR: #008000"></span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">20</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span></font>
				<font size="2">
						<span style="COLOR: #000000"> doPost(HttpServletRequest request, HttpServletResponse response)<br /></span>
						<span style="COLOR: #008080">21</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">throws</span></font>
				<font size="2">
						<span style="COLOR: #000000"> IOException, ServletException<br /></span>
						<span style="COLOR: #008080">22</span> </font>
				<font size="2">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080">23</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">try</span></font>
				<font size="2">
						<span style="COLOR: #000000"> {<br /></span>
						<span style="COLOR: #008080">24</span> <span style="COLOR: #000000">        DiskFileUpload fu </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span></font>
				<font size="2">
						<span style="COLOR: #000000"> DiskFileUpload();<br /></span>
						<span style="COLOR: #008080">25</span> <span style="COLOR: #000000">        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 设置最大文件尺寸，这里是4MB</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">26</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">        fu.setSizeMax(</span><span style="COLOR: #000000">4194304</span></font>
				<font size="2">
						<span style="COLOR: #000000">);<br /></span>
						<span style="COLOR: #008080">27</span> <span style="COLOR: #000000">        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 设置缓冲区大小，这里是4kb</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">28</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">        fu.setSizeThreshold(</span><span style="COLOR: #000000">4096</span></font>
				<font size="2">
						<span style="COLOR: #000000">);<br /></span>
						<span style="COLOR: #008080">29</span> <span style="COLOR: #000000">        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 设置临时目录：</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">30</span> <span style="COLOR: #008000"></span></font>
				<font size="2">
						<span style="COLOR: #000000">        fu.setRepositoryPath(tempPath);<br /></span>
						<span style="COLOR: #008080">31</span> </font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">32</span> <span style="COLOR: #000000">        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 得到所有的文件：</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">33</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">        List fileItems </span><span style="COLOR: #000000">=</span></font>
				<font size="2">
						<span style="COLOR: #000000"> fu.parseRequest(request);<br /></span>
						<span style="COLOR: #008080">34</span> <span style="COLOR: #000000">        Iterator i </span><span style="COLOR: #000000">=</span></font>
				<font size="2">
						<span style="COLOR: #000000"> fileItems.iterator();<br /></span>
						<span style="COLOR: #008080">35</span> <span style="COLOR: #000000">        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 依次处理每一个文件：</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">36</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">while</span></font>
				<font size="2">
						<span style="COLOR: #000000">(i.hasNext()) {<br /></span>
						<span style="COLOR: #008080">37</span> <span style="COLOR: #000000">            FileItem fi </span><span style="COLOR: #000000">=</span></font>
				<font size="2">
						<span style="COLOR: #000000"> (FileItem)i.next();<br /></span>
						<span style="COLOR: #008080">38</span> <span style="COLOR: #000000">            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 获得文件名，这个文件名包括路径：</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">39</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">            String fileName </span><span style="COLOR: #000000">=</span></font>
				<font size="2">
						<span style="COLOR: #000000"> fi.getName();<br /></span>
						<span style="COLOR: #008080">40</span> <span style="COLOR: #000000">            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(fileName</span><span style="COLOR: #000000">!=</span><span style="COLOR: #0000ff">null</span></font>
				<font size="2">
						<span style="COLOR: #000000">) {<br /></span>
						<span style="COLOR: #008080">41</span> <span style="COLOR: #000000">                </span><span style="COLOR: #008000">//</span></font>
				<font size="2">
						<span style="COLOR: #008000"> 在这里可以记录用户和文件信息<br /></span>
						<span style="COLOR: #008080">42</span> <span style="COLOR: #008000">                </span><span style="COLOR: #008000">//</span></font>
				<font size="2">
						<span style="COLOR: #008000"> <img src="http://www.blogjava.net/images/dot.gif" /><br /></span>
						<span style="COLOR: #008080">43</span> <span style="COLOR: #008000">                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 写入文件a.txt，你也可以从fileName中提取文件名：</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">44</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">                fi.write(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> File(uploadPath </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a.txt</span><span style="COLOR: #000000">"</span></font>
				<font size="2">
						<span style="COLOR: #000000">));<br /></span>
						<span style="COLOR: #008080">45</span> </font>
				<font size="2">
						<span style="COLOR: #000000">            }<br /></span>
						<span style="COLOR: #008080">46</span> </font>
				<font size="2">
						<span style="COLOR: #000000">        }<br /></span>
						<span style="COLOR: #008080">47</span> <span style="COLOR: #000000">        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 跳转到上传成功提示页面</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">48</span> <span style="COLOR: #008000"></span></font>
				<font size="2">
						<span style="COLOR: #000000">    }<br /></span>
						<span style="COLOR: #008080">49</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">catch</span></font>
				<font size="2">
						<span style="COLOR: #000000">(Exception e) {<br /></span>
						<span style="COLOR: #008080">50</span> <span style="COLOR: #000000">        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 可以跳转出错页面</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">51</span> <span style="COLOR: #008000"></span></font>
				<font size="2">
						<span style="COLOR: #000000">    }<br /></span>
						<span style="COLOR: #008080">52</span> </font>
				<font size="2">
						<span style="COLOR: #000000">}<br /></span>
						<span style="COLOR: #008080">53</span> </font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">54</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果要在配置文件中读取指定的上传文件夹，可以在init()方法中执行：</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">55</span> <span style="COLOR: #008000"></span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">56</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> init() </span><span style="COLOR: #0000ff">throws</span></font>
				<font size="2">
						<span style="COLOR: #000000"> ServletException {<br /></span>
						<span style="COLOR: #008080">57</span> <span style="COLOR: #000000">    uploadPath </span><span style="COLOR: #000000">=</span></font>
				<font size="2">
						<span style="COLOR: #000000"> <img src="http://www.blogjava.net/images/dot.gif" />.<br /></span>
						<span style="COLOR: #008080">58</span> <span style="COLOR: #000000">    tempPath </span><span style="COLOR: #000000">=</span></font>
				<font size="2">
						<span style="COLOR: #000000"> <img src="http://www.blogjava.net/images/dot.gif" />.<br /></span>
						<span style="COLOR: #008080">59</span> <span style="COLOR: #000000">    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 文件夹不存在就自动创建：</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">60</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #0000ff">new</span></font>
				<font size="2">
						<span style="COLOR: #000000"> File(uploadPath).isDirectory())<br /></span>
						<span style="COLOR: #008080">61</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">new</span></font>
				<font size="2">
						<span style="COLOR: #000000"> File(uploadPath).mkdirs();<br /></span>
						<span style="COLOR: #008080">62</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #0000ff">new</span></font>
				<font size="2">
						<span style="COLOR: #000000"> File(tempPath).isDirectory())<br /></span>
						<span style="COLOR: #008080">63</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">new</span></font>
				<font size="2">
						<span style="COLOR: #000000"> File(tempPath).mkdirs();<br /></span>
						<span style="COLOR: #008080">64</span> </font>
				<font size="2">
						<span style="COLOR: #000000">}<br /></span>
						<span style="COLOR: #008080">65</span> <span style="COLOR: #000000"></span></font>
		</div>
		<p>
				<font size="2">编译该servlet，注意要指定classpath，确保包含commons-upload-1.0.jar和tomcat\common\lib\servlet-api.jar。</font>
		</p>
		<p>
				<font size="2">配置servlet，用记事本打开tomcat\webapps\你的webapp\WEB-INF\web.xml，没有的话新建一个。典型配置如下：</font>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font size="2">
						<span style="COLOR: #008080"> 1</span> <span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0" encoding="ISO-8859-1"</span><span style="COLOR: #0000ff">?&gt;</span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;!</span></font>
				<font size="2">
						<span style="COLOR: #ff00ff">DOCTYPE web-app<br /></span>
						<span style="COLOR: #008080"> 3</span> </font>
				<font size="2">
						<span style="COLOR: #ff00ff">    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br /></span>
						<span style="COLOR: #008080"> 4</span> <span style="COLOR: #ff00ff">    "http://java.sun.com/dtd/web-app_2_3.dtd"</span><span style="COLOR: #0000ff">&gt;</span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080"> 5</span> </font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">web-app</span><span style="COLOR: #0000ff">&gt;</span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">&gt;</span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Upload</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Upload</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">&gt;</span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">10</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">&gt;</span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">11</span> </font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">12</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-mapping</span><span style="COLOR: #0000ff">&gt;</span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">13</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Upload</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">14</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">url-pattern</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">/fileupload</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">url-pattern</span><span style="COLOR: #0000ff">&gt;</span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">15</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-mapping</span><span style="COLOR: #0000ff">&gt;</span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">16</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">web-app</span><span style="COLOR: #0000ff">&gt;</span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">17</span> <span style="COLOR: #000000"></span></font>
		</div>
		<font size="2">配置好servlet后，启动tomcat，写一个简单的html测试：</font>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font size="2">
						<span style="COLOR: #008080">1</span> <span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">form </span><span style="COLOR: #ff0000">action</span><span style="COLOR: #0000ff">="fileupload"</span><span style="COLOR: #ff0000"> method</span><span style="COLOR: #0000ff">="post"</span></font>
				<span style="COLOR: #ff0000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">2</span> <span style="COLOR: #ff0000">enctype</span><span style="COLOR: #0000ff">="multipart/form-data"</span><span style="COLOR: #ff0000"> name</span><span style="COLOR: #0000ff">="form1"</span><span style="COLOR: #0000ff">&gt;</span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">3</span> <span style="COLOR: #000000">  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input </span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="file"</span><span style="COLOR: #ff0000"> name</span><span style="COLOR: #0000ff">="file"</span><span style="COLOR: #0000ff">&gt;</span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">4</span> <span style="COLOR: #000000">  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input </span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="submit"</span><span style="COLOR: #ff0000"> name</span><span style="COLOR: #0000ff">="Submit"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="upload"</span><span style="COLOR: #0000ff">&gt;</span></font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">5</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">form</span><span style="COLOR: #0000ff">&gt;</span></font>
		</div>
		<p>
				<font size="2">注意action="fileupload"其中fileupload是配置servlet时指定的url-pattern。<br /><br />摘自：</font>
				<a href="http://www.j2medev.com/Article/Class10/j2eeopensource/200409/62.html">
						<font color="#1d58d1">
								<font size="2">http://www.j2medev.com/Article/Class10/j2eeopensource/200409/62.html</font>
						</font>
				</a>
		</p>
<img src ="http://www.blogjava.net/nbtymm/aggbug/56885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2006-07-06 08:35 <a href="http://www.blogjava.net/nbtymm/archive/2006/07/06/56885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对Servlet的初始化的理解 </title><link>http://www.blogjava.net/nbtymm/archive/2006/06/12/52168.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Mon, 12 Jun 2006 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2006/06/12/52168.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/52168.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2006/06/12/52168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/52168.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/52168.html</trackback:ping><description><![CDATA[
		<h1 style="MARGIN: 17pt 0cm 16.5pt; TEXT-ALIGN: center" align="center">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<font size="2">
								<span style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 仿宋_GB2312; mso-bidi-font-size: 10.0pt">版权所有，转载请声明出处 </span>
								<b>
										<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 仿宋_GB2312">zhyiwww@163.com</span>
								</b>
						</font>
				</span>
		</h1>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在读我自己的认识之前</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们先来看一下</span>
				<span lang="EN-US">servet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的结构图</span>
				<span lang="EN-US">:<br /></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?>
						<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" filled="f" stroked="f" path="m@4@5l@4@11@9@11@9@5xe">
								<v:stroke joinstyle="miter">
								</v:stroke>
								<v:formulas>
										<v:f eqn="if lineDrawn pixelLineWidth 0">
										</v:f>
										<v:f eqn="sum @0 1 0">
										</v:f>
										<v:f eqn="sum 0 0 @1">
										</v:f>
										<v:f eqn="prod @2 1 2">
										</v:f>
										<v:f eqn="prod @3 21600 pixelWidth">
										</v:f>
										<v:f eqn="prod @3 21600 pixelHeight">
										</v:f>
										<v:f eqn="sum @0 0 1">
										</v:f>
										<v:f eqn="prod @6 1 2">
										</v:f>
										<v:f eqn="prod @7 21600 pixelWidth">
										</v:f>
										<v:f eqn="sum @8 21600 0">
										</v:f>
										<v:f eqn="prod @7 21600 pixelHeight">
										</v:f>
										<v:f eqn="sum @10 21600 0">
										</v:f>
								</v:formulas>
								<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect">
								</v:path>
								<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
								<o:lock v:ext="edit" aspectratio="t">
								</o:lock>
						</v:shapetype>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<img height="455" alt="servlet.png" src="http://www.blogjava.net/images/blogjava_net/zhyiwww/servlet.png" width="628" border="0" />
						<br />以下是我自己的一点浅见：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 20pt; mso-list: l0 level1 lfo1">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">①　</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在初始化的时候</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是通过</span>
				<span lang="EN-US">init(ServletConfig<span style="mso-spacerun: yes">  </span>config)</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span>
				<span lang="EN-US">init()</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来执行的。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">ServletConfig</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一个接口，它怎样传递给他一格对象来进行初始化呢？其实，是这个对象是由</span>
				<span lang="EN-US">servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">容器来实例化的，由容器产生一格</span>
				<span lang="EN-US">ServletConfig</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的实现类的对象，然后传递给</span>
				<span lang="EN-US">Servlet</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 16pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">结论：</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 16pt; COLOR: navy; mso-bidi-font-size: 10.0pt">ServletConfig</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 16pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">由容器实例化</span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 20pt; mso-list: l0 level1 lfo1">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">②　</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们有些时候可能在</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">初始化时给它一些固定的配置参数，那么这些参数是怎样传递到</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">呢？</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其实，我们在</span>
				<span lang="EN-US">web.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中给</span>
				<span lang="EN-US">servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置启动参数，在容器对</span>
				<span lang="EN-US">servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行初始化的时候，会收集你所配置的参数，记录在</span>
				<span lang="EN-US">ServletConfig</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的实现类中，所以你才可以通过</span>
				<span lang="EN-US">ServletConfig</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象的</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">    </span>public String getInitParameter(String name);</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">    </span>public Enumeration getInitParameterNames();</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法来取得你已经配置好的参数，也就是说，你对</span>
				<span lang="EN-US">servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的配置都已经记录在</span>
				<span lang="EN-US">ServletConfig</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象中了。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 15pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">结论：你对</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: navy; mso-bidi-font-size: 10.0pt">Servlet</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 15pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">的配置，在</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: navy; mso-bidi-font-size: 10.0pt">Servlet</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 15pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">的初始化时都由容器来收集并且记录到</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: navy; mso-bidi-font-size: 10.0pt">ServletConfig</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 15pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">的实现类中。</span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 20pt; mso-list: l0 level1 lfo1">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">③　</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们来看一个</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的配置</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>&lt;servlet&gt;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">    </span>&lt;servlet-name&gt;index&lt;/servlet-name&gt;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">    </span>&lt;servlet-class&gt;org.zy.pro.sw.servlet.IndexServlet&lt;/servlet-class&gt;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">    </span>&lt;init-param&gt;<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">      </span>&lt;param-name&gt;dbconfig&lt;/param-name&gt;<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">      </span>&lt;param-value&gt;/WEB-INF/dbconfig.xml&lt;/param-value&gt;<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">    </span>&lt;/init-param&gt;</span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>&lt;/servlet&gt;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在此，我们实现对数据库的配置文件的加载。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">初始化完成后，我们可以通过</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">String<span style="mso-spacerun: yes">  </span>dbconf=this.getServletConfig().getInitParameter("dbconfig")</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来取得我们的配置的参数的值。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">但是，我们仅能得到一个配置的字符串。之后我们可以通过配置文件取得我们的数据库的配置参数，然后对数据库进行初始化。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其实我们也可以通过传递一个类的名字串，然后再实例化。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">    </span>&lt;init-param&gt;<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">      </span>&lt;param-name&gt;dbconfig&lt;/param-name&gt;<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">      </span>&lt;param-value&gt;org.zy.util.db.DBUtil&lt;/param-value&gt;<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">   </span>
								<span style="mso-spacerun: yes"> </span>&lt;/init-param&gt;<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们先取得配置参数：</span>
						<span lang="EN-US" style="COLOR: navy">
								<o:p>
								</o:p>
						</span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">String<span style="mso-spacerun: yes">  </span>dbconf=this.getServletConfig().getInitParameter("dbconfig")</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后通过</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">Class.forName(dbconf).getInstance();</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来实例化对象，就可以实现对数据库的调用了。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 15pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">结论：在</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: navy; mso-bidi-font-size: 10.0pt">web.xml</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 15pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">中对</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: navy; mso-bidi-font-size: 10.0pt">Servlet</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 15pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">的初始化，只能传递字符串类型的数据</span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 20pt; mso-list: l0 level1 lfo1">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">④　</span>
				<span lang="EN-US">ServletContext</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">ServletContext</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是负责和</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的上文和下文交互，上面和</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">容器交互，下面和</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的请求和相应进行交互。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US">ServletConfig</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，</span>
				<span lang="EN-US">
						<span style="mso-spacerun: yes">    </span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">public ServletContext getServletContext();</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法实现取得当前</span>
				<span lang="EN-US">ServletContext</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的对象。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你可能要问，</span>
				<span lang="EN-US">ServletContext</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一个接口，那么你如何取得他的对象呢？</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其实这个问题和</span>
				<span lang="EN-US">ServletConfig</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相同，都是在</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行初始化的时候产生的对象，是由容器来初始化的。</span>
		</p>
<img src ="http://www.blogjava.net/nbtymm/aggbug/52168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2006-06-12 11:53 <a href="http://www.blogjava.net/nbtymm/archive/2006/06/12/52168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>介绍一篇关于session的好文章,写的很详细</title><link>http://www.blogjava.net/nbtymm/archive/2006/06/09/51711.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Fri, 09 Jun 2006 07:54:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2006/06/09/51711.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/51711.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2006/06/09/51711.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/51711.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/51711.html</trackback:ping><description><![CDATA[
		<div>
				<span>
						<span>摘要：虽然session机制在web应用程序中被采用已经很长时间了，但是仍然有很多人不清楚session机制的本质，以至不能正确的应用这一技术。本文将详细讨论session的工作机制并且对在Java web application中应用session机制时常见的问题作出解答。<br /><br />目录：<br />一、术语session<br />二、HTTP协议与状态保持<br />三、理解cookie机制<br />四、理解session机制<br />五、理解javax.servlet.http.HttpSession<br />六、HttpSession常见问题<br />七、跨应用程序的session共享<br />八、总结<br />参考文档<br /><br />一、术语session<br />在我的经验里，session这个词被滥用的程度大概仅次于transaction，更加有趣的是transaction与session在某些语境下的含义是相同的。<br /><br />session，中文经常翻译为会话，其本来的含义是指有始有终的一系列动作/消息，比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个 session。有时候我们可以看到这样的话“在一个浏览器会话期间，...”，这里的会话一词用的就是其本义，是指从一个浏览器窗口打开到关闭这个期间 ①。最混乱的是“用户（客户端）在一次会话期间”这样一句话，它可能指用户的一系列动作（一般情况下是同某个具体目的相关的一系列动作，比如从登录到选购商品到结账登出这样一个网上购物的过程，有时候也被称为一个transaction），然而有时候也可能仅仅是指一次连接，也有可能是指含义①，其中的差别只能靠上下文来推断②。<br /><br />然而当session一词与网络协议相关联时，它又往往隐含了“面向连接”和/或“保持状态”这样两个含义， “面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道，比如打电话，直到对方接了电话通信才能开始，与此相对的是写信，在你把信发出去的时候你并不能确认对方的地址是否正确，通信渠道不一定能建立，但对发信人来说，通信已经开始了。“保持状态”则是指通信的一方能够把一系列的消息关联起来，使得消息之间可以互相依赖，比如一个服务员能够认出再次光临的老顾客并且记得上次这个顾客还欠店里一块钱。这一类的例子有“一个TCP session”或者 “一个POP3 session”③。<br /><br />而到了web服务器蓬勃发展的时代，session在web开发语境下的语义又有了新的扩展，它的含义是指一类用来在客户端与服务器之间保持状态的解决方案④。有时候session也用来指这种解决方案的存储结构，如“把xxx保存在session 里”⑤。由于各种用于web开发的语言在一定程度上都提供了对这种解决方案的支持，所以在某种特定语言的语境下，session也被用来指代该语言的解决方案，比如经常把Java里提供的javax.servlet.http.HttpSession简称为session⑥。<br /><br />鉴于这种混乱已不可改变，本文中session一词的运用也会根据上下文有不同的含义，请大家注意分辨。<br />在本文中，使用中文“浏览器会话期间”来表达含义①，使用“session机制”来表达含义④，使用“session”表达含义⑤，使用具体的“HttpSession”来表达含义⑥<br /><br />二、HTTP协议与状态保持<br />HTTP 协议本身是无状态的，这与HTTP协议本来的目的是相符的，客户端只需要简单的向服务器请求下载某些文件，无论是客户端还是服务器都没有必要纪录彼此过去的行为，每一次请求之间都是独立的，好比一个顾客和一个自动售货机或者一个普通的（非会员制）大卖场之间的关系一样。<br /><br />然而聪明（或者贪心？）的人们很快发现如果能够提供一些按需生成的动态信息会使web变得更加有用，就像给有线电视加上点播功能一样。这种需求一方面迫使HTML逐步添加了表单、脚本、DOM等客户端行为，另一方面在服务器端则出现了CGI规范以响应客户端的动态请求，作为传输载体的HTTP协议也添加了文件上载、 cookie这些特性。其中cookie的作用就是为了解决HTTP协议无状态的缺陷所作出的努力。至于后来出现的session机制则是又一种在客户端与服务器之间保持状态的解决方案。<br /><br />让我们用几个例子来描述一下cookie和session机制之间的区别与联系。笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠，然而一次性消费5杯咖啡的机会微乎其微，这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案：<br />1、该店的店员很厉害，能记住每位顾客的消费数量，只要顾客一走进咖啡店，店员就知道该怎么对待了。这种做法就是协议本身支持状态。<br />2、发给顾客一张卡片，上面记录着消费的数量，一般还有个有效期限。每次消费时，如果顾客出示这张卡片，则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。<br />3、发给顾客一张会员卡，除了卡号之外什么信息也不纪录，每次消费时，如果顾客出示该卡片，则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。<br /><br />由于HTTP协议是无状态的，而出于种种考虑也不希望使之成为有状态的，因此，后面两种方案就成为现实的选择。具体来说cookie机制采用的是在客户端保持状态的方案，而session机制采用的是在服务器端保持状态的方案。同时我们也看到，由于采用服务器端保持状态的方案在客户端也需要保存一个标识，所以session机制可能需要借助于cookie机制来达到保存标识的目的，但实际上它还有其他选择。<br /><br />三、理解cookie机制 <br />cookie机制的基本原理就如上面的例子一样简单，但是还有几个问题需要解决：“会员卡”如何分发；“会员卡”的内容；以及客户如何使用“会员卡”。<br /><br />正统的cookie分发是通过扩展HTTP协议来实现的，服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。<br /><br />而cookie 的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie，如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置，则把该cookie附在请求资源的HTTP请求头上发送给服务器。意思是麦当劳的会员卡只能在麦当劳的店里出示，如果某家分店还发行了自己的会员卡，那么进这家店的时候除了要出示麦当劳的会员卡，还要出示这家店的会员卡。<br /><br />cookie的内容主要包括：名字，值，过期时间，路径和域。<br />其中域可以指定某一个域比如.google.com，相当于总店招牌，比如宝洁公司，也可以指定一个域下的具体某台机器比如www.google.com或者froogle.google.com，可以用飘柔来做比。<br />路径就是跟在域名后面的URL路径，比如/或者/foo等等，可以用某飘柔专柜做比。<br />路径与域合在一起就构成了cookie的作用范围。<br />如果不设置过期时间，则表示这个cookie的生命期为浏览器会话期间，只要关闭浏览器窗口，cookie就消失了。这种生命期为浏览器会话期的 cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里，当然这种行为并不是规范规定的。如果设置了过期时间，浏览器就会把cookie保存到硬盘上，关闭后再次打开浏览器，这些cookie仍然有效直到超过设定的过期时间。<br /><br />存储在硬盘上的cookie 可以在不同的浏览器进程间共享，比如两个IE窗口。而对于保存在内存里的cookie，不同的浏览器有不同的处理方式。对于IE，在一个打开的窗口上按 Ctrl-N（或者从文件菜单）打开的窗口可以与原窗口共享，而使用其他方式新开的IE进程则不能共享已经打开的窗口的内存cookie；对于 Mozilla Firefox0.8，所有的进程和标签页都可以共享同样的cookie。一般来说是用javascript的window.open打开的窗口会与原窗口共享内存cookie。浏览器对于会话cookie的这种只认cookie不认人的处理方式经常给采用session机制的web应用程序开发者造成很大的困扰。<br /><br />下面就是一个goolge设置cookie的响应头的例子<br />HTTP/1.1 302 Found<br />Location: <a href="http://www.google.com/intl/zh-CN/"></a><a href="http://www.google.com/intl/zh-CN/"><u><font color="#0000ff">http://www.google.com/intl/zh-CN/</font></u></a><br />Set-Cookie: PREF=ID=0565f77e132de138:NW=1:TM=1098082649:LM=1098082649:S=KaeaCFPo49RiA_d8; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com<br />Content-Type: text/html<br /><br /><br /><br /><br />这是使用HTTPLook这个HTTP Sniffer软件来俘获的HTTP通讯纪录的一部分<br /><br /><br /><br /><br />浏览器在再次访问goolge的资源时自动向外发送cookie<br /><br /><br /><br /><br />使用Firefox可以很容易的观察现有的cookie的值<br />使用HTTPLook配合Firefox可以很容易的理解cookie的工作原理。<br /><br /><br /><br /><br />IE也可以设置在接受cookie前询问<br /><br /><br /><br /><br />这是一个询问接受cookie的对话框。<br /><br />四、理解session机制<br />session机制是一种服务器端的机制，服务器使用一种类似于散列表的结构（也可能就是使用散列表）来保存信息。<br /><br />当程序需要为某个客户端的请求创建一个session的时候，服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id，如果已包含一个session id则说明以前已经为此客户端创建过session，服务器就按照session id把这个 session检索出来使用（如果检索不到，可能会新建一个），如果客户端请求不包含session id，则为此客户端创建一个session并且生成一个与此session相关联的session id，session id的值应该是一个既不会重复，又不容易被找到规律以仿造的字符串，这个 session id将被在本次响应中返回给客户端保存。<br /><br />保存这个session id的方式可以采用cookie，这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID，而。比如weblogic对于web应用程序生成的cookie，JSESSIONID= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764，它的名字就是 JSESSIONID。<br /><br />由于cookie可以被人为的禁止，必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写，就是把session id直接附加在URL路径的后面，附加方式也有两种，一种是作为URL路径的附加信息，表现形式为<a href="http://...../xxx;jsessionid="></a><a href="http://...../xxx;jsessionid="><u><font color="#0000ff">http://...../xxx;jsessionid=</font></u></a> ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764<br />另一种是作为查询字符串附加在URL后面，表现形式为<a href="http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"></a><a href="http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"><u><font color="#0000ff">http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764</font></u></a><br />这两种方式对于用户来说是没有区别的，只是服务器在解析的时候处理的方式不同，采用第一种方式也有利于把session id的信息和正常程序参数区分开来。<br />为了在整个交互过程中始终保持状态，就必须在每个客户端可能请求的路径后面都包含这个session id。<br /><br />另一种技术叫做表单隐藏字段。就是服务器会自动修改表单，添加一个隐藏字段，以便在表单提交时能够把session id传递回服务器。比如下面的表单<br />&lt;form name="testform" action="/xxx"&gt;<br />&lt;input type="text"&gt;<br />&lt;/form&gt;<br />在被传递给客户端之前将被改写成<br />&lt;form name="testform" action="/xxx"&gt;<br />&lt;input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"&gt;<br />&lt;input type="text"&gt;<br />&lt;/form&gt;<br />这种技术现在已较少应用，笔者接触过的很古老的iPlanet6(SunONE应用服务器的前身)就使用了这种技术。<br />实际上这种技术可以简单的用对action应用URL重写来代替。<br /><br />在谈论session机制的时候，常常听到这样一种误解“只要关闭浏览器，session就消失了”。其实可以想象一下会员卡的例子，除非顾客主动对店家提出销卡，否则店家绝对不会轻易删除顾客的资料。对session来说也是一样的，除非程序通知服务器删除一个session，否则服务器会一直保留，程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭，因此服务器根本不会有机会知道浏览器已经关闭，之所以会有这种错觉，是大部分session机制都使用会话cookie来保存session id，而关闭浏览器后这个 session id就消失了，再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上，或者使用某种手段改写浏览器发出的HTTP请求头，把原来的session id发送给服务器，则再次打开浏览器仍然能够找到原来的session。<br /><br />恰恰是由于关闭浏览器不会导致session被删除，迫使服务器为seesion设置了一个失效时间，当距离客户端上一次使用session的时间超过这个失效时间时，服务器就可以认为客户端已经停止了活动，才会把session删除以节省存储空间。<br /><br />五、理解javax.servlet.http.HttpSession<br />HttpSession是Java平台对session机制的实现规范，因为它仅仅是个接口，具体到每个web应用服务器的提供商，除了对规范支持之外，仍然会有一些规范里没有规定的细微差异。这里我们以BEA的Weblogic Server8.1作为例子来演示。<br /><br />首先，Weblogic Server提供了一系列的参数来控制它的HttpSession的实现，包括使用cookie的开关选项，使用URL重写的开关选项，session持久化的设置，session失效时间的设置，以及针对cookie的各种设置，比如设置cookie的名字、路径、域， cookie的生存时间等。<br /><br />一般情况下，session都是存储在内存里，当服务器进程被停止或者重启的时候，内存里的session也会被清空，如果设置了session的持久化特性，服务器就会把session保存到硬盘上，当服务器进程重新启动或这些信息将能够被再次使用， Weblogic Server支持的持久性方式包括文件、数据库、客户端cookie保存和复制。<br /><br />复制严格说来不算持久化保存，因为session实际上还是保存在内存里，不过同样的信息被复制到各个cluster内的服务器进程中，这样即使某个服务器进程停止工作也仍然可以从其他进程中取得session。<br /><br />cookie生存时间的设置则会影响浏览器生成的cookie是否是一个会话cookie。默认是使用会话cookie。有兴趣的可以用它来试验我们在第四节里提到的那个误解。<br /><br />cookie的路径对于web应用程序来说是一个非常重要的选项，Weblogic Server对这个选项的默认处理方式使得它与其他服务器有明显的区别。后面我们会专题讨论。<br /><br />关于session的设置参考[5] <a href="http://e-docs.bea.com/wls/docs70/webapp/weblogic_xml.html#1036869"></a><a href="http://e-docs.bea.com/wls/docs70/webapp/weblogic_xml.html#1036869"><u><font color="#0000ff">http://e-docs.bea.com/wls/docs70/webapp/weblogic_xml.html#1036869</font></u></a><br /><br />六、HttpSession常见问题<br />（在本小节中session的含义为⑤和⑥的混合）<br /><br /><br />1、session在何时被创建<br />一个常见的误解是以为session在有客户端访问时就被创建，然而事实是直到某server端程序调用 HttpServletRequest.getSession(true)这样的语句时才被创建，注意如果JSP没有显示的使用 &lt;% @page session="false"%&gt; 关闭session，则JSP文件在编译成Servlet时将会自动加上这样一条语句 HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的 session对象的来历。<br /><br />由于session会消耗内存资源，因此，如果不打算使用session，应该在所有的JSP中关闭它。<br /><br />2、session何时被删除<br />综合前面的讨论，session在下列情况下被删除a.程序调用HttpSession.invalidate();或b.距离上一次收到客户端发送的session id时间间隔超过了session的超时设置;或c.服务器进程被停止（非持久session）<br /><br />3、如何做到在浏览器关闭时删除session<br />严格的讲，做不到这一点。可以做一点努力的办法是在所有的客户端页面里使用javascript代码window.oncolose来监视浏览器的关闭动作，然后向服务器发送一个请求来删除session。但是对于浏览器崩溃或者强行杀死进程这些非常规手段仍然无能为力。<br /><br />4、有个HttpSessionListener是怎么回事<br />你可以创建这样的listener去监控session的创建和销毁事件，使得在发生这样的事件时你可以做一些相应的工作。注意是session的创建和销毁动作触发listener，而不是相反。类似的与HttpSession有关的listener还有 HttpSessionBindingListener，HttpSessionActivationListener和 HttpSessionAttributeListener。<br /><br />5、存放在session中的对象必须是可序列化的吗<br />不是必需的。要求对象可序列化只是为了session能够在集群中被复制或者能够持久保存或者在必要时server能够暂时把session交换出内存。在 Weblogic Server的session中放置一个不可序列化的对象在控制台上会收到一个警告。我所用过的某个iPlanet版本如果 session中有不可序列化的对象，在session销毁时会有一个Exception，很奇怪。<br /><br />6、如何才能正确的应付客户端禁止cookie的可能性<br />对所有的URL使用URL重写，包括超链接，form的action，和重定向的URL，具体做法参见[6]<br /><a href="http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770"></a><a href="http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770"><u><font color="#0000ff">http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770</font></u></a><br /><br />7、开两个浏览器窗口访问应用程序会使用同一个session还是不同的session<br />参见第三小节对cookie的讨论，对session来说是只认id不认人，因此不同的浏览器，不同的窗口打开方式以及不同的cookie存储方式都会对这个问题的答案有影响。<br /><br />8、如何防止用户打开两个浏览器窗口操作导致的session混乱<br />这个问题与防止表单多次提交是类似的，可以通过设置客户端的令牌来解决。就是在服务器每次生成一个不同的id返回给客户端，同时保存在session里，客户端提交表单时必须把这个id也返回服务器，程序首先比较返回的id与保存在session里的值是否一致，如果不一致则说明本次操作已经被提交过了。可以参看《J2EE核心模式》关于表示层模式的部分。需要注意的是对于使用javascript window.open打开的窗口，一般不设置这个id，或者使用单独的id，以防主窗口无法操作，建议不要再window.open打开的窗口里做修改操作，这样就可以不用设置。<br /><br />9、为什么在Weblogic Server中改变session的值后要重新调用一次session.setValue<br />做这个动作主要是为了在集群环境中提示Weblogic Server session中的值发生了改变，需要向其他服务器进程复制新的session值。<br /><br />10、为什么session不见了<br />排除session正常失效的因素之外，服务器本身的可能性应该是微乎其微的，虽然笔者在iPlanet6SP1加若干补丁的Solaris版本上倒也遇到过；浏览器插件的可能性次之，笔者也遇到过3721插件造成的问题；理论上防火墙或者代理服务器在cookie处理上也有可能会出现问题。<br />出现这一问题的大部分原因都是程序的错误，最常见的就是在一个应用程序中去访问另外一个应用程序。我们在下一节讨论这个问题。<br /><br />七、跨应用程序的session共享<br /><br />常常有这样的情况，一个大项目被分割成若干小项目开发，为了能够互不干扰，要求每个小项目作为一个单独的web应用程序开发，可是到了最后突然发现某几个小项目之间需要共享一些信息，或者想使用session来实现SSO(single sign on)，在session中保存login的用户信息，最自然的要求是应用程序间能够访问彼此的session。<br /><br />然而按照Servlet规范，session的作用范围应该仅仅限于当前应用程序下，不同的应用程序之间是不能够互相访问对方的session的。各个应用服务器从实际效果上都遵守了这一规范，但是实现的细节却可能各有不同，因此解决跨应用程序session共享的方法也各不相同。<br /><br />首先来看一下Tomcat是如何实现web应用程序之间session的隔离的，从 Tomcat设置的cookie路径来看，它对不同的应用程序设置的cookie路径是不同的，这样不同的应用程序所用的session id是不同的，因此即使在同一个浏览器窗口里访问不同的应用程序，发送给服务器的session id也可以是不同的。<br /><br /><br />  <br /><br />根据这个特性，我们可以推测Tomcat中session的内存结构大致如下。<br /><br /><br /><br /><br />笔者以前用过的iPlanet也采用的是同样的方式，估计SunONE与iPlanet之间不会有太大的差别。对于这种方式的服务器，解决的思路很简单，实际实行起来也不难。要么让所有的应用程序共享一个session id，要么让应用程序能够获得其他应用程序的session id。<br /><br />iPlanet中有一种很简单的方法来实现共享一个session id，那就是把各个应用程序的cookie路径都设为/（实际上应该是/NASApp，对于应用程序来讲它的作用相当于根）。<br />&lt;session-info&gt;<br />&lt;path&gt;/NASApp&lt;/path&gt;<br />&lt;/session-info&gt;<br /><br />需要注意的是，操作共享的session应该遵循一些编程约定，比如在session attribute名字的前面加上应用程序的前缀，使得 setAttribute("name", "neo")变成setAttribute("app1.name", "neo")，以防止命名空间冲突，导致互相覆盖。<br /><br /><br />在Tomcat中则没有这么方便的选择。在Tomcat版本3上，我们还可以有一些手段来共享session。对于版本4以上的Tomcat，目前笔者尚未发现简单的办法。只能借助于第三方的力量，比如使用文件、数据库、JMS或者客户端cookie，URL参数或者隐藏字段等手段。<br /><br />我们再看一下Weblogic Server是如何处理session的。<br /><br /><br />  <br /><br />从截屏画面上可以看到Weblogic Server对所有的应用程序设置的cookie的路径都是/，这是不是意味着在Weblogic Server中默认的就可以共享session了呢？然而一个小实验即可证明即使不同的应用程序使用的是同一个session，各个应用程序仍然只能访问自己所设置的那些属性。这说明Weblogic Server中的session的内存结构可能如下<br /><br /><br /><br /><br />对于这样一种结构，在 session机制本身上来解决session共享的问题应该是不可能的了。除了借助于第三方的力量，比如使用文件、数据库、JMS或者客户端 cookie，URL参数或者隐藏字段等手段，还有一种较为方便的做法，就是把一个应用程序的session放到ServletContext中，这样另外一个应用程序就可以从ServletContext中取得前一个应用程序的引用。示例代码如下，<br /><br />应用程序A<br />context.setAttribute("appA", session); <br /><br />应用程序B<br />contextA = context.getContext("/appA");<br />HttpSession sessionA = (HttpSession)contextA.getAttribute("appA"); <br /><br />值得注意的是这种用法不可移植，因为根据ServletContext的JavaDoc，应用服务器可以处于安全的原因对于context.getContext("/appA");返回空值，以上做法在Weblogic Server 8.1中通过。<br /><br />那么Weblogic Server为什么要把所有的应用程序的cookie路径都设为/呢？原来是为了SSO，凡是共享这个session的应用程序都可以共享认证的信息。一个简单的实验就可以证明这一点，修改首先登录的那个应用程序的描述符weblogic.xml，把cookie路径修改为/appA 访问另外一个应用程序会重新要求登录，即使是反过来，先访问cookie路径为/的应用程序，再访问修改过路径的这个，虽然不再提示登录，但是登录的用户信息也会丢失。注意做这个实验时认证方式应该使用FORM，因为浏览器和web服务器对basic认证方式有其他的处理方式，第二次请求的认证不是通过 session来实现的。具体请参看[7] secion 14.8 Authorization，你可以修改所附的示例程序来做这些试验。<br /><br />八、总结<br />session机制本身并不复杂，然而其实现和配置上的灵活性却使得具体情况复杂多变。这也要求我们不能把仅仅某一次的经验或者某一个浏览器，服务器的经验当作普遍适用的经验，而是始终需要具体情况具体分析。<br />摘要：虽然session机制在web应用程序中被采用已经很长时间了，但是仍然有很多人不清楚session机制的本质，以至不能正确的应用这一技术。本文将详细讨论session的工作机制并且对在Java web application中应用session机制时常见的问题作出解答。</span>
				</span>
		</div>
<img src ="http://www.blogjava.net/nbtymm/aggbug/51711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2006-06-09 15:54 <a href="http://www.blogjava.net/nbtymm/archive/2006/06/09/51711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet/JSP服务器端的重定向</title><link>http://www.blogjava.net/nbtymm/archive/2006/06/09/51699.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Fri, 09 Jun 2006 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2006/06/09/51699.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/51699.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2006/06/09/51699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/51699.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/51699.html</trackback:ping><description><![CDATA[通常，在一个设计良好的Web应用中，都会综合使用Servlet和JSP技术。Servlet控制业务流转，JSP则负责业务处理结果的显示。此时，将大量用到重定向技术。 <br /><br />        重定向技术可以分为两类，一类是客户端重定向，一类是服务器端重定向。客户端重定向可以通过设置特定的HTTP头，或者写JavaScript脚本实现。本文主要探讨服务器端重定向技术的实现。 <br /><br /><br />服务器端的重定向相关类<br /><br /><br />服务器端的重定向技术涉及到javax.servlet.ServletContext、javax.servlet.RequestDispatcher、javax.servlet.http.ServletRequest、javax.servlet.http.ServletResponse等几个接口。 <br /><br /><br />服务器端的重定向方式<br /><br /><br />服务器端的重定向可以有两种方式，一是使用HttpServletResponse的sendRedirect()方法，一是使用RequestDispatcher的forward()方法。下面对这两种方式进行介绍。 <br /><br />HttpServletResponse.sendRedirect()方法 <br /><br />HttpServletResponse接口定义了可用于转向的sendRedirect()方法。代码如下： <br /><br />public void sendRedirect(java.lang.String location)throws java.io.IOException<br /><br /><br />这个方法将响应定向到参数location指定的、新的URL。location可以是一个绝对的URL，如response.sendRedirect("http://java.sun.com")也可以使用相对的URL。如果location以“/”开头，则容器认为相对于当前Web应用的根，否则，容器将解析为相对于当前请求的URL。这种重定向的方法，将导致客户端浏览器的请求URL跳转。从浏览器中的地址栏中可以看到新的URL地址，作用类似于上面设置HTTP响应头信息的实现。 <br /><br />RequestDispatcher.forward()方法 <br /><br />RequestDispatcher是一个Web资源的包装器，可以用来把当前request传递到该资源，或者把新的资源包括到当前响应中。RequestDispatcher接口中定义了两个方法，参见如下代码： <br /><br />public interface RequestDispatcher {<br />void forward(ServletRequest request, ServletResponse response); <br />void include(ServletRequest request, ServletResponse response);<br />}<br /><br /><br /><br />forward()方法将当前的request和response重定向到该RequestDispacher指定的资源。这在实际项目中大量使用，因为完成一个业务操作往往需要跨越多个步骤，每一步骤完成相应的处理后，转向到下一个步骤。比如，通常业务处理在Servlet中处理，处理的结果转向到一个JSP页面进行显示。这样看起来类似于Servlet链的功能，但是还有一些区别。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源，而不仅仅是另外一个Servlet。 include()方法将把Request Dispatcher资源的输出包含到当前输出中。 <br /><br />注意，只有在尚未向客户端输出响应时才可以调用forward()方法，如果页面缓存不为空，在重定向前将自动清除缓存。否则将抛出一个IllegalStateException异常。 <br /><br /><br />如何得到RequestDispatcher<br /><br /><br />有三种方法可以得到Request Dispatcher对象。 <br /><br />1.javax.servlet. ServletRequest的getRequestDispatcher(String path)方法，其中path可以是相对路径，但不能越出当前Servlet上下文。如果path以“/”开头，则解析为相对于当前上下文的根。 <br /><br />2.javax.servlet. ServletContext的getRequestDispatcher(String path)方法，其中path必须以“/”开头，路径相对于当前的Servlet上下文。可以调用ServletContext的getContext(String uripath)得到另一个Servlet上下文，并可以转向到外部上下文的一个服务器资源链接。 <br /><br />3.使用javax.servlet. ServletContext的getNamedDispatcher(String name)得到名为name的一个Web资源，包括Servlet和JSP页面。这个资源的名字在Web应用部署描述文件web.xml中指定。 <br /><br />这三种方法的使用有细微的差别。比如，下面是一个应用的配置文件web.xml： <br /><br />&lt;?xml version="1.0" ?&gt;<br />&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" <br />"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"&gt;<br />&lt;web-app&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;FirstServlet&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;org. javaresearch.redirecttest.ServletOne&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;SecondServlet&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;org.javaresearch. redirecttest.ServletTwo&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;FirstServlet&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/servlet/firstservlet/&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;SecondServlet&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/servlet/secondservlet/&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />&lt;/web-app&gt;<br /><br /><br /><br />其中定义了两个Servlet，名字分别为FirstServlet和SecondServlet，对应的类分别为org.javaresearch. redirecttest.ServletOne和org. javaresearch.redirecttest.ServletTwo。可以在浏览器中通过类似于下面的链接访问： <br /><br />http://localhost:8080/servlet/firstservlet/ <br /><br />使用1中方法，例如在firstservlet可以写入下面的代码： <br /><br />RequestDispatcher rd = request.getRequestDispatcher("secondservlet");<br />rd.forward(request, response);<br /><br /><br /><br />此时控制权将转向到第二个Servlet了。 <br /><br />使用2中的方法，可以从Servlet Context中得到RequestDispatcher代码如下： <br /><br />RequestDispatcher rd = getServletContext().getRequest <br />Dispatcher("/servlet/secondservlet");<br />rd.forward(request, response);<br /><br /><br /><br />使用3中的方法，从上面的web. xml配置文件可以看到定义了两个Servlet，名字分别为FirstServlet和SecondServlet，所以可以得到命名的Dispatcher： <br /><br />RequestDispatcher rd = getServletContext().getNamedDispatcher("SecondServlet");<br />rd.forward(request, response);<br /><br /><br /><br />这样也可以重定向到SecondServlet了。 <br /><br /><br />JSP页面中的重定向<br /><br /><br />JSP在解析后编译为一个Servlet运行，所以在JSP中也可以使用上面的重定向代码，并且，JSP还提供了更便利的操作，如下： <br /><br />&lt;jsp:forward page= "nextpage.jsp"/&gt;<br /><br /><br /><br />JSP页面执行到这儿，将终止当前的处理，将控制权交由nextpage.jsp。 <br /><br /><br />如何选择<br /><br /><br />RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的区别是：前者仅是容器中控制权的转向，在客户端浏览器地址栏中不会显示出转向后的地址；后者则是完全的跳转，浏览器将会得到跳转的地址，并重新发送请求链接。这样，从浏览器的地址栏中可以看到跳转后的链接地址。所以，前者更加高效，在前者可以满足需要时，尽量使用Request Dispatcher.forward()方法，并且，这样也有助于隐藏实际的链接。在有些情况下，比如，需要跳转到一个其它服务器上的资源，则必须使用HttpServletResponse.sendRequest()方法。<img src ="http://www.blogjava.net/nbtymm/aggbug/51699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2006-06-09 15:32 <a href="http://www.blogjava.net/nbtymm/archive/2006/06/09/51699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>