﻿<?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;h3 style="font-family: Comic Sans MS"&gt;&lt;font color="#FA1A0A" size="10"&gt;︻┳═一Java&lt;/font&gt;&lt;/h3&gt;-文章分类-Jsp</title><link>http://www.blogjava.net/rain1102/category/14856.html</link><description>&lt;b&gt;&lt;font color="#3C1435"&gt;08年奋斗目标：&lt;/font&gt;&lt;font color="#F70E0A"&gt;赚钱买个房子！&lt;/font&gt;&lt;/b&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 13 May 2008 10:55:33 GMT</lastBuildDate><pubDate>Tue, 13 May 2008 10:55:33 GMT</pubDate><ttl>60</ttl><item><title>如何在JSTL1.0中实现substring功能？(转)</title><link>http://www.blogjava.net/rain1102/articles/200197.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 13 May 2008 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/200197.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/200197.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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">Eric.Zhou</a> 2008-05-13 14:21 <a href="http://www.blogjava.net/rain1102/articles/200197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax jsp 无刷新上传文件</title><link>http://www.blogjava.net/rain1102/articles/187170.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 19 Mar 2008 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/187170.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/187170.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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">Eric.Zhou</a> 2008-03-19 10:23 <a href="http://www.blogjava.net/rain1102/articles/187170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL字符串处理函数 </title><link>http://www.blogjava.net/rain1102/articles/183523.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 03 Mar 2008 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/183523.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/183523.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/183523.html#Feedback</comments><slash:comments>0</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">Eric.Zhou</a> 2008-03-03 17:29 <a href="http://www.blogjava.net/rain1102/articles/183523.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2SE API读取Properties文件六种方法(转载)</title><link>http://www.blogjava.net/rain1102/articles/174544.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 11 Jan 2008 03:06:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/174544.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/174544.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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">Eric.Zhou</a> 2008-01-11 11:06 <a href="http://www.blogjava.net/rain1102/articles/174544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在dwr的回调函数中传递多个参数</title><link>http://www.blogjava.net/rain1102/articles/171357.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 28 Dec 2007 15:42:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/171357.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/171357.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/171357.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/171357.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/171357.html</trackback:ping><description><![CDATA[function selectCountry(countryId) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var num = countryId.indexOf("Country");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var prefix = countryId.substr(0,num);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var countryId = document.getElementById(countryId).value;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loveService.getProvincesByCountry(countryId, function(data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000">callBackProvices(data,<span style="color: #ff0000">prefix</span>);<br />
</span>&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;resetProvince(prefix+"Province");<br />
&nbsp;&nbsp;&nbsp;resetCity(prefix+"City");<br />
&nbsp;&nbsp;}<br />
&nbsp;<br />
&nbsp;&nbsp;function <span style="color: #ff0000">callBackProvices(data, prefix)</span> {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var provinceId = prefix+'Province';<br />
&nbsp;&nbsp;&nbsp;DWRUtil.removeAllOptions(provinceId);<br />
&nbsp;&nbsp;&nbsp;DWRUtil.addOptions(provinceId, arrayObject, 'value', 'name');<br />
&nbsp;&nbsp;&nbsp;DWRUtil.addOptions(provinceId, data);<br />
&nbsp;&nbsp;}
<p>&nbsp;</p><img src ="http://www.blogjava.net/rain1102/aggbug/171357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-12-28 23:42 <a href="http://www.blogjava.net/rain1102/articles/171357.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SimpleTag的开发</title><link>http://www.blogjava.net/rain1102/articles/95362.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 22 Jan 2007 08:24:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/95362.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/95362.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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">Eric.Zhou</a> 2007-01-22 16:24 <a href="http://www.blogjava.net/rain1102/articles/95362.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发迭代的标签库</title><link>http://www.blogjava.net/rain1102/articles/95358.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 22 Jan 2007 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/95358.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/95358.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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> private String name;  //代表了在pageContext中表示的一个属性的名字<br /> private Iterator it;     //代表要迭代的内容<br /> private String type;  //表示it中对象的类型<br /> <br /> public void setCollection(Collection collection){<br />  if(collection.size()&gt;0){<br />   it=collection.iterator();<br />  }<br /> }<br /> <br /> public void setName(String name){<br />  this.name=name;<br /> }<br /> <br /> public void setType(String type){<br />  this.type=type;<br /> }</p>
		<p> @Override<br /> public int doAfterBody() throws JspException {<br />  // TODO Auto-generated method stub<br />  return continueNext(it);<br /> }</p>
		<p> @Override<br /> public int doEndTag() throws JspException {<br />  // TODO Auto-generated method stub<br />  try{<br />   if(bodyContent!=null){<br />    bodyContent.writeOut(bodyContent.getEnclosingWriter());<br />   }<br />  }catch(IOException e){<br />   throw new JspTagException("IO Error:"+e.getMessage());<br />  }<br />  return EVAL_PAGE;<br /> }</p>
		<p> @Override<br /> public int doStartTag() throws JspException {<br />  // TODO Auto-generated method stub<br />  if(it==null){<br />   return SKIP_BODY;<br />  }else{<br />   return continueNext(it);<br />  }<br /> }<br /> <br /> protected int continueNext(Iterator it)throws JspTagException{<br />  if(it.hasNext()){<br />   pageContext.setAttribute(name, it.next(), PageContext.PAGE_SCOPE);<br />   return EVAL_BODY_AGAIN;<br />  }else{<br />   return SKIP_BODY;<br />  }<br /> }<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> public IterateTEI(){<br />  super();<br /> }</p>
		<p> @Override<br /> public VariableInfo[] getVariableInfo(TagData arg0) {<br />  // TODO Auto-generated method stub<br />  return new VariableInfo[]{<br />    new VariableInfo(arg0.getAttributeString("name"),<br />                     arg0.getAttributeString("type"),<br />                     true,<br />                     VariableInfo.NESTED)<br />  };<br /> }<br />}<br />需要说明的是VariableInfo的几个常数，如下所示：<br />1.NESTED：标签中的参数在starttag到endtag之间是有效的。<br />2.AT_BENGIN：标签中的参数在标签的开始到JSP页面结束是有效的。<br />3.AT_END：标签中的参数在标签的结束到JSP页面结束是有效的。<br /></p>
		<hr />
		<p>在标签的描述中，必须同时指定标签的实现类和IterateTEI类。<br />       &lt;tag&gt;<br />          &lt;name&gt;iterate&lt;/name&gt;<br />            <font color="#006400">&lt;tag-class&gt;com.rain.tag.IterateTag&lt;/tag-class&gt;<br />            &lt;tei-class&gt;com.rain.tag.IterateTEI&lt;/tei-class&gt;<br /></font>          &lt;body-content&gt;jsp&lt;/body-content&gt;<br />          &lt;attribute&gt;<br />            &lt;name&gt;collection&lt;/name&gt;<br />            &lt;required&gt;true&lt;/required&gt;<br />            &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;<br />          &lt;/attribute&gt;<br />          &lt;attribute&gt;<br />            &lt;name&gt;name&lt;/name&gt;<br />            &lt;required&gt;true&lt;/required&gt;<br />          &lt;/attribute&gt;<br />          &lt;attribute&gt;<br />            &lt;name&gt;type&lt;/name&gt;<br />            &lt;required&gt;true&lt;/required&gt;<br />          &lt;/attribute&gt;<br />      &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 /> &lt;taglib&gt;<br />   &lt;taglib-uri&gt;/demotag&lt;/taglib-uri&gt;<br />   &lt;taglib-location&gt;/WEB-INF/mytag.tld&lt;/taglib-location&gt;<br /> &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 /> String one="one";<br /> String two="two";<br /> String three="three";<br /> Collection list=new <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.ArrayList();<br /> list.add(one);<br /> list.add(two);<br /> list.add(three);<br />%&gt;<br />&lt;mt:iterate name="scott" type="String" collection="&lt;%=list%&gt;"&gt;<br />  &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">Eric.Zhou</a> 2007-01-22 16:15 <a href="http://www.blogjava.net/rain1102/articles/95358.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多个标签的嵌套</title><link>http://www.blogjava.net/rain1102/articles/95350.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 22 Jan 2007 07:27:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/95350.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/95350.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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 /> * if tag<br /> * usage:&lt;tag:if value=true&gt;<br /> *       ...<br /> *       &lt;/tag:if&gt;<br /> */<br />public class IfTag extends BodyTagSupport {</p>
		<p> private boolean value;<br /> <br /> public void setValue(boolean value){<br />  this.value=value;<br /> }</p>
		<p> @Override<br /> public int doEndTag() throws JspException {<br />  // TODO Auto-generated method stub<br />  try{<br />   if(bodyContent!=null){<br />    bodyContent.writeOut(bodyContent.getEnclosingWriter());<br />   }<br />  }catch(IOException e){<br />   throw new JspTagException("IO Error:"+e.getMessage());<br />  }<br />  return EVAL_PAGE;<br /> }</p>
		<p> @Override<br /> public int doStartTag() throws JspException {<br />  // TODO Auto-generated method stub<br />  if(value){<br />   System.out.println("value is true");<br />   return EVAL_BODY_INCLUDE;<br />  }else{<br />   System.out.println("value is false");<br />   return SKIP_BODY;<br />  }<br /> }<br /> <br /> <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> private Object value;<br /> <br /> public void setValue(Object value){<br />  this.value=value;<br /> }</p><p> @Override<br /> public int doEndTag() throws JspException {<br />  // TODO Auto-generated method stub<br />  return EVAL_BODY_INCLUDE;<br /> }</p><p> @Override<br /> public int doStartTag() throws JspException {<br />  // TODO Auto-generated method stub<br />  try{<br />   System.out.println(value);<br />   pageContext.getOut().write(value.toString());<br />  }catch(IOException e){<br />   throw new JspTagException("IO Error:"+e.getMessage());<br />  }<br />  return EVAL_PAGE;<br /> }<br /> <br /> <br />}<br /></p><hr /><br />&lt;tag&gt;<br />          &lt;name&gt;if&lt;/name&gt;<br />          &lt;tag-class&gt;com.rain.tag.IfTag&lt;/tag-class&gt;<br />          &lt;body-content&gt;jsp&lt;/body-content&gt;<br />          &lt;attribute&gt;<br />            &lt;name&gt;value&lt;/name&gt;<br />            &lt;required&gt;true&lt;/required&gt;<br />            &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;<br />          &lt;/attribute&gt;<br />        &lt;/tag&gt;<br />        &lt;tag&gt;<br />          &lt;name&gt;out&lt;/name&gt;<br />          &lt;tag-class&gt;com.rain.tag.OutTag&lt;/tag-class&gt;<br />          &lt;body-content&gt;jsp&lt;/body-content&gt;<br />          &lt;attribute&gt;<br />            &lt;name&gt;value&lt;/name&gt;<br />            &lt;required&gt;true&lt;/required&gt;<br />            &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;<br />          &lt;/attribute&gt;<br />        &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 /> &lt;taglib&gt;<br />   &lt;taglib-uri&gt;/demotag&lt;/taglib-uri&gt;<br />   &lt;taglib-location&gt;/WEB-INF/mytag.tld&lt;/taglib-location&gt;<br /> &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 />  boolean flag=true;<br />  String outValue="Hello World!";<br />%&gt;<br />&lt;mt:if value="&lt;%=flag%&gt;"&gt;<br />  &lt;mt:out value="&lt;%=outValue%&gt;"&gt;<br />    这是mt:out...&gt;打印的内容。<br />  &lt;/mt:out&gt;<br />&lt;/mt:if&gt;<br />&lt;br&gt;<br />&lt;mt:if value="false"&gt;<br />  &lt;mt:out value="&lt;%=outValue%&gt;"&gt;<br />    这些内容不会显示在客户端。<br />  &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">Eric.Zhou</a> 2007-01-22 15:27 <a href="http://www.blogjava.net/rain1102/articles/95350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发带Body的标签库</title><link>http://www.blogjava.net/rain1102/articles/95330.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 22 Jan 2007 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/95330.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/95330.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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> int counts;    //counts为迭代的次数<br /> <br /> public BodyTagExample(){<br />  super();<br /> }<br /> <br /> /*<br />  * 设置counts属性，这个方法由容器自动调用<br />  */<br /> public void setCounts(int c){<br />  this.counts=c;<br /> }<br /> <br /> @Override<br /> public int doAfterBody() throws JspException {<br />  // TODO Auto-generated method stub<br />  System.out.println("doAfterBody"+counts);<br />  if(counts&gt;1){<br />   counts--;<br />   return EVAL_BODY_AGAIN;<br />  }else{<br />   return SKIP_BODY;<br />  }<br /> }</p>
		<p> @Override<br /> public int doEndTag() throws JspException {<br />  // TODO Auto-generated method stub<br />  System.out.println("doEndTag");<br />  try{<br />   if(bodyContent!=null){<br />    bodyContent.writeOut(bodyContent.getEnclosingWriter());<br />   }<br />  }catch(IOException e){<br />   throw new JspTagException("IO Error:"+e.getMessage());<br />  }<br />  return EVAL_PAGE;<br /> }</p>
		<p> @Override<br /> public void doInitBody() throws JspException {<br />  // TODO Auto-generated method stub<br />  System.out.println("doInitBody");<br /> }</p>
		<p> @Override<br /> public int doStartTag() throws JspException {<br />  // TODO Auto-generated method stub<br />  System.out.println("doStartTag");<br />  if(counts&gt;0){<br />   return EVAL_BODY_AGAIN;<br />  }else{<br />   return SKIP_BODY;<br />  }<br /> }</p>
		<p> @Override<br /> public void setBodyContent(BodyContent arg0) {<br />  // TODO Auto-generated method stub<br />  System.out.println("setBodyContent");<br />  this.bodyContent=arg0;<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 />        xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>"<br />        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 />        version="2.0"&gt;<br />        &lt;description&gt;A tag library exercising SimpleTag handlers.&lt;/description&gt;<br />        &lt;tlib-version&gt;1.0&lt;/tlib-version&gt;<br />        <br />        &lt;short-name&gt;examples&lt;/short-name&gt;<br />        &lt;uri&gt;/demotag&lt;/uri&gt;<br />        &lt;description&gt;JSP应用开发&lt;/description&gt;<br />        <br />          <font color="#006400">&lt;tag&gt;<br />          &lt;name&gt;loop&lt;/name&gt;<br />          &lt;tag-class&gt;com.rain.tag.BodyTagExample&lt;/tag-class&gt;<br />          &lt;body-content&gt;<font color="#ff0000">jsp</font>&lt;/body-content&gt;    <font color="#ff0000">Body-Content必须为JSP</font><br />          &lt;attribute&gt;<br />            &lt;name&gt;counts&lt;/name&gt;                    <font color="#ff0000">定义中必须有setCounts(int counts)方法<br /></font>            &lt;required&gt;true&lt;/required&gt;               <font color="#ff0000">表示这个属性是必须的</font><br />            &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;       <font color="#ff0000">支持JSP表达式<br /></font>          &lt;/attribute&gt;<br />        &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 /> &lt;taglib&gt;<br />   &lt;taglib-uri&gt;/demotag&lt;/taglib-uri&gt;<br />   &lt;taglib-location&gt;/WEB-INF/mytag.tld&lt;/taglib-location&gt;<br /> &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 />  现在时间是:&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">Eric.Zhou</a> 2007-01-22 14:11 <a href="http://www.blogjava.net/rain1102/articles/95330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中开发自定义标签（实现Tag接口）</title><link>http://www.blogjava.net/rain1102/articles/95258.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 22 Jan 2007 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/95258.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/95258.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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> private PageContext pageContext;<br /> private Tag parent;<br /> <br /> public HelloTag(){<br />  super();<br /> }<br /> public int doEndTag() throws JspException {<br />  // TODO Auto-generated method stub<br />  try{<br />   pageContext.getOut().write("Hello World!　你好");<br />  }catch(IOException e){<br />   throw new JspTagException("IO Error:"+e.getMessage());<br />  }<br />  return EVAL_PAGE;<br /> }</p>
		<p> public int doStartTag() throws JspException {<br />  // TODO Auto-generated method stub<br />  return SKIP_BODY;  //返回SKIP_BODY，表示不计算标签体<br /> }</p>
		<p> public Tag getParent() {<br />  // TODO Auto-generated method stub<br />  return this.parent;<br /> }</p>
		<p> public void release() {<br />  // TODO Auto-generated method stub<br /> }</p>
		<p> public void setPageContext(PageContext arg0) {<br />  // TODO Auto-generated method stub<br />  this.pageContext=arg0;<br /> }</p>
		<p> public void setParent(Tag arg0) {<br />  // TODO Auto-generated method stub<br />  this.parent=arg0;<br /> }</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 />        xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>"<br />        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 />        version="2.0"&gt;<br />        &lt;description&gt;A tag library exercising SimpleTag handlers.&lt;/description&gt;<br />        &lt;tlib-version&gt;1.0&lt;/tlib-version&gt;<br />        <br />        &lt;short-name&gt;examples&lt;/short-name&gt;<br />        &lt;uri&gt;/demotag&lt;/uri&gt;<br />        &lt;description&gt;JSP应用开发&lt;/description&gt;<br />        <br />        <font color="#006400">&lt;tag&gt;<br />          &lt;description&gt;Outputs Hello,World&lt;/description&gt;<br />          &lt;name&gt;hello_int&lt;/name&gt;<br />          &lt;tag-class&gt;com.rain.tag.HelloTag&lt;/tag-class&gt;<br />          &lt;body-content&gt;empty&lt;/body-content&gt;<br />        &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 /> &lt;taglib&gt;<br />   &lt;taglib-uri&gt;/demotag&lt;/taglib-uri&gt;<br />   &lt;taglib-location&gt;/WEB-INF/mytag.tld&lt;/taglib-location&gt;<br /> &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">Eric.Zhou</a> 2007-01-22 11:53 <a href="http://www.blogjava.net/rain1102/articles/95258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jstl中的变量在jsp中读取</title><link>http://www.blogjava.net/rain1102/articles/94945.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 19 Jan 2007 07:40:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94945.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94945.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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">Eric.Zhou</a> 2007-01-19 15:40 <a href="http://www.blogjava.net/rain1102/articles/94945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jstl的函数库</title><link>http://www.blogjava.net/rain1102/articles/94944.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 19 Jan 2007 07:39:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94944.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94944.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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">Eric.Zhou</a> 2007-01-19 15:39 <a href="http://www.blogjava.net/rain1102/articles/94944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>写入内容到文件中</title><link>http://www.blogjava.net/rain1102/articles/94883.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 19 Jan 2007 03:05:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94883.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94883.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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">Eric.Zhou</a> 2007-01-19 11:05 <a href="http://www.blogjava.net/rain1102/articles/94883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用FileReader读取文件</title><link>http://www.blogjava.net/rain1102/articles/94879.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 19 Jan 2007 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94879.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94879.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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 />  try{<br />  <font color="#006400">BufferedReader in=new BufferedReader(new FileReader("e:\\test.txt"));  //可以是任意位置的文件<br /></font>  String file="";<br />  String temp="";<br />  while((temp=in.readLine())!=null){<br />   file+=temp;<br />  }<br />  in.close();<br />  out.println(file);<br />  out.flush();<br />  }catch(Exception e){<br />   out.println(e);<br />   e.printStackTrace();<br />  }<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">Eric.Zhou</a> 2007-01-19 10:56 <a href="http://www.blogjava.net/rain1102/articles/94879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用ServletContext读取文件内容</title><link>http://www.blogjava.net/rain1102/articles/94874.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 19 Jan 2007 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94874.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94874.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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 />  try{<br />   <font color="#006400">InputStream in=getServletContext().getResourceAsStream("/file.txt");<br /></font>   String file="";<br />   String temp="";<br />   <font color="#006400">BufferedReader buffer=new BufferedReader(new InputStreamReader(new BufferedInputStream(in)));</font><br />   while((temp=buffer.readLine())!=null){<br />    file+=temp;<br />   }<br />   buffer.close();<br />   in.close();<br />   out.println(file);<br />   out.flush();<br />  }catch(Exception e){<br />   out.println(e);<br />   e.printStackTrace();<br />  }<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">Eric.Zhou</a> 2007-01-19 10:49 <a href="http://www.blogjava.net/rain1102/articles/94874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在不同页面或者不同用户之间共享数据的方法</title><link>http://www.blogjava.net/rain1102/articles/94855.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 19 Jan 2007 01:44:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94855.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94855.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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'">  </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'">  </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'">  </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'">  </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'">  </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'">  </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'">  </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'">  </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'">  </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">Eric.Zhou</a> 2007-01-19 09:44 <a href="http://www.blogjava.net/rain1102/articles/94855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IllegalStateException: getOutputStream() 异常的解决方案</title><link>http://www.blogjava.net/rain1102/articles/82291.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 20 Nov 2006 07:37:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/82291.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/82291.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/82291.html#Feedback</comments><slash:comments>5</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 />        at org.apache.catalina.connector.Response.getWriter(Response.java:596)<br />        at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:186)<br />产生这样的异常原因是web容器生成的servlet代码中有out.write(""),这个和JSP中调用的response.getOutputStream()产生冲突，<br />下面是web容器生成的部分servlet代码：<br />      out = pageContext.getOut();<br />      _jspx_out = out;</div>
		<div>      out.write("\r\n");<br />      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 />      out = pageContext.getOut();<br />      _jspx_out = out;</div>
		<div>      //out.write("\r\n");这个将被去掉<br />      //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">Eric.Zhou</a> 2006-11-20 15:37 <a href="http://www.blogjava.net/rain1102/articles/82291.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDK&amp;TOMCAT环境变量设置</title><link>http://www.blogjava.net/rain1102/articles/76759.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 23 Oct 2006 07:07:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/76759.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/76759.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/76759.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/76759.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/76759.html</trackback:ping><description><![CDATA[<p>一、软件下载: <br />　　1、java</p>
		<p>　　这里使用的是jdk1.4.2。</p>
		<p>　　下载地址:http://dlc.sun.com/jdk/j2sdk-1_4_2_07-windows-i586-p.exe;</p>
		<p>　　2、tomcat</p>
		<p>　　这里的tomcat的版本是5.0的，安装版或是解压版都是可以的。</p>
		<p>　　下载地址:http://apache.linuxforum.net/dis ... a-tomcat-5.0.28.exe</p>
		<p>　　3、数据库</p>
		<p>　　推荐使用mysql，but暂时找不到下载地址，由于此次偶们班有课程设计要用sqlserver的，所以下面实践会使用sqlserver(找张安装盘安装</p>
		<p>)</p>
		<p>　　注:连接sqlserver需要三个jar文件(文件名ms开头)，可从这里下载:</p>
		<p>　　<a href="http://www.softhouse.com.cn/html">http://www.softhouse.com.cn/html</a> ... 11250300001646.html</p>
		<p>　　上面包括完整的配置方法</p>
		<p>　　二、软件安装:</p>
		<p>　　1.双击安装jdk。装完后在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量:</p>
		<p>　　(假设你的JDK安装在c:/jdk)</p>
		<p>　　JDK_HOME=C:\jdk</p>
		<p>　　classpath=.;%JDK_HOME%\lib\dt.jar;%JDK_HOME%\lib\tools.jar</p>
		<p>　　在PATH(原来就已存在)中添加:%JDK_HOME%\bin</p>
		<p>　　这样jdk环境配置成功。</p>
		<p>　　2.双击安装你的Tomcat。(建议安装在D:/tomcat)</p>
		<p>　　注:tomcat5.0.x版本不需配置环境变量就可以使用，但如果需要编译Servlet则必须将tomcat的两个jar文件也放到环境变量中，具体方法</p>
		<p>如下:</p>
		<p>　　在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加:</p>
		<p>　　TOMCAT_HOME=D:\tomcat 5.0<br />    CATALINA_HOME=D:\Tomcat 5.0</p>
		<p>　　修改classpath变成:.;%JDK_HOME%\lib\dt.jar;%JDK_HOME%\lib\tools.jar;%TOMCAT_HOME%\common\lib\servlet-api.jar;%TOMCAT_HOME%</p>
		<p>\common\lib\jsp-api.jar;</p>
		<p>　　这样已经完整安装完Tomcat了。</p>
		<p>　　建议:在PATH中再添加:%JDK_HOME%\jre\bin;%JDK_HOME%\bin;%TOMCAT_HOME%\bin;</p>
		<p>　　这样做的目的是在虚拟dos中可以使用tomcat的工具</p>
		<p>　　最后顺便把第一步下载回来的三个jar文件放到tomcat目录下的common/lib目录中</p>
		<p>　　3.测试:</p>
		<p>　　打开开始菜单中的tomcat(小猫图案)的monitor工具，点击start </p>
		<p>server，显示绿色三角形即为启动，打开浏览器在地址栏输入:http://localhost:8080/可以看到小猫图案说明已经配置成功。</p>
		<p>　　4.安装数据库(sqlserver)</p>
		<p>　　windows xp下必须安装个人版或开发版(个人推荐个人版)。</p>
		<p>　　一直next就可以(微软的东西就是方便)，这里注意到域帐户那里选择本机帐户，到验证那里选择混合验证(这点很重要，若选择系统认证以</p>
		<p>后在程序中就连接不上数据库)，为你的sa用户输入一个密码(如果练习用就不用考虑安全性啦，选择“空密码”就可以)</p>
		<p>　　三、正式编程:</p>
		<p>　　1.建立数据库</p>
		<p>　　打开开始菜单找到sqlserver的快捷方式组里面的企业管理器，点开左边的树一般有个localhost连接，如果有个绿色三角形符号证明数据</p>
		<p>库连接成功。点击邮件新建数据库，在你新建的数据库中再新建个数据表(例如叫test)，数据表建立若干字段。</p>
		<p>　　补充:提供另一种建表方法是使用sql脚本建表。首先创建如下文件:</p><img src ="http://www.blogjava.net/rain1102/aggbug/76759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-10-23 15:07 <a href="http://www.blogjava.net/rain1102/articles/76759.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP状态代码</title><link>http://www.blogjava.net/rain1102/articles/72432.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 28 Sep 2006 00:19:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/72432.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/72432.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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中对应的状态信息是“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">Eric.Zhou</a> 2006-09-28 08:19 <a href="http://www.blogjava.net/rain1102/articles/72432.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL教程</title><link>http://www.blogjava.net/rain1102/articles/68063.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 06 Sep 2006 08:49:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/68063.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/68063.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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/articles/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">Eric.Zhou</a> 2006-09-06 16:49 <a href="http://www.blogjava.net/rain1102/articles/68063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>两个相联下拉框</title><link>http://www.blogjava.net/rain1102/articles/67635.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 04 Sep 2006 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/67635.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/67635.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/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 /> function onchange_kind1(value)<br /> {<br />   document.frames["frmcontent"].location.replace("kind.jsp?id="+value);<br />   <br />      //document.frames[0].href="kind.jsp?id="+value;<br />   //document.form1.kind.value = value;<br />   <br /> }<br />&lt;/script&gt;</p>
		<p>
				<br />&lt;select name="kind1" id="kind1" onChange="onchange_kind1(this.value);"&gt;<br />         &lt;%<br />         Vector myvector=null;<br />      myvector=kind1info.selectInfor();<br />      for(int i=0;i&lt;myvector.size();i++)<br />      { <br />        kind1id=((kind1Unit)myvector.elementAt(i)).getID();<br />        kindname1=((kind1Unit)myvector.elementAt(i)).getKindName1();<br />      %&gt;<br />                      &lt;option value="&lt;%=kind1id%&gt;"&gt;&lt;%=kindname1%&gt;&lt;/option&gt;<br />                      &lt;%<br />        }//循环结束<br />      %&gt;<br />                    &lt;/select&gt;&lt;/td&gt;<br />                    &lt;td width="81%"&gt;&lt;div id="divKind" name="divKind"&gt;<br />                      &lt;select name="kind2" id="kind2"&gt;<br />                      &lt;/select&gt;<br />                    &lt;/div&gt;</p>
		<p>&lt;iframe id="frmcontent" name="frmcontent" width="400" height="40" src=""&gt;&lt;/iframe&gt; </p>
		<p> </p>
		<p>
				<br />第二页面<br />&lt;div id="divKind" name="divKind"&gt;<br />&lt;select name="kind2" id="kind2" &gt;<br />      &lt;%<br />  Vector myvector=null;<br />  myvector=kind2info.selectInfor(kind1id);<br />  for(int i=0;i&lt;myvector.size();i++)<br />     { <br />   kind2id=((kind2Unit)myvector.elementAt(i)).getID();<br />   kindname2=((kind2Unit)myvector.elementAt(i)).getKindName2();<br />  %&gt;<br />  &lt;option value="&lt;%=kind2id%&gt;"&gt;&lt;%=kindname2%&gt;&lt;/option&gt;<br />    &lt;%<br />    }//循环结束<br />    %&gt;<br />&lt;/select&gt;<br />&lt;/div&gt;</p>
		<p>&lt;script language="javascript"&gt;<br />  function getItem()<br />  {<br />    //alert(document.form1.kind2.innerHTML);<br /> //alert(parent.document.form1.kind2.innerHTML);<br />    parent.document.all.divKind.innerHTML = document.all.divKind.innerHTML;<br /> //alert(parent.document.form1.kind2.innerHTML); <br /> //.innerText<br />  }<br />  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">Eric.Zhou</a> 2006-09-04 17:11 <a href="http://www.blogjava.net/rain1102/articles/67635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>