﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-一手的小窝窝-文章分类-JAVA </title><link>http://www.blogjava.net/strive/category/17733.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:45:23 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:45:23 GMT</pubDate><ttl>60</ttl><item><title>JSTL 使用小记 </title><link>http://www.blogjava.net/strive/articles/89722.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sun, 24 Dec 2006 01:24:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/89722.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/89722.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/89722.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/89722.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/89722.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#ff6600">
						<strong>JSTL包含以下的标签:<br />   常用的标签：如&lt;c:out&gt;、&lt;c:remove&gt;、&lt;c:catch&gt;、&lt;c:set&gt;等<br />   条件标签：如&lt;c:if&gt;&lt;c:when&gt;、&lt;c:choose&gt;、&lt;c:otherwise&gt;等<br />   URL标签：如&lt;c:import&gt;、&lt;c:redirect&gt;和&lt;c:url&gt;等<br />   XML标签：如&lt;xml:out&gt;等<br />   国际化输出标签：如&lt;fmt:timeZone&gt;等<br />   SQL标签：如&lt;sql:query&gt;、&lt;sql:update&gt;、&lt;sql:transaction&gt;等<br /> <br />一般用途的标签: <br />1．&lt;c:out&gt; <br />没有Body时的语法 <br />&lt;c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"]/&gt; <br />有Body时的语法 <br />&lt;c:out value="value" [escapeXml="{true|false}"]&gt; <br />这里是Body部分 <br />&lt;/c:out&gt; <br />名字                  类型               描述 <br />value               Object         将要输出的表达式 <br />escapeXml    boolean      确定以下字符:&lt;,&gt;,&amp;,',"在字符串中是否被除数，默认为true <br />default            Object          如果vaule计算后的结果是null，那么输出这个默认值 </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>2．&lt;c:set&gt; <br />这个标签用于在某个范围(page、request、session、application等)中使用某个名字设定特定的值，或者设定某个已经存在的javabean对象的属性。他类似于&lt;%request.setAttrbute("name","value");%&gt; <br />语法1：使用value属性设定一个特定范围中的属性。 <br />&lt;c:set value="value" var="varName" [scope="{page|request|session|application}"]/&gt; <br />语法2：使用value属性设定一个特定范围中的属性，并带有一个Body。 <br />&lt;c:set var="varName" [scope="{page|request|session|application}"]&gt; <br />Body部分 <br />&lt;/c:set&gt; <br />语法3：设置某个特定对象的一个属性。 <br />&lt;c:set value="value" target="target" property="propertyName"/&gt; <br />语法4：设置某个特定对象的一个属性，并带有一个Body。 <br />&lt;c:set target="target" property="propertyName"&gt; <br />Body部分 <br />&lt;/c:set&gt; </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>名字             类型                         描述 <br />value            Object           将要计算的表到式。 <br />var                String            用于表示value 值的属性，如果要在其他标签中使用，就是通过这 个var指定的值来进行的。它相当于在标签定义了一个变量，并且这个变量只能在标签中的一个。 <br />scope          String             var的有效范围，可以是page|request|session|application中的一个 <br />target           String           将要设置属性的对象，它必须是javabean或则java.util.Map对象 <br />property       Object           待设定的Target对象中的属性名字，比如在javabean中有个name属性，提供了setUserId方法，那么这里填userId。 </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>3．&lt;c:remove&gt; <br />&lt;c:remove var="varName" [scope="{page|request|session|application}"]/&gt; </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>4．&lt;c:catch&gt; <br />这个标签相当于捕获在它里边的标签抛出的异常对象 <br />&lt;c:catch [var="varName"]&gt; //var是异常的名字 <br />内容 <br />&lt;/c:catch&gt; </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>条件标签 <br />1． &lt;c:if&gt; <br />语法1：无Body情况 <br />&lt;c:if test="testCondition" var="varName" [scope="page|request|session|application"]/&gt; <br />语法2：有Body的情况 <br />&lt;c:if test="testCondition" var="varName" [scope="page|request|session|application"]&gt; <br />Body内容 <br />&lt;/c:if&gt; </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>名字 类型 描述 <br />test Boolean 表达式的条件，相当于if()中的条件判断语句。 <br />var String 表示这个语句的名字。 <br />scope String var这个变量的作用范围。 </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>2．&lt;c:choose&gt; <br />语法：&lt;c:choose&gt; <br />Body内容(&lt;c:when&gt;和&lt;c:otherwise&gt;子标签) <br />&lt;/c:choose&gt; <br />注意：它的Body只能由以下元素组成: <br />1) 空格 <br />2) 0或多个&lt;c:when&gt;子标签，&lt;c:when&gt;必须在&lt;c:otherwise&gt;标签之前出现. <br />3) 0个或多个&lt;c:otherwise&gt;子标签。 </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>3．&lt;c:when&gt; <br />代表的是&lt;c:choose&gt;的一个条件分支,只能在&lt;c:choose&gt;中使用 <br />语法：&lt;c:when test="testCondition"&gt; //test是boolean类型,用于判断条件真假 <br />Body语句 <br />&lt;/c:when&gt; </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>4．&lt;c:otherwise&gt; <br />代表的是&lt;c:choose&gt;中的最后选择。必须在最后出现 <br />&lt;c:otherwise&gt; <br />内容 <br />&lt;/c:otherwise&gt; </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>迭代标签 <br />1．&lt;c:forEach&gt; <br />语法1：在Collection中迭代 <br />&lt;c:forEach[var="varName"] items="collection" [varStatus="varStatusName"] <br />[begin="begin"] [end="end"] [step="step"] <br />Body内容 <br />&lt;/c:foeEach&gt; </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>语法2：迭代固定的次数. <br />&lt;c:forEach [var="varName"] [varStatus="varStatusName"] <br />[begin="begin"] [end="end"] [step="step"] <br />Body内容 <br />&lt;/c:foeEach&gt; </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>名字               类型                                    描述 <br />var                 String                                迭代的参数，它是标签参数，在其他标签中通过它来引用这个标签中的内容。 <br />Items           Collection、ArrayList、  要迭代的items集合.<br />                     Iterator、Map、String、 <br />                      Eunmeration等 <br />VarStatus   String                                  表示迭代的状态，可以访问迭代自身的信息 <br />Begin          int                                        表示开始迭代的位置。 <br />End              int                                       表示结束迭代的位置。 <br />Step            int                                        表示迭代移动的步长，默认为1。 </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>URL相关的标签 <br />1．&lt;c:import&gt; <br />语法1：资源的内容使用String对象向外暴露 <br />&lt;c:import url="url" [context="context"] <br />[var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"]&gt; <br />内容 <br />&lt;/c:import&gt; </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>语法2：资源的内容使用Reader对象向外暴露。 <br />&lt;c:import url="url" [context="context"] <br />varReader="varReaderName" [charEncoding="charEncoding"]&gt; <br />内容 <br />&lt;/c:import&gt; <br />名字                  类型                               描述 <br />url                     String                     待导入资源的URL，可以是相对路径和绝对路径，并且可以导入其他主机资源 <br />context             String                     当使用相对路径访问外部context资源时，context指定了这个资源的名字。 <br />var                     String                    参数的名字。 <br />scope               String                    var参数的作用范围。 <br />cahrEncoding String                    输入资源的字符编码。 <br />varReader       String                    这个参数的类型是Reader,用于读取资源。 </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>2．&lt;c:redirct&gt; <br />语法1:没有Body的情况. <br />&lt;c:redirect url="value" [context="context"]/&gt; <br />语法2：有Body情况下，在Body中指定查询的参数 <br />&lt;c:redirect url="value" [context="context"]&gt; <br />&lt;c:param name="name" value="value"/&gt; <br />&lt;/c:redirect&gt; </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>3．&lt;c:url&gt; <br />语法1：没有Body <br />&lt;c:url value="value" [context="context"] [var="varName"] [scope="{page|request|session+application}"]/&gt; <br />语法2：有Body <br />&lt;c:url value="value" [context="context"] [var="varName"] [scope="{page|request|session+application}"]&gt; <br />&lt;c:param name="name" value="value"/&gt; <br />&lt;/c:url&gt; </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>名字                  类型                  描述 <br />value             String                URL值 <br />context          String                 当使用相对路径访问外部context资源时，context指定了这个资源的名字 <br />var                 String                 标识这个URL标量。 <br />Scope           String                变量作用范围。 </strong>
				</font>
		</p>
		<p>
				<font color="#ff6600">
						<strong>SQL相关的标签 <br />1．&lt;sql:setDataSource&gt; <br />2．&lt;sql:query&gt; <br />3．&lt;sql:update&gt; <br />4．&lt;transaction&gt; <br />5．&lt;param&gt; </strong>
				</font>
		</p>
<img src ="http://www.blogjava.net/strive/aggbug/89722.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-12-24 09:24 <a href="http://www.blogjava.net/strive/articles/89722.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>许久没有遇到JSP编码问题，特写了一个简单的转换方法</title><link>http://www.blogjava.net/strive/articles/85056.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sat, 02 Dec 2006 09:24:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/85056.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/85056.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/85056.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/85056.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/85056.html</trackback:ping><description><![CDATA[
		<p> </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">
				<img id="Codehighlighter1_0_14_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_14_Open_Text.style.display='none'; Codehighlighter1_0_14_Closed_Image.style.display='inline'; Codehighlighter1_0_14_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_0_14_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_14_Closed_Text.style.display='none'; Codehighlighter1_0_14_Open_Image.style.display='inline'; Codehighlighter1_0_14_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span id="Codehighlighter1_0_14_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">/** */</span>
				<span id="Codehighlighter1_0_14_Open_Text">
						<span style="COLOR: #008000">/**</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 编码转换<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span>
						<span style="COLOR: #008000">*/</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> com.zeroidea.common;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_46_81_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_81_Open_Text.style.display='none'; Codehighlighter1_46_81_Closed_Image.style.display='inline'; Codehighlighter1_46_81_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_46_81_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_46_81_Closed_Text.style.display='none'; Codehighlighter1_46_81_Open_Image.style.display='inline'; Codehighlighter1_46_81_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_46_81_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">/** */</span>
				<span id="Codehighlighter1_46_81_Open_Text">
						<span style="COLOR: #008000">/**</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * </span>
						<span style="COLOR: #808080">@author</span>
						<span style="COLOR: #008000"> Administrator<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span>
						<span style="COLOR: #008000">*/</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_110_362_Open_Image" onclick="this.style.display='none'; Codehighlighter1_110_362_Open_Text.style.display='none'; Codehighlighter1_110_362_Closed_Image.style.display='inline'; Codehighlighter1_110_362_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_110_362_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_110_362_Closed_Text.style.display='none'; Codehighlighter1_110_362_Open_Image.style.display='inline'; Codehighlighter1_110_362_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> EncodingAlter </span>
				<span id="Codehighlighter1_110_362_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_110_362_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_160_360_Open_Image" onclick="this.style.display='none'; Codehighlighter1_160_360_Open_Text.style.display='none'; Codehighlighter1_160_360_Closed_Image.style.display='inline'; Codehighlighter1_160_360_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_160_360_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_160_360_Closed_Text.style.display='none'; Codehighlighter1_160_360_Open_Image.style.display='inline'; Codehighlighter1_160_360_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> String encodingToGBK(String str) </span>
						<span id="Codehighlighter1_160_360_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_160_360_Open_Text">
								<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_181_201_Open_Image" onclick="this.style.display='none'; Codehighlighter1_181_201_Open_Text.style.display='none'; Codehighlighter1_181_201_Closed_Image.style.display='inline'; Codehighlighter1_181_201_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_181_201_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_181_201_Closed_Text.style.display='none'; Codehighlighter1_181_201_Open_Image.style.display='inline'; Codehighlighter1_181_201_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (str </span>
								<span style="COLOR: #000000">==</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">) </span>
								<span id="Codehighlighter1_181_201_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_181_201_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">return</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">null</span>
										<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        str </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> str.trim();<br /><img id="Codehighlighter1_229_312_Open_Image" onclick="this.style.display='none'; Codehighlighter1_229_312_Open_Text.style.display='none'; Codehighlighter1_229_312_Closed_Image.style.display='inline'; Codehighlighter1_229_312_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_229_312_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_229_312_Closed_Text.style.display='none'; Codehighlighter1_229_312_Open_Image.style.display='inline'; Codehighlighter1_229_312_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">try</span>
								<span style="COLOR: #000000"> </span>
								<span id="Codehighlighter1_229_312_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_229_312_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            String temp </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> String(str.getBytes(</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">ISO-8859-1</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">),</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">GBK</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">return</span>
										<span style="COLOR: #000000"> temp;<br /><img id="Codehighlighter1_337_356_Open_Image" onclick="this.style.display='none'; Codehighlighter1_337_356_Open_Text.style.display='none'; Codehighlighter1_337_356_Closed_Image.style.display='inline'; Codehighlighter1_337_356_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_337_356_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_337_356_Closed_Text.style.display='none'; Codehighlighter1_337_356_Open_Image.style.display='inline'; Codehighlighter1_337_356_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">catch</span>
								<span style="COLOR: #000000"> (Exception excp) </span>
								<span id="Codehighlighter1_337_356_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_337_356_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">return</span>
										<span style="COLOR: #000000"> str;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
<img src ="http://www.blogjava.net/strive/aggbug/85056.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-12-02 17:24 <a href="http://www.blogjava.net/strive/articles/85056.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DOM4J 创建 编码为GB2312 XML文档</title><link>http://www.blogjava.net/strive/articles/84792.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Fri, 01 Dec 2006 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/84792.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/84792.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/84792.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/84792.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/84792.html</trackback:ping><description><![CDATA[    Document   oResult   =       m_serviceGateway.doRequest(oRequest);   <br />    <br />    httpServletResponse.getWriter().println("&lt;?xml   version='1.0'   encoding='"+CoreConfigFactory.getEncoding()+"'?&gt;");   <br />    httpServletResponse.getWriter().println(new   String(oResult.getRootElement().asXML().getBytes("ISO8859-1"),"gb2312"));<br /><br />//<br />DefaultDocument   doc   =   new   DefaultDocument();//DocumentHelper.createDocument();   <br />          doc.setXMLEncoding("GBK");   <br /><br />//String   xml   =     doc.asXml();   <br />  String   xml   =   xml.replaceFisrt("UTF-8","GB2312");<br /><br />DefaultDocument   doc   =   new   DefaultDocument();   <br />          //DocumentHelper.createDocument();   <br />          doc.setXMLEncoding("gb2312");   <br /><br />多种解决方案<img src ="http://www.blogjava.net/strive/aggbug/84792.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-12-01 11:48 <a href="http://www.blogjava.net/strive/articles/84792.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DOM4J 创建XML</title><link>http://www.blogjava.net/strive/articles/84790.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Fri, 01 Dec 2006 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/84790.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/84790.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/84790.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/84790.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/84790.html</trackback:ping><description><![CDATA[
		<strong>
				<font color="#295200" size="5">dom4j创建xml</font>
		</strong>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#a5bd6b" cellspacing="1" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td align="middle">
										<table style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td align="middle">
																		<table style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" cellspacing="0" cellpadding="0" width="100%" border="0">
																				<tbody>
																						<tr>
																								<td>
																										<div id="art" style="MARGIN: 15px">
																												<p>dom4j 是一种解析 XML 文档的开放源代码 XML 框架。本文介绍如何使用包含在 dom4j 中的解析器创建并修改 XML 文档。<br />dom4j API 包含一个解析 XML 文档的工具。本文中将使用这个解析器创建一个示例 XML 文档。清单 1 显示了这个示例 XML 文档，catalog.xml。</p>
																												<p>清单 1. 示例 XML 文档（catalog.xml） </p>
																												<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt; <br />&lt;catalog&gt; <br />&lt;!--An XML Catalog--&gt; <br />&lt;?target instruction?&gt;<br />  &lt;journal title="XML Zone" <br />                  publisher="IBM developerWorks"&gt; </p>
																												<p>&lt;article level="Intermediate" date="December-2001"&gt;<br /> &lt;title&gt;Java configuration with XML Schema&lt;/title&gt; <br /> &lt;author&gt; <br />     &lt;firstname&gt;Marcello&lt;/firstname&gt; <br />     &lt;lastname&gt;Vitaletti&lt;/lastname&gt; <br /> &lt;/author&gt;<br />  &lt;/article&gt;<br />  &lt;/journal&gt; <br />&lt;/catalog&gt;</p>
																												<p> </p>
																												<p>然后使用同一个解析器修改 catalog.xml，清单 2 是修改后的 XML 文档，catalog-modified.xml。</p>
																												<p>清单 2. 修改后的 XML 文档（catalog-modified.xml） </p>
																												<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt; <br />&lt;catalog&gt; <br />&lt;!--An XML catalog--&gt; <br />&lt;?target instruction?&gt;<br />  &lt;journal title="XML Zone"<br />                   publisher="IBM developerWorks"&gt; </p>
																												<p>&lt;article level="Introductory" date="October-2002"&gt;<br /> &lt;title&gt;Create flexible and extensible XML schemas&lt;/title&gt; <br /> &lt;author&gt; <br />     &lt;firstname&gt;Ayesha&lt;/firstname&gt; <br />     &lt;lastname&gt;Malik&lt;/lastname&gt; <br /> &lt;/author&gt; <br />  &lt;/article&gt;<br />  &lt;/journal&gt; <br />&lt;/catalog&gt;</p>
																												<p> </p>
																												<p>与 W3C DOM API 相比，使用 dom4j 所包含的解析器的好处是 dom4j 拥有本地的 XPath 支持。DOM 解析器不支持使用 XPath 选择节点。</p>
																												<p>本文包括以下几个部分：</p>
																												<p>预先设置 <br />创建文档 <br />修改文档 <br />预先设置<br />这个解析器可以从 <a href="http://dom4j.org/">http://dom4j.org</a> 获取。通过设置使 dom4j-1.4/dom4j-full.jar 能够在 classpath 中访问，该文件中包括 dom4j 类、XPath 引擎以及 SAX 和 DOM 接口。如果已经使用了 JAXP 解析器中包含的 SAX 和 DOM 接口，向 classpath 中增加 dom4j-1.4/dom4j.jar 。 dom4j.jar 包括 dom4j 类和 XPath 引擎，但是不含 SAX 与 DOM 接口。 </p>
																												<p>创建文档<br />本节讨论使用 dom4j API 创建 XML 文档的过程，并创建示例 XML 文档 catalog.xml。</p>
																												<p>使用 import 语句导入 dom4j API 类：</p>
																												<p>
																														<br />import org.dom4j.Document;<br />import org.dom4j.DocumentHelper;<br />import org.dom4j.Element;</p>
																												<p> </p>
																												<p>使用 DocumentHelper 类创建一个文档实例。 DocumentHelper 是生成 XML 文档节点的 dom4j API 工厂类。 </p>
																												<p> Document document = DocumentHelper.createDocument();<br /> </p>
																												<p>使用 addElement() 方法创建根元素 catalog 。 addElement() 用于向 XML 文档中增加元素。 </p>
																												<p>Element catalogElement = document.addElement("catalog");<br /> </p>
																												<p>在 catalog 元素中使用 addComment() 方法添加注释“An XML catalog”。 </p>
																												<p> catalogElement.addComment("An XML catalog");<br /> </p>
																												<p>在 catalog 元素中使用 addProcessingInstruction() 方法增加一个处理指令。 </p>
																												<p>catalogElement.addProcessingInstruction("target","text");<br /> </p>
																												<p>在 catalog 元素中使用 addElement() 方法增加 journal 元素。 </p>
																												<p>Element journalElement =  catalogElement.addElement("journal");<br /> </p>
																												<p>使用 addAttribute() 方法向 journal 元素添加 title 和 publisher 属性。 </p>
																												<p>journalElement.addAttribute("title", "XML Zone");<br />         journalElement.addAttribute("publisher", "IBM developerWorks");<br /> </p>
																												<p>向 article 元素中添加 journal 元素。 </p>
																												<p>Element articleElement=journalElement.addElement("article");<br /> </p>
																												<p>为 article 元素增加 level 和 date 属性。 </p>
																												<p>articleElement.addAttribute("level", "Intermediate");<br />      articleElement.addAttribute("date", "December-2001");<br /> </p>
																												<p>向 article 元素中增加 title 元素。 </p>
																												<p>Element titleElement=articleElement.addElement("title");<br /> </p>
																												<p>使用 setText() 方法设置 article 元素的文本。 </p>
																												<p>titleElement.setText("Java configuration with XML Schema");<br /> </p>
																												<p>在 article 元素中增加 author 元素。 </p>
																												<p>Element authorElement=articleElement.addElement("author");<br /> </p>
																												<p>在 author 元素中增加 firstname 元素并设置该元素的文本。 </p>
																												<p>Element  firstNameElement=authorElement.addElement("firstname");<br />     firstNameElement.setText("Marcello");<br /> </p>
																												<p>在 author 元素中增加 lastname 元素并设置该元素的文本。 </p>
																												<p>Element lastNameElement=authorElement.addElement("lastname");<br />     lastNameElement.setText("Vitaletti");<br /> </p>
																												<p>可以使用 addDocType() 方法添加文档类型说明。 </p>
																												<p>document.addDocType("catalog", null,"<a href="file:///c:/Dtds/catalog.dtd">file://c:/Dtds/catalog.dtd</a>");<br /> </p>
																												<p>这样就向 XML 文档中增加文档类型说明：</p>
																												<p>&lt;!DOCTYPE catalog SYSTEM "<a href="file:///c:/Dtds/catalog.dtd">file://c:/Dtds/catalog.dtd</a>"&gt;<br /> </p>
																												<p>如果文档要使用文档类型定义（DTD）文档验证则必须有 Doctype。</p>
																												<p>XML 声明 &lt;?xml version="1.0" encoding="UTF-8"?&gt; 自动添加到 XML 文档中。 </p>
																												<p>清单 3 所示的例子程序 XmlDom4J.java 用于创建 XML 文档 catalog.xml。</p>
																												<p>清单 3. 生成 XML 文档 catalog.xml 的程序（XmlDom4J.java） </p>
																												<p>import org.dom4j.Document;<br />import org.dom4j.DocumentHelper;<br />import org.dom4j.Element;<br />import org.dom4j.io.XMLWriter;<br />import java.io.*;</p>
																												<p> </p>
																												<p>public class XmlDom4J{</p>
																												<p>
																														<br />public void generateDocument(){<br />Document document = DocumentHelper.createDocument();<br />     Element catalogElement = document.addElement("catalog");<br />     catalogElement.addComment("An XML Catalog");<br />     catalogElement.addProcessingInstruction("target","text");<br />     Element journalElement =  catalogElement.addElement("journal");<br />     journalElement.addAttribute("title", "XML Zone");<br />     journalElement.addAttribute("publisher", "IBM developerWorks");</p>
																												<p>
																														<br />     Element articleElement=journalElement.addElement("article");<br />     articleElement.addAttribute("level", "Intermediate");<br />     articleElement.addAttribute("date", "December-2001");<br />     Element  titleElement=articleElement.addElement("title");<br />     titleElement.setText("Java configuration with XML Schema");<br />     Element authorElement=articleElement.addElement("author");<br />     Element  firstNameElement=authorElement.addElement("firstname");<br />     firstNameElement.setText("Marcello");<br />     Element lastNameElement=authorElement.addElement("lastname");<br />     lastNameElement.setText("Vitaletti");</p>
																												<p>     document.addDocType("catalog",<br />                           null,"<a href="file:///c:/Dtds/catalog.dtd">file://c:/Dtds/catalog.dtd</a>");<br />    try{<br />    XMLWriter output = new XMLWriter(<br />            new FileWriter( new File("c:/catalog/catalog.xml") ));<br />        output.write( document );<br />        output.close();<br />        }<br />     catch(IOException e){System.out.println(e.getMessage());}<br />}</p>
																												<p>public static void main(String[] argv){<br />XmlDom4J dom4j=new XmlDom4J();<br />dom4j.generateDocument();<br />}}</p>
																												<p> </p>
																												<p>这一节讨论了创建 XML 文档的过程，下一节将介绍使用 dom4j API 修改这里创建的 XML 文档。 </p>
																												<p>修改文档<br />这一节说明如何使用 dom4j API 修改示例 XML 文档 catalog.xml。</p>
																												<p>使用 SAXReader 解析 XML 文档 catalog.xml：</p>
																												<p>SAXReader saxReader = new SAXReader();<br /> Document document = saxReader.read(inputXml);<br /> </p>
																												<p>SAXReader 包含在 org.dom4j.io 包中。 </p>
																												<p>inputXml 是从 c:/catalog/catalog.xml 创建的 java.io.File。使用 XPath 表达式从 article 元素中获得 level 节点列表。如果 level 属性值是“Intermediate”则改为“Introductory”。 </p>
																												<p>List list = document.selectNodes("<a>//article/@level</a>" );<br />      Iterator iter=list.iterator();<br />        while(iter.hasNext()){<br />            Attribute attribute=(Attribute)iter.next();<br />               if(attribute.getValue().equals("Intermediate"))<br />               attribute.setValue("Introductory"); <br />       }<br /> </p>
																												<p>获取 article 元素列表，从 article 元素中的 title 元素得到一个迭代器，并修改 title 元素的文本。 </p>
																												<p>list = document.selectNodes("//article" );<br />     iter=list.iterator();<br />   while(iter.hasNext()){<br />       Element element=(Element)iter.next();<br />      Iterator iterator=element.elementIterator("title");<br />   while(iterator.hasNext()){<br />   Element titleElement=(Element)iterator.next();<br />   if(titleElement.getText().equals("Java configuration with XML Schema"))<br />     titleElement.setText("Create flexible and extensible XML schema");</p>
																												<p>    }}<br /> </p>
																												<p>通过和 title 元素类似的过程修改 author 元素。 </p>
																												<p>清单 4 所示的示例程序 Dom4JParser.java 用于把 catalog.xml 文档修改成 catalog-modified.xml 文档。</p>
																												<p>清单 4. 用于修改 catalog.xml 的程序（Dom4Jparser.java） </p>
																												<p>import org.dom4j.Document;<br />import org.dom4j.Element;<br />import org.dom4j.Attribute;<br />import java.util.List;<br />import java.util.Iterator;<br />import org.dom4j.io.XMLWriter;<br />import java.io.*;<br />import org.dom4j.DocumentException;<br />import org.dom4j.io.SAXReader; </p>
																												<p>public class Dom4JParser{</p>
																												<p> public void modifyDocument(File inputXml){</p>
																												<p>  try{<br />   SAXReader saxReader = new SAXReader();<br />   Document document = saxReader.read(inputXml);</p>
																												<p>   List list = document.selectNodes("<a>//article/@level</a>" );<br />   Iterator iter=list.iterator();<br />   while(iter.hasNext()){<br />    Attribute attribute=(Attribute)iter.next();<br />    if(attribute.getValue().equals("Intermediate"))<br />      attribute.setValue("Introductory"); </p>
																												<p>       }<br />   <br />   list = document.selectNodes("<a>//article/@date</a>" );<br />   iter=list.iterator();<br />   while(iter.hasNext()){<br />    Attribute attribute=(Attribute)iter.next();<br />    if(attribute.getValue().equals("December-2001"))<br />      attribute.setValue("October-2002");</p>
																												<p>       }</p>
																												<p>   list = document.selectNodes("//article" );<br />   iter=list.iterator();<br />   while(iter.hasNext()){<br />    Element element=(Element)iter.next();<br />    Iterator iterator=element.elementIterator("title");<br />      while(iterator.hasNext()){<br />        Element titleElement=(Element)iterator.next();<br />        if(titleElement.getText().equals("Java configuration with XML</p>
																												<p>      Schema"))<br />        titleElement.setText("Create flexible and extensible XML schema");</p>
																												<p>                                          }</p>
																												<p>                                }</p>
																												<p>    list = document.selectNodes("//article/author" );<br />    iter=list.iterator();<br />     while(iter.hasNext()){<br />     Element element=(Element)iter.next();<br />     Iterator iterator=element.elementIterator("firstname");<br />     while(iterator.hasNext()){<br />      Element firstNameElement=(Element)iterator.next();<br />      if(firstNameElement.getText().equals("Marcello"))<br />      firstNameElement.setText("Ayesha");<br />                                     }</p>
																												<p>                              }</p>
																												<p>    list = document.selectNodes("//article/author" );<br />    iter=list.iterator();<br />     while(iter.hasNext()){<br />      Element element=(Element)iter.next();<br />      Iterator iterator=element.elementIterator("lastname");<br />     while(iterator.hasNext()){<br />      Element lastNameElement=(Element)iterator.next();<br />      if(lastNameElement.getText().equals("Vitaletti"))<br />      lastNameElement.setText("Malik");</p>
																												<p>                                  }</p>
																												<p>                               }<br />     XMLWriter output = new XMLWriter(<br />      new FileWriter( new File("c:/catalog/catalog-modified.xml") ));<br />     output.write( document );<br />     output.close();<br />   }<br /> <br />  catch(DocumentException e)<br />                 {<br />                  System.out.println(e.getMessage());<br />                            }</p>
																												<p>  catch(IOException e){<br />                       System.out.println(e.getMessage());<br />                    }<br /> }</p>
																												<p> public static void main(String[] argv){</p>
																												<p>  Dom4JParser dom4jParser=new Dom4JParser();<br />  dom4jParser.modifyDocument(new File("c:/catalog/catalog.xml"));</p>
																												<p>                                        }</p>
																												<p>   }</p>
																												<p> </p>
																												<p>这一节说明了如何使用 dom4j 中的解析器修改示例 XML 文档。这个解析器不使用 DTD 或者模式验证 XML 文档。如果 XML 文档需要验证，可以解释用 dom4j 与 JAXP SAX 解析器。</p>
																												<p>结束语<br />包含在 dom4j 中的解析器是一种用于解析 XML 文档的非验证性工具，可以与JAXP、Crimson 或 Xerces 集成。本文说明了如何使用该解析器创建和修改 XML 文档。 <br /></p>
																												<div>
																												</div>
																												<div>
																												</div>
																										</div>
																								</td>
																						</tr>
																				</tbody>
																		</table>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/strive/aggbug/84790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-12-01 11:46 <a href="http://www.blogjava.net/strive/articles/84790.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DOM4J 创建 修改 格式化 XML</title><link>http://www.blogjava.net/strive/articles/84789.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Fri, 01 Dec 2006 03:45:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/84789.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/84789.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/84789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/84789.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/84789.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: //				创建xml																								 				import				 java.io.File;				import				 java.io.FileWriter;				import				 org.dom4j.Document;				import				 org.dom4j.DocumentHelper;...&nbsp;&nbsp;<a href='http://www.blogjava.net/strive/articles/84789.html'>阅读全文</a><img src ="http://www.blogjava.net/strive/aggbug/84789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-12-01 11:45 <a href="http://www.blogjava.net/strive/articles/84789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DOM4j 使用简介</title><link>http://www.blogjava.net/strive/articles/84787.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Fri, 01 Dec 2006 03:42:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/84787.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/84787.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/84787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/84787.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/84787.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Dom4j 																																																		使用简介																																																												作者：冰云																 icecloud(AT)sina.com																		...&nbsp;&nbsp;<a href='http://www.blogjava.net/strive/articles/84787.html'>阅读全文</a><img src ="http://www.blogjava.net/strive/aggbug/84787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-12-01 11:42 <a href="http://www.blogjava.net/strive/articles/84787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Dom4j解析XML及中文问题</title><link>http://www.blogjava.net/strive/articles/84634.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Thu, 30 Nov 2006 10:48:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/84634.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/84634.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/84634.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/84634.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/84634.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文主要讨论了用						dom4j						解析						XML						的基础问题，包括建立						XML						文档，添加、修改、删除节点，以及格式化（美化）输出和中文问题。可作为						dom4j						的入门资料。														 																						1．					...&nbsp;&nbsp;<a href='http://www.blogjava.net/strive/articles/84634.html'>阅读全文</a><img src ="http://www.blogjava.net/strive/aggbug/84634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-30 18:48 <a href="http://www.blogjava.net/strive/articles/84634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dom4j（Version 1.6.1）快速入门(zt)</title><link>http://www.blogjava.net/strive/articles/84633.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Thu, 30 Nov 2006 10:46:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/84633.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/84633.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/84633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/84633.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/84633.html</trackback:ping><description><![CDATA[
		<h1 class="block_title">Parsing XML</h1>
		<div class="post">
				<div class="postcontent">
						<br />    或许你想要做的第一件事情就是解析一个某种类型的XML文档，用dom4j很容易做到。请看下面的示范代码：<br /><br />import java.net.URL;<br /><br />import org.dom4j.Document;<br />import org.dom4j.DocumentException;<br />import org.dom4j.io.SAXReader;<br /><br />public class Foo {<br /><br />    public Document parse(URL url) throws DocumentException {<br />        SAXReader reader = new SAXReader();<br />        Document document = reader.read(url);<br />        return document;<br />    }<br />}<br /><br /><h4>使用迭代器（Iterators）</h4><br />    我们可以通过多种方法来操作XML文档，这些方法返回java里标准的迭代器（Iterators）。例如：<br /><br />public void bar(Document document) throws DocumentException {<br />        Element root = document.getRootElement();<br />        //迭代根元素下面的所有子元素<br />        for ( Iterator i = root.elementIterator(); i.hasNext(); ) {<br />            Element element = (Element) i.next();<br />            //处理代码<br />        }<br /><br />        //迭代根元素下面名称为"foo"的子元素<br />        for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {<br />            Element foo = (Element) i.next();<br />            //处理代码<br />        }<br /><br />        // 迭代根元素的属性attributes）元素<br />        for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {<br />            Attribute attribute = (Attribute) i.next();<br />            // do something<br />        }<br />     }<br /><br /><h4>强大的XPath导航</h4><br />    在dom4j中XPath可以表示出在XML树状结构中的Document或者任意的节点（Node）（例如：Attribute，Element 或者ProcessingInstruction等）。它可以使在文档中复杂的操作仅通过一行代码就可以完成。例如：<br /><br />public void bar(Document document) {<br />        List list = document.selectNodes( "//foo/bar" );<br /><br />        Node node = document.selectSingleNode( "//foo/bar/author" );<br /><br />        String name = node.valueOf( "@name" );<br />    }<br /><br />    如果你想得到一个XHTML文档中的所有超文本链接（hypertext links）你可以使用下面的代码：<br /><br />    public void findLinks(Document document) throws DocumentException {<br /><br />        List list = document.selectNodes( "//a/@href" );<br /><br />        for (Iterator iter = list.iterator(); iter.hasNext(); ) {<br />            Attribute attribute = (Attribute) iter.next();<br />            String url = attribute.getValue();<br />        }<br />    }<br /><br />    如果你需要关于XPath语言的任何帮助，我们强烈推荐这个站点<a class="l2" href="http://www.zvon.org/xxl/XPathTutorial/General/examples.html" target="_blank">Zvon tutorial</a>他会通过一个一个的例子引导你学习。<br /><br /><h4>快速遍历（Fast Looping）</h4><br /><br />如果你不得不遍历一个非常大的XML文档，然后才去执行，我们建议你使用快速遍历方法（fast looping method），它可以避免为每一个循环的节点创建一个迭代器对象,如下所示：<br /><br />public void treeWalk(Document document) {<br />        treeWalk( document.getRootElement() );<br />    }<br /><br />    public void treeWalk(Element element) {<br />        for ( int i = 0, size = element.nodeCount(); i &lt; size; i++ ) {<br />            Node node = element.node(i);<br />            if ( node instanceof Element ) {<br />                treeWalk( (Element) node );<br />            }<br />            else {<br />                // do something....<br />            }<br />        }<br />    }<br /><br /><h4>生成一个新的XML文档对象</h4><br />    在dom4j中你可能常常希望用程序生成一个XML文档对象，下面的程序为你进行了示范：<br /><br />import org.dom4j.Document;<br />import org.dom4j.DocumentHelper;<br />import org.dom4j.Element;<br /><br />public class Foo {<br /><br />    public Document createDocument() {<br />        Document document = DocumentHelper.createDocument();<br />        Element root = document.addElement( "root" );<br /><br />        Element author1 = root.addElement( "author" )<br />            .addAttribute( "name", "James" )<br />            .addAttribute( "location", "UK" )<br />            .addText( "James Strachan" );<br />        <br />        Element author2 = root.addElement( "author" )<br />            .addAttribute( "name", "Bob" )<br />            .addAttribute( "location", "US" )<br />            .addText( "Bob McWhirter" );<br /><br />        return document;<br />    }<br />}<br /><br /><h4>将一个文档对象写入文件中</h4><br />    将一个文档对象写入Writer对象的一个简单快速的途径是通过write()方法。<br /><br />        FileWriter out = new FileWriter( "foo.xml" );<br />        document.write( out );<br /><br />如果你想改变输出文件的排版格式，比如你想要一个漂亮的格式或者是一个紧凑的格式，或者你想用Writer 对象或者OutputStream 对象来操作，那么你可以使用XMLWriter 类。<br /><br />import org.dom4j.Document;<br />import org.dom4j.io.OutputFormat;<br />import org.dom4j.io.XMLWriter;<br /><br />public class Foo {<br /><br />    public void write(Document document) throws IOException {<br /><br />        // 写入文件<br />        XMLWriter writer = new XMLWriter(<br />            new FileWriter( "output.xml" )<br />        );<br />        writer.write( document );<br />        writer.close();<br /><br /><br />        // 以一种优雅的格式写入System.out对象<br />        OutputFormat format = OutputFormat.createPrettyPrint();<br />        writer = new XMLWriter( System.out, format );<br />        writer.write( document );<br /><br />        // 以一种紧凑的格式写入System.out对象<br />        format = OutputFormat.createCompactFormat();<br />        writer = new XMLWriter( System.out, format );<br />        writer.write( document );<br />    }<br />}<br /><br /><h4>转化为字符串，或者从字符串转化</h4><br />    如果你有一个文档（Document）对象或者任何一个节点（Node）对象的引用（reference），象属性（Attribute）或者元素（Element），你可以通过asXML()方法把它转化为一个默认的XML字符串：<br /><br />        Document document = ...;<br />        String text = document.asXML();<br /><br />如果你有一些XML内容的字符串表示，你可以通过DocumentHelper.parseText()方法将它重新转化为文档（Document）对象：<br /><br />        String text = "&lt;person&gt; &lt;name&gt;James&lt;/name&gt; &lt;/person&gt;";<br />        Document document = DocumentHelper.parseText(text);<br /><br /><h4>通过XSLT样式化文档（Document）</h4><br /><br />    使用Sun公司提供的<a class="l2" href="http://java.sun.com/xml/" target="_blank">JAXP</a> API将XSLT 应用到文档（Document）上是很简单的。它允许你使用任何的XSLT引擎（例如：Xalan或SAXON等）来开发。下面是一个使用JAXP创建一个转化器（transformer），然后将它应用到文档（Document）上的例子：<br /><br />import javax.xml.transform.Transformer;<br />import javax.xml.transform.TransformerFactory;<br /><br />import org.dom4j.Document;<br />import org.dom4j.io.DocumentResult;<br />import org.dom4j.io.DocumentSource;<br /><br />public class Foo {<br /><br />    public Document styleDocument(<br />        Document document, <br />        String stylesheet<br />    ) throws Exception {<br /><br />        // 使用 JAXP 加载转化器<br />        TransformerFactory factory = TransformerFactory.newInstance();<br />        Transformer transformer = factory.newTransformer( <br />            new StreamSource( stylesheet ) <br />        );<br /><br />        // 现在来样式化一个文档（Document）<br />        DocumentSource source = new DocumentSource( document );<br />        DocumentResult result = new DocumentResult();<br />        transformer.transform( source, result );<br /><br />        // 返回经过样式化的文档（Document）<br />        Document transformedDoc = result.getDocument();<br />        return transformedDoc;<br />    }<br />}<br /></div>
		</div>
<img src ="http://www.blogjava.net/strive/aggbug/84633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-30 18:46 <a href="http://www.blogjava.net/strive/articles/84633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>STRUTS 字符编码处理过滤器</title><link>http://www.blogjava.net/strive/articles/84601.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Thu, 30 Nov 2006 08:32:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/84601.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/84601.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/84601.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/84601.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/84601.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 过滤类  1/** *//**  2 *  3 *  4 * apache 出的 struts hibernate 字符编码处理过滤器  5 *  6 *  7 */  8package com.zeroidea.common;  9/**//* 10* Copyright 2004 The Apache Software Foundation 11* 12* Licensed under the...&nbsp;&nbsp;<a href='http://www.blogjava.net/strive/articles/84601.html'>阅读全文</a><img src ="http://www.blogjava.net/strive/aggbug/84601.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-30 16:32 <a href="http://www.blogjava.net/strive/articles/84601.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts + Hibernate 实现分页</title><link>http://www.blogjava.net/strive/articles/84596.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Thu, 30 Nov 2006 08:26:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/84596.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/84596.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/84596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/84596.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/84596.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Pager类: 				package				 com.zeroidea.common; 				public				 				class				 Pager 																								{                       						private						 						int						 totalR...&nbsp;&nbsp;<a href='http://www.blogjava.net/strive/articles/84596.html'>阅读全文</a><img src ="http://www.blogjava.net/strive/aggbug/84596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-30 16:26 <a href="http://www.blogjava.net/strive/articles/84596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP 彩色验证</title><link>http://www.blogjava.net/strive/articles/84128.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Tue, 28 Nov 2006 12:11:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/84128.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/84128.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/84128.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/84128.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/84128.html</trackback:ping><description><![CDATA[
		<p>这是一个公用文件<br />package com.zeroidea.common;</p>
		<p>import java.awt.Color;<br />import java.awt.Font;<br />import java.awt.Graphics;<br />import java.awt.Point;<br />import java.awt.image.BufferedImage;<br />import java.util.Random;</p>
		<p>public class MakeImageAndVerifyCode {</p>
		<p> private java.lang.String verifyCode;</p>
		<p> private java.awt.image.BufferedImage image;</p>
		<p> /**<br />  * 构建器<br />  */<br /> public MakeImageAndVerifyCode() {<br />  verifyCode = "";<br />  image = new BufferedImage(60, 20, BufferedImage.TYPE_INT_RGB);<br />  makeImageAndVerifyCode();<br /> }</p>
		<p> /**<br />  * 设置验证码<br />  * <br />  * @param verifyCode<br />  */<br /> private void setVerifyCode(java.lang.String verifyCode) {<br />  this.verifyCode = verifyCode;<br /> }</p>
		<p> /**<br />  * 生成器<br />  */<br /> private void makeImageAndVerifyCode() {<br />  Graphics graphics = image.getGraphics();<br />  graphics.fillRect(0, 0, 60, 20);<br />  java.lang.String nowChar = "";<br />  graphics.setFont(new Font("Times New Roman", 1, 12));<br />  for (int i = 0; i &lt; 4; i++) {<br />   java.lang.String nowCharTemp = getRandInt(10).toString();<br />   graphics.setColor(getRandColor(100, 200));<br />   graphics.drawString(nowCharTemp, 1 + i * 15<br />     + getRandInt(7).intValue(), 12 + getRandInt(8).intValue());<br />   nowChar = (new StringBuilder(java.lang.String.valueOf(nowChar)))<br />     .append(nowCharTemp).toString();<br />  }</p>
		<p>  for (int i = 0; i &lt; 88; i++) {<br />   graphics.setColor(getRandColor(225, 255));<br />   java.awt.Point point = getRandPoint(60, 20);<br />   graphics.drawOval(point.x, point.y, 0, 0);<br />  }</p>
		<p>  graphics.setColor(getRandColor(0, 255));<br />  graphics.drawRect(0, 0, 59, 19);<br />  graphics.dispose();<br />  setVerifyCode(nowChar);<br /> }</p>
		<p> /**<br />  * 返回验证代码<br />  * <br />  * @return String<br />  */<br /> public java.lang.String getVerifyCode() {<br />  return verifyCode;<br /> }</p>
		<p> /**<br />  * 返回验证代码图片<br />  * <br />  * @return BufferedImage<br />  */<br /> public java.awt.image.BufferedImage getImage() {<br />  return image;<br /> }</p>
		<p> /**<br />  * 生成随机颜色<br />  * <br />  * @param fc<br />  * @param bc<br />  * @return Color<br />  */<br /> private java.awt.Color getRandColor(int fc, int bc) {<br />  java.util.Random random = new Random();<br />  if (fc &gt; 255)<br />   fc = 255;<br />  if (bc &gt; 255)<br />   bc = 255;<br />  int r = fc + random.nextInt(bc - fc);<br />  int g = fc + random.nextInt(bc - fc);<br />  int b = fc + random.nextInt(bc - fc);<br />  return new Color(r, g, b);<br /> }</p>
		<p> /**<br />  * 生成随机数<br />  * <br />  * @param i<br />  * @return Integer<br />  */<br /> private java.lang.Integer getRandInt(int i) {<br />  java.util.Random random = new Random();<br />  return java.lang.Integer.valueOf(random.nextInt(i));<br /> }</p>
		<p> /**<br />  * 生成随机点<br />  * <br />  * @param x<br />  * @param y<br />  * @return Point<br />  */<br /> private java.awt.Point getRandPoint(int x, int y) {<br />  java.util.Random random = new Random();<br />  int x_temp = random.nextInt(x);<br />  int y_temp = random.nextInt(y);<br />  java.awt.Point point = new Point(x_temp, y_temp);<br />  return point;<br /> }<br />}<br /><br /><br />生成验证图片并将验证码写入 Session<br />/**<br /> * 验证图片产生<br /> * 作者: 刘万林<br /> */</p>
		<p>package com.zeroidea.pwms.validate;</p>
		<p>import java.awt.image.BufferedImage;<br />import java.io.IOException;</p>
		<p>
				<br />import javax.imageio.ImageIO;<br />import javax.servlet.ServletException;<br />import javax.servlet.http.HttpServlet;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;</p>
		<p>import com.zeroidea.common.MakeImageAndVerifyCode;</p>
		<p>public class ValidateImage extends HttpServlet {</p>
		<p> /**<br />  * <br />  */<br /> private static final long serialVersionUID = 1L;</p>
		<p> /**<br />  * Constructor of the object.<br />  */<br /> public ValidateImage() {<br />  super();<br /> }</p>
		<p> /**<br />  * Destruction of the servlet. &lt;br&gt;<br />  */<br /> public void destroy() {<br />  super.destroy(); // Just puts "destroy" string in log<br />  // Put your code here<br /> }</p>
		<p> /**<br />  * The doGet method of the servlet. &lt;br&gt;<br />  *<br />  * This method is called when a form has its tag value method equals to get.<br />  * <br />  * @param request the request send by the client to the server<br />  * @param response the response send by the server to the client<br />  * @throws ServletException if an error occurred<br />  * @throws IOException if an error occurred<br />  */<br /> public void doGet(HttpServletRequest request, HttpServletResponse response)<br />   throws ServletException, IOException {<br />  response.setHeader("Pragma", "No-cache");<br />  response.setHeader("Cache-Control", "no-cache");<br />  response.setDateHeader("Expires", 0);<br />  MakeImageAndVerifyCode makeImageAndVerifyCode = new MakeImageAndVerifyCode();<br />  BufferedImage image = makeImageAndVerifyCode.getImage();<br />  String verifyCode = makeImageAndVerifyCode.getVerifyCode();<br />  //System.out.println(verifyCode);<br />  // 将验证码写入 Session<br />  request.getSession().setAttribute("verifyCode", verifyCode);<br />  // 以下语句将图像写入 响应输出流<br />  ImageIO.write(image, "JPEG", response.getOutputStream());<br /> }</p>
		<p> /**<br />  * Initialization of the servlet. &lt;br&gt;<br />  *<br />  * @throws ServletException if an error occure<br />  */<br /> public void init() throws ServletException {<br />  // Put your code here<br /> }</p>
		<p>}<br /><br /><br />效果图:<img height="1" src="/WebResource.axd?d=pLXXeGbWF7eXU8SMs2-GFZvUWY2JNH05dFx5YzJhGUYAYJAFEaTEq36NAhTPy7_KekvzDFwt8wvQWdByvJIGWdEq6x2KpKD80&amp;t=633043190666685000" width="1" /><img height="133" alt="logon.JPG" src="http://www.blogjava.net/images/blogjava_net/strive/logon.JPG" width="201" border="0" /></p>
<img src ="http://www.blogjava.net/strive/aggbug/84128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-28 20:11 <a href="http://www.blogjava.net/strive/articles/84128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDK5.0中注释(Annotation)的用法</title><link>http://www.blogjava.net/strive/articles/83654.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sun, 26 Nov 2006 12:04:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/83654.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/83654.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/83654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/83654.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/83654.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JDK5.0中注释(Annotation)的用法										很多				API				都需要相当数量的样板代码，比如，为了编写一个				JAX-RPC				的				WEB				服务，你需要提供一个接口和一个实现类。如果这个程序已经被加了注释				Annotations				以说明那个方法需要被远程调用，那么我们可以一个工具去自动生...&nbsp;&nbsp;<a href='http://www.blogjava.net/strive/articles/83654.html'>阅读全文</a><img src ="http://www.blogjava.net/strive/aggbug/83654.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-26 20:04 <a href="http://www.blogjava.net/strive/articles/83654.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DisplayTag应用指南 </title><link>http://www.blogjava.net/strive/articles/83639.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sun, 26 Nov 2006 09:25:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/83639.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/83639.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/83639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/83639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/83639.html</trackback:ping><description><![CDATA[
		<div class="entry" id="post-11">
				<h2 class="entry-header"> </h2>
				<!-- Content Start -->
				<p>DisplayTag是一个非常好用的表格显示标签，适合MVC模式，其主页在http://displaytag.sourceforge.net <br />　　 <br />　　<strong>一、最简单的情况，未使用&lt;display:column/&gt;标签</strong><br />　　 <br />　　&lt;%request.setAttribute( “test”, new ReportList(6) );%&gt; <br />　　&lt;display:table name=”test” /&gt; <br />　　 <br />　　标签遍历List里的每一个对象，并将对象里的所有属性显示出来。一般用于开发的时候检查对象数据的完整性。 <br />　　 <br />　　<strong>二、使用&lt;display:column/&gt;标签的情况</strong><br />　　 <br />　　&lt;display:table name=”test”&gt; <br />　　&lt;display:column property=”id” title=”ID” /&gt; <br />　　&lt;display:column property=”name” /&gt; <br />　　&lt;display:column property=”email” /&gt; <br />　　&lt;display:column property=”status” /&gt; <br />　　&lt;display:column property=”description” title=”Comments”/&gt; <br />　　&lt;/display:table&gt; <br />　　 <br />　　property对应List里对象的属性（用getXXX()方法取得），title则对应表格表头里的列名。定义列有两种方式： <br />　　 <br />　　A、&lt;display:column property=”email” /&gt; <br />　　 <br />　　使用&lt;display:column/&gt;标签里的property属性来定义 <br />　　 <br />　　B、&lt;display:column title=”email”&gt;email@it.com&lt;/display:column&gt; <br />　　 <br />　　在&lt;display:column/&gt;标签体里增加内容，可以是常量，也可以用其他标签等等 <br />　　 <br />　　两种方式比较，用property属性来定义更加快速和利于排序。 <br />　　 <br />　　<strong>三、表格显示样式的定义</strong><br />　　 <br />　　A、在&lt;display:table/&gt;和&lt;display:column/&gt;标签里指定标准的html属性，烦琐 <br />　　 <br />　　B、修改样式表 <br />　　&lt;display:table name=”test” class=”mars”&gt; <br />　　&lt;display:column property=”id” title=”ID” class=”idcol”/&gt; <br />　　&lt;display:column property=”name” /&gt; <br />　　&lt;display:column property=”email” /&gt; <br />　　&lt;display:column property=”status” class=”tableCellError” /&gt; <br />　　&lt;display:column property=”description” title=”Comments”/&gt; <br />　　&lt;/display:table&gt; <br />　　 <br />　　通过class属性来指定所要应用的样式。可以在其默认样式表里（./css/screen.css）直接修改 <br />　　 <br />　　<strong>四、标签取得数据的数据源</strong><br />　　 <br />　　有四种范围 <br />　　 <br />　　pageScope <br />　　requestScope (默认)　&lt;display:table name=”test2″ &gt; <br />　　sessionScope　&lt;display:table name=”sessionScope.holder.list” &gt; 注意，这里要指定范围，非默认 <br />　　applicationScope <br />　　 <br />　　<strong>五、通过增加id属性创建隐含的对象</strong><br />　　 <br />　　&lt;display:table name=”test” id=”testit”&gt; <br />　　&lt;display:column property=”id” title=”ID” /&gt; <br />　　&lt;display:column property=”name” /&gt; <br />　　&lt;display:column title=”static value”&gt;static&lt;/display:column&gt; <br />　　&lt;display:column title=”row number (testit_rowNum)”&gt;&lt;%=pageContext.getAttribute(”testit_rowNum”)%&gt;&lt;/display:column&gt; <br />　　&lt;display:column title=”((ListObject)testit).getMoney()”&gt;&lt;%=((ListObject)pageContext.getAttribute(”testit”)).getMoney()%&gt;&lt;/display:column&gt; <br />　　&lt;/display:table&gt; <br />　　 <br />　　注意到在&lt;display:table/&gt;里增加了id属性，这时就在page context里创建了一个隐含对象，指向List里的当前对象， <br />　　 <br />　　可以通过(ListObject)pageContext.getAttribute(”id”)来捕获这个对象。同时还创建了一个id_rowNum对象，同样，可 <br />　　 <br />　　通过pageContext.getAttribute(”testit_rowNum”)来捕获，它仅仅代表当前行的行数。 <br />　　 <br />　　有了这两个隐含对象，就可以通过其他标签来访问，例如Jstl: <br />　　 <br />　　&lt;display:table id=”row” name=”mylist”&gt; <br />　　&lt;display:column title=”row number” &gt; <br />　　&lt;c:out value=”${row_rowNum}”/&gt; <br />　　&lt;/display:column&gt; <br />　　&lt;display:column title=”name” &gt; <br />　　&lt;c:out value=”${row.first_name}”/&gt; <br />　　&lt;c:out value=”${row.last_name}”/&gt; <br />　　&lt;/display:column&gt; <br />　　&lt;/display:table&gt; <br />　　 <br />　　<strong>六、显示部分数据</strong><br />　　 <br />　　显示开始五条数据：通过设定length属性 <br />　　 <br />　　&lt;display:table name=”test” length=”5″&gt; <br />　　&lt;display:column property=”id” title=”ID” /&gt; <br />　　&lt;display:column property=”email” /&gt; <br />　　&lt;display:column property=”status” /&gt; <br />　　&lt;/display:table&gt; <br />　　 <br />　　显示第三到第八条数据：通过设定offset和length属性 <br />　　 <br />　　&lt;display:table name=”test” offset=”3″ length=”5″&gt; <br />　　&lt;display:column property=”id” title=”ID” /&gt; <br />　　&lt;display:column property=”email” /&gt; <br />　　&lt;display:column property=”status” /&gt; <br />　　&lt;/display:table&gt; <br />　　 <br />　　<strong>七、对email和url地址的直接连接</strong><br />　　 <br />　　&lt;display:table name=”test” &gt; <br />　　&lt;display:column property=”id” title=”ID” /&gt; <br />　　&lt;display:column property=”email” autolink=”true” /&gt; <br />　　&lt;display:column property=”url” autolink=”true” /&gt; <br />　　&lt;/display:table&gt; <br />　　 <br />　　如果要显示的对象里包含email和url地址，则可以在display:column里直接设定autolink=”true”来直接连接 <br />　　 <br />　　<strong>八、使用装饰模式转换数据显示（写自己的 decorator ）</strong><br />　　 <br />　　A、对整个表格应用decorator <br />　　 <br />　　&lt;display:table name=”test” decorator=”org.displaytag.sample.Wrapper” &gt; <br />　　&lt;display:column property=”id” title=”ID” /&gt; <br />　　&lt;display:column property=”email” /&gt; <br />　　&lt;display:column property=”status” /&gt; <br />　　&lt;display:column property=”date” /&gt; <br />　　&lt;display:column property=”money” /&gt; <br />　　&lt;/display:table&gt; <br />　　org.displaytag.sample.Wrapper即自己写的decorator，它要继承TableDecorator类，看看它的一个方法： <br />　　public String getMoney() <br />　　{ <br />　　return this.moneyFormat.format(((ListObject) this.getCurrentRowObject()).getMoney()); <br />　　} <br />　　 <br />　　很明显，它通过父类的getCurrentRowObject()方法获得当前对象，然后对其getMoney()方法进行’油漆’ <br />　　 <br />　　B、对单独的column应用decorator <br />　　 <br />　　&lt;display:table name=”test”&gt; <br />　　&lt;display:column property=”id” title=”ID” /&gt; <br />　　&lt;display:column property=”email” /&gt; <br />　　&lt;display:column property=”status” /&gt; <br />　　&lt;display:column property=”date” decorator=”org.displaytag.sample.LongDateWrapper” /&gt; <br />　　&lt;/display:table&gt; <br />　　org.displaytag.sample.LongDateWrapper要实现ColumnDecorator接口，它的方法： <br />　　public final String decorate(Object columnValue) <br />　　{ <br />　　Date date = (Date) columnValue; <br />　　return this.dateFormat.format(date); <br />　　} <br />　　 <br />　　显然，它获得不了当前对象（因为它实现的是接口），仅仅是获得该对象的columnValue，然后’油漆’ <br />　　 <br />　　<strong>九、创建动态连接</strong><br />　　 <br />　　有两种方法创建动态连接： <br />　　 <br />　　A、在&lt;display:column/&gt;里通过增加href、paramId、paramName、paramScope、paramProperty属性 <br />　　 <br />　　href　　　　　　 基本的URL 地址 <br />　　paramId　　　　　加在URL 地址后的参数名称 <br />　　paramName　　　　数据bean的名称，一般为null（即使用当前List里的对象） <br />　　paramScope　　　 数据bean的范围，一般为null <br />　　paramProperty　　数据bean的属性名称，用来填充URL 地址后的参数值 <br />　　&lt;display:table name=”sessionScope.details”&gt; <br />　　&lt;display:column property=”id” title=”ID” href=”details.jsp” paramId=”id” /&gt; <br />　　&lt;display:column property=”email” href=”details.jsp” paramId=”action” paramName=”testparam” paramScope=”request” /&gt; <br />　　&lt;display:column property=”status” href=”details.jsp” paramId=”id” paramProperty=”id” /&gt; <br />　　&lt;/display:table&gt; <br />　　 <br />　　这种方法简便直接，但缺点是无法产生类似details.jsp?id=xx&amp;action=xx的复合URL <br />　　 <br />　　B、应用decorator 创建动态连接： <br />　　 <br />　　&lt;display:table name=”sessionScope.details” decorator=”org.displaytag.sample.Wrapper” &gt; <br />　　&lt;display:column property=”link1″ title=”ID” /&gt; <br />　　&lt;display:column property=”email” /&gt; <br />　　&lt;display:column property=”link2″ title=”Actions” /&gt; <br />　　&lt;/display:table&gt; <br />　　org.displaytag.sample.Wrapper里的方法： <br />　　public String getLink1() <br />　　{ <br />　　ListObject lObject= (ListObject)getCurrentRowObject(); <br />　　int lIndex= getListIndex(); <br />　　return “&lt;a href=\”details.jsp?index=” + lIndex + “\”&gt;” + lObject.getId() + “&lt;/a&gt;”; <br />　　} <br />　　 <br />　　public String getLink2() <br />　　{ <br />　　ListObject lObject= (ListObject)getCurrentRowObject(); <br />　　int lId= lObject.getId(); <br />　　 <br />　　return “&lt;a href=\”details.jsp?id=” + lId <br />　　+ “&amp;action=view\”&gt;View&lt;/a&gt; | ” <br />　　+ “&lt;a href=\”details.jsp?id=” + lId <br />　　+ “&amp;action=edit\”&gt;Edit&lt;/a&gt; | ” <br />　　+ “&lt;a href=\”details.jsp?id=” + lId <br />　　+ “&amp;action=delete\”&gt;Delete&lt;/a&gt;”; <br />　　} <br />　　 <br />　　<strong>十、分页</strong><br />　　 <br />　　实现分页非常的简单，增加一个pagesize属性指定一次想显示的行数即可 <br />　　 <br />　　&lt;display:table name=”sessionScope.test” pagesize=”10″&gt; <br />　　&lt;display:column property=”id” title=”ID” /&gt; <br />　　&lt;display:column property=”name” /&gt; <br />　　&lt;display:column property=”email” /&gt; <br />　　&lt;display:column property=”status” /&gt; <br />　　&lt;/display:table&gt; <br />　　 <br />　　<strong>十一、排序</strong><br />　　 <br />　　排序实现也是很简单，在需要排序的column里增加sortable=”true”属性，headerClass=”sortable”仅仅是 <br />　　 <br />　　指定显示的样式。column里的属性对象要实现Comparable接口，如果没有的话可以应用decorator <br />　　 <br />　　defaultsort=”1″　　　　　　　默认第一个column排序 <br />　　defaultorder=”descending”　　默认递减排序 <br />　　&lt;display:table name=”sessionScope.stest” defaultsort=”1″ defaultorder=”descending”&gt; <br />　　&lt;display:column property=”id” title=”ID” sortable=”true” headerClass=”sortable” /&gt; <br />　　&lt;display:column property=”name” sortable=”true” headerClass=”sortable”/&gt; <br />　　&lt;display:column property=”email” /&gt; <br />　　&lt;display:column property=”status” sortable=”true” headerClass=”sortable”/&gt; <br />　　&lt;/display:table&gt; <br />　　 <br />　　注意的是，当同时存在分页时排序仅仅针对的是当前页面，而不是整个List都进行排序 <br />　　 <br />　　<strong>十二、column 分组</strong><br />　　 <br />　　分组只是需要在column里增加group属性 <br />　　 <br />　　&lt;display:table name=”test” class=”simple”&gt; <br />　　&lt;display:column property=”city” title=”CITY” group=”1″/&gt; <br />　　&lt;display:column property=”project” title=”PROJECT” group=”2″/&gt; <br />　　&lt;display:column property=”amount” title=”HOURS”/&gt; <br />　　&lt;display:column property=”task” title=”TASK”/&gt; <br />　　&lt;/display:table&gt; <br />　　 <br />　　<strong>十三、导出数据到其他格式（页面溢出filter??）</strong><br />　　 <br />　　在&lt;display:table/&gt;里设定export=”true” <br />　　 <br />　　在&lt;display:column/&gt;里设定media=”csv excel xml pdf” 决定该字段在导出到其他格式时被包不包含，不设定则都包含 <br />　　 <br />　　&lt;display:setProperty name=”export.csv” value=”false” /&gt; <br />　　 <br />　　决定该种格式能不能在页面中导出 <br />　　 <br />　　&lt;display:table name=”test” export=”true” id=”currentRowObject”&gt; <br />　　&lt;display:column property=”id” title=”ID”/&gt; <br />　　&lt;display:column property=”email” /&gt; <br />　　&lt;display:column property=”status” /&gt; <br />　　&lt;display:column property=”longDescription” media=”csv excel xml pdf” title=”Not On HTML”/&gt; <br />　　&lt;display:column media=”csv excel” title=”URL” property=”url”/&gt; <br />　　&lt;display:setProperty name=”export.pdf” value=”true” /&gt; <br />　　&lt;display:setProperty name=”export.csv” value=”false” /&gt; <br />　　&lt;/display:table&gt; <br />　　 <br />　　<strong>十四、配置属性，覆盖默认</strong><br />　　 <br />　　两种方法： <br />　　 <br />　　A、在程序classpath下新建displaytag.properties文件 <br />　　 <br />　　B、对于单个表格，应用&lt;display:setProperty&gt;标签 <br />　　 <br />　　具体可配置的属性：http://displaytag.sourceforge.net/configuration.html <br />　　 <br />　　<strong>十五、一个完整的例子</strong><br />　　 <br />　　&lt;display:table name=”test” export=”true” sort=”list” pagesize=”8″&gt; <br />　　&lt;display:column property=”city” title=”CITY” group=”1″ sortable=”true” headerClass=”sortable”/&gt; <br />　　&lt;display:column property=”project” title=”PROJECT” group=”2″ sortable=”true” headerClass=”sortable”/&gt; <br />　　&lt;display:column property=”amount” title=”HOURS”/&gt; <br />　　&lt;display:column property=”task” title=”TASK”/&gt; <br />　　&lt;/display:table&gt; <br />　　 <br />　　sort=”list” 对整个list进行排序 <br />　　 <br />　　导出数据到其他格式时，group无效 </p>
				<!-- Content End -->
				<!--
				<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
	    xmlns:dc="http://purl.org/dc/elements/1.1/"
	    xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
		<rdf:Description rdf:about="http://my.donews.com/anjianping/2006/05/25/%e8%bd%acdisplaytag%e5%ba%94%e7%94%a8%e6%8c%87%e5%8d%97/"
    dc:identifier="http://my.donews.com/anjianping/2006/05/25/%e8%bd%acdisplaytag%e5%ba%94%e7%94%a8%e6%8c%87%e5%8d%97/"
    dc:title="[转]DisplayTag应用指南"
    trackback:ping="http://my.donews.com/anjianping/2006/05/25/%e8%bd%acdisplaytag%e5%ba%94%e7%94%a8%e6%8c%87%e5%8d%97/trackback/" />
</rdf:RDF>				-->
				<p class="entry-footer">
						<br />错误信息如下 <br />Parsing of JSP File ‘/example-styles.jsp’ failed: <br />——————————————————————————– <br />/example-styles.jsp(1): Could not parse deployment descriptor: java.io.IOException: cannot resolve ‘urn:jsptld:http://displaytag.sf.net’ into a valid tag library <br />probably occurred due to an error in /example-styles.jsp line 1: <br />&lt;jsp:root version=”1.2″ xmlns:jsp=”<a href="http://java.sun.com/JSP/Page">http://java.sun.com/JSP/Page</a>” xmlns:display=”urn:jsptld:http://displaytag.sf.net”&gt; <br />——————————————————————————– <br />Tue May 16 11:12:30 CST 2006</p>
		</div>
		<div class="entry" id="post-10">
				<p>
				</p>
				<p>web.xml配置如下 <br />&lt;taglib&gt; <br />&lt;taglib-uri&gt;http://displaytag.sf.net&lt;/taglib-uri&gt; <br />&lt;taglib-location&gt;/WEB-INF/displaytag.tld&lt;/taglib-location&gt; <br />&lt;/taglib&gt; </p>
				<p>GOOGLE,只找到下面这个贴子,没有解决方案,但给了我提示.</p>
				<p>
				</p>
				<p>首先在TOMCAT下发布运行,果然没有cannot resolve 的问题,为什么Weblogic就是不行呢?</p>
				<p>
				</p>
				<p>我一直不明白’urn:jsptld’是什么意思,再查,说它表示相对路径,于是想到既然相对路径有问题,在我搞明白之前先用绝对路径不行吗?</p>
				<p>
				</p>
				<p>所以,将xmlns:display=”urn:jsptld:http://displaytag.sf.net”换成xmlns:display=”<a href="http://displaytag.sf.net/">http://displaytag.sf.net</a>“,一试,哈哈,果然OK了, <br />再于是,换成xmlns:display=”/WEB-INF/displaytag.tld”,也没有问题.</p>
		</div>
<img src ="http://www.blogjava.net/strive/aggbug/83639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-26 17:25 <a href="http://www.blogjava.net/strive/articles/83639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AjaxTags标记初探</title><link>http://www.blogjava.net/strive/articles/83636.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sun, 26 Nov 2006 09:22:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/83636.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/83636.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/83636.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/83636.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/83636.html</trackback:ping><description><![CDATA[
		<div class="left fontsize2">AjaxTags标记初探<br /></div>
		<div class="fontclear">
		</div>
		<div class="left">
				<br />
				<font color="#ff0000">
						<strong>文章是在这里了，但我也没把这些文件弄到手。唉，不知如何是好。</strong>
						<br />
				</font>
		</div>
		<div class="fontclear">
		</div>
		<div class="left fontsize3">AjaxTags项目是在现有的Struts HTML标记库的基础上，添加对AJAX支持</div>
		<div class="fontclear">
		</div>
		<hr class="hr1" />
		<center>
				<span id="ad9">
				</span> </center>
		<div class="left fontsize4">
				<div class="guanggao">
						<span id="ad3">
						</span>
				</div>
				<div class="guanggao">
						<span id="contentAdv">
						</span>
				</div>　　AjaxTags项目是在现有的Struts HTML标记库的基础上，添加对AJAX支持。 AjaxTags改写了Struts标签类org.apache.struts.taglib.html.FormTag和org.apache.struts.taglib.html.BaseHandlerTag，并使用Struts的plugin技术，使得Struts提供了对AJAX的支持。 以下是jsp中简单的示例： <br /><br /><table style="WIDTH: 575px; HEIGHT: 238px" bordercolor="#ffcc66" width="575" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>＜html:form action="example1" ajaxRef="example1"＞<br />　 First Name: ＜html:text property="firstName" size="25" value="Frank" /＞<br />　 ＜br＞<br />　 Last Name: ＜html:text property="lastName" size="25" value="Zammetti" /＞<br />　 ＜br＞<br />　 ＜html:button property="button" value="Click to do Ajax!" ajaxRef="button" /＞<br />＜/html:form＞<br />Result:＜br＞<br />＜span id="example1_resultLayer"＞ ＜/span＞</td></tr></tbody></table><br />　　注意：ajaxRef属性。 ajaxRef属性中内容是在ajax-config.xml中定义的，例如本示例的配置部分如下： <br /><br /><table style="WIDTH: 649px; HEIGHT: 447px" bordercolor="#ffcc66" width="649" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>＜!DOCTYPE ajaxConfig PUBLIC "ajaxConfig" "ajaxConfig"＞<br />＜ajaxConfig＞<br />　 ＜!-- Define a custom request handler that generates XML for example 2 --＞<br />　 　＜handler name="CustomXMLGenerator" type="request"＞<br />　 　　 　＜function＞customGenerateXML＜/function＞<br />　 　　 　＜location＞customXMLGenerator.js＜/location＞<br />　 　＜/handler＞<br />　 　＜!-- Configuration for example 1 --＞<br />　 　＜form ajaxRef="example1"＞<br />　 　　 　＜element ajaxRef="button"＞<br />　 　　 　　 　＜event type="onclick"＞<br />　 　　 　　 　　 　＜requestHandler type="std:QueryString"＞<br />　 　　 　　 　　 　　 　＜target＞example1.do＜/target＞<br />　 　　 　　 　　 　　 　＜parameter＞firstName=firstName,lastName=lastName＜/parameter＞<br />　 　　 　　 　　 　＜/requestHandler＞<br />　 　　 　　 　　 　＜responseHandler type="std:InnerHTML"＞<br />　 　　 　　 　　 　　 　＜parameter＞example1_resultLayer＜/parameter＞<br />　 　　 　　 　　 　＜/responseHandler＞<br />　 　　 　　 　＜/event＞<br />　 　　 　＜/element＞<br />　 　＜/form＞<br />＜/ajaxConfig＞</td></tr></tbody></table><br />　　在配置文件中定义了该表单的属性，以及按钮触发的事件和回写结果的处理方法。采用很巧妙的封装方法实现了Struts的AJAX调用。当然Ajaxtags离实用阶段还有相对长的一段距离，但它提供了一种在现有的软件架构上高效率开发ajax应用程序的可行性方案。 </div>
<img src ="http://www.blogjava.net/strive/aggbug/83636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-26 17:22 <a href="http://www.blogjava.net/strive/articles/83636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts AjaxTags</title><link>http://www.blogjava.net/strive/articles/83635.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sun, 26 Nov 2006 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/83635.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/83635.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/83635.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/83635.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/83635.html</trackback:ping><description><![CDATA[
		<h4 class="TextColor1" id="subjcns!aeb3e53eb4d7b7c1!396" style="MARGIN-BOTTOM: 0px">Struts AjaxTags</h4>
		<div id="msgcns!aeb3e53eb4d7b7c1!396">
				<div>      2005年<strong>Frank W. Zammetti</strong>扩展了Struts的Tag库，使Struts具备了AJAX功能。</div>
				<div>      （注：下面的代码引用自<strong>Frank W. Zammetti </strong>的ajaxtags包）</div>
				<div> </div>
				<div>      <strong>Tag库的扩展</strong></div>
				<div>      1、FormTag</div>
				<div>           增加了refAjax属性以及setter和getter方法；</div>
				<div>      2、BaseHandlerTag</div>
				<div>           增加了refAjax属性以及setter和getter方法；</div>
				<div>           同时扩展了prepare×××Events方法，使其加载Ajax属性，如：</div>
				<div>           <font color="#0000ff">if (getOnkeydown() != null) {<br />                  ......</font></div>
				<div>
						<font color="#0000ff">           }<br />           /* Frank W. Zammetti */<br />           else {<br />                  prepareAjax("onkeydown", handlers);<br />           }<br />           /* Frank W. Zammetti */</font>
				</div>
				<div>      3、Struts-Html.tld</div>
				<div>           增加了refAjax属性；</div>
				<div> </div>
				<div>      <strong>应用</strong></div>
				<div>      1、ajax-config.xml</div>
				<div>
						<font color="#0000ff">           ......</font>
				</div>
				<div>
						<font color="#0000ff">           &lt;form ajaxRef="example1"&gt;<br />                &lt;element ajaxRef="button"&gt;<br />                      &lt;event type="onclick"&gt;</font>
				</div>
				<div>
						<font color="#0000ff">                            //发送请求的设置<br />                            &lt;requestHandler type="std:QueryString"&gt;<br />                                 &lt;target&gt;example1.do&lt;/target&gt;<br />                                 &lt;parameter&gt;firstName=firstName,lastName=lastName&lt;/parameter&gt;<br />                            &lt;/requestHandler&gt;</font>
				</div>
				<div>
						<font color="#0000ff">                            //回调函数（方法）及回写区域的设置<br />                            &lt;responseHandler type="std:InnerHTML"&gt;<br />                                 &lt;parameter&gt;example1_resultLayer&lt;/parameter&gt;<br />                            &lt;/responseHandler&gt;<br />                      &lt;/event&gt;<br />                &lt;/element&gt;<br />           &lt;/form&gt;</font>
				</div>
				<div>
						<font color="#0000ff">           ......</font>
				</div>
				<div>      2、struts-config.xml</div>
				<div>           <font color="#0000ff">......</font></div>
				<div>
						<font color="#0000ff">           //与其它Action的区别是：Ajax调用的Action没有input和forward</font>
				</div>
				<div>
						<font color="#0000ff">           &lt;action path="/example1" name="example1Form" scope="request"</font>
				</div>
				<div>
						<font color="#0000ff">                             type="com.omnytex.ajaxtags.Example1Action" /&gt;<br />           ......</font>
				</div>
				<div>
						<font color="#0000ff">           //Ajax Tag Plugin</font>
				</div>
				<div>
						<font color="#0000ff">           &lt;plug-in className="org.apache.struts.taglib.html.ajax.AjaxInit" /&gt;<br /></font>
						<font color="#0000ff">           ......</font>
				</div>
				<div>      3、Jsp客户界面</div>
				<div>
						<font color="#0000ff">           ......</font>
				</div>
				<div>
						<font color="#0000ff">           //对应于ajax-config.xml中的form ajaxRef</font>
				</div>
				<div>
						<font color="#0000ff">           &lt;html:form action="example1" ajaxRef="example1"&gt;<br /></font>
				</div>
				<div>
						<font color="#0000ff">                ......</font>
				</div>
				<div>
						<font color="#0000ff">                //对应于ajax-config.xml中的Element ajaxRef</font>
				</div>
				<div>
						<font color="#0000ff">                &lt;html:button property="button" value="Click to do Ajax!" ajaxRef="button" /&gt;<br />           &lt;/html:form&gt;<br />           Result:&lt;br&gt;</font>
				</div>
				<div>
						<font color="#0000ff">           //对应于ajax-config.xml中的responseHandler<br />           &lt;span id="example1_resultLayer"&gt;&amp;nbsp;&lt;/span&gt;<br />           ......</font>
				</div>
				<div>
						<font color="#0000ff">           //启用Ajax（应该放在Jsp的最后）</font>
				</div>
				<div>
						<font color="#0000ff">           &lt;html:enableAjax /&gt;<br /></font>
				</div>
				<div>
						<font color="#0000ff">           ......</font>
				</div>
				<div>      4、Action</div>
				<div>
						<font color="#0000ff">           ......</font>
				</div>
				<div>
						<font color="#0000ff">           public ActionForward execute( ...... ) throws Exception {</font>
				</div>
				<div>
						<font color="#0000ff">                try {</font>
				</div>
				<div>
						<font color="#0000ff">                    ......</font>
				</div>
				<div>
						<font color="#0000ff">                    //Ajax的Action需要输出内容到out</font>
				</div>
				<div>
						<font color="#0000ff">                    PrintWriter out = response.getWriter();<br />                    out.println(......);<br />                    out.flush();<br />                    out.close();</font>
				</div>
				<div>
						<font color="#0000ff">                } catch (Exception e) {<br />                    System.err.println("Exception in Example1Action.execute(): " + e);<br />                }</font>
				</div>
				<div>
						<font color="#0000ff">                //由于Ajax的Action输出的内容由页面的区域接收，不需要跳转到其它页面</font>
				</div>
				<div>
						<font color="#0000ff">                //所以，返回null</font>
				</div>
				<div>
						<font color="#0000ff">                return null;</font>
				</div>
				<div>
						<font color="#0000ff">           }</font>
				</div>
				<div>
						<font color="#0000ff">           ......</font>
				</div>
				<div> </div>
				<div>      <strong>Struts Ajax Tag工作原理</strong></div>
				<div>      1、Struts启动，加载AjaxInit；</div>
				<div>      2、AjaxInit解析ajax-config.xml；</div>
				<div>      3、Struts加载AjaxEnabled的Jsp；</div>
				<div>      4、Struts-AjaxTag根据Form ajaxRef和elment ajaxRef找到ajax-config的设置；</div>
				<div>      5、输出AjaxEnabled的Html（Tag库加入了Ajax需要的Script，如：XMLHttpRequest）；</div>
				<div>      6、用户输入数据，提交数据（异步模式提交后，用户可以继续其它操作）；</div>
				<div>      7、XMLHttpRequest对象接管提交数据，并向Struts提交do及参数；</div>
				<div>      8、Struts ActionServlet加载FormBean，和相应的Action；</div>
				<div>      9、Struts Action执行相应逻辑，得到返回的数据，通过out输出；</div>
				<div>      10、XMLHttpRequest得到Struts返回的数据；</div>
				<div>      11、XMLHttpRequest调用设置的回调函数（方法），输出数据到指定的区域；</div>
		</div>
<img src ="http://www.blogjava.net/strive/aggbug/83635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-26 17:15 <a href="http://www.blogjava.net/strive/articles/83635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Struts中使用AjaxTags解决连动问题 </title><link>http://www.blogjava.net/strive/articles/83634.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sun, 26 Nov 2006 09:08:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/83634.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/83634.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/83634.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/83634.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/83634.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 简介								Ajax有人形容为“新瓶里的老酒”，这一点也不为过，这里就不多介绍了。在这技术日新月异的世界里，真是不g不知道，一g吓一跳。给大家推荐一个实惠的：http://www.blogjava.net/eamoi。								AjaxTags是一个开源的项目，目前进展你自己看吧：http://ajaxtags.sourceforge.net/，里面有源码、d...&nbsp;&nbsp;<a href='http://www.blogjava.net/strive/articles/83634.html'>阅读全文</a><img src ="http://www.blogjava.net/strive/aggbug/83634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-26 17:08 <a href="http://www.blogjava.net/strive/articles/83634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDK 1.5中的ENUM用法</title><link>http://www.blogjava.net/strive/articles/83622.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sun, 26 Nov 2006 08:18:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/83622.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/83622.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/83622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/83622.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/83622.html</trackback:ping><description><![CDATA[
		<div class="postTitle">Enum是enumeration(列举)的简写形式,包含在java.lang包中.熟悉C, C++, C#, 或 Pascal人应该对列举有所了解,先看个例子:</div>
		<div class="postText">
				<p>public enum Season { winter, spring, summer, fall }</p>
				<p> </p>
				<p>一个enum是定义一组值的对象,它可以包括零个或多个值成员.它是属于enum类型的,一个enum对象中不可有两个或多个相同的属性或值.在次之前的java程序员一般是 用接口的方法实现列举的,如 :</p>
				<p>public interface Season {</p>
				<p>   static winter = 0;</p>
				<p>   static spring = 1; //etc..</p>
				<p>}</p>
				<p>引入了enum的java的列举的编写方便了许多,只须定义一个enum型的对象.enum对象的值都回自动获得一个数字值,从0开始,依次递增.看一个比较简单的enum实现的例子:</p>
				<p>EnumDemo.java</p>
				<p>package net.javagarage.enums;</p>
				<p> </p>
				<p>/*</p>
				<p>We can loop over the values we put into the enum</p>
				<p>using the values() method.</p>
				<p>Note that the enum Seasons is compiled into a</p>
				<p>separate unit, called EnumDemo$Seasons.class</p>
				<p>*/</p>
				<p>public class EnumDemo {</p>
				<p> </p>
				<p>      /*declare the enum and add values to it. note that, like in C#, we don't use a ; to</p>
				<p> end this statement and we use commas to separate the values */</p>
				<p> </p>
				<p>      private enum Seasons { winter, spring,</p>
				<p>       summer, fall }</p>
				<p> </p>
				<p>      //list the values</p>
				<p>      public static void main(String[] args) {</p>
				<p>            for (Seasons s : Seasons.values()){</p>
				<p>                  System.out.println(s);</p>
				<p>            }</p>
				<p>      }</p>
				<p> </p>
				<p>}<br />运行上述代码你回得到 以下结果:</p>
				<p>winter</p>
				<p>spring</p>
				<p>summer</p>
				<p>fall</p>
				<p>Enum的属性调用:</p>
				<p>下面的代码展示了调用enum对象的方法,这也是它通常的用法:</p>
				<p>package net.javagarage.enums;</p>
				<p>/*</p>
				<p>File: EnumSwitch.java</p>
				<p>Purpose: show how to switch against the values in an enum.</p>
				<p>*/</p>
				<p> </p>
				<p>public class EnumSwitch {</p>
				<p> </p>
				<p>      private enum Color { red, blue, green }</p>
				<p> </p>
				<p>      //list the values</p>
				<p>      public static void main(String[] args) {</p>
				<p>            //refer to the qualified value</p>
				<p>            doIt(Color.red);</p>
				<p> </p>
				<p>      }</p>
				<p> </p>
				<p>      /*note that you switch against the UNQUALIFIED name. that is, "case Color.red:" is a</p>
				<p> compiler error */</p>
				<p> </p>
				<p>      private static void doIt(Color c){</p>
				<p> </p>
				<p>      switch (c) {</p>
				<p>      case red: </p>
				<p>            System.out.println("value is " + Color.red);</p>
				<p>            break;</p>
				<p>      case green: </p>
				<p>            System.out.println("value is " + Color.green);</p>
				<p>            break;</p>
				<p>      case blue: </p>
				<p>            System.out.println("value is : " + Color.blue);</p>
				<p>            break;</p>
				<p>      default : </p>
				<p>            System.out.println("default");</p>
				<p>      }</p>
				<p>      }<br />}</p>
				<p>为enums添加属性和方法</p>
				<p>enums也可以象一般的类一样添加方法和属性,你可以为它添加静态和非静态的属性或方法,这一切都象你在一般的类中做的那样.</p>
				<p>package net.javagarage.enums;</p>
				<p> </p>
				<p>/*</p>
				<p>File: EnumDemo.java</p>
				<p>Purpose: show how to use an enum that also defines its own fields and methods</p>
				<p>*/</p>
				<p> </p>
				<p>public class EnumWithMethods {</p>
				<p> </p>
				<p>//declare the enum and add values to it.</p>
				<p> </p>
				<p>public enum Season {</p>
				<p> </p>
				<p>      winter, spring, summer, fall;</p>
				<p> </p>
				<p>      private final static String location = "Phoenix";</p>
				<p> </p>
				<p>      public static Season getBest(){</p>
				<p>            if (location.equals("Phoenix"))</p>
				<p>                  return winter;</p>
				<p>            else</p>
				<p>                  return summer;</p>
				<p> </p>
				<p>      }</p>
				<p> </p>
				<p>      public static void main(String[] args) {</p>
				<p> </p>
				<p>      System.out.println(Season.getBest());</p>
				<p>      }</p>
				<p>}</p>
				<p>就是这么的简单.但是有一点是需要注意的,那就是enums的值列表必须紧跟在enum声明,不然编译时将会出错.</p>
				<p>Enums构造函数:</p>
				<p>和类一样enums也可以有自己的构造函数,如下:</p>
				<p>package net.javagarage.enums;</p>
				<p> </p>
				<p>public class EnumConstructor {</p>
				<p> </p>
				<p>      public static void main(String[] a) {</p>
				<p> </p>
				<p>            //call our enum using the values method</p>
				<p>            for (Temp t : Temp.values())</p>
				<p>                  System.out.println(t + " is : " + t.getValue());</p>
				<p>      }</p>
				<p> </p>
				<p>      //make the enum</p>
				<p>      public enum Temp {</p>
				<p>            absoluteZero(-459), freezing(32),</p>
				<p>            boiling(212), paperBurns(451);</p>
				<p> </p>
				<p>      //constructor here</p>
				<p>      Temp(int value) {</p>
				<p>            this.value = value;</p>
				<p>      }</p>
				<p> </p>
				<p>      //regular field?but make it final,</p>
				<p>      //since that is the point, to make constants</p>
				<p>      private final int value;</p>
				<p> </p>
				<p>      //regular get method</p>
				<p>      public int getValue() {</p>
				<p>      return value;</p>
				<p>      }</p>
				<p> </p>
				<p>      }</p>
				<p>}<br />输出结果是:</p>
				<p>absoluteZero is : -459</p>
				<p>freezing is : 32</p>
				<p>boiling is : 212</p>
				<p>paperBurns is : 451</p>
				<p>尽管enums有这么多的属性,但并不是用的越多越好,如果那样还不如直接用类来的直接.enums的优势在定义int最终变量仅当这些值有一定特殊含义时.但是如果你需要的是一个类,就定义一个类,而不是enum.</p>
		</div>
<img src ="http://www.blogjava.net/strive/aggbug/83622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-26 16:18 <a href="http://www.blogjava.net/strive/articles/83622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Velocity用户手册---中文版 </title><link>http://www.blogjava.net/strive/articles/83603.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sun, 26 Nov 2006 06:16:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/83603.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/83603.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/83603.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/83603.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/83603.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Velocity是什么？Velocity是一个基于java的模板引擎（template engine）。它允许任何人仅仅简单的使用模板语言（template language）来引用由java代码定义的对象。当Velocity应用于web开发时，界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点，也就是说，页面设计人员可以只关注页面的显示效果，而由java程序开发人员关注...&nbsp;&nbsp;<a href='http://www.blogjava.net/strive/articles/83603.html'>阅读全文</a><img src ="http://www.blogjava.net/strive/aggbug/83603.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-26 14:16 <a href="http://www.blogjava.net/strive/articles/83603.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL 学习</title><link>http://www.blogjava.net/strive/articles/83599.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sun, 26 Nov 2006 06:09:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/83599.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/83599.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/83599.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/83599.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/83599.html</trackback:ping><description><![CDATA[
		<p>
				<strong>一 ： 初识JSTL</strong>
		</p>
		<p>JSTL ：JSP标准标记库（JSP Standard Tag Library,JSTL）是一个实现Web应用程序中常见的通用功能的定制标记库集，这些功能包括 ：</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">
				<span style="COLOR: #008080">1</span>
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">迭代<br /></span>
				<span style="COLOR: #008080">2</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />条件判断<br /></span>
				<span style="COLOR: #008080">3</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />数据管理格式化<br /></span>
				<span style="COLOR: #008080">4</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />XML操作<br /></span>
				<span style="COLOR: #008080">5</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />数据库访问</span>
		</div>
		<p>JSTL 1.0 有四个定制标记库:</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">
				<span style="COLOR: #008080">1</span>
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">core<br /></span>
				<span style="COLOR: #008080">2</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />format<br /></span>
				<span style="COLOR: #008080">3</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />xml<br /></span>
				<span style="COLOR: #008080">4</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sql</span>
		</div>
		<p>1.core 标记库提供了定制操作，通过限制了作用域的变量管理数据，以及执行页面内容的迭代和条件操作。<br /><br />2.format 标记库定义了用来格式化数据（尤其是数字和日期）的操作。它还支持使用本地化资源束进行 JSP 页面的国际化。<br /><br />3.xml 库包含一些标记，这些标记用来操作通过 XML 表示的数据。<br /><br />4.sql 库定义了用来查询关系数据库的操作。<br /><br /><br /><strong>二 ： 补充 ：<br /></strong><br />JSP技术的优势之一在于其定制标记库工具。除了核心JSP标记，如 jsp:include 之外，定制标记库工具使您能够创建唯一的标记来描述以站点或应用程序为导向的操作。一旦您创建了定制标记库(简称 taglib)，当您扩展项目或转向另一个项目时您可以重复使用这些标记。您还可以将taglib传递给其它开发人员，从而他们可以在自己的网站上使用，或者在您Web应用程序的其它部分使用。在这一系列的下一部分，我将向您展示如何创建自己的定制标记库，但现在我们将重点关注JSP标准标记库（JSTL）。 </p>
		<p>JSTL实际上是一组标准化用于<strong>JSP 1.2</strong>的定制标记库。许多JSTL标记都与核心JSP标记类似，但它们可以提供更多的功能。例如，</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">c:import 标记与我们在前一部分中介绍的 include 和 jsp:include 指令极其类似(见 参考资料)。 与include指令一样， c:import 可以帮助您读取（populate）您Web站点或Web应用程序的页面，但其功能性扩展超出了核心JSP标记的范畴。 </span>
		</div>
		<p>在 JSP最佳实践这一部分，我们将使用 c:import 标记来了解如何将Web页面从JSP转变成JSTL。但是，在开始使用新标记之前，我们需要将JSTL装载到Web容器中。</p>
		<p>JSTL 设置</p>
		<p>虽然JSTL计划捆绑到下一波Web容器中，但您目前必须自己进行设置。按以下步骤操作以将JSTL装载到Web容器中：</p>
		<p>从 apache.org下载 jakarta-taglibs-standard-current.tar.gz 。 </p>
		<p>解压缩下载的文件。 <br />将 jakarta-taglibs/standard-1.0.3/tld/c.tld 拷贝到 WEB/INF/tlds 目录。 </p>
		<p>将 jakarta-taglibs/standard-1.0.3/lib 中的所有JAR文件拷贝到 WEB-INF/lib 目录。 </p>
		<p>将以下显示的条目添加到 WEB-INF/web.xml 部署描述符中。</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">taglib</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">taglib-uri</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">http://java.sun.com/jstl/core</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">taglib-uri</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">taglib-location</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">/WEB-INF/tlds/c.tld</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">taglib-location</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">taglib</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div>
		<p>
				<br />重启Web容器。 <br />这是JSTL设置的速成版本，它可以满足大多数情况。更详细信息请参阅 参考资料部分。</p>
		<p>联合 JSTL标记 </p>
		<p>如果您希望在JSP页面上使用任何JSTL标记，您首先必须在该页面上声明标记库前缀和URL。我们正在使用核心JSTL库，因此使用的标准前缀是 c (代表 核心)。表1显示增加了 taglib 指令的Web站点索引文件： </p>
		<p>
				<br />表1：索引文件的taglib指令</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">%@ page </span>
				<span style="COLOR: #ff0000">language</span>
				<span style="COLOR: #0000ff">="java"</span>
				<span style="COLOR: #ff0000"> contentType</span>
				<span style="COLOR: #0000ff">="text/html"</span>
				<span style="COLOR: #ff0000"> %</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">%@ taglib </span>
				<span style="COLOR: #ff0000">prefix</span>
				<span style="COLOR: #0000ff">="c"</span>
				<span style="COLOR: #ff0000"> uri</span>
				<span style="COLOR: #0000ff">="http://java.sun.com/jstl/core"</span>
				<span style="COLOR: #ff0000"> %</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">html</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">head</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">title</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">newInstance.com</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">title</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">meta </span>
				<span style="COLOR: #ff0000">http-equiv</span>
				<span style="COLOR: #0000ff">="Content-Type"</span>
				<span style="COLOR: #ff0000"> content</span>
				<span style="COLOR: #0000ff">="text/html; charset=iso-8859-1"</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">link </span>
				<span style="COLOR: #ff0000">href</span>
				<span style="COLOR: #0000ff">="/styles/default.css"</span>
				<span style="COLOR: #ff0000"> rel</span>
				<span style="COLOR: #0000ff">="stylesheet"</span>
				<span style="COLOR: #ff0000"> type</span>
				<span style="COLOR: #0000ff">="text/css"</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">head</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">body</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">jsp:include </span>
				<span style="COLOR: #ff0000">page</span>
				<span style="COLOR: #0000ff">="header.jsp"</span>
				<span style="COLOR: #ff0000"> flush</span>
				<span style="COLOR: #0000ff">="true"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />             </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">jsp:param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="pageTitle"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="/oblog312/newInstance.com"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />             </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">jsp:param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="pageSlogan"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">=" "</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">jsp:include</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">%@ include </span>
				<span style="COLOR: #ff0000">file</span>
				<span style="COLOR: #0000ff">="/navigation.jsp"</span>
				<span style="COLOR: #ff0000"> %</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      <strong>  </strong></span>
				<strong>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">jsp:include </span>
						<span style="COLOR: #ff0000">page</span>
						<span style="COLOR: #0000ff">="bookshelf.jsp"</span>
						<span style="COLOR: #ff0000"> flush</span>
						<span style="COLOR: #0000ff">="true"</span>
						<span style="COLOR: #ff0000"> </span>
						<span style="COLOR: #0000ff">/&gt;</span>
				</strong>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">jsp:include </span>
				<span style="COLOR: #ff0000">page</span>
				<span style="COLOR: #0000ff">="/mt-blogs/index.jsp"</span>
				<span style="COLOR: #ff0000"> flush</span>
				<span style="COLOR: #0000ff">="true"</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">%@ include </span>
				<span style="COLOR: #ff0000">file</span>
				<span style="COLOR: #0000ff">="/footer.jsp"</span>
				<span style="COLOR: #ff0000"> %</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">body</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">html</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div>
		<p>在向JSP页面添加了JSTL taglib之后，您可以使用核心库中的任何标记，只需把标记的前缀改为 c 。为了了解这一流程，我们将尝试把页面从 jsp:include 标记转换成 c:import 标记。 表2显示了本系列第二部分介绍的 jsp:include 实例(见 参考资料)转为使用新 c:import 标记。 </p>
		<p>
				<br />表2：转为JSTL</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">%@ page </span>
				<span style="COLOR: #ff0000">language</span>
				<span style="COLOR: #0000ff">="java"</span>
				<span style="COLOR: #ff0000"> contentType</span>
				<span style="COLOR: #0000ff">="text/html"</span>
				<span style="COLOR: #ff0000"> %</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">%@ taglib </span>
				<span style="COLOR: #ff0000">prefix</span>
				<span style="COLOR: #0000ff">="c"</span>
				<span style="COLOR: #ff0000"> uri</span>
				<span style="COLOR: #0000ff">="http://java.sun.com/jstl/core"</span>
				<span style="COLOR: #ff0000"> %</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">html</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">head</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">title</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">newInstance.com</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">title</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">meta </span>
				<span style="COLOR: #ff0000">http-equiv</span>
				<span style="COLOR: #0000ff">="Content-Type"</span>
				<span style="COLOR: #ff0000"> content</span>
				<span style="COLOR: #0000ff">="text/html; charset=iso-8859-1"</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">link </span>
				<span style="COLOR: #ff0000">href</span>
				<span style="COLOR: #0000ff">="/styles/default.css"</span>
				<span style="COLOR: #ff0000"> rel</span>
				<span style="COLOR: #0000ff">="stylesheet"</span>
				<span style="COLOR: #ff0000"> type</span>
				<span style="COLOR: #0000ff">="text/css"</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">head</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">body</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">jsp:include </span>
				<span style="COLOR: #ff0000">page</span>
				<span style="COLOR: #0000ff">="header.jsp"</span>
				<span style="COLOR: #ff0000"> flush</span>
				<span style="COLOR: #0000ff">="true"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />             </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">jsp:param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="pageTitle"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="/oblog312/newInstance.com"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />             </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">jsp:param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="pageSlogan"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">=" "</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">jsp:include</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">%@ include </span>
				<span style="COLOR: #ff0000">file</span>
				<span style="COLOR: #0000ff">="/navigation.jsp"</span>
				<span style="COLOR: #ff0000"> %</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<strong>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">c:import </span>
						<span style="COLOR: #ff0000">url</span>
						<span style="COLOR: #0000ff">="bookshelf.jsp"</span>
						<span style="COLOR: #ff0000"> </span>
						<span style="COLOR: #0000ff">/&gt;</span>
				</strong>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">c:import </span>
				<span style="COLOR: #ff0000">url</span>
				<span style="COLOR: #0000ff">="/mt-blogs/index.jsp"</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">%@ include </span>
				<span style="COLOR: #ff0000">file</span>
				<span style="COLOR: #0000ff">="/footer.jsp"</span>
				<span style="COLOR: #ff0000"> %</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">body</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">html</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div>
		<p>这一段程序与前面一段JSP程序之间唯一的区别是 ：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">我们在c:import 中使用了 url 属性<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />而不是在 jsp:include 中使用 page 属性</span>
		</div>
		<p>非常简单，是不是？做一个娱乐性练习，尝试自己转换一个页面，只需运行我们在“使用jsp:include管理动态内容”(本系列第二部分，参阅 参考资料)中使用的JSP程序代码并将其转换成JSTL，如表2所示。 </p>
		<p>如果您进行了仔细研究，您可能注意到我避免改变表2中的header inclusion程序代码。header程序代码包含参数，它增加了在此讨论的复杂性。在 JSP 最佳实践的下一部分，您将了解如何使用 c:import 来传递参数。我还将向您介绍 c:import 标记的一些特性，它可以提供比简单的 jsp:include 标记更多的功能。</p>
<img src ="http://www.blogjava.net/strive/aggbug/83599.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-26 14:09 <a href="http://www.blogjava.net/strive/articles/83599.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>细谈 JAVA 5 中的元数据</title><link>http://www.blogjava.net/strive/articles/83598.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sun, 26 Nov 2006 06:04:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/83598.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/83598.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/83598.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/83598.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/83598.html</trackback:ping><description><![CDATA[
		<p>
				<span class="boldbodycopy">了解如何使用 J2SE 5.0 中提供的元数据批注</span>
		</p>
		<p>
				<span class="bodycopy">最新的 J2SE 5.0 版本（也以代号 "Tiger" 著称）为 Java 语言引进了许多变化，这些变化旨在使 Java 编程更有表现力、更加开发人员友好和更安全。我在 2003 年 9 月的一篇题目为“<a href="http://www.oracle.com/global/cn/oramag/oracle/03-sep/o53devj2se.html" target="_blank"><span class="bodylink">Java 即将发生巨大变化</span></a>”的文章中介绍了许多 Java 新特性。我没有介绍的一个重大的变化 — 那时还没有完整概述它 — 是 Java 的元数据工具。从本文开始，在一个新的分为四个部分的文章系列中，我将从一年前离开的地方继续向您显示如何充分利用 Java 的元数据。</span>
		</p>
		<p>
				<span class="bodycopy">在第一篇文章中，我将说明元数据的用途并演示如何使用在核心的 J2SE 资料库中提供的元数据批注。</span>
		</p>
		<p>
				<span class="bodycopy">在第二篇文章中，我将显示如何编写您自己的批注（首先编写类似 @Copyright 的简单的批注，然后看看与核心语言中内置的那些批注类似的更高级的批注）。</span>
		</p>
		<p>
				<span class="bodycopy">在第三篇文章中，我将演示工具如何在构建时使用批注（创建新的源文件或支持文件）以及程序如何在运行时使用批注（以改变代码的行为）。</span>
		</p>
		<p>
				<span class="bodycopy">在最后的第四篇文章中，我将介绍如何利用在 JSR-181 下开发的标准元数据批注的帮助使编辑和部署 Web 服务在未来变得更容易（Oracle 是 JSR-181 的专家组的成员，并且是在开发工具中增加对设计时元数据的支持的一个积极的拥护者。）</span>
		</p>
		<p>
				<span class="parahead1">元数据</span>
		</p>
		<p>
				<span class="bodycopy">我承认当我第一次看到 JSR-175 的提案“<a href="http://www.jcp.org/aboutJava/communityprocess/final/jsr175/index.html" target="_blank"><span class="bodylink">用于 Java 编程语言的元数据工具</span></a>”（在 2004 年 9 月发布；Oracle 也是该专家组的成员）时，我预测它将创建必须放在 JAR 的 META-INF 目录下的另一个属性文件，或者必须与 JAR 捆绑的另一个 XML 部署描述符。幸运的是，这不是元数据要做的。事实上，它正好相反。Java 的新的元数据工具提供了从 Java 代码内部批注 Java 代码的一种标准方式。它使您能够在要说明的元素的旁边放置描述性的元数据。</span>
		</p>
		<p>
				<span class="bodycopy">当讨论元数据时，您将经常看到几个类似的术语，因此下面提供了一个小术语表来帮助您了解它们的差异：</span>
		</p>
		<p>
		</p>
		<table cellpadding="5" width="75%" align="center" bgcolor="#dddddd" border="1" vspace="5" hspace="5">
				<tbody>
						<tr>
								<td>
										<span class="boldbodycopy">术语</span>
								</td>
								<td>
										<span class="boldbodycopy">定义</span>
								</td>
						</tr>
						<tr>
								<td>
										<span class="boldbodycopy">元数据</span>
								</td>
								<td>
										<span class="bodycopy">关于数据的数据。JSR-175 的目标是在 Java 语言中提供元数据工具。 </span>
								</td>
						</tr>
						<tr>
								<td>
										<span class="boldbodycopy">批注</span>
								</td>
								<td>
										<span class="bodycopy">一种特殊的 Java 结构，用来修饰类、方法、字段、参数、变量、构造器或包。它是 JSR-175 选择用来提供元数据的工具。 </span>
								</td>
						</tr>
						<tr>
								<td>
										<span class="boldbodycopy">批注类型 </span>
								</td>
								<td>
										<span class="bodycopy">具有特殊实施的各种命名批注</span>
								</td>
						</tr>
						<tr>
								<td>
										<span class="boldbodycopy">属性 </span>
								</td>
								<td>
										<span class="bodycopy">由批注指定的一个特殊的元数据项目。有时可以和批注交替使用</span>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
		</p>
		<p>
				<span class="bodycopy">例如：富士苹果有一个属性：它是红色的。假定有一个 FujiApple 类，您可以使用 </span>
				<tt>@Color</tt>
				<span class="bodycopy"> 批注类型的一个批注来指定它的颜色。通过这么做，您就提供了关于苹果的元数据。</span>
		</p>
		<p>
				<span class="bodycopy">自 1.0 版以来在 Java 中一直存在对元数据的需求。Java 从来没有提供记录元数据的标准机制，因而我们编程人员找到了各种技巧和窍门使用任意的工具来添加元数据。您看到在 J2SE 1.4 和更低版本中使用元数据的一些地方有：</span>
		</p>
		<ul>
				<li>
						<span class="bodycopy">transient 关键字</span>
				</li>
				<li>
						<span class="bodycopy">Serializable 标记接口</span>
				</li>
				<li>
						<span class="bodycopy">SingleThreadModel servlet 接口</span>
				</li>
				<li>
						<span class="bodycopy">web.xml 部署描述符内部的元素</span>
				</li>
				<li>
						<span class="bodycopy">META-INF/MANIFEST.MF 文件</span>
				</li>
				<li>
						<span class="bodycopy">BeanInfo 接口</span>
				</li>
				<li>
						<span class="bodycopy">@deprecated Javadoc 注释</span>
				</li>
				<li>
						<span class="bodycopy">所有的 XDoclet Javadoc 标记。 </span>
				</li>
		</ul>
		<p>
		</p>
		<p>
				<span class="bodycopy">当使用这些技巧时，您可能没有想到您正在添加元数据，但事实上您的确在添加元数据。上述方法存在的问题是它们都是解决同一问题的不同方法，但通用性不好。每一种方法都至少有一个缺点在新的元数据工具中得到了解决。</span>
		</p>
		<p>
				<span class="bodycopy">对于这个列表中的一些方法，局限很明显。使用关键字不能伸缩；您不能使用用户自己定义的关键字。标记接口没有提供除它们的存在性之外的任何信息（即，它们没有带参数），并且它们只能处理类，而不能处理字段或方法或包。</span>
		</p>
		<p>
				<span class="bodycopy">列表中的其他一些方法可能看起来合理。使用 XML 支持文件似乎是个好主意，而事实上在许多情况下仍是个好主意。但对于我们使用 XML 文件的许多用途，例如指示类的哪一个方法应当看作是 web 服务，在 Java 代码内部将规则直接放在方法的旁边将更加高效。利用元数据，您可以使 XML 描述符文件仅包含与部署相关的决策。</span>
		</p>
		<p>
				<span class="bodycopy">该列表中可能最高效的元数据的用法是 @deprecated Javadoc 注释和在其镜像中创建的 XDoclet 标记。这可能是 JSR-175 语法为什么看起来与 @deprecated 标记非常类似的原因（正如我们将在下一部分中看到的那样）。</span>
		</p>
		<p>
				<span class="parahead1">批注</span>
		</p>
		<p>
				<span class="bodycopy">批注可以很容易地附加到代码结构上。您可以写一个 "at" 符号 (@)，然后是批注类型名称，并将批注直接放在要批注的项目前面。下面是一个简单的例子：</span>
		</p>
		<p>
		</p>
		<pre>import javax.jws.WebService;
import javax.jws.WebMethod;

@WebService
public class HelloWorldService {

  @WebMethod
  public String helloWorld() {
    return "Hello World!";
  }
}
</pre>
		<p>
		</p>
		<p>
				<span class="bodycopy">当部署在正确的环境中时，增加 </span>
				<tt>@WebService</tt>
				<span class="bodycopy"> 和 </span>
				<tt>@WebMethod</tt>
				<span class="bodycopy"> 批注将指示 web 服务环境将该类变为 web 服务。</span>
		</p>
		<p>
				<span class="bodycopy">您可以批注方法、类、字段、参数、变量、构造器甚至整个包（利用一个特殊的外部 package-info.java 文件）。批注可以在括号内带任意数量的命名参数。下面是使用批注进行修饰以创建 web 服务的一个更高级的示例类。它包含了一个理论上的 JNDI 环境变量查找：</span>
		</p>
		<p>
		</p>
		<pre>@WebService(
  name = "PingService",
  targetNamespace="http://acme.com/ping"
)
@SOAPBinding(
  style=SOAPBinding.Style.RPC,
  use=SOAPBinding.Use.LITERAL
)
public class Ping {
  public @env double level = 500.0;  // JNDI lookup

  public @WebMethod(operationName = "Foo") {
    void foo() { }
  }
}
</pre>
		<p>
		</p>
		<p>
				<span class="bodycopy">这个例子显示了附加到类、变量和方法（在类上实际上有两个方法）上的批注。</span>
				<tt>@env</tt>
				<span class="bodycopy"> 批注没有任何参数，因此它不需要括号。其他批注有一个或更多的命名参数。</span>
		</p>
		<p>
				<span class="bodycopy">当创建新的批注类型时，您将限定允许哪些参数名以及它们的类型。批注接受的类型是严格限定的；它们只可以是基本类型、String、Class、枚举类型、批注类型和前面这些类型的数组。传递的参数必须始终是非空的编译时常量。</span>
		</p>
		<p>
				<span class="bodycopy">要了解本示例中显示的批注有什么效果必须等到本系列的第四篇文章。让我们开始看看 J2SE 5.0 提供的简单的批注类型：</span>
				<tt>@Override、@Deprecated</tt>
				<span class="bodycopy"> 和 </span>
				<tt>@SuppressWarnings。</tt>
		</p>
		<p>
				<span class="parahead1">内置的批注</span>
		</p>
		<p>
				<span class="bodycopy">当我们看这三种标准的用户级批注时，必须考虑：在可以提供的所有可能的批注类型中，为什么 Tiger 恰恰提供三种？原因是提供大量的标准批注并不是目标所在。 </span>
		</p>
		<p>
				<span class="bodycopy">JSR-175 的宗旨严格规定了它是要定义一个元数据工具。编写自定义批注类型的任务留给了编程人员，而编写一组标准的批注类型的任务留给了其他 JSR。例如，有一个新的名称为“Java 平台的通用批注”的 JSR-250，其宗旨是“为 J2SE 和 J2EE 平台中的通用的语义概念开发适用于各种技术的批注”。JSR-250 计划在 2005 年春天的某个时候在 javax.annotations 程序包中提供它的标准的批注集。还有之前提到的 JSR-181，它将使得在 J2EE 容器中编写 Web 服务变得更容易（我们将在本系列中的第四篇文章中进行介绍）。事实上，大多数新的企业 JSR（从 Servlets 2.5 到 EJB 3.0 到 JDBC 4.0）都在考虑批注可以提供哪些优点。</span>
		</p>
		<p>
				<span class="boldbodycopy">
						<tt>@Override</tt>
				</span>
		</p>
		<p>
				<span class="bodycopy">第一个 J2SE 标准批注 </span>
				<tt>@Override</tt>
				<span class="bodycopy"> 使您能够在代码中增加新的可选的编译器检查。它在方法中存在表示该方法用于覆盖父类中的方法。如果编译器检测到该方法实际上没有覆盖任何东西，那么将出现编译错误。经常使用，</span>
				<tt>@Override</tt>
				<span class="bodycopy"> 可以帮助您避免当方法标记没有完全匹配时 — 当多态变为（您可以称之为）“单态” ("unimorphism") 时 — 将得到的细微的 bug。</span>
		</p>
		<p>
				<span class="bodycopy">例如，以下代码可能看起来很合理：</span>
		</p>
		<p>
		</p>
		<pre>public class OverrideExample {
  @Override
  public boolean equals(OverrideExample obj) {
return false;
  }
}
</pre>
		<p>
		</p>
		<p>
				<span class="bodycopy">然而，当您编译 OverrideExample.java 时，您将得到一个错误，该错误指示一个细微的问题。</span>
		</p>
		<p>
		</p>
		<pre>% javac OverrideExample.java
javac OverrideExample.java
OverrideExample.java:3: method does not override a method from its superclass
  @Override
   ^
1 error
</pre>
		<p>
		</p>
		<p>
				<span class="bodycopy">通过提示编译器您希望进行覆盖，使编译器能够捕获到 equals() 方法带 Object 类型参数的细微 bug。</span>
		</p>
		<p>
				<span class="bodycopy">
				</span>
				<tt>@Override</tt>
				<span class="bodycopy"> 批注在实际中有用吗？只有当您是一个愿意用 </span>
				<tt>@Override</tt>
				<span class="bodycopy"> 来标记每一个覆盖方法的非常严谨的编程人员时才有用。我们中有多少人能声称可以达到这种严谨程度？我认为我不能。可能 IDE 将找到一种方式来鼓励或强制使用 </span>
				<tt>@Override</tt>
				<span class="bodycopy">。</span>
		</p>
		<p>
				<span class="boldbodycopy">
						<tt>@Deprecated</tt>
				</span>
		</p>
		<p>
				<span class="bodycopy">第二种标准批注是 </span>
				<tt>@Deprecated</tt>
				<span class="bodycopy">，它与 @deprecated Javadoc 标记有几乎相同的行为。您可以用类似以下的方式来使用它：</span>
		</p>
		<p>
		</p>
		<pre>public class DeprecatedExample {
  @Deprecated
  public static void badMethod() {
  }
}

public class DeprecatedUser {
public static void main(String[] args) {
    DeprecatedExample.badMethod();
  }
}
</pre>
		<p>
		</p>
		<p>
				<span class="bodycopy">The </span>
				<tt>@Deprecated</tt>
				<span class="bodycopy"> 批注看起来非常像 </span>
				<tt>@deprecated</tt>
				<span class="bodycopy"> 标记，除了它出现在注释外面的方法或类声明的前面，并且有一个大写字母 "D"。如果您试图编译上面的代码，javac 将产生警告：</span>
		</p>
		<p>
		</p>
		<pre>% javac Deprecated*.java
Note:DeprecatedUser.java uses or overrides a deprecated API.
Note:Recompile with -Xlint:deprecation for details.
1 error
</pre>
		<p>
		</p>
		<p>
				<span class="bodycopy">如果您遵循警告的建议并用 </span>
				<tt>-Xlint:deprecation</tt>
				<span class="bodycopy"> 进行编译，那么您将得到关于警告的详细信息：</span>
		</p>
		<p>
		</p>
		<pre>% javac -Xlint:deprecation
DeprecatedUser.java:3: warning: [deprecation] badMethod() in DeprecatedExample
has been deprecated
    DeprecatedExample.badMethod();
</pre>
		<p>
		</p>
		<p>
				<span class="bodycopy">
				</span>
				<tt>@Deprecated</tt>
				<span class="bodycopy"> 批注比 </span>
				<tt>@Override</tt>
				<span class="bodycopy"> 更有用吗？我不这么认为。该批注不支持任何参数，因此与 Javadoc 标记不同，您不能提供一个字符串来说明不赞成使用该方法并推荐一个替代的方法进行使用。</span>
				<tt>@Deprecated</tt>
				<span class="bodycopy"> 批注提供的价值实际上比 </span>
				<tt>@deprecated</tt>
				<span class="bodycopy"> 标记少。该批注唯一的优势是您可以通过编程的方式在运行时检测不赞成使用的项目。因此，传统观点认为应当同时使用 </span>
				<tt>@deprecated</tt>
				<span class="bodycopy"> 标记和 </span>
				<tt>@Deprecated</tt>
				<span class="bodycopy"> 标记，一个用于文档，另一个用于运行时反射。</span>
		</p>
		<p>
				<span class="bodycopy">我觉得很不幸 JSR-175 没有选择对 </span>
				<tt>@Deprecated</tt>
				<span class="bodycopy"> 做更多的工作。至少该批注应当复制 </span>
				<tt>@deprecated </tt>
				<span class="bodycopy">标记的功能，包含一个字符串说明，从而编译器可以将其与“不赞成使用” (Deprecation) 警告一起输出。利用额外的参数，</span>
				<tt>@Deprecated</tt>
				<span class="bodycopy"> 还可以接收 "isError" 布尔类型参数，以指示是否完全不鼓励使用该方法或者使用它将被认为是编译错误（利用解释错误原因的清楚的自定义说明来进行完善）。查看 C# 的示例 1 找到属性 </span>
				<tt>[Obsolete]</tt>
				<span class="bodycopy">，该属性正好实现了这一点，它被证明非常有用。</span>
		</p>
		<p>
				<span class="boldbodycopy">
						<tt>@SuppressWarnings</tt>
				</span>
		</p>
		<p>
				<span class="bodycopy">J2SE 提供的最后一个批注是 </span>
				<tt>@SuppressWarnings</tt>
				<span class="bodycopy">。该批注的作用是给编译器一条指令，告诉它对被批注的代码元素内部的某些警告保持静默。</span>
		</p>
		<p>
				<span class="bodycopy">一点背景：J2SE 5.0 为 Java 语言增加了几个新的特性，并且和它们一起增加了许多新的警告并承诺在将来增加更多的警告。您可以为 "javac" 增加 </span>
				<tt>-Xlint </tt>
				<span class="bodycopy">参数来控制是否报告这些警告（如上面的 </span>
				<tt>@Deprecated</tt>
				<span class="bodycopy"> 部分所示）。</span>
		</p>
		<p>
				<span class="bodycopy">默认情况下，Sun 编译器以简单的两行的形式输出警告。通过添加 </span>
				<tt>-Xlint:<i>keyword</i></tt>
				<span class="bodycopy"> 标记（例如 </span>
				<tt>-Xlint:finally</tt>
				<span class="bodycopy">），您可以获得关键字类型错误的完整说明。通过在关键字前面添加一个破折号，写为 </span>
				<tt>-Xlint:<i>-keyword</i></tt>
				<span class="bodycopy">，您可以取消警告。（</span>
				<tt>-Xlint</tt>
				<span class="bodycopy"> 支持的关键字的完整列表可以在 <a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/javac.html" target="_blank"><span class="bodylink">javac 文档页面</span></a>上找到。）下面是一个清单：</span>
		</p>
		<p>
		</p>
		<table cellpadding="5" width="75%" align="center" bgcolor="#dddddd" border="1" vspace="5" hspace="5">
				<tbody>
						<tr>
								<td>
										<span class="boldbodycopy">关键字 </span>
								</td>
								<td>
										<span class="boldbodycopy">用途</span>
								</td>
						</tr>
						<tr>
								<td>
										<span class="boldbodycopy">deprecation</span>
								</td>
								<td>
										<span class="bodycopy">使用了不赞成使用的类或方法时的警告</span>
								</td>
						</tr>
						<tr>
								<td>
										<span class="boldbodycopy">unchecked</span>
								</td>
								<td>
										<span class="bodycopy">执行了未检查的转换时的警告，例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。</span>
								</td>
						</tr>
						<tr>
								<td>
										<span class="boldbodycopy">fallthrough</span>
								</td>
								<td>
										<span class="bodycopy">当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。</span>
								</td>
						</tr>
						<tr>
								<td>
										<span class="boldbodycopy">path</span>
								</td>
								<td>
										<span class="bodycopy">在类路径、源文件路径等中有不存在的路径时的警告。 </span>
								</td>
						</tr>
						<tr>
								<td>
										<span class="boldbodycopy">serial</span>
								</td>
								<td>
										<span class="bodycopy">当在可序列化的类上缺少 serialVersionUID 定义时的警告。 </span>
								</td>
						</tr>
						<tr>
								<td>
										<span class="boldbodycopy">finally</span>
								</td>
								<td>
										<span class="bodycopy">任何 finally 子句不能正常完成时的警告。</span>
								</td>
						</tr>
						<tr>
								<td>
										<span class="boldbodycopy">all</span>
								</td>
								<td>
										<span class="bodycopy">关于以上所有情况的警告。</span>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
		</p>
		<p>
				<span class="bodycopy">
				</span>
				<tt>@SuppressWarnings</tt>
				<span class="bodycopy"> 批注允许您选择性地取消特定代码段（即，类或方法）中的警告。其中的想法是当您看到警告时，您将调查它，如果您确定它不是问题，您就可以添加一个 </span>
				<tt>@SuppressWarnings</tt>
				<span class="bodycopy"> 批注，以使您不会再看到警告。虽然它听起来似乎会屏蔽潜在的错误，但实际上它将提高代码安全性，因为它将防止您对警告无动于衷 — 您看到的每一个警告都将值得注意。</span>
		</p>
		<p>
				<span class="bodycopy">下面是使用 </span>
				<tt>@SuppressWarnings</tt>
				<span class="bodycopy"> 来取消 deprecation 警告的一个例子：</span>
		</p>
		<p>
		</p>
		<pre>public class DeprecatedExample2 {
  @Deprecated
  public static void foo() {
  }
}

public class DeprecatedUser2 {
  @SuppressWarnings(value={"deprecation"})
public static void main(String[] args) {
    DeprecatedExample2.foo();
  }
}
</pre>
		<p>
		</p>
		<p>
				<span class="bodycopy">
				</span>
				<tt>@SuppressWarnings</tt>
				<span class="bodycopy"> 批注接收一个 "value" 变量，该变量是一个字符串数组，它指示将取消的警告。合法字符串的集合随编译器而变化，但在 JDK 上，可以传递给 </span>
				<tt>-Xlint</tt>
				<span class="bodycopy"> 的是相同的关键字集合（非常方便）。并且要求编译器忽略任何它们不能识别的关键字，这在您使用一些不同的编译器时非常方便。</span>
		</p>
		<p>
				<span class="bodycopy">因为 </span>
				<tt>@SuppressWarnings</tt>
				<span class="bodycopy"> 批注仅接收一个参数，并为该参数使用了特殊的名称 "value"，所以您可以选择省略 value=，作为一种方便的缩写：</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<pre>public class DeprecatedUser2 {
  @SuppressWarnings({"deprecation"})
public static void main(String[] args) {
    DeprecatedExample2.foo();
  }
}
</pre>
		<p>
		</p>
		<p>
				<span class="bodycopy">您可以将单个数组参数中的任意数量的字符串值传递给批注，并在任何级别上放置批注。例如，以下示例代码指示将取消整个类的 deprecation 警告，而仅在 </span>
				<tt>main()</tt>
				<span class="bodycopy"> 方法代码内取消 unchecked 和 fallthrough 警告：</span>
		</p>
		<p>
		</p>
		<pre>import java.util.*;

@SuppressWarnings({"deprecation"})
public class NonGenerics {

  @SuppressWarnings({"unchecked","fallthrough"})
public static void main(String[] args) {
    Runtime.runFinalizersOnExit();

    List list = new ArrayList();
    list.add("foo");
  }

  public static void foo() {
    List list = new ArrayList();
    list.add("foo");
  }
}
</pre>
		<p>
		</p>
		<p>
				<span class="bodycopy">
				</span>
				<tt>@SuppressWarnings</tt>
				<span class="bodycopy"> 是否比前两个批注更有用？绝对是这样。不过，在 JDK 1.5.0 版本中还没有完全支持该批注，如果您用 1.5.0 来尝试它，那么它将类似无操作指令。调用 -Xlint:-deprecation 也没有任何效果。Sun 没有声明什么时候将增加支持，但它暗示这将在即将推出的一个 dot 版本中实现。</span>
		</p>
		<p>
				<span class="parahead1">更进一步</span>
		</p>
		<p>
				<span class="bodycopy">如果您试图在 Javadocs 页面中查看这些属性，那么您可能很难找到它们。它们位于核心的 java.lang 包中，但有点隐蔽，它们出现在 Javadoc 类的最底端，列在 Exceptions 和 Errors 后面。 </span>
		</p>
		<p>
				<a name="f1">
				</a>
		</p>
		<table width="100%" align="center">
				<tbody>
						<tr>
								<td align="middle">
										<img height="399" alt="图 1" src="http://www.oracle.com/technology/pub/images/hunter_meta1_f1.gif" width="600" border="0" />
								</td>
						</tr>
				</tbody>
		</table>
		<p>
		</p>
		<p>
				<span class="bodycopy">注意到了附加在 SuppressWarnings 批注后面的陌生的批注 </span>
				<tt>@Target</tt>
				<span class="bodycopy"> 和 </span>
				<tt>@Retention</tt>
				<span class="bodycopy"> 了吗？这些称为元数据批注，它们描述了该批注在哪里适用。我将在本系列的第二篇文章中介绍它们，以及介绍如何将元数据批注应用到您自己的批注中。</span>
		</p>
<img src ="http://www.blogjava.net/strive/aggbug/83598.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-26 14:04 <a href="http://www.blogjava.net/strive/articles/83598.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA 5 新特性</title><link>http://www.blogjava.net/strive/articles/83592.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sun, 26 Nov 2006 05:40:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/83592.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/83592.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/83592.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/83592.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/83592.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1           																																				泛型										(Generic)																																																														1.1          																				...&nbsp;&nbsp;<a href='http://www.blogjava.net/strive/articles/83592.html'>阅读全文</a><img src ="http://www.blogjava.net/strive/aggbug/83592.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-26 13:40 <a href="http://www.blogjava.net/strive/articles/83592.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>