﻿<?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-&lt;h2&gt;&lt;font color="green"&gt;生命科学领域的专业信息解决方案！&lt;/font&gt;&lt;/h2&gt;-随笔分类-Jsp</title><link>http://www.blogjava.net/rain1102/category/37644.html</link><description>&lt;br/&gt;&lt;font color="green" style="font-family: 华文行楷;font-size:16px;"&gt;化学结构搜索，化学信息学，生物信息学，实验室信息学等
。&lt;/font&gt;&lt;br/&gt;&lt;font color="#3C1435"&gt;以高科技的生物、化学信息技术实现生命科学领域中专业数据的计算和管理、提高研发能力、增强在科研和成本效率方面的国际竞争力，为生物、化学、医药和学术机构提供一流的解决方案和技术咨询。&lt;/font&gt;&lt;br/&gt;
&lt;br/&gt;&lt;font color="green" style="font-family: 华文行楷;font-size:16px;"&gt;子曰：危邦不入，乱邦不居。天下有道则见，无道则隐。&lt;/font&gt;&lt;font color="#3C1435"&gt;&lt;/font&gt;&lt;br/&gt;
</description><language>zh-cn</language><lastBuildDate>Wed, 29 Jun 2011 07:45:15 GMT</lastBuildDate><pubDate>Wed, 29 Jun 2011 07:45:15 GMT</pubDate><ttl>60</ttl><item><title>28条提高关键字排名的SEO优化方法【转载】</title><link>http://www.blogjava.net/rain1102/archive/2011/06/29/353366.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Wed, 29 Jun 2011 07:44:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2011/06/29/353366.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/353366.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2011/06/29/353366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/353366.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/353366.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #bbbbbb; font-family: arial; font-size: 13px; line-height: 26px; "><h3 style="outline-width: medium; outline-style: none; outline-color: initial; font-size: 14px; font-weight: bold; color: #cccccc; "><span style="color: #000000; ">关键词位置、密度、处理</span></h3></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">1.URL中出现关键词（英文）<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">2.网页标题中出现关键词（1-3个）<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">3.关键词标签中出现关键词（1-3个）<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">4.描述标签中出现关键词（主关键词重复2次）<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">5.内容中自然出现关键词<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">6.内容第一段和最后一段出现关键词<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">7.H1，H2标签中出现关键词<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">8.导出链接锚文本中包含关键词<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">9.图片的文件名包含关键词<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">10.ALT属性中出现关键词<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">11.关键词密度6-8%<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">12.对关键词加粗或斜体<br style="outline-width: medium; outline-style: none; outline-color: initial; " /><h3 style="outline-width: medium; outline-style: none; outline-color: initial; font-size: 14px; font-weight: bold; color: #cccccc; "><span style="color: #000000; ">内容质量、更新频率、相关性</span></h3></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">1.原创的内容最佳，切忌被多次转载的内容<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">2.内容独立性，与其他页面至少30%互异<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">3.1000-2000字，合理分段<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">4.有规律更新，最好是每天<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">5.内容围绕页面关键词展开，与整站主题相关<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">6.具有评论功能，评论中出现关键词<br style="outline-width: medium; outline-style: none; outline-color: initial; " /><h3 style="outline-width: medium; outline-style: none; outline-color: initial; font-size: 14px; font-weight: bold; color: #cccccc; "><span style="color: #000000; ">导入链接和锚文本</span></h3></span><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; "><p style="outline-width: medium; outline-style: none; outline-color: initial; "><span style="color: #000000; ">1.高PR值站点的导入链接</span><br style="outline-width: medium; outline-style: none; outline-color: initial; " /><span style="color: #000000; ">2.内容相关页面的导入链接</span><br style="outline-width: medium; outline-style: none; outline-color: initial; " /><span style="color: #000000; ">3.导入链接锚文本中包含页面关键词</span><br style="outline-width: medium; outline-style: none; outline-color: initial; " /><span style="color: #000000; ">4.锚文本存在于网页内容中</span><br style="outline-width: medium; outline-style: none; outline-color: initial; " /><span style="color: #000000; ">5.锚文本周围出现相关关键词</span><br style="outline-width: medium; outline-style: none; outline-color: initial; " /><span style="color: #000000; ">6.导入链接存在3个月以上</span><br style="outline-width: medium; outline-style: none; outline-color: initial; " /><span style="color: #000000; ">7.导入链接所在页面的导出链接少于100个</span><br style="outline-width: medium; outline-style: none; outline-color: initial; " /><span style="color: #000000; ">8.导入链接来自不同IP地址</span><br style="outline-width: medium; outline-style: none; outline-color: initial; " /><span style="color: #000000; ">9.导入链接自然增加</span><br style="outline-width: medium; outline-style: none; outline-color: initial; " /><span style="color: #000000; ">10.锚文本多样化（如，SEO和SEO十万个为什么）<br /></span><span style="color: #000000; ">原文地址：<div style="display: inline-block; "></div></span></p></span><a href="http://www.gbin1.com/technology/seo/28waytoseo/"><span style="color: #000000; ">http://www.gbin1.com/technology/seo/28waytoseo/</span></a><img src ="http://www.blogjava.net/rain1102/aggbug/353366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2011-06-29 15:44 <a href="http://www.blogjava.net/rain1102/archive/2011/06/29/353366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高性能网站建设-示例</title><link>http://www.blogjava.net/rain1102/archive/2011/03/31/347381.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Thu, 31 Mar 2011 05:29:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2011/03/31/347381.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/347381.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2011/03/31/347381.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/347381.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/347381.html</trackback:ping><description><![CDATA[<a href="http://stevesouders.com/hpws/rules.php" target="_blank">http://stevesouders.com/hpws/rules.php</a><img src ="http://www.blogjava.net/rain1102/aggbug/347381.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2011-03-31 13:29 <a href="http://www.blogjava.net/rain1102/archive/2011/03/31/347381.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Applet时候js控制客户下载的JRE版本</title><link>http://www.blogjava.net/rain1102/archive/2009/09/03/293745.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Thu, 03 Sep 2009 07:47:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2009/09/03/293745.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/293745.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2009/09/03/293745.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/293745.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/293745.html</trackback:ping><description><![CDATA[今天客户反应，说他们在使用我们的程序的时候，默认下载的JRE版本是1.4.2的，而我们使用的applet在1.4.2上有问题，只支持1.5以上版本。<br />
查了一下，原来是第三方的js里面控制了jre下载版本为：<br />
<font color="#ff0000">if(applet_type == 1) {<br />
&nbsp;&nbsp;s = '&lt;embed TYPE="application/x-java-applet;version=1.3"\n';<br />
&nbsp;&nbsp;s += ' PLUGINSPAGE="http://java.sun.com/products/plugin/1.3/plugin-install.html"\n';<br />
&nbsp;} else if(applet_type == 2) {<br />
&nbsp;&nbsp;s = '&lt;object CLASSID="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"\n';<br />
&nbsp;&nbsp;s += ' CODEBASE=" http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,3,0,0"\n';<br />
&nbsp;} else {<br />
&nbsp;&nbsp;s = '&lt;applet';<br />
&nbsp;}</font><br />
修改为一下代码即可（1.6）：<br />
<span style="color: #008000">&nbsp;if(applet_type == 1) {<br />
&nbsp;&nbsp;s = '&lt;embed TYPE="application/x-java-applet;jpi-version=1.6"\n';<br />
&nbsp;&nbsp;s += ' PLUGINSPAGE="http://java.sun.com/products/plugin/index.html#download"\n';<br />
&nbsp;} else if(applet_type == 2) {<br />
&nbsp;&nbsp;s = '&lt;object CLASSID="clsid:CAFEEFAC-0016-0000-0000-ABCDEFFEDCBA"\n';<br />
&nbsp;&nbsp;s += ' CODEBASE="http://java.sun.com/update/1.6.0/jinstall-6-windows-i586.cab"\n';<br />
&nbsp;} else {<br />
&nbsp;&nbsp;s = '&lt;applet';<br />
&nbsp;}</span><img src ="http://www.blogjava.net/rain1102/aggbug/293745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2009-09-03 15:47 <a href="http://www.blogjava.net/rain1102/archive/2009/09/03/293745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.lang.NoSuchFieldError: deferredExpression异常</title><link>http://www.blogjava.net/rain1102/archive/2009/02/10/253995.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Tue, 10 Feb 2009 01:29:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2009/02/10/253995.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/253995.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2009/02/10/253995.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/253995.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/253995.html</trackback:ping><description><![CDATA[<p><font color="#000000" size="4">遇到这个异常的时候是用jstl标签，是版本问题，由于MyEclipse添加Java EE5，其中自动包括了jstl1.2的版本，lib中又存在一个jstl1.1.2的jar包，把旧版本的删掉就可以了</font></p><img src ="http://www.blogjava.net/rain1102/aggbug/253995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2009-02-10 09:29 <a href="http://www.blogjava.net/rain1102/archive/2009/02/10/253995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Grails中paginate标签参数</title><link>http://www.blogjava.net/rain1102/archive/2008/07/22/216705.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Tue, 22 Jul 2008 12:58:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/07/22/216705.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/216705.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/07/22/216705.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/216705.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/216705.html</trackback:ping><description><![CDATA[<p><span style="color: #008000">&lt;g:paginate next="Forward" prev="Back" maxsteps="0" controller="book" action="list" total="${Book.count()}" /&gt;</span></p>
<p>Attributes<br />
<strong>total</strong> (required) - The total number of results to paginate<br />
<strong>action</strong> (optional) - the name of the action to use in the link, if not specified the default action will be linked<br />
<strong>controller</strong> (optional) - the name of the controller to use in the link, if not specified the current controller will be linked<br />
<strong>id</strong> (optional) - The id to use in the link<br />
<strong>params</strong> (optional) - A map containing request parameters<br />
<strong>prev</strong> (optional) - The text to display for the previous link (defaults to "Previous" as defined by default.paginate.prev property in I18n messages.properties)<br />
<strong>next</strong> (optional) - The text to display for the next link (defaults to "Next" as defined by default.paginate.next property in I18n messages.properties)<br />
<strong>max</strong> (optional) - The number of records displayed per page (defaults to 10). Used ONLY if params.max is empty<br />
<strong>maxsteps</strong> (optional) - The number of steps displayed for pagination (defaults to 10). Used ONLY if params.maxsteps is empty<br />
<strong>offset</strong> (optional) - Used ONLY if params.offset is empty <br />
<span style="color: #008000">source: ./checkout/grails/src/groovy/org/codehaus/groovy/grails/plugins/web/taglib/RenderTagLib.groovy (No such file or directory) </span></p>
<p><br />
&nbsp;</p><img src ="http://www.blogjava.net/rain1102/aggbug/216705.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2008-07-22 20:58 <a href="http://www.blogjava.net/rain1102/archive/2008/07/22/216705.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jstl 取list 长度</title><link>http://www.blogjava.net/rain1102/archive/2008/07/21/216313.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Mon, 21 Jul 2008 03:42:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/07/21/216313.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/216313.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/07/21/216313.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/216313.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/216313.html</trackback:ping><description><![CDATA[&lt;%@ taglib uri="http://java.sun.com/jsp/<span>jstl</span>/core" prefix="c" %&gt; <br />
&lt;%@ taglib prefix="fn" uri="http://java.sun.com/jsp/<span>jstl</span>/functions" %&gt; <br />
&lt;c:out value="${fn:length(<span>list</span>)}"&gt;&lt;/c:out&gt;<img src ="http://www.blogjava.net/rain1102/aggbug/216313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2008-07-21 11:42 <a href="http://www.blogjava.net/rain1102/archive/2008/07/21/216313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在JSTL1.0中实现substring功能？(转)</title><link>http://www.blogjava.net/rain1102/archive/2008/05/13/200197.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Tue, 13 May 2008 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/05/13/200197.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/200197.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/05/13/200197.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/200197.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/200197.html</trackback:ping><description><![CDATA[<p>1，在web.xml中添加：<br />
<br />
&nbsp; &lt;taglib-uri&gt;http://jakarta.apache.org/taglibs/string-1.0&lt;/taglib-uri&gt;<br />
&nbsp; &lt;taglib-location&gt;/WEB-INF/taglibs-string.tld&lt;/taglib-location&gt;<br />
&nbsp; &lt;/taglib&gt;<br />
<br />
2，上传 taglibs-string.jar 到web-inf/lib，上传taglibs-string.tld到web-inf/。</p>
<p>3，在jsp中加入代码：</p>
<p>&lt;%@ taglib uri="<a href="http://jakarta.apache.org/taglibs/string-1.0">http://jakarta.apache.org/taglibs/string-1.0</a>" prefix="str" %&gt;<br />
<br />
&lt;str:substring start="0" end="40"&gt;&lt;c:out value="${messages}"/&gt;&lt;/str:substring&gt;</p><img src ="http://www.blogjava.net/rain1102/aggbug/200197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2008-05-13 14:21 <a href="http://www.blogjava.net/rain1102/archive/2008/05/13/200197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax jsp 无刷新上传文件</title><link>http://www.blogjava.net/rain1102/archive/2008/03/19/187170.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Wed, 19 Mar 2008 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/03/19/187170.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/187170.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/03/19/187170.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/187170.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/187170.html</trackback:ping><description><![CDATA[首先要说的就是 <span class="hilite1"><span class="hilite1">ajax</span></span> 是无法实现上传文件的，可以想一下<span class="hilite1"><span class="hilite1">ajax</span></span>与后台通信都是通过传递字符串，怎么能传递文件呢？其实出于安全考虑js是不能操作文件的，所以就不要再说用<span class="hilite1"><span class="hilite1">ajax</span></span>来实现文件的上传了，这是不可能的。<br />
&nbsp;&nbsp;&nbsp; 而本文实现的<span class="hilite2"><span class="hilite2">文件上传</span></span>也是无页面刷新的，可以说是一种"类似<span class="hilite1"><span class="hilite1">AJAX</span></span>"方法。<br />
&nbsp;&nbsp;&nbsp; 开始之前先说两句无关的，其实在<span class="hilite1"><span class="hilite1">ajax</span></span>出现之前，web应用也可以是无刷新的，那时大多通过IFrame来做到这一点。当然<span class="hilite1"><span class="hilite1">Ajax</span></span>出现之后，人们一窝蜂地投奔<span class="hilite1"><span class="hilite1">Ajax</span></span> 的阵营了，iFrame 就乏人问津了。但是用iFrame来实现无刷新上传文件确实一个很好的选择。ps：<span class="hilite1"><span class="hilite1">Ajax</span></span>技术基本上可以说是由google公司带起来的，但少Gmail中上传文件用的还是 IFrame，所以说使用IFrame来上传文件是最好的选择。<br />
&nbsp;&nbsp;&nbsp; 我在这里这里用的技术是jsp，其实asp，php等也是一样可以这么实现的<br />
&nbsp;&nbsp;&nbsp; 一共两个文件就可实现：index.html 和 upload.jsp<br />
--index.html<span>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>＜html＞ &nbsp;&nbsp;</span></span>
    <li class=""><span>＜body＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>＜form&nbsp;action=</span><span class="string">"upload.jsp"</span><span>&nbsp;id=</span><span class="string">"form1"</span><span>&nbsp;name=</span><span class="string">"form1"</span><span>&nbsp;encType=</span><span class="string">"multipart/form-data"</span><span>&nbsp;&nbsp;method=</span><span class="string">"post"</span><span>&nbsp;target=</span><span class="string">"hidden_frame"</span><span>&nbsp;＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;＜input&nbsp;type=</span><span class="string">"file"</span><span>&nbsp;id=</span><span class="string">"file"</span><span>&nbsp;name=</span><span class="string">"file"</span><span>&nbsp;style=</span><span class="string">"width:450"</span><span>＞ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;＜INPUT&nbsp;type=</span><span class="string">"submit"</span><span>&nbsp;value=</span><span class="string">"上传文件"</span><span>＞＜span&nbsp;id=</span><span class="string">"msg"</span><span>＞＜/span＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;＜br＞ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;＜font&nbsp;color=</span><span class="string">"red"</span><span>＞支持JPG,JPEG,GIF,BMP,SWF,RMVB,RM,AVI文件的上传＜/font＞&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;＜iframe&nbsp;name='hidden_frame'&nbsp;id=</span><span class="string">"hidden_frame"</span><span>&nbsp;style='display:none'＞＜/iframe＞ &nbsp;&nbsp;</span>
    <li class=""><span>＜/form＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>＜/body＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>＜/html＞ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>＜script&nbsp;type=</span><span class="string">"text/javascript"</span><span>＞ &nbsp;&nbsp;</span>
    <li class=""><span>function&nbsp;callback(msg) &nbsp;&nbsp;</span>
    <li class="alt"><span>{ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(</span><span class="string">"file"</span><span>).outerHTML&nbsp;=&nbsp;document.getElementById(</span><span class="string">"file"</span><span>).outerHTML; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(</span><span class="string">"msg"</span><span>).innerHTML&nbsp;=&nbsp;</span><span class="string">"＜font&nbsp;color=red＞"</span><span>+msg+</span><span class="string">"＜/font＞"</span><span>; &nbsp;&nbsp;</span>
    <li class=""><span>} &nbsp;&nbsp;</span>
    <li class="alt"><span>＜/script＞&nbsp;&nbsp;</span> </li>
</ol>
</div>
<br />
<br />
<font color="#000000">&nbsp;index.html 中主要要做的就是写一个 form 和 iframe ，并把 form 的 target 设为 iframe 的名字，注意要把 iframe 设为不可见，其他的都是正常的<span class="hilite2"><span class="hilite2">文件上传</span></span>的写法，这样刷新的页面就是这个隐藏的 Iframe ，而在 index.html 中是不会有页面刷新的，js的 callback 方法是回调方法。用于清空<span class="hilite2"><span class="hilite2">文件上传</span></span>框和显示后台信息，注意清空<span class="hilite2"><span class="hilite2">文件上传</span></span>框的方法，和普通方法有点不一样。</font><br />
<br />
--upload.jsp<br />
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>＜%@&nbsp;page&nbsp;language=</span><span class="string">"<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>"</span><span>&nbsp;contentType=</span><span class="string">"text/html;&nbsp;charset=gb2312"</span><span>&nbsp;%＞ &nbsp;&nbsp;</span></span>
    <li class=""><span>＜%@&nbsp;page&nbsp;</span><span class="keyword">import</span><span>=</span><span class="string">"com.jspsmart.upload.SmartUpload"</span><span>%＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>＜% &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//新建一个SmartUpload对象 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;SmartUpload&nbsp;su&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;SmartUpload(); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//上传初始化 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;su.initialize(pageContext); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;设定上传限制 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//1.限制每个上传文件的最大长度。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;su.setMaxFileSize(</span><span class="number">10000000</span><span>); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//2.限制总上传数据的长度。 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;su.setTotalMaxFileSize(</span><span class="number">20000000</span><span>); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//3.设定允许上传的文件（通过扩展名限制）,仅允许doc,txt文件。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;su.setAllowedFilesList(</span><span class="string">"doc,txt,jpg,rar,mid,waw,mp3,gif"</span><span>); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;sign&nbsp;=&nbsp;</span><span class="keyword">true</span><span>; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//4.设定禁止上传的文件（通过扩展名限制）,禁止上传带有exe,bat,jsp,htm,html扩展名的文件和没有扩展名的文件。 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;su.setDeniedFilesList(</span><span class="string">"exe,bat,jsp,htm,html"</span><span>); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//上传文件 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;su.upload(); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//将上传文件保存到指定目录 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;su.save(</span><span class="string">"c:\\"); </span>&nbsp;
    <li class="alt"><span>&nbsp;</span>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{ </span>&nbsp;</span>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); </span>&nbsp;</span>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sign&nbsp;=&nbsp;false; </span>&nbsp;</span>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;} </span>&nbsp;</span>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;if(sign==true) </span>&nbsp;</span>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;{ </span>&nbsp;</span>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("</span><span>＜script＞parent.callback('upload&nbsp;file&nbsp;success')＜/script＞</span><span class="string">"); </span>&nbsp;</span>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;}else </span>&nbsp;</span>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;{ </span>&nbsp;</span>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("</span><span>＜script＞parent.callback('upload&nbsp;file&nbsp;error')＜/script＞"); &nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li class="alt"><span>%＞ &nbsp;&nbsp;</span> </li>
</ol>
</div>
<br />
<br />
<br />
<br />
<font color="#000000">upload.jsp 中只要注意最后输出的格式就可以了。其实原理就是输出一段js代码到 iframe 中，然后在iframe中来控制它的父页面。<br />
<br />
&nbsp;&nbsp;&nbsp; OK，至此一个无刷新的页面上传组件就做好了，</font><font color="#800080"><font color="#000000">不要忘了在 WEB-INF/lib 下加上必须的 jspSmartUpload.jar 包</font></font><font color="#800080"><font color="#000000">。<br />
&nbsp;&nbsp;&nbsp; 需要说明的是使用Iframe来上传，状态栏还是会有刷新的，因为iframe 中的页面刷新了嘛，但是外部页面，就是你所看到的页面是没有刷新的，所以也可以说是类似<span class="hilite1"><span class="hilite1">Ajax</span></span>上传。</font></font></span><img src ="http://www.blogjava.net/rain1102/aggbug/187170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2008-03-19 10:23 <a href="http://www.blogjava.net/rain1102/archive/2008/03/19/187170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL字符串处理函数 </title><link>http://www.blogjava.net/rain1102/archive/2008/03/03/183523.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Mon, 03 Mar 2008 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/03/03/183523.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/183523.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/03/03/183523.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/183523.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/183523.html</trackback:ping><description><![CDATA[<p>JSTL使用表达式来简化页面的代码，这对一些标准的方法，例如bean的getter/setter方法，请求参数或者context以及session中的数据的访问非常方便，但是我们在实际应用中经常需要在页面调用对象的某些方法，例如我需要调用字符串的length方法来获取字符串的长度时，在以往的开发过程中我们必须把对象先转为String类，然后在调用其length方法，这样的代码繁琐而且容易出错。</p>
<p>因此JSTL内置了几个用于字符串操作的方法，可以直接在表达式中使用，大大的简化了代码，提供代码的可读性。在JSTL的表达是中要使用一个函数，其格式如下</p>
<p><strong><font color="#0000ff">${ns:methodName(args....)}</font></strong></p>
<p>在使用这些函数之前必须在JSP中引入标准函数的声明</p>
<p><strong><font color="#cc6633">&lt;%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %&gt;</font></strong></p>
<p>下面是JSTL中自带的方法列表以及其描述</p>
<p>
<table cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr bgcolor="#cccccc">
            <td align="center"><font size="2"><strong>函数名</strong></font></td>
            <td align="center"><font size="2"><strong>函数说明</strong></font></td>
            <td align="center"><font size="2"><strong>使用举例</strong></font></td>
        </tr>
        <tr>
            <td><font size="2">&nbsp;contains</font></td>
            <td><font size="2">判断字符串是否包含另外一个字符串</font></td>
            <td><font size="2">&lt;c:if test="${fn:contains(name, searchString)}"&gt;</font></td>
        </tr>
        <tr bgcolor="#e8f0fc">
            <td><font size="2">&nbsp;containsIgnoreCase</font></td>
            <td><font size="2">判断字符串是否包含另外一个字符串(大小写无关)</font></td>
            <td><font size="2">&lt;c:if test="${fn:containsIgnoreCase(name, searchString)}"&gt;</font></td>
        </tr>
        <tr>
            <td><font size="2">&nbsp;endsWith</font></td>
            <td><font size="2">判断字符串是否以另外字符串结束</font></td>
            <td><font size="2">&lt;c:if test="${fn:endsWith(filename, ".txt")}"&gt;</font></td>
        </tr>
        <tr bgcolor="#e8f0fc">
            <td><font size="2">&nbsp;escapeXml</font></td>
            <td><font size="2">把一些字符转成XML表示，例如&lt;字符应该转为&amp;lt;</font></td>
            <td><font size="2">${fn:escapeXml(param:info)}</font></td>
        </tr>
        <tr>
            <td><font size="2">&nbsp;indexOf</font></td>
            <td><font size="2">子字符串在母字符串中出现的位置</font></td>
            <td><font size="2">${fn:indexOf(name, "-")}</font></td>
        </tr>
        <tr bgcolor="#e8f0fc">
            <td><font size="2">&nbsp;join</font></td>
            <td><font size="2">将数组中的数据联合成一个新字符串，并使用指定字符格开</font></td>
            <td><font size="2">${fn:join(array, ";")}</font></td>
        </tr>
        <tr>
            <td><font size="2">&nbsp;length</font></td>
            <td><font size="2">获取字符串的长度，或者数组的大小</font></td>
            <td><font size="2">${fn:length(shoppingCart.products)}</font></td>
        </tr>
        <tr bgcolor="#e8f0fc">
            <td><font size="2">&nbsp;replace</font></td>
            <td><font size="2">替换字符串中指定的字符</font></td>
            <td><font size="2">${fn:replace(text, "-", "&#149;")}</font></td>
        </tr>
        <tr>
            <td><font size="2">&nbsp;split</font></td>
            <td><font size="2">把字符串按照指定字符切分</font></td>
            <td><font size="2">${fn:split(customerNames, ";")}</font></td>
        </tr>
        <tr bgcolor="#e8f0fc">
            <td><font size="2">&nbsp;startsWith</font></td>
            <td><font size="2">判断字符串是否以某个子串开始</font></td>
            <td><font size="2">&lt;c:if test="${fn:startsWith(product.id, "100-")}"&gt;</font></td>
        </tr>
        <tr>
            <td><font size="2">&nbsp;substring</font></td>
            <td><font size="2">获取子串</font></td>
            <td><font size="2">${fn:substring(zip, 6, -1)}</font></td>
        </tr>
        <tr bgcolor="#e8f0fc">
            <td><font size="2">&nbsp;substringAfter</font></td>
            <td>
            <p><font size="2">获取从某个字符所在位置开始的子串</font></p>
            </td>
            <td><font size="2">${fn:substringAfter(zip, "-")}</font></td>
        </tr>
        <tr>
            <td><font size="2">&nbsp;substringBefore</font></td>
            <td><font size="2">获取从开始到某个字符所在位置的子串</font></td>
            <td><font size="2">${fn:substringBefore(zip, "-")}</font></td>
        </tr>
        <tr bgcolor="#e8f0fc">
            <td><font size="2">&nbsp;toLowerCase</font></td>
            <td><font size="2">转为小写</font></td>
            <td><font size="2">${fn.toLowerCase(product.name)}</font></td>
        </tr>
        <tr>
            <td><font size="2">&nbsp;toUpperCase</font></td>
            <td><font size="2">转为大写字符</font></td>
            <td><font size="2">${fn.UpperCase(product.name)}</font></td>
        </tr>
        <tr bgcolor="#e8f0fc">
            <td><font size="2">&nbsp;trim</font></td>
            <td><font size="2">去除字符串前后的空格</font></td>
            <td><font size="2">${fn.trim(name)}</font></td>
        </tr>
    </tbody>
</table>
</p><img src ="http://www.blogjava.net/rain1102/aggbug/183523.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2008-03-03 17:29 <a href="http://www.blogjava.net/rain1102/archive/2008/03/03/183523.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE中打开UTF-8编码title为中文的网页会显示空白页的问题</title><link>http://www.blogjava.net/rain1102/archive/2008/02/29/182999.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Fri, 29 Feb 2008 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/02/29/182999.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/182999.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/02/29/182999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/182999.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/182999.html</trackback:ping><description><![CDATA[当页面使用 utf-8 编码时， <br />
&nbsp;&nbsp;&lt;title&gt;标签被放在&lt;meta&gt;标签前面。当title为中文的时(比如Blog名为中文或者文章标题为中文)，在IE下会出现显示空白页的问题。 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;由于 utf-8 使用3个字节表示一个汉字，而GB2312或BIG5使用两个字节。页面输出时，由于上述原因，使浏览器解析、输出&lt;title&gt; &lt;/title&gt;的内容时，如果在&lt;/title&gt;前有奇数个全角字符时，IE把 UTF-8 当作两个字节解析时出现半个汉字的情况，这时该半个汉字会和&lt;/title&gt;的&lt;结合成一个乱码字，导致IE无法读完&lt;title&gt;部分，致使整个页面为空百输出。此时查看源文件，会发现实际上整个页面全部已经下载了。 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;而浏览器解析html的方式是：浏览器读取了页面的html代码后开始进行解析。解析前浏览器要先知道页面的编码方式，然后根据编码方式进行解码，然后才能开始解析。 <br />
&nbsp;&nbsp;浏览器可以从下面3个方面得到页面编码方式： <br />
&nbsp;&nbsp;HTTP Header中的"Content-Type"项； <br />
&nbsp;&nbsp;返回的html代码开头是否有BOM（Byte Order Mark）； <br />
&nbsp;&nbsp;html代码中的meta标签。 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;浏览器(无论是IE还是Firefox)在解析页面时，首先取HTTP Header中的Content-Type项，如果有写明charset的话就认定页面的编码方式为charset指定的值。如果没有指明，则认定为默认值。根据上表，IE中文版的默认值是GB2312，Firefox中文版的默认值是GBK，不过IE的GB2312好像和GBK没啥区别。然后，浏览器会看一下有没有BOM。一旦发现有UTF-8的3字节BOM，则重新认定页面的编码方式为UTF-8。 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;解码阶段，解码完成后是解析html的阶段。解析html的过程中，当解析到head部分的meta标签时，浏览器会根据&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;这个语句中的说明，重新认定编码方式为charset后面的方式，中断html解析过程，返回到解码步骤重新解码。 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;GBK 和 UTF-8 的编码范围： <br />
&nbsp;&nbsp;GBK的编码范围是0&#215;8140-0xfefe。从GB2312-80开始，因为ASCII码的范围是0~127，首字位是0，所以GB2312-80使用双字节，并设置首字位为1。&#8220;GBK 亦采用双字节表示，总体编码范围为 8140-FEFE，首字节在 81-FE 之间，尾字节在 40-FE 之间。&#8221; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;UTF-8中中文都是3个字节的，由于Unicode中中日韩的文字都混在一起，可以使用Windows自带的字符映射表查看CJK表意字符的范围，即为汉字的范围。3字节的UTF-8编码是：1110xxxx 10xxxxxx 10xxxxxx，编码范围是8000-EFFF，首字节在80-EF之间，尾字节在00-FF之间。 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; 显然当一段UTF-8编码的文本被按照GBK方式解码的时候，由于有一些编码在GBK中不存在，造成解码程序出现错误。当UTF-8文本被按照GBK的方式解码的时候，前两个字节会被认为是一个字，后一个字节将和下一个字符结合。当&lt;title&gt;标签里的汉字数是偶数个时，勉强有3/4的概率通过解码程序(因为GBK的第二个字节要求是40-FE)，当有奇数个汉字的时候，最后一个汉字的三个字节的最后一个字节会和&lt; /title&gt;的第一个字符&lt;结合，而&lt;的编码是3C，正好不在尾字节40-FE的范围中，造成错误。如果&lt; /title&gt;标签前有多余的空格也会产生错误，因为空格的编码20也不在范围中。 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;meta 标签的作用：详细请看 《HTML中meta的作用》 <br />
&nbsp;&nbsp;&#8220;meta是用来在HTML文档中模拟HTTP协议的响应头报文。&#8221;在meta标签中写和在HTTP头里写是一样的，这也是为了解决用普通HTML写网页的人无法自行定义HTTP头的问题。但是，meta是一个html标签，所以必须进入到html解析的步骤才能生效，而生效后，浏览器会退回几步，重新设置好HTTP头从头再开始解码、解析html。所以meta中写的内容会覆盖HTTP头里的内容，无论哪个浏览器都是这样的。 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;出现空白页必须的3项条件： <br />
&nbsp;&nbsp;1.title标签里的内容为中文其他双字节字符； <br />
&nbsp;&nbsp;2.指定网页编码的 meta 信息在 title 标签的下方； <br />
&nbsp;&nbsp;3.另存或转换utf-8编码时没有包括 unicode 签名。 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;BOM （Byte Order Mark，字节序标识）的作用： <br />
&nbsp;&nbsp;用于UTF-16编码的文件，在UTF-8编码的文件中不需要标识字节序，所以被用来标识这是一个UTF-8编码文件。 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;这个问题还是IE的兼容性问题，在解码的时候如果遇到错误的编码就中断解码。 <br />
&nbsp;&nbsp;这个是IE的bug，不过也不要认为你用的是MyIE、MyIE2、遨游Maxthon、GreenBrowser、腾讯TT就不会受到影响。Firefox或者Opera就更不会了。 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;解决办法： <br />
&nbsp;&nbsp;utf8页面应该使用标准顺序 <br />
&nbsp;&nbsp;&lt;meta http-equiv=&#8221;content-type&#8221; content=&#8221;text/html; charset=UTF-8&#8243; /&gt; <br />
&nbsp;&nbsp;&lt;meta http-equiv=&#8221;content-language&#8221; content=&#8221;zh-CN&#8221; /&gt; <br />
&nbsp;&nbsp;&lt;meta name=&#8221;robots&#8221; content=&#8221;index,follow&#8221; /&gt; <br />
&nbsp;&nbsp;&lt;meta name=&#8221;keywords&#8221; content=&#8221;" /&gt; <br />
&nbsp;&nbsp;&lt;meta name=&#8221;description&#8221; content=&#8221;" /&gt; <br />
&nbsp;&nbsp;&lt;meta name=&#8221;rating&#8221; content=&#8221;general&#8221; /&gt; <br />
&nbsp;&nbsp;&lt;meta name=&#8221;author&#8221; content=&#8221;" /&gt; <br />
&nbsp;&nbsp;&lt;meta name=&#8221;copyright&#8221; content=&#8221;" /&gt; <br />
&nbsp;&nbsp;&lt;meta name=&#8221;generator&#8221; content=&#8221;" /&gt; <br />
&nbsp;&nbsp;&lt;title&gt;&lt;/title&gt; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;参考文章： <br />
&nbsp;&nbsp;http://hewei.org/website-research/shtml-utf8-bom/ shtml调用在utf8编码下多出空行的问题（解决） <br />
&nbsp;&nbsp;IE中打开UTF-8编码title为中文的网页会显示空白页的问题 (文中大部分是这里的观点) <br />
&nbsp;&nbsp; &nbsp;做人要厚道，请注明转自酷网动力(www.ASPCOOL.COM)。<img src ="http://www.blogjava.net/rain1102/aggbug/182999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2008-02-29 17:31 <a href="http://www.blogjava.net/rain1102/archive/2008/02/29/182999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中出现According to TLD or attribute directive in tag file..</title><link>http://www.blogjava.net/rain1102/archive/2008/02/26/182143.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Tue, 26 Feb 2008 01:53:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/02/26/182143.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/182143.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/02/26/182143.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/182143.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/182143.html</trackback:ping><description><![CDATA[<div class="blog_content">一下转帖别人博客的解决方式 <a href="http://blog.csdn.net/f9inux/archive/2006/11/05/1368428.aspx" target="_blank">http://blog.csdn.net/f9inux/archive/2006/11/05/1368428.aspx</a> <br />
应用部署运行的时候出现JSP异常, 发生在使用JSTL库的时候: According to TLD or attribute directive in tag file, attribute value does not accept any expressions, 可能是因为使用了JSP2.0版本, 同时又没有使用JSTL core库的备用版本(RT库), 以下有两种处理方法: <br />
<br />
1. 修改web.xml. <br />
&lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"&gt; <br />
<br />
改为2.3版本的 <br />
&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"&gt; <br />
&lt;web-app&gt; <br />
<br />
2. 使用JSTL core RT库 <br />
<br />
JSTL core库的有两种taglib伪指令, 其中RT库即是依赖于JSP传统的请求时属性值, 而不是依赖于EL来实现(称为EL库.JSP2.0将支持EL) <br />
<br />
JSP中使用&lt;%@ taglib uri=http://java.sun.com/jstl/core prefix="c"%&gt;在2.3版本都可以,在2.4就不行了, 难道是版本不兼容吗? <br />
<br />
只要将 <br />
&lt;%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%&gt; <br />
<br />
改为 <br />
&lt;%@ taglib uri=http://java.sun.com/jstl/core_rt prefix="c"%&gt; </div><img src ="http://www.blogjava.net/rain1102/aggbug/182143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2008-02-26 09:53 <a href="http://www.blogjava.net/rain1102/archive/2008/02/26/182143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2SE API读取Properties文件六种方法(转载)</title><link>http://www.blogjava.net/rain1102/archive/2008/01/11/174544.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Fri, 11 Jan 2008 03:06:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/01/11/174544.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/174544.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/01/11/174544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/174544.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/174544.html</trackback:ping><description><![CDATA[1。使用java.util.Properties类的load()方法示例：InputStreamin=lnewBufferedInputStream(newFileInputStream(name));Propertiesp=newProperties();p.load(in);<br />
<br />
　　2。使用java.util.ResourceBundle类的getBundle()方法示例：ResourceBundlerb=ResourceBundle.getBundle(name,Locale.getDefault());<br />
<br />
　　3。使用java.util.PropertyResourceBundle类的构造函数示例：InputStreamin=newBufferedInputStream(newFileInputStream(name));ResourceBundlerb=newPropertyResourceBundle(in);<br />
<br />
　　4。使用class变量的getResourceAsStream()方法示例：InputStreamin=JProperties.class.getResourceAsStream(name);Propertiesp=newProperties();p.load(in);<br />
<br />
　　5。使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法示例：InputStreamin=JProperties.class.getClassLoader().getResourceAsStream(name);Propertiesp=newProperties();p.load(in);<br />
<br />
　　6。使用java.lang.ClassLoader类的getSystemResourceAsStream()静态方法示例：InputStreamin=ClassLoader.getSystemResourceAsStream(name);Propertiesp=newProperties();p.load(in);<br />
<br />
　　补充<br />
<br />
　　Servlet中可以使用javax.servlet.ServletContext的getResourceAsStream()方法示例：InputStreamin=context.getResourceAsStream(path);Propertiesp=newProperties();p.load(in);<img src ="http://www.blogjava.net/rain1102/aggbug/174544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2008-01-11 11:06 <a href="http://www.blogjava.net/rain1102/archive/2008/01/11/174544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SimpleTag的开发</title><link>http://www.blogjava.net/rain1102/archive/2007/01/22/95362.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Mon, 22 Jan 2007 08:24:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/01/22/95362.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/95362.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/01/22/95362.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/95362.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/95362.html</trackback:ping><description><![CDATA[SimpleTag的生命周期：<br />1.每次遇到标签时，容器构造一个SimpleTag的实例，并且这个构造方法没有参数。和经典的标签一样，SimpleTag不能进行缓冲，故不能重用，每次都需要构造新的实例。<br />2.调用了构造方法后，就调用setJspContext()和setParent()方法，只有这个标签在另一个标签之内时，才调用setParent()方法。<br />3.容器调用每个属性的setter方法以设置这些属性的值。<br />4.如果存在Body，那么就使用setJspBody方法来设置这个标签的标签体。<br />5.容器调用doTag方法，所以的标签的逻辑、迭代和Body计算，都在这个方法中。<br />6.当doTag方法返回时，所有的参数被锁定。<img src ="http://www.blogjava.net/rain1102/aggbug/95362.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2007-01-22 16:24 <a href="http://www.blogjava.net/rain1102/archive/2007/01/22/95362.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发迭代的标签库</title><link>http://www.blogjava.net/rain1102/archive/2007/01/22/95358.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Mon, 22 Jan 2007 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/01/22/95358.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/95358.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/01/22/95358.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/95358.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/95358.html</trackback:ping><description><![CDATA[<p>package com.rain.tag;</p>
		<p>import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.IOException;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Collection;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Iterator;</p>
		<p>import javax.servlet.jsp.JspException;<br />import javax.servlet.jsp.JspTagException;<br />import javax.servlet.jsp.PageContext;<br />import javax.servlet.jsp.tagext.BodyTagSupport;</p>
		<p>public class IterateTag extends BodyTagSupport {</p>
		<p>&#160;private String name;&#160; //代表了在pageContext中表示的一个属性的名字<br />&#160;private Iterator it;&#160;&#160;&#160;&#160; //代表要迭代的内容<br />&#160;private String type;&#160; //表示it中对象的类型<br />&#160;<br />&#160;public void setCollection(Collection collection){<br />&#160;&#160;if(collection.size()&gt;0){<br />&#160;&#160;&#160;it=collection.iterator();<br />&#160;&#160;}<br />&#160;}<br />&#160;<br />&#160;public void setName(String name){<br />&#160;&#160;this.name=name;<br />&#160;}<br />&#160;<br />&#160;public void setType(String type){<br />&#160;&#160;this.type=type;<br />&#160;}</p>
		<p>&#160;@Override<br />&#160;public int doAfterBody() throws JspException {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;return continueNext(it);<br />&#160;}</p>
		<p>&#160;@Override<br />&#160;public int doEndTag() throws JspException {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;try{<br />&#160;&#160;&#160;if(bodyContent!=null){<br />&#160;&#160;&#160;&#160;bodyContent.writeOut(bodyContent.getEnclosingWriter());<br />&#160;&#160;&#160;}<br />&#160;&#160;}catch(IOException e){<br />&#160;&#160;&#160;throw new JspTagException("IO Error:"+e.getMessage());<br />&#160;&#160;}<br />&#160;&#160;return EVAL_PAGE;<br />&#160;}</p>
		<p>&#160;@Override<br />&#160;public int doStartTag() throws JspException {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;if(it==null){<br />&#160;&#160;&#160;return SKIP_BODY;<br />&#160;&#160;}else{<br />&#160;&#160;&#160;return continueNext(it);<br />&#160;&#160;}<br />&#160;}<br />&#160;<br />&#160;protected int continueNext(Iterator it)throws JspTagException{<br />&#160;&#160;if(it.hasNext()){<br />&#160;&#160;&#160;pageContext.setAttribute(name, it.next(), PageContext.PAGE_SCOPE);<br />&#160;&#160;&#160;return EVAL_BODY_AGAIN;<br />&#160;&#160;}else{<br />&#160;&#160;&#160;return SKIP_BODY;<br />&#160;&#160;}<br />&#160;}<br />}<br />由于BodyTagSupport类实现了TagSupport，而TagSupport又实现了TterationTag接口。故在开发迭代标签时可以直接从BodyTagSupport继承。<br /></p>
		<hr />
		<p>package com.rain.tag;</p>
		<p>import javax.servlet.jsp.tagext.TagData;<br />import javax.servlet.jsp.tagext.TagExtraInfo;<br />import javax.servlet.jsp.tagext.VariableInfo;</p>
		<p>//TagExtraInfo用于提供一些在标签翻译时相关的信息<br />public class IterateTEI extends TagExtraInfo {</p>
		<p>&#160;public IterateTEI(){<br />&#160;&#160;super();<br />&#160;}</p>
		<p>&#160;@Override<br />&#160;public VariableInfo[] getVariableInfo(TagData arg0) {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;return new VariableInfo[]{<br />&#160;&#160;&#160;&#160;new VariableInfo(arg0.getAttributeString("name"),<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; arg0.getAttributeString("type"),<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; true,<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VariableInfo.NESTED)<br />&#160;&#160;};<br />&#160;}<br />}<br />需要说明的是VariableInfo的几个常数，如下所示：<br />1.NESTED：标签中的参数在starttag到endtag之间是有效的。<br />2.AT_BENGIN：标签中的参数在标签的开始到JSP页面结束是有效的。<br />3.AT_END：标签中的参数在标签的结束到JSP页面结束是有效的。<br /></p>
		<hr />
		<p>在标签的描述中，必须同时指定标签的实现类和IterateTEI类。<br />&#160;&#160;&#160;&#160;&#160;&#160; &lt;tag&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;name&gt;iterate&lt;/name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#006400">&lt;tag-class&gt;com.rain.tag.IterateTag&lt;/tag-class&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;tei-class&gt;com.rain.tag.IterateTEI&lt;/tei-class&gt;<br /></font>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;body-content&gt;jsp&lt;/body-content&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;attribute&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;name&gt;collection&lt;/name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;required&gt;true&lt;/required&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/attribute&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;attribute&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;name&gt;name&lt;/name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;required&gt;true&lt;/required&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/attribute&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;attribute&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;name&gt;type&lt;/name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;required&gt;true&lt;/required&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/attribute&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&lt;/tag&gt;<br /></p>
		<hr />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;<br />&lt;web-app&gt;<br />&#160;&lt;taglib&gt;<br />&#160;&#160; &lt;taglib-uri&gt;/demotag&lt;/taglib-uri&gt;<br />&#160;&#160; &lt;taglib-location&gt;/WEB-INF/mytag.tld&lt;/taglib-location&gt;<br />&#160;&lt;/taglib&gt;<br />&lt;/web-app&gt;<br /><hr />
&lt;%@ page language="<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>" contentType="text/html; charset=UTF-8"%&gt;<br />&lt;jsp:directive.page import="<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Collection"/&gt;<br />&lt;%@ taglib uri="/demotag" prefix="mt" %&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;Insert title here&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />&#160;String one="one";<br />&#160;String two="two";<br />&#160;String three="three";<br />&#160;Collection list=new <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.ArrayList();<br />&#160;list.add(one);<br />&#160;list.add(two);<br />&#160;list.add(three);<br />%&gt;<br />&lt;mt:iterate name="scott" type="String" collection="&lt;%=list%&gt;"&gt;<br />&#160; &lt;%=scott%&gt;&lt;br&gt;<br />&lt;/mt:iterate&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<p>运行结果：<br />one<br />two<br />three<br /></p><img src ="http://www.blogjava.net/rain1102/aggbug/95358.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2007-01-22 16:15 <a href="http://www.blogjava.net/rain1102/archive/2007/01/22/95358.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多个标签的嵌套</title><link>http://www.blogjava.net/rain1102/archive/2007/01/22/95350.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Mon, 22 Jan 2007 07:27:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/01/22/95350.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/95350.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/01/22/95350.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/95350.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/95350.html</trackback:ping><description><![CDATA[<p>package com.rain.tag;</p>
		<p>import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.IOException;</p>
		<p>import javax.servlet.jsp.JspException;<br />import javax.servlet.jsp.JspTagException;<br />import javax.servlet.jsp.tagext.BodyTagSupport;</p>
		<p>/*<br />&#160;* if tag<br />&#160;* usage:&lt;tag:if value=true&gt;<br />&#160;*&#160;&#160;&#160;&#160;&#160;&#160; ...<br />&#160;*&#160;&#160;&#160;&#160;&#160;&#160; &lt;/tag:if&gt;<br />&#160;*/<br />public class IfTag extends BodyTagSupport {</p>
		<p>&#160;private boolean value;<br />&#160;<br />&#160;public void setValue(boolean value){<br />&#160;&#160;this.value=value;<br />&#160;}</p>
		<p>&#160;@Override<br />&#160;public int doEndTag() throws JspException {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;try{<br />&#160;&#160;&#160;if(bodyContent!=null){<br />&#160;&#160;&#160;&#160;bodyContent.writeOut(bodyContent.getEnclosingWriter());<br />&#160;&#160;&#160;}<br />&#160;&#160;}catch(IOException e){<br />&#160;&#160;&#160;throw new JspTagException("IO Error:"+e.getMessage());<br />&#160;&#160;}<br />&#160;&#160;return EVAL_PAGE;<br />&#160;}</p>
		<p>&#160;@Override<br />&#160;public int doStartTag() throws JspException {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;if(value){<br />&#160;&#160;&#160;System.out.println("value is true");<br />&#160;&#160;&#160;return EVAL_BODY_INCLUDE;<br />&#160;&#160;}else{<br />&#160;&#160;&#160;System.out.println("value is false");<br />&#160;&#160;&#160;return SKIP_BODY;<br />&#160;&#160;}<br />&#160;}<br />&#160;<br />&#160;<br />}<br /><br /></p>
		<hr />
		<br />package com.rain.tag;<p>import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.IOException;</p><p>import javax.servlet.jsp.JspException;<br />import javax.servlet.jsp.JspTagException;<br />import javax.servlet.jsp.tagext.TagSupport;</p><p>public class OutTag extends TagSupport {</p><p>&#160;private Object value;<br />&#160;<br />&#160;public void setValue(Object value){<br />&#160;&#160;this.value=value;<br />&#160;}</p><p>&#160;@Override<br />&#160;public int doEndTag() throws JspException {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;return EVAL_BODY_INCLUDE;<br />&#160;}</p><p>&#160;@Override<br />&#160;public int doStartTag() throws JspException {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;try{<br />&#160;&#160;&#160;System.out.println(value);<br />&#160;&#160;&#160;pageContext.getOut().write(value.toString());<br />&#160;&#160;}catch(IOException e){<br />&#160;&#160;&#160;throw new JspTagException("IO Error:"+e.getMessage());<br />&#160;&#160;}<br />&#160;&#160;return EVAL_PAGE;<br />&#160;}<br />&#160;<br />&#160;<br />}<br /></p><hr /><br />&lt;tag&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;name&gt;if&lt;/name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;tag-class&gt;com.rain.tag.IfTag&lt;/tag-class&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;body-content&gt;jsp&lt;/body-content&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;attribute&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;name&gt;value&lt;/name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;required&gt;true&lt;/required&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/attribute&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/tag&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;tag&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;name&gt;out&lt;/name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;tag-class&gt;com.rain.tag.OutTag&lt;/tag-class&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;body-content&gt;jsp&lt;/body-content&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;attribute&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;name&gt;value&lt;/name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;required&gt;true&lt;/required&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/attribute&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/tag&gt;<br /><hr /><br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;<br />&lt;web-app&gt;<br />&#160;&lt;taglib&gt;<br />&#160;&#160; &lt;taglib-uri&gt;/demotag&lt;/taglib-uri&gt;<br />&#160;&#160; &lt;taglib-location&gt;/WEB-INF/mytag.tld&lt;/taglib-location&gt;<br />&#160;&lt;/taglib&gt;<br />&lt;/web-app&gt;<br /><hr /><br />&lt;%@ page language="<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>" contentType="text/html; charset=UTF-8"%&gt;<br />&lt;%@ taglib uri="/demotag" prefix="mt" %&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;Insert title here&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />&#160; boolean flag=true;<br />&#160; String outValue="Hello World!";<br />%&gt;<br />&lt;mt:if value="&lt;%=flag%&gt;"&gt;<br />&#160; &lt;mt:out value="&lt;%=outValue%&gt;"&gt;<br />&#160;&#160;&#160; 这是mt:out...&gt;打印的内容。<br />&#160; &lt;/mt:out&gt;<br />&lt;/mt:if&gt;<br />&lt;br&gt;<br />&lt;mt:if value="false"&gt;<br />&#160; &lt;mt:out value="&lt;%=outValue%&gt;"&gt;<br />&#160;&#160;&#160; 这些内容不会显示在客户端。<br />&#160; &lt;/mt:out&gt;<br />&lt;/mt:if&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /><hr /><br />结果显示：<br />控制台<br />value is true<br />Hello World!<br />value is false<br />页面<br />Hello World! 这是mt:out...&gt;打印的内容。<img src ="http://www.blogjava.net/rain1102/aggbug/95350.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2007-01-22 15:27 <a href="http://www.blogjava.net/rain1102/archive/2007/01/22/95350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发带Body的标签库</title><link>http://www.blogjava.net/rain1102/archive/2007/01/22/95330.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Mon, 22 Jan 2007 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/01/22/95330.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/95330.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/01/22/95330.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/95330.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/95330.html</trackback:ping><description><![CDATA[<p>带有Body的Tag必须实现javax.servlet.jsp.tagext.BodyTag接口。<br />BodyTag的处理过程：<br />1.当容器创建一个新的标签实例后，通过setPageContext来设置标签的页面上下文。<br />2.使用setParent方法设置这个标签的上一级标签，如果没有上一级嵌套，设置为null。<br />3.设置标签的属性，这个属性在标签库描述文件中定义，如果没有定义属性，就不用调用此类方法。<br />4.调用doStartTag方法，这个方法可以返回EVAL_BODY_INCLUDE和SKIP_BODY，当返回EVAL_BODY_INCLUDE时，就计算标签的Body，如果返回SKIP_BODY，就不再计算标签的Body。<br />5.调用setBodyContent设置当前的BodyContent。<br />6.调用doInitBody，如果在计算BodyContent时需要进行一些初始化，就在这个方法中进行。<br />7.每次计算完BodyTag后调用doAfterBody，如果返回EVAL_BODY_TAG（新的为EVAL_BODY_AGAIN），就表示继续计算一次BodyTag，直到返回SKIP_BODY才继续执行第8步。<br />8.调用doEndTag方法，这个方法可以返回EVAL_PAGE或者SKIP_PAGE，当返回EVAL_PAGE时，容器将在标签结束时继续计算JSP页面其他的部分；如果返回SKIP_PAGE，容器将在标签结束时停止计算JSP页面其他的部分。<br />9.调用release()方法释放标签程序占用的任何资源。<br /><br />下面是一个迭代器标签例子：<br />package com.rain.tag;</p>
		<p>import <a title="Java爱好者" href="/rain1102">Java</a>.io.IOException;</p>
		<p>import javax.servlet.jsp.JspException;<br />import javax.servlet.jsp.JspTagException;<br />import javax.servlet.jsp.tagext.BodyContent;<br />import javax.servlet.jsp.tagext.BodyTagSupport;</p>
		<p>public class BodyTagExample extends BodyTagSupport {</p>
		<p>&#160;int counts;&#160;&#160;&#160; //counts为迭代的次数<br />&#160;<br />&#160;public BodyTagExample(){<br />&#160;&#160;super();<br />&#160;}<br />&#160;<br />&#160;/*<br />&#160; * 设置counts属性，这个方法由容器自动调用<br />&#160; */<br />&#160;public void setCounts(int c){<br />&#160;&#160;this.counts=c;<br />&#160;}<br />&#160;<br />&#160;@Override<br />&#160;public int doAfterBody() throws JspException {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;System.out.println("doAfterBody"+counts);<br />&#160;&#160;if(counts&gt;1){<br />&#160;&#160;&#160;counts--;<br />&#160;&#160;&#160;return EVAL_BODY_AGAIN;<br />&#160;&#160;}else{<br />&#160;&#160;&#160;return SKIP_BODY;<br />&#160;&#160;}<br />&#160;}</p>
		<p>&#160;@Override<br />&#160;public int doEndTag() throws JspException {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;System.out.println("doEndTag");<br />&#160;&#160;try{<br />&#160;&#160;&#160;if(bodyContent!=null){<br />&#160;&#160;&#160;&#160;bodyContent.writeOut(bodyContent.getEnclosingWriter());<br />&#160;&#160;&#160;}<br />&#160;&#160;}catch(IOException e){<br />&#160;&#160;&#160;throw new JspTagException("IO Error:"+e.getMessage());<br />&#160;&#160;}<br />&#160;&#160;return EVAL_PAGE;<br />&#160;}</p>
		<p>&#160;@Override<br />&#160;public void doInitBody() throws JspException {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;System.out.println("doInitBody");<br />&#160;}</p>
		<p>&#160;@Override<br />&#160;public int doStartTag() throws JspException {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;System.out.println("doStartTag");<br />&#160;&#160;if(counts&gt;0){<br />&#160;&#160;&#160;return EVAL_BODY_AGAIN;<br />&#160;&#160;}else{<br />&#160;&#160;&#160;return SKIP_BODY;<br />&#160;&#160;}<br />&#160;}</p>
		<p>&#160;@Override<br />&#160;public void setBodyContent(BodyContent arg0) {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;System.out.println("setBodyContent");<br />&#160;&#160;this.bodyContent=arg0;<br />&#160;}<br />}<br /><br />&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />&lt;taglib xmlns="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a>"<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>"<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a> web-jsptaglibrary_2_0.xsd"<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; version="2.0"&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;description&gt;A tag library exercising SimpleTag handlers.&lt;/description&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;tlib-version&gt;1.0&lt;/tlib-version&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;short-name&gt;examples&lt;/short-name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;uri&gt;/demotag&lt;/uri&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;description&gt;JSP应用开发&lt;/description&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#006400">&lt;tag&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;name&gt;loop&lt;/name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;tag-class&gt;com.rain.tag.BodyTagExample&lt;/tag-class&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;body-content&gt;<font color="#ff0000">jsp</font>&lt;/body-content&gt;&#160;&#160;&#160; <font color="#ff0000">Body-Content必须为JSP</font><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;attribute&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;name&gt;counts&lt;/name&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#ff0000">定义中必须有setCounts(int counts)方法<br /></font>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;required&gt;true&lt;/required&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#ff0000">表示这个属性是必须的</font><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#ff0000">支持JSP表达式<br /></font>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/attribute&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/tag&gt;<br /></font>&lt;/taglib&gt;<br /><br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;<br />&lt;web-app&gt;<br />&#160;&lt;taglib&gt;<br />&#160;&#160; &lt;taglib-uri&gt;/demotag&lt;/taglib-uri&gt;<br />&#160;&#160; &lt;taglib-location&gt;/WEB-INF/mytag.tld&lt;/taglib-location&gt;<br />&#160;&lt;/taglib&gt;<br />&lt;/web-app&gt;<br /><br />&lt;%@ page language="<a title="Java爱好者" href="/rain1102">Java</a>" contentType="text/html; charset=UTF-8"%&gt;<br />&lt;%@ taglib uri="/demotag" prefix="bodytag" %&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;Insert title here&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;bodytag:loop counts="5"&gt;<br />&#160; 现在时间是:&lt;%=new <a title="Java爱好者" href="/rain1102">Java</a>.util.Date()%&gt;&lt;br&gt;<br />&lt;/bodytag:loop&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /><br /><strong>执行结果：</strong><br /><font color="#ff0000">控制台打印出<br /></font><font color="#006400">doStartTag<br />setBodyContent<br />doInitBody<br />doAfterBody5<br />doAfterBody4<br />doAfterBody3<br />doAfterBody2<br />doAfterBody1<br />doEndTag</font><br /><font color="#ff0000">页面显示<br /></font><font color="#006400">现在时间是:Mon Jan 22 14:52:43 CST 2007<br />现在时间是:Mon Jan 22 14:52:43 CST 2007<br />现在时间是:Mon Jan 22 14:52:43 CST 2007<br />现在时间是:Mon Jan 22 14:52:43 CST 2007<br />现在时间是:Mon Jan 22 14:52:43 CST 2007<br /></font></p><img src ="http://www.blogjava.net/rain1102/aggbug/95330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2007-01-22 14:11 <a href="http://www.blogjava.net/rain1102/archive/2007/01/22/95330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中开发自定义标签（实现Tag接口）</title><link>http://www.blogjava.net/rain1102/archive/2007/01/22/95258.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Mon, 22 Jan 2007 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/01/22/95258.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/95258.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/01/22/95258.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/95258.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/95258.html</trackback:ping><description><![CDATA[<p>开发和使用自定义标签程序有三个步骤：<br />1.开发标签实现类<br />2.编写标签描述，这个描述通常是以.tld结尾的文件<br />3.在web.xml中指定标签库的引用<br /><br />开发实现：<br /><br />package com.rain.tag;</p>
		<p>import <a title="Java爱好者" href="/rain1102">Java</a>.io.IOException;</p>
		<p>import javax.servlet.jsp.JspException;<br />import javax.servlet.jsp.JspTagException;<br />import javax.servlet.jsp.PageContext;<br />import javax.servlet.jsp.tagext.Tag;</p>
		<p>public class HelloTag implements Tag {</p>
		<p>&#160;private PageContext pageContext;<br />&#160;private Tag parent;<br />&#160;<br />&#160;public HelloTag(){<br />&#160;&#160;super();<br />&#160;}<br />&#160;public int doEndTag() throws JspException {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;try{<br />&#160;&#160;&#160;pageContext.getOut().write("Hello World!　你好");<br />&#160;&#160;}catch(IOException e){<br />&#160;&#160;&#160;throw new JspTagException("IO Error:"+e.getMessage());<br />&#160;&#160;}<br />&#160;&#160;return EVAL_PAGE;<br />&#160;}</p>
		<p>&#160;public int doStartTag() throws JspException {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;return SKIP_BODY;&#160; //返回SKIP_BODY，表示不计算标签体<br />&#160;}</p>
		<p>&#160;public Tag getParent() {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;return this.parent;<br />&#160;}</p>
		<p>&#160;public void release() {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;}</p>
		<p>&#160;public void setPageContext(PageContext arg0) {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;this.pageContext=arg0;<br />&#160;}</p>
		<p>&#160;public void setParent(Tag arg0) {<br />&#160;&#160;// TODO Auto-generated method stub<br />&#160;&#160;this.parent=arg0;<br />&#160;}</p>
		<p>}<br /><br />编写标签库描述<br /><br />&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />&lt;taglib xmlns="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a>"<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>"<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a> web-jsptaglibrary_2_0.xsd"<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; version="2.0"&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;description&gt;A tag library exercising SimpleTag handlers.&lt;/description&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;tlib-version&gt;1.0&lt;/tlib-version&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;short-name&gt;examples&lt;/short-name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;uri&gt;/demotag&lt;/uri&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;description&gt;JSP应用开发&lt;/description&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#006400">&lt;tag&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;description&gt;Outputs Hello,World&lt;/description&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;name&gt;hello_int&lt;/name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;tag-class&gt;com.rain.tag.HelloTag&lt;/tag-class&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;body-content&gt;empty&lt;/body-content&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/tag&gt;<br /></font>&lt;/taglib&gt;<br /><br />使用自定义标签<br /><br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;<br />&lt;web-app&gt;<br />&#160;&lt;taglib&gt;<br />&#160;&#160; &lt;taglib-uri&gt;/demotag&lt;/taglib-uri&gt;<br />&#160;&#160; &lt;taglib-location&gt;/WEB-INF/mytag.tld&lt;/taglib-location&gt;<br />&#160;&lt;/taglib&gt;<br />&lt;/web-app&gt;<br /><br /><br />&lt;%@ page language="<a title="Java爱好者" href="/rain1102">Java</a>" contentType="text/html; charset=UTF-8"%&gt;<br />&lt;%@ taglib uri="/demotag" prefix="hello" %&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;Insert title here&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;p&gt;以下的内容是从Taglib中显示的：&lt;/p&gt;<br />&lt;p&gt;&lt;i&gt;&lt;hello:hello_int/&gt;&lt;/i&gt;&lt;/p&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /><br />本实例是实现Tag接口，但为了在开发中方便简单，一般直接继承TagSupport类，只覆盖doStartTag和doEndTag两个方法就可以。TagSupport是Tag的子类。</p><img src ="http://www.blogjava.net/rain1102/aggbug/95258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2007-01-22 11:53 <a href="http://www.blogjava.net/rain1102/archive/2007/01/22/95258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jstl中的变量在jsp中读取</title><link>http://www.blogjava.net/rain1102/archive/2007/01/19/94945.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Fri, 19 Jan 2007 07:40:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/01/19/94945.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94945.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/01/19/94945.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94945.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94945.html</trackback:ping><description><![CDATA[事例： <br />&lt;% <br />String newImg="yes"; <br />request.setAttribute("newImg",newImg); <br />%&gt; <br />${newImg} <br />&lt;c:set var="newImg1" value="${'10'}"/&gt; <br />${newImg1} <br />&lt;%= pageContext.getAttribute("newImg1")%&gt; <br /><br /><br />原理： <br />jstl中的变量在赋值&lt;c:set&gt;的时候有个scope属性，它是用来设置该变量的作用域的，可以是 <br />page <br />request <br />session <br />application <br />默认是page，同一jsp页面有效 <br /><br />这四个scope对应在jsp中可以通过 <br />pageContext.getAttribute() <br />request.getAttribute() <br />session.getAttribute() <br />application.getAttribute() <br />得到值。 <br /><br />如下： <br /><br />&lt;c:set var="a" value="hello a" scope="request" /&gt; <br />&lt;c:set var="b" value="hello b"/&gt; <br /><br />&lt;% <br />out.print(request.getAttribute("a") + "&lt;br/&gt;"); <br />out.print(pageContext.getAttribute("b")); <br />%&gt; <br /><br />同理，也可以从jsp中得到变量放入jstl的变量中。<img src ="http://www.blogjava.net/rain1102/aggbug/94945.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2007-01-19 15:40 <a href="http://www.blogjava.net/rain1102/archive/2007/01/19/94945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jstl的函数库</title><link>http://www.blogjava.net/rain1102/archive/2007/01/19/94944.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Fri, 19 Jan 2007 07:39:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/01/19/94944.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94944.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/01/19/94944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94944.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94944.html</trackback:ping><description><![CDATA[使用实例：&lt;%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %&gt; ${fn:length(myCollection)} <br />其他函数： <br /><br />函数 <br />描述 <br /><br />fn:contains(string, substring) <br />如果参数string中包含参数substring，返回true <br /><br />fn:containsIgnoreCase(string, substring) <br />如果参数string中包含参数substring（忽略大小写），返回true <br /><br />fn:endsWith(string, suffix) <br />如果参数 string 以参数suffix结尾，返回true <br /><br />fn:escapeXml(string) <br />将有特殊意义的XML (和HTML)转换为对应的XML character entity code，并返回 <br /><br />fn:indexOf(string, substring) <br />返回参数substring在参数string中第一次出现的位置 <br /><br />fn:join(array, separator) <br />将一个给定的数组array用给定的间隔符separator串在一起，组成一个新的字符串并返回。 <br /><br />fn:length(item) <br />返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。 <br /><br />fn:replace(string, before, after) <br />返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方，并返回替换后的结果 <br /><br />fn:split(string, separator) <br />返回一个数组，以参数separator 为分割符分割参数string，分割后的每一部分就是数组的一个元素 <br /><br />fn:startsWith(string, prefix) <br />如果参数string以参数prefix开头，返回true <br /><br />fn:substring(string, begin, end) <br />返回参数string部分字符串, 从参数begin开始到参数end位置，包括end位置的字符 <br /><br />fn:substringAfter(string, substring) <br />返回参数substring在参数string中后面的那一部分字符串 <br /><br />fn:substringBefore(string, substring) <br />返回参数substring在参数string中前面的那一部分字符串 <br /><br />fn:toLowerCase(string) <br />将参数string所有的字符变为小写，并将其返回 <br /><br />fn:toUpperCase(string) <br />将参数string所有的字符变为大写，并将其返回 <br /><br />fn:trim(string) <br />去除参数string 首尾的空格，并将其返回<img src ="http://www.blogjava.net/rain1102/aggbug/94944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2007-01-19 15:39 <a href="http://www.blogjava.net/rain1102/archive/2007/01/19/94944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>写入内容到文件中</title><link>http://www.blogjava.net/rain1102/archive/2007/01/19/94883.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Fri, 19 Jan 2007 03:05:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/01/19/94883.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94883.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/01/19/94883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94883.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94883.html</trackback:ping><description><![CDATA[可以通过FileWriter对象或者FileOutputStream把内容输出到文件中。<br /><font color="#006400">PrintWriter writer=new PrintWriter(new BufferedWriter(new <font color="#800080">FileWriter</font>("d:\\foo.txt")));<br />writer.write("test");<br />writer.close();<br />这样每次写入新的内容的时候都会把原来的内容删除。如果想保存原来的内容，可以修改为：<br />PrintWriter writer=new PrintWriter(new BufferedWriter(new <font color="#800080">FileWriter</font>("d:\\foo.txt",<font color="#ff0000">true</font>)));</font><img src ="http://www.blogjava.net/rain1102/aggbug/94883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2007-01-19 11:05 <a href="http://www.blogjava.net/rain1102/archive/2007/01/19/94883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用FileReader读取文件</title><link>http://www.blogjava.net/rain1102/archive/2007/01/19/94879.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Fri, 19 Jan 2007 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/01/19/94879.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94879.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/01/19/94879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94879.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94879.html</trackback:ping><description><![CDATA[<p>可以在JSP中使用FileReader和FileInputStream等类来读取文件的内容。由于FileReader具有比FileInputStream更好的性能，在这里使用FileReader来读取文件的内容。<br />&lt;%@ page language="<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>" import="<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.*" contentType="text/html; charset=gb2312" buffer="64kb"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;Read file&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />&#160; try{<br />&#160; <font color="#006400">BufferedReader in=new BufferedReader(new FileReader("e:\\test.txt"));&#160; //可以是任意位置的文件<br /></font>&#160; String file="";<br />&#160; String temp="";<br />&#160; while((temp=in.readLine())!=null){<br />&#160;&#160; file+=temp;<br />&#160; }<br />&#160; in.close();<br />&#160; out.println(file);<br />&#160; out.flush();<br />&#160; }catch(Exception e){<br />&#160;&#160; out.println(e);<br />&#160;&#160; e.printStackTrace();<br />&#160; }<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p><img src ="http://www.blogjava.net/rain1102/aggbug/94879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2007-01-19 10:56 <a href="http://www.blogjava.net/rain1102/archive/2007/01/19/94879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用ServletContext读取文件内容</title><link>http://www.blogjava.net/rain1102/archive/2007/01/19/94874.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Fri, 19 Jan 2007 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/01/19/94874.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94874.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/01/19/94874.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94874.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94874.html</trackback:ping><description><![CDATA[ServletContext只能读取Servlet上下文中的文件<br /><br />&lt;%@ page language="<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>" import="<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.*" contentType="text/html; charset=gb2312" buffer="64kb"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;Read file&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />&#160; try{<br />&#160;&#160; <font color="#006400">InputStream in=getServletContext().getResourceAsStream("/file.txt");<br /></font>&#160;&#160; String file="";<br />&#160;&#160; String temp="";<br />&#160;&#160; <font color="#006400">BufferedReader buffer=new BufferedReader(new InputStreamReader(new BufferedInputStream(in)));</font><br />&#160;&#160; while((temp=buffer.readLine())!=null){<br />&#160;&#160;&#160; file+=temp;<br />&#160;&#160; }<br />&#160;&#160; buffer.close();<br />&#160;&#160; in.close();<br />&#160;&#160; out.println(file);<br />&#160;&#160; out.flush();<br />&#160; }catch(Exception e){<br />&#160;&#160; out.println(e);<br />&#160;&#160; e.printStackTrace();<br />&#160; }<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /><br /><font color="#006400"><a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.getResourceAsStream和java.lang.Class.getResourceAsStream方法不同，后者使用ClassLoader来获得指定的资源。<br />带缓冲的输入流来读取文件资源，不仅速度快，占用系统资源少，而且不会出现中文乱码问题。</font><img src ="http://www.blogjava.net/rain1102/aggbug/94874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2007-01-19 10:49 <a href="http://www.blogjava.net/rain1102/archive/2007/01/19/94874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在不同页面或者不同用户之间共享数据的方法</title><link>http://www.blogjava.net/rain1102/archive/2007/01/19/94855.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Fri, 19 Jan 2007 01:44:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/01/19/94855.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94855.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/01/19/94855.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94855.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94855.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于同一用户的会话</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">想要在不同页面之间共享数据</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以有以下几种：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1．<span style="FONT: 7pt 'Times New Roman'">&#160; </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">把数据保存在</span>
				<span lang="EN-US">Session</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中（这是常见方式）；</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2．<span style="FONT: 7pt 'Times New Roman'">&#160; </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过</span>
				<span lang="EN-US">Cookie</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">3．<span style="FONT: 7pt 'Times New Roman'">&#160; </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过隐含的表单把数据提交到下一个页面；</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">4．<span style="FONT: 7pt 'Times New Roman'">&#160; </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过</span>
				<span lang="EN-US">ServletContext</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象；</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">5．<span style="FONT: 7pt 'Times New Roman'">&#160; </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过</span>
				<span lang="EN-US">Application</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象；</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">6．<span style="FONT: 7pt 'Times New Roman'">&#160; </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过文件系统或者数据库。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在不同用户之间共享数据，通常用法是：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1．<span style="FONT: 7pt 'Times New Roman'">&#160; </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过</span>
				<span lang="EN-US">ServletContext</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象；</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2．<span style="FONT: 7pt 'Times New Roman'">&#160; </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过</span>
				<span lang="EN-US">Application</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象；</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">3．<span style="FONT: 7pt 'Times New Roman'">&#160; </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过文件系统或者数据库。</span>
		</p><img src ="http://www.blogjava.net/rain1102/aggbug/94855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2007-01-19 09:44 <a href="http://www.blogjava.net/rain1102/archive/2007/01/19/94855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat+JSP经典配置实例</title><link>http://www.blogjava.net/rain1102/archive/2006/11/22/82663.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Wed, 22 Nov 2006 01:02:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2006/11/22/82663.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/82663.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2006/11/22/82663.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/82663.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/82663.html</trackback:ping><description><![CDATA[出处：http://www.webjx.com <!-- #EndEditable --><table height="65" cellspacing="0" cellpadding="0" width="760" align="center" border="0"><tbody><tr><td class="content" height="65"><!-- #BeginEditable "3" --><table class="content" width="100%" align="center" border="0"><tbody><tr><td class="content"><p>经常看到jsp的初学者问tomcat下如何配置jsp、servlet和bean的问题，于是总结了一下如何tomcat下配置jsp、servlet和ben，希望对那些初学者有所帮助。</p><p><strong>一、开发环境配置</strong></p><p><strong>第一步：</strong>下载j2sdk和tomcat：到sun官方站（http://java.sun.com/j2se/1.5.0/download.jsp）下载j2sdk，注意下载版本为Windows Offline Installation的SDK，同时最好下载J2SE 1.5.0 Documentation，然后到tomcat官方站点（http://jakarta.apache.org/site/downloads/downloads_tomcat-5.cgi）下载tomcat（下载最新5.5.9版本的tomcat）；</p><p><strong>第二步：</strong>安装和配置你的j2sdk和tomcat：执行j2sdk和tomcat的安装程序，然后按默认设置进行安装即可。</p><p>1.安装j2sdk以后，需要配置一下环境变量，在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量(假定你的j2sdk安装在c:\j2sdk1.5.0）：</p><p>JAVA_HOME=c:\j2sdk1.5.0<br />　classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;（.;一定不能少，因为它代表当前路径)<br />　path=%JAVA_HOME%\bin</p><p>接着可以写一个简单的java程序来测试J2SDK是否已安装成功：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">public class Test{<br />public static void main(String args[]){<br />System.out.println("This is a test program.");<br />}<br />}</td></tr></tbody></table><p>将上面的这段程序保存为文件名为Test.java的文件。</p><p>然后打开命令提示符窗口，cd到你的Test.java所在目录，然后键入下面的命令</p><p>javac Test.java<br />　<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> Test</p><p>此时如果看到打印出来This is a test program.的话说明安装成功了，如果没有打印出这句话，你需要仔细检查一下你的配置情况。</p><p>2.安装Tomcat后，在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量(假定你的tomcat安装在c:\tomcat)：</p><p>CATALINA_HOME=c:\tomcat<br />　CATALINA_BASE=c:\tomcat</p><p>然后修改环境变量中的classpath，把tomat安装目录下的common\lib下的(可以根据实际追加)servlet.jar追加到classpath中去，修改后的classpath如下：</p><p>classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;</p><p>接着可以启动tomcat，在IE中访问http://localhost:8080，如果看到tomcat的欢迎页面的话说明安装成功了。</p><p><strong>第三步：建立自己的jsp app目录</strong></p><p>1.到Tomcat的安装目录的webapps目录，可以看到ROOT，examples, tomcat-docs之类Tomcat自带的的目录；<br />　2.在webapps目录下新建一个目录，起名叫myapp；<br />　3.myapp下新建一个目录WEB-INF，注意，目录名称是区分大小写的；<br />　4.WEB-INF下新建一个文件web.xml，内容如下：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br />&lt;web-app&gt;<br />&lt;display-name&gt;My Web Application&lt;/display-name&gt;<br />&lt;description&gt;<br />A application for test.<br />&lt;/description&gt;<br />&lt;/web-app&gt;</td></tr></tbody></table><p>5.在myapp下新建一个测试的jsp页面，文件名为index.jsp，文件内容如下：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;html&gt;&lt;body&gt;&lt;center&gt;<br />Now time is: &lt;%=new <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Date()%&gt;<br />&lt;/center&gt;&lt;/body&gt;&lt;/html&gt;</td></tr></tbody></table><p>6.重启Tomcat</p><p>7.打开浏览器，输入http://localhost:8080/myapp/index.jsp 看到当前时间的话说明就成功了。</p><p><strong>第四步：</strong>建立自己的Servlet：</p><p>1.用你最熟悉的编辑器（建议使用有语法检查的java ide）新建一个servlet程序，文件名为Test.java，文件内容如下：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">package test;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.IOException;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.PrintWriter;<br />import javax.servlet.ServletException;<br />import javax.servlet.http.HttpServlet;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br />public class Test extends HttpServlet {<br />protected void doGet(HttpServletRequest request, HttpServletResponse response)<br />throws ServletException, IOException {<br />PrintWriter out=response.getWriter();<br />out.println("&lt;html&gt;&lt;body&gt;&lt;h1&gt;This is a servlet test.&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;");<br />out.flush();<br />}<br />}</td></tr></tbody></table><p>2 .编译<br />　将Test.java放在c:\test下，使用如下命令编译：</p><p>C:\Test&gt;javac Test.java</p><p>然后在c:\Test下会产生一个编译后的servlet文件：Test.class</p><p>3 .将结构test\Test.class剪切到%CATALINA_HOME%\webapps\myapp\WEB-INF\classes下，也就是剪切那个test目录到classes目录下，如果classes目录不存在，就新建一个。 现在webapps\myapp\WEB-INF\classes下有test\Test.class的文件目录结构</p><p>4 .修改webapps\myapp\WEB-INF\web.xml，添加servlet和servlet-mapping</p><p>编辑后的web.xml如下所示，红色为添加的内容:</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br />&lt;web-app&gt;<br />&lt;display-name&gt;My Web Application&lt;/display-name&gt;<br />&lt;description&gt;<br />A application for test.<br />&lt;/description&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br />&lt;display-name&gt;Test&lt;/display-name&gt;<br />&lt;description&gt;A test Servlet&lt;/description&gt;<br />&lt;servlet-class&gt;test.Test&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/Test&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />&lt;/web-app&gt;</td></tr></tbody></table><p>这段话中的servlet这一段声明了你要调用的Servlet，而servlet-mapping则是将声明的servlet"映射"到地址/Test上</p><p>5 .好了，重启动Tomcat，启动浏览器，输入http://localhost:8080/myapp/Test 如果看到输出This is a servlet test.就说明编写的servlet成功了。</p><p>注意：修改了web.xml以及新加了class，都要重启Tomcat</p><p><strong>第四步：</strong>建立自己的Bean：</p><p>1.用你最熟悉的编辑器（建议使用有语法检查的java ide）新建一个java程序，文件名为TestBean.java，文件内容如下：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">package test;<br />public class TestBean{<br />private String name = null;<br />public TestBean(String strName_p){<br />this.name=strName_p;<br />}<br />public void setName(String strName_p){<br />this.name=strName_p;<br />}<br />public String getName(){<br />return this.name;<br />}<br />}</td></tr></tbody></table><p>2 .编译</p><p>将TestBean.java放在c:\test下，使用如下命令编译：</p><p>C:\Test&gt;javac TestBean.java</p><p>然后在c:\Test下会产生一个编译后的bean文件：TestBean.class</p><p>3 .将TestBean.class文件剪切到 %CATALINA_HOME%\webapps\myapp\WEB-INF\classes\test下，</p><p>4 .新建一个TestBean.jsp文件，文件内容为：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;%@ page import="test.TestBean" %&gt;<br />&lt;html&gt;&lt;body&gt;&lt;center&gt;<br />&lt;%<br />TestBean testBean=new TestBean("This is a test <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> bean.");<br />%&gt;<br /><a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> bean name is: &lt;%=testBean.getName()%&gt;<br />&lt;/center&gt;&lt;/body&gt;&lt;/html&gt;</td></tr></tbody></table><p>5 .好了，重启Tomcat，启动浏览器，输入http://localhost:8080/myapp/TestBean.jsp 如果看到输出Java bean name is: This is a test <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> bean.就说明编写的Bean成功了。</p><p>这样就完成了整个Tomcat下的jsp、servlet和javabean的配置。接下来需要做的事情就是多看书、多读别人的好代码，自己多动手写代码以增强自己在这方面开发的能力了。</p><p>jvm应填写到<br />　c:\j2sdk\bin</p><p>给你一个简单的配置：：：：</p><p>JSP环境配置心得</p><p>首先要说的是，使用jdk+tomcat完全可以配置我们的jsp服务器，不再需要其实任何东东，有很多文章介绍了Apache，其实根本用不着，一般的学习调试tomcat完全可以胜任了。</p><p>安装jdk后，tomcat在安装之前会自动找到jdk的安装路径，一路点击"下一步"，经过一段时间的文件复制，最后"close"，完成comcat的安装。</p><p>您最好去下载一个版本较高的tomcat，比如4.1以上的，因为它不需要设置太多的系统变量，右击"我的电脑"，选择"属性"-&gt;"高级"-&gt;"环境变量"-&gt;"系统变量"，新建一个TOMCAT_HOME，值设置成你的tomcat所在的路径，比如：D:\Program Files\Apache Group\Tomcat 5.5，配置完成。</p><p>从开始菜单中找到tomcat选项，一般打开顺序是：开始-&gt;程序-&gt;Apache Tomcat 5.5，选择"Start Tomcat"，让jsp服务器开始运行，此时会打开一个类似Dos的窗口，会显示一些相关的信息。</p><p>如果您使用代理上网，一定要先撤掉代理，不然您的jsp程序永远也得不到执行。如果不是代理的，这一步就跳过了。</p><p>打开浏览器，在地址栏中输入：http://localhost:8080，如果看到有老虎（我也不知道是老虎还是猫）的画面，恭喜您，您成功了一半。</p><p>先来享受一下成功的喜悦吧，请输入下面的代码：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;First Page&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;H3&gt;Today is: h<br />&lt;%= new <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Date() %&gt;<br />&lt;/H3&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</td></tr></tbody></table><p>将该程序保存为:First.jsp，放到Tomcat的ROOT目录下，然后在浏览器的地址栏中输入：http://localhost:8080/First.jsp，(First.jsp跟我们保存的文件名的大小写要一致)回车，如果不出意外，应该可以看到形如Today is: h Fri Apr 11 08:32:38 CST 2003 的结果。</p><p>注意：ROOT是tomcat的默认虚拟目录，如果要改成自己的虚拟目录怎么办呢？请继续往下看吧。</p><p>要改成自己的虚拟目录，就要请出server.xml来了，该文件是一个配置文件，在Tomcat\conf目录下，使用任何文本编辑软件都能打开它，我们先找到下面一句：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;Connector className="org.apache.coyote.tomcat4.CoyoteConnector"<br />port="8080" minProcessors="5" maxProcessors="75"<br />enableLookups="true" redirectPort="8443"<br />acceptCount="100" debug="0" connectionTimeout="20000"<br />useURIValidationHack="false" disableUploadTimeout="true" /&gt;</td></tr></tbody></table><p>这里的port="8080"就是端口，我们完全可以用别的端口来代替，但不能是被系统占用的端口（0--1023），这里简单提一下。</p><p>下面我们再往下找，会发现以下的语句：</p><p>&lt;/Context&gt;<br />　&lt;/Host&gt;</p><p>我们就应该找到这两个语句，如果不懂E文，您就认定这两个语句好了。然后我们将该语句更改如下：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;/Context&gt;<br />&lt;Context path="/myjsp" debug="0" docBase="e:/myjsp" reloadable="true"&gt;<br />&lt;/Context&gt;<br />&lt;/Host&gt;</td></tr></tbody></table><p>这里的path="/myjsp"就是我们就配置的虚拟目录了，以后在地址栏中输入http://localhost:8080/myjsp即可。而docBase="e:/myjsp" 则是机器本地路径，他们通过这个语句形成一个映射关系，其它照抄。</p><p>将上面的First.jsp文件放到e:/myjsp目录下，输入http://localhost:8080/myjsp/First.jsp，是不是有一种喜上眉梢的感觉？</p><p>在论坛里我见得最多的就是很多人不知道javaBean文件放到哪里，老实说开始我也不知道，更令人不解的是，十个人有九种不同的说法，这更让我们茫然。其实这问题也不是我们想像的那么复杂，我们以一个例子说明：</p><p>先建立一个java程序，代码如下：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">package hall;<br />public class SimpleBean {<br />private String message = "No message specified";<br />public String getMessage() {<br />return(message);<br />}<br />public void setMessage(String message) {<br />this.message = message;<br />}<br />}</td></tr></tbody></table><p>保存为SimpleBean.java，编译后会生成一个包，其实就相当于一个目录，也就是SimpleBean.class会存放在hall目录中，暂且保存起来，将来备用。</p><p>再输入以下代码：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;HTML&gt;<br />&lt;HEAD&gt;<br />&lt;TITLE&gt;Reusing JavaBeans in JSP&lt;/TITLE&gt;<br />&lt;/HEAD&gt;<br />&lt;BODY&gt;<br />&lt;CENTER&gt;<br />&lt;TABLE BORDER=5&gt;<br />&lt;TR&gt;&lt;TH CLASS="TITLE"&gt;<br />Reusing JavaBeans in JSP&lt;/TABLE&gt;<br />&lt;/CENTER&gt;<br />&lt;P&gt;<br />&lt;jsp:useBean id="test" class="hall.SimpleBean" /&gt;<br />&lt;jsp:setProperty name="test" property="message" value="Hello WWW" /&gt;<br />&lt;H1&gt;Message: &lt;I&gt;<br />&lt;jsp:getProperty name="test" property="message" /&gt;<br />&lt;/I&gt;&lt;/H1&gt;<br />&lt;/BODY&gt;</td></tr></tbody></table><p>保存在我们刚才建立的虚拟目录e:/myjsp下面，并命名为：BeanTest.jsp。</p><p>现在我们应该将hall（包）目录放在哪儿呢？别急，我们先在e:/myjsp下建立一个文件夹WEB-INF，然后再在WEB-INF下建立一个classes文件夹，最后将hall目录放到classes下，当然，hall下的字节码文件SimpleBean.class也一并要移过来，而SimpleBean.java就和BeanTest.jsp放到同一目录吧（可以不需要放的，自己试试）。</p><p>重新启动机器（如果您试了好多次都不行，这一步一定要做），在浏览器中输入：http://localhost:8080/myjsp/BeanTest.jsp，您看到了什么？呵，别告诉我您什么都没看到，那肯定是您设置的问题了。</p><p>Java学习 - 技术文章中心</p><p>初学者问的诸如：《怎样配置环境变量》《怎样运行Servlet》啊？这样的问题太多了，现在我写一个初学者入门必读，以便对初学者有指导作用！</p><p>首先是下载工具：</p><p>我建议初学者用Editplus＋JDK，我觉得如果用例如JB，Eclipse，JCreator，虽然刚开始的时候比较方便，但是确使初学者门不知道怎样配置环境变量，</p><p>从而难以达到知其然，知其所以然的地步</p><p>可以通过如下地址下载：</p><p>Editplus(最新版本是v2.11)：http://count.skycn.com/softdown.php?id=3641&amp;url=http://sc-http.skycn.net/down/epp211a_cn.exe(要照注册码就自己找吧，网上很多的）</p><p>JDK(最新版本是Java2sdk1_5_0)：http://192.18.97.54/ECom/EComTicketServlet/BEGIN30AA3B63E5C2F61C8C26F84B78970A98/-2147483648/926882595/1/627578/627410/926882595/2ts+/westCoastFSEND/jdk-1.5.0_04-oth-JPR/jdk-1.5.0_04-oth-JPR:3/jdk-1_5_0_04-windows-i586-p.exe（这是For Windows）</p><p>然后就是安装JDK，我是把它装到从c:\JDK目录下面：</p><p>然后就是CLASSPATH的问题了：</p><p>正如操作系统利用PATH来搜索可执行程序一样，Java运行环境也会遍历CLASSPATH来查找类，即便是HelloWorld这样简单的程序，JVM也会遍历</p><p>CLASSPATH定义的每一个路径，直到找到相应的文件为止。</p><p>相信大家用的系统不是2k就是XP，然后就应当如下设置Path：</p><p>我的电脑-&gt;属性-&gt;高级-&gt;环境变量</p><p>然后在环境变量的Path后面追加: C:\JDK\bin;.;C:\JDK\lib</p><p>也可以这样配置:C:\JDK\bin;.;C:\JDK\lib\dt.jar;C:\JDK\lib\tools.jar</p><p>★记住:环境变量中的 . 切记不能少，它表示当前路径，如果少掉出现的错误等会就说！</p><p>dt.jar是关于运行环境的类库，tools.jar是关于一些工具的类库</p><p>如果没有配置:C:\JDK\bin，则会出现 " javac&#8242; 不是内部或外部命令，也不是可运行的程序或批处理文件。"这样的错误。</p><p>然后下面就该写程序了：</p><p>首先是(HelloWorld.java),打开Editplus，新建一个Java文件，请照着如下输入，要一字不漏，并且分清大小写：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">public class HelloWorld{<br />public static void main(String[] args){<br />System.out.println("Hello,World!");<br />}<br />}</td></tr></tbody></table><p>然后把这个文件保存(ctrl + s)到HelloWorld.java,记住大小写一定要分清，是HelloWorld.java不是helloworld.java或者其它的</p><p>下面就该运行了，开始-&gt;运行-&gt;cmd</p><p>在控制台中把目录切换到当前目录：</p><p>javac HelloWorld.java<br />　<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> HelloWorld</p><p>你就会在控制台上看见输出的Hello,World!(没出来？我把电脑吃了：）)</p><p>javac是编译命令，它把HelloWorld.java编译成HelloWorld.class</p><p>java就是解释命令，JVM把HelloWorld.class解释执行.</p><p>在这个时候：</p><p>1。如果出现Exception in thread "main" <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.NoClassDefFoundError: HelloWorld</p><p>那就是你在环境变量中没有加上那个.(dot)</p><p>2。如果出现Exception in thread "main" <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.NoSuchMethodError: main</p><p>或者HelloWorld.java:1: Public class helloworld must be defined in a file called</p><p>"HelloWorld.java".</p><p>那就是你没有分清大小写的写入这个HelloWorld，或者保存得时候没有保存为HelloWorld.java</p><p>这个名字一定要跟public class的名字一样</p><p>对于环境变量的问题就说到这里，下面我先所说怎么在Editplus里面编译和运行，在Tools－&gt;参数设置-&gt;配置用户工具</p><p>1.添加工具（添加应用程序）</p><p>菜单文字：Compile <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> Program</p><p>程序：C:\JDK\bin\javac.exe</p><p>参数：文件名称</p><p>初始目录：文件目录</p><p>2.添加工具（添加应用程序）</p><p>菜单文字：Run <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> Program</p><p>程序：C:\JDK\bin\java.exe</p><p>参数：文件名称（不含扩展名）</p><p>初始目录：文件目录</p><p>工具组名称可以随便添，比如Debug <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> Program</p><p>然后在Tools的下拉菜单中，你就会看见Compile <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> Program以及Run <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> Program这两个选项，以后你就可以利用ctrl + 1编译和ctrl ＋2运行程序了</p><p>下面就讨论Servlet的运行：</p><p>首先要运行Servlet，则需要JSP/Servlet container，我建议初学者用Tomcat</p><p>Tomcat（最新版本5.5）：http://apache.justdn.org/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9.exe然后把这个压缩包解压到：</p><p>C:\Tomcat</p><p>然后再配置环境变量：</p><p>添加三个系统变量：</p><p>JAVA_HOME: C:\JDK<br />　TOMCAT_HOME: C:\Tomcat<br />　CLASSPATH: %JAVA_HOME%\lib;%TOMCAT_HOME%\lib</p><p>Tomcat的环境变量就配置完毕了，下面检验Tomcat是否能够运行：</p><p>在控制台中转到C:\Tomcat\bin这个目录，运行startup，然后回出现一个窗口，连跳一大串东西，最后表示Server已经运行</p><p>在浏览器中输入http://localhost:8080，出现欢迎界面，则表示Tomcat没问题了</p><p>然后和上面一样，写入你的第一个Servlet</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc"><p>import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br />public class HelloWorld extends HttpServlet<br />{<br />public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException<br />{<br />response.setContentType("text/html");<br />PrintWriter out = response.getWriter();<br />out.println("&lt;html&gt;&lt;head&gt;&lt;title&gt;");<br />out.println("This is my first Servlet");<br />out.println("&lt;/title&gt;&lt;/head&gt;&lt;body&gt;");<br />out.println("&lt;h1&gt;Hello,World!&lt;/h1&gt;");<br />out.println("&lt;/body&gt;&lt;/html&gt;");</p><p>}<br />}</p></td></tr></tbody></table><p>然后照样用javac HelloWorld.java来编译这个文件，如果出现无法import javax.servlet.*</p><p>那么就是应该把C:\Tomcat\common\lib里面的servlet.jar（根据实际来看）文件拷贝到C:\JDK\jre\lib\ext中，再次编译，就没有问题了！</p><p>然后在Tomcat目录里面的C:\Tomcat\webapps\ROOT里面按如下的文件结构：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">ROOT\index.html<br />ROOT\welcom.jsp<br />ROOT\WEB-INF\lib\MyServlet.jar（如果你的servlet的.class打成了.jar文件，则放在lib下面)<br />ROOT\WEB-INF\classes\HelloWorld.class(把上面生成的HelloWorld.class文件放在这个里面)</td></tr></tbody></table><p>然后在浏览器中输入http://localhost:8080/servlet/HelloWorld,于是Server众望所归的报错了:Error 404--Not Found</p><p>怎么回事呢？</p><p>Servlet必须使用C:\Tomcat\webapps\ROOT\WEB-INF这个目录下面的web.xml文件进行注册，用EP打开这个web.xml文件，在里面加入</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;servlet&gt;<br />&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;HelloWorld&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/servlet/helloworld&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;</td></tr></tbody></table><p>这样的结构</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;servlet&gt;<br />&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;HelloWorld&lt;/servlet-class&gt;<br />&lt;/servlet&gt;</td></tr></tbody></table><p>表示指定包含的servlet类.而以下的结构</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/servlet/HelloWorld&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;</td></tr></tbody></table><p>表示指定HelloServlet应当映射到哪一种URL模式。</p><p>在修改web.xml完毕过后，重新启动Server，然后再输入http://localhost:8080/servlet/HelloWorld，那么偌大一个Hello,World!等着你呢。</p></td></tr></tbody></table></td></tr></tbody></table><img src ="http://www.blogjava.net/rain1102/aggbug/82663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2006-11-22 09:02 <a href="http://www.blogjava.net/rain1102/archive/2006/11/22/82663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IllegalStateException: getOutputStream() 异常的解决方案</title><link>http://www.blogjava.net/rain1102/archive/2006/11/20/82291.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Mon, 20 Nov 2006 07:37:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2006/11/20/82291.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/82291.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2006/11/20/82291.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/82291.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/82291.html</trackback:ping><description><![CDATA[<div>在写JSP程序的时候，如果程序中调用了response.getOutputStream()去向客户端输出文件等数据流,容器就会抛出这样的异常：<br /><a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.IllegalStateException: getOutputStream() has already been called for this response<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.catalina.connector.Response.getWriter(Response.java:596)<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:186)<br />产生这样的异常原因是web容器生成的servlet代码中有out.write(""),这个和JSP中调用的response.getOutputStream()产生冲突，<br />下面是web容器生成的部分servlet代码：<br />&#160;&#160;&#160;&#160;&#160; out = pageContext.getOut();<br />&#160;&#160;&#160;&#160;&#160; _jspx_out = out;</div>
		<div>&#160;&#160;&#160;&#160;&#160; out.write("\r\n");<br />&#160;&#160;&#160;&#160;&#160; out.write("\r\n");<br />解决的方法有两步：1、如果JSP中有<br />&lt;%@ page import ... %&gt;<br />&lt;%@ page import ... %&gt;<br />这样的代码，则改为：<br />&lt;%@ page import ... %&gt;&lt;%<br />%&gt;&lt;%@ page import ... %&gt;&lt;%<br />%&gt;&lt;%<br />// ...getOutputStream()...<br />%&gt;<br />改完后生成的servlet代码：<br />&#160;&#160;&#160;&#160;&#160; out = pageContext.getOut();<br />&#160;&#160;&#160;&#160;&#160; _jspx_out = out;</div>
		<div>&#160;&#160;&#160;&#160;&#160; //out.write("\r\n");这个将被去掉<br />&#160;&#160;&#160;&#160;&#160; //out.write("\r\n");这个将被去掉<br />2、如果第一步改完还是有异常，则在程序的最后添加：<br />out.clear(); <br />out = pageContext.pushBody(); <br />就可以解决了。</div><img src ="http://www.blogjava.net/rain1102/aggbug/82291.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2006-11-20 15:37 <a href="http://www.blogjava.net/rain1102/archive/2006/11/20/82291.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>"Unterminated &amp;lt;%= tag"问题</title><link>http://www.blogjava.net/rain1102/archive/2006/11/02/78712.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Thu, 02 Nov 2006 07:53:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2006/11/02/78712.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/78712.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2006/11/02/78712.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/78712.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/78712.html</trackback:ping><description><![CDATA[今天突然遇到了&#8220;Unterminated &amp;lt;%= tag&#8221;错误，经检查，原来是jsp页面被人修改了。其中的"&lt;%"和"%&gt;"不匹配了，所以会产生&#8220;Unterminated &amp;lt;%= tag&#8221;错误！<img src ="http://www.blogjava.net/rain1102/aggbug/78712.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2006-11-02 15:53 <a href="http://www.blogjava.net/rain1102/archive/2006/11/02/78712.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用JSP下载word文件（不会直接用IE打开）</title><link>http://www.blogjava.net/rain1102/archive/2006/10/18/75885.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Wed, 18 Oct 2006 05:37:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2006/10/18/75885.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/75885.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2006/10/18/75885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/75885.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/75885.html</trackback:ping><description><![CDATA[<p>&lt;<a href="mailto:%@page">%@page</a> import="<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.*"%&gt;<br />&lt;<a href="mailto:%@page">%@page</a> import="<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.*"%&gt;<br />&lt;<a href="mailto:%@page">%@page</a> import="<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.net.*"%&gt;<br />&lt;%<br />&#160;&#160;&#160; String filename = "";<br />&#160;&#160;&#160; if (request.getParameter("file") != null) {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; filename =&#160;&#160;&#160;&#160; request.getParameter("file");<br />&#160;&#160;&#160; }<br />&#160;&#160;&#160; response.setContentType("application/msword");<br />&#160;&#160;&#160; response.setHeader("Content-disposition","attachment; filename="+filename);<br />&#160;&#160;&#160; <br />&#160;&#160;&#160; BufferedInputStream bis = null;<br />&#160;&#160;&#160; BufferedOutputStream bos = null;<br />&#160;&#160;&#160; try {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; bis = new BufferedInputStream(new FileInputStream(getServletContext().getRealPath("" + filename)));<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; bos = new BufferedOutputStream(response.getOutputStream());</p>
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; byte[] buff = new byte[2048];<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; int bytesRead;</p>
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; bos.write(buff,0,bytesRead);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
		<p>&#160;&#160;&#160; } catch(final IOException e) {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println ( "出现IOException." + e );<br />&#160;&#160;&#160; } finally {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (bis != null)<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; bis.close();<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (bos != null)<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; bos.close();<br />&#160;&#160;&#160; }<br />&#160;&#160;&#160; return;<br />%&gt;<br /></p><img src ="http://www.blogjava.net/rain1102/aggbug/75885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2006-10-18 13:37 <a href="http://www.blogjava.net/rain1102/archive/2006/10/18/75885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP状态代码</title><link>http://www.blogjava.net/rain1102/archive/2006/09/28/72432.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Thu, 28 Sep 2006 00:19:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2006/09/28/72432.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/72432.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2006/09/28/72432.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/72432.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/72432.html</trackback:ping><description><![CDATA[<table bordercolor="#99ccff" cellpadding="2" width="100%" border="1">
				<tbody>
						<tr>
								<td align="middle" width="15%" bgcolor="#3366cc" height="30">
										<font color="#ffffff">
												<b>状态代码</b>
										</font>
								</td>
								<td align="middle" width="30%" bgcolor="#3366cc">
										<font color="#ffffff">
												<b>状态信息</b>
										</font>
								</td>
								<td align="middle" width="55%" bgcolor="#3366cc">
										<font color="#ffffff">
												<b>代码含义</b>
										</font>
								</td>
						</tr>
						<tr>
								<td height="20">100</td>
								<td>Continue</td>
								<td>初始的请求已经接受，客户应当继续发送请求的其余部分。</td>
						</tr>
						<tr>
								<td height="20">101</td>
								<td>Switching Protocols</td>
								<td>服务器将遵从客户的请求转换到另外一种协议</td>
						</tr>
						<tr>
								<td height="20">200</td>
								<td>OK</td>
								<td>一切正常，对GET和POST请求的应答文档跟在后面。</td>
						</tr>
						<tr>
								<td height="20">201</td>
								<td>Created</td>
								<td>服务器已经创建了文档，Location头给出了它的URL。</td>
						</tr>
						<tr>
								<td height="20">202</td>
								<td>Accepted</td>
								<td>已经接受请求，但处理尚未完成。</td>
						</tr>
						<tr>
								<td height="20">203</td>
								<td>Non-Authoritative Information</td>
								<td>文档已经正常地返回，但一些应答头可能不正确，因为使用的是文档的拷贝 </td>
						</tr>
						<tr>
								<td height="20">204</td>
								<td>No Content</td>
								<td>没有新文档，浏览器应该继续显示原来的文档。如果用户定期地刷新页面，而Servlet可以确定用户文档足够新，这个状态代码是很有用的。</td>
						</tr>
						<tr>
								<td height="20">205</td>
								<td>Reset Content</td>
								<td>没有新的内容，但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容 </td>
						</tr>
						<tr>
								<td height="20">206</td>
								<td>Partial Content</td>
								<td>客户发送了一个带有Range头的GET请求，服务器完成了它。</td>
						</tr>
						<tr>
								<td height="20">300</td>
								<td>Multiple Choices</td>
								<td>客户请求的文档可以在多个位置找到，这些位置已经在返回的文档内列出。如果服务器要提出优先选择，则应该在Location应答头指明。</td>
						</tr>
						<tr>
								<td height="20">301</td>
								<td>Moved Permanently</td>
								<td>客户请求的文档在其他地方，新的URL在Location头中给出，浏览器应该自动地访问新的URL。</td>
						</tr>
						<tr>
								<td height="20">302</td>
								<td>Found</td>
								<td>类似于301，但新的URL应该被视为临时性的替代，而不是永久性的。注意，在HTTP1.0中对应的状态信息是&#8220;Moved</td>
						</tr>
						<tr>
								<td height="20">303</td>
								<td>See Other</td>
								<td>类似于301/302，不同之处在于，如果原来的请求是POST，Location头指定的重定向目标文档应该通过GET提取 </td>
						</tr>
						<tr>
								<td height="20">304</td>
								<td>Not Modified</td>
								<td>客户端有缓冲的文档并发出了一个条件性的请求（一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档）。服务器告诉客户，原来缓冲的文档还可以继续使用。</td>
						</tr>
						<tr>
								<td height="20">305</td>
								<td>Use Proxy</td>
								<td>客户请求的文档应该通过Location头所指明的代理服务器提取 </td>
						</tr>
						<tr>
								<td height="20">307</td>
								<td>Temporary Redirect</td>
								<td>和302（Found）相同。许多浏览器会错误地响应302应答进行重定向，即使原来的请求是POST，即使它实际上只能在POST请求的应答是303时才能重定向。由于这个原因，HTTP 1.1新增了307，以便更加清除地区分几个状态代码：当出现303应答时，浏览器可以跟随重定向的GET和POST请求；如果是307应答，则浏览器只能跟随对GET请求的重定向。</td>
						</tr>
						<tr>
								<td height="20">400</td>
								<td>Bad Request</td>
								<td>请求出现语法错误。</td>
						</tr>
						<tr>
								<td height="20">401</td>
								<td>Unauthorized</td>
								<td>客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头，浏览器据此显示用户名字/密码对话框，然后在填写合适的Authorization头后再次发出请求。</td>
						</tr>
						<tr>
								<td height="20">403</td>
								<td>Forbidden</td>
								<td>资源不可用。服务器理解客户的请求，但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。</td>
						</tr>
						<tr>
								<td height="20">404</td>
								<td>Not Found</td>
								<td>无法找到指定位置的资源。这也是一个常用的应答。</td>
						</tr>
						<tr>
								<td height="20">405</td>
								<td>Method Not Allowed</td>
								<td>请求方法（GET、POST、HEAD、DELETE、PUT、TRACE等）对指定的资源不适用。</td>
						</tr>
						<tr>
								<td height="20">406</td>
								<td>Not Acceptable</td>
								<td>指定的资源已经找到，但它的MIME类型和客户在Accpet头中所指定的不兼容 </td>
						</tr>
						<tr>
								<td height="20">407</td>
								<td>Proxy</td>
								<td>类似于401，表示客户必须先经过代理服务器的授权。</td>
						</tr>
						<tr>
								<td height="20">408</td>
								<td>Request Timeout</td>
								<td>在服务器许可的等待时间内，客户一直没有发出任何请求。客户可以在以后重复同一请求。</td>
						</tr>
						<tr>
								<td height="20">409</td>
								<td>Conflict</td>
								<td>通常和PUT请求有关。由于请求和资源的当前状态相冲突，因此请求不能成功。</td>
						</tr>
						<tr>
								<td height="20">410</td>
								<td>Gone</td>
								<td>所请求的文档已经不再可用，而且服务器不知道应该重定向到哪一个地址。它和404的不同在于，返回407表示文档永久地离开了指定的位置，而404表示由于未知的原因文档不可用。</td>
						</tr>
						<tr>
								<td height="20">411</td>
								<td>Length Require</td>
								<td>服务器不能处理请求，除非客户发送一个Content-Length头。</td>
						</tr>
						<tr>
								<td height="20">412</td>
								<td>Precondition Failed</td>
								<td>请求头中指定的一些前提条件失败 </td>
						</tr>
						<tr>
								<td height="20">413</td>
								<td>Request Entity Too Large</td>
								<td>目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求，则应该提供一个Retry-After头 </td>
						</tr>
						<tr>
								<td height="20">414</td>
								<td>Request URI Too Long</td>
								<td>URI太长 。</td>
						</tr>
						<tr>
								<td height="20">416</td>
								<td>Requested Range Not Satisfiable</td>
								<td>服务器不能满足客户在请求中指定的Range头。</td>
						</tr>
						<tr>
								<td height="20">500</td>
								<td>Internal Server Error</td>
								<td>服务器遇到了意料不到的情况，不能完成客户的请求。</td>
						</tr>
						<tr>
								<td height="20">501</td>
								<td>Not Implemented</td>
								<td>服务器不支持实现请求所需要的功能。例如，客户发出了一个服务器不支持的PUT请求。</td>
						</tr>
						<tr>
								<td height="20">502</td>
								<td>Bad Gateway</td>
								<td>服务器作为网关或者代理时，为了完成请求访问下一个服务器，但该服务器返回了非法的应答。</td>
						</tr>
						<tr>
								<td height="20">503</td>
								<td>Service Unavailable</td>
								<td>服务器由于维护或者负载过重未能应答。例如，Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头。</td>
						</tr>
						<tr>
								<td height="20">504</td>
								<td>Gateway Timeout</td>
								<td>由作为代理或网关的服务器使用，表示不能及时地从远程服务器获得应答。</td>
						</tr>
						<tr>
								<td height="20">505</td>
								<td>HTTP Version Not Supported</td>
								<td>服务器不支持请求中所指明的HTTP版本。</td>
						</tr>
				</tbody>
		</table><img src ="http://www.blogjava.net/rain1102/aggbug/72432.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2006-09-28 08:19 <a href="http://www.blogjava.net/rain1102/archive/2006/09/28/72432.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL教程</title><link>http://www.blogjava.net/rain1102/archive/2006/09/06/68063.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Wed, 06 Sep 2006 08:49:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2006/09/06/68063.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/68063.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2006/09/06/68063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/68063.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/68063.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JSP 				标准标记库（				JSP Standard Tag Library				，				JSTL				）是一个实现				Web 				应用程序中常见的通用功能的定制标记库集，这些功能包括迭代和条件判断、数据管理格式化、				XML 				操作以及数据库访问。在				developerWorks 				上其新系列的第一篇文章中，...&nbsp;&nbsp;<a href='http://www.blogjava.net/rain1102/archive/2006/09/06/68063.html'>阅读全文</a><img src ="http://www.blogjava.net/rain1102/aggbug/68063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2006-09-06 16:49 <a href="http://www.blogjava.net/rain1102/archive/2006/09/06/68063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>两个相联下拉框</title><link>http://www.blogjava.net/rain1102/archive/2006/09/04/67635.html</link><dc:creator>周锐</dc:creator><author>周锐</author><pubDate>Mon, 04 Sep 2006 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2006/09/04/67635.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/67635.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2006/09/04/67635.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/67635.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/67635.html</trackback:ping><description><![CDATA[<p>&lt;script language="javascript"&gt;<br />&#160;function onchange_kind1(value)<br />&#160;{<br />&#160;&#160; document.frames["frmcontent"].location.replace("kind.jsp?id="+value);<br />&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160; //document.frames[0].href="kind.jsp?id="+value;<br />&#160;&#160; //document.form1.kind.value = value;<br />&#160;&#160; <br />&#160;}<br />&lt;/script&gt;</p>
		<p>
				<br />&lt;select name="kind1" id="kind1" onChange="onchange_kind1(this.value);"&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;%<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Vector myvector=null;<br />&#160;&#160;&#160;&#160;&#160; myvector=kind1info.selectInfor();<br />&#160;&#160;&#160;&#160;&#160; for(int i=0;i&lt;myvector.size();i++)<br />&#160;&#160;&#160;&#160;&#160; { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; kind1id=((kind1Unit)myvector.elementAt(i)).getID();<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; kindname1=((kind1Unit)myvector.elementAt(i)).getKindName1();<br />&#160;&#160;&#160;&#160;&#160; %&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;option value="&lt;%=kind1id%&gt;"&gt;&lt;%=kindname1%&gt;&lt;/option&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;%<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }//循环结束<br />&#160;&#160;&#160;&#160;&#160; %&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/select&gt;&lt;/td&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;td width="81%"&gt;&lt;div id="divKind" name="divKind"&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;select name="kind2" id="kind2"&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/select&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/div&gt;</p>
		<p>&lt;iframe id="frmcontent" name="frmcontent" width="400" height="40" src=""&gt;&lt;/iframe&gt; </p>
		<p>&#160;</p>
		<p>
				<br />第二页面<br />&lt;div id="divKind" name="divKind"&gt;<br />&lt;select name="kind2" id="kind2" &gt;<br />&#160;&#160;&#160;&#160;&#160; &lt;%<br />&#160;&#160;Vector myvector=null;<br />&#160;&#160;myvector=kind2info.selectInfor(kind1id);<br />&#160;&#160;for(int i=0;i&lt;myvector.size();i++)<br />&#160;&#160;&#160;&#160; { <br />&#160;&#160; kind2id=((kind2Unit)myvector.elementAt(i)).getID();<br />&#160;&#160; kindname2=((kind2Unit)myvector.elementAt(i)).getKindName2();<br />&#160; %&gt;<br />&#160; &lt;option value="&lt;%=kind2id%&gt;"&gt;&lt;%=kindname2%&gt;&lt;/option&gt;<br />&#160;&#160;&#160; &lt;%<br />&#160;&#160;&#160; }//循环结束<br />&#160;&#160;&#160; %&gt;<br />&lt;/select&gt;<br />&lt;/div&gt;</p>
		<p>&lt;script language="javascript"&gt;<br />&#160; function getItem()<br />&#160; {<br />&#160;&#160;&#160; //alert(document.form1.kind2.innerHTML);<br />&#160;//alert(parent.document.form1.kind2.innerHTML);<br />&#160;&#160;&#160; parent.document.all.divKind.innerHTML = document.all.divKind.innerHTML;<br />&#160;//alert(parent.document.form1.kind2.innerHTML);&#160;<br />&#160;//.innerText<br />&#160; }<br />&#160; getItem();<br />&lt;/script&gt;<br /></p><img src ="http://www.blogjava.net/rain1102/aggbug/67635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">周锐</a> 2006-09-04 17:11 <a href="http://www.blogjava.net/rain1102/archive/2006/09/04/67635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>