??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲日韩av无码中文,亚洲人成激情在线播放,亚洲最大黄色网站http://www.tkk7.com/rain1102/category/37644.html<br/><font color="green" style="font-family: 华文行楷;font-size:16px;">化学l构搜烦Q化学信息学Q生物信息学Q实验室信息学等 ?lt;/font><br/><font color="#3C1435">以高U技的生物、化学信息技术实现生命科学领域中专业数据的计和理、提高研发能力、增强在U研和成本效率方面的国际竞争力,为生物、化学、医药和学术机构提供一的解决Ҏ(gu)和技术咨询?lt;/font><br/> <br/><font color="green" style="font-family: 华文行楷;font-size:16px;">子曰Q危邦不入,乱邦不居。天下有道则见,无道则隐?lt;/font><font color="#3C1435"></font><br/> zh-cnWed, 29 Jun 2011 07:45:15 GMTWed, 29 Jun 2011 07:45:15 GMT6028条提高关键字排名的SEO优化Ҏ(gu)【{载?/title><link>http://www.tkk7.com/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.tkk7.com/rain1102/archive/2011/06/29/353366.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/353366.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2011/06/29/353366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/353366.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/353366.html</trackback:ping><description><![CDATA[<span id="tdbv7x9" 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 id="nlb7tp9" class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">1.URL中出现关键词Q英文)<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span id="7t99hx9" class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">2.|页标题中出现关键词Q?-3个)<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span id="bf97tdp" 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 id="vx79vt1" class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">4.描述标签中出现关键词Q主关键词重?ơ)<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span id="xzfhjt7" 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 id="7x9flt9" class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">6.内容W一D和最后一D出现关键词<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span id="1jf97rp" class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">7.H1QH2标签中出现关键词<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span id="n9zvznz" 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 id="vbvb7d7" 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 id="d7lhjjt" 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 id="thbxzxj" class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">11.关键词密?-8%<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span id="9f9b9jt" 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; ">内容质量、更新频率、相x?/span></h3></span><span id="9tr9vtv" class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">1.原创的内Ҏ(gu)佻I切忌被多ơ{载的内容<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span id="pjnn7f9" class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">2.内容独立性,与其他页面至?0%互异<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span id="7bp9brf" 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 id="bd9xndt" 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 id="799f7vf" class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">5.内容围绕面关键词展开Q与整站主题相关<br style="outline-width: medium; outline-style: none; outline-color: initial; " /></span><span id="17nf9px" class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px; color: #000000; ">6.h评论功能Q评Z出现关键?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 id="97vpbz7" 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.锚文本多样化Q如QSEO和SEO十万个ؓ什么)<br /></span><span style="color: #000000; ">原文地址Q?div style="display: inline-block; "></div></span></p></span><a ><span style="color: #000000; ">http://www.gbin1.com/technology/seo/28waytoseo/</span></a><img src ="http://www.tkk7.com/rain1102/aggbug/353366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2011-06-29 15:44 <a href="http://www.tkk7.com/rain1102/archive/2011/06/29/353366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高性能|站-CZhttp://www.tkk7.com/rain1102/archive/2011/03/31/347381.html周锐周锐Thu, 31 Mar 2011 05:29:00 GMThttp://www.tkk7.com/rain1102/archive/2011/03/31/347381.htmlhttp://www.tkk7.com/rain1102/comments/347381.htmlhttp://www.tkk7.com/rain1102/archive/2011/03/31/347381.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/347381.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/347381.htmlhttp://stevesouders.com/hpws/rules.php

周锐 2011-03-31 13:29 发表评论
]]>
使用Applet时候js控制客户下蝲的JRE版本http://www.tkk7.com/rain1102/archive/2009/09/03/293745.html周锐周锐Thu, 03 Sep 2009 07:47:00 GMThttp://www.tkk7.com/rain1102/archive/2009/09/03/293745.htmlhttp://www.tkk7.com/rain1102/comments/293745.htmlhttp://www.tkk7.com/rain1102/archive/2009/09/03/293745.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/293745.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/293745.html 查了一下,原来是第三方的js里面控制了jre下蝲版本为:
if(applet_type == 1) {
  s = '<embed TYPE="application/x-java-applet;version=1.3"\n';
  s += ' PLUGINSPAGE="http://java.sun.com/products/plugin/1.3/plugin-install.html"\n';
 } else if(applet_type == 2) {
  s = '<object CLASSID="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"\n';
  s += ' CODEBASE=" http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,3,0,0"\n';
 } else {
  s = '<applet';
 }

修改Z下代码即可(1.6Q:
 if(applet_type == 1) {
  s = '<embed TYPE="application/x-java-applet;jpi-version=1.6"\n';
  s += ' PLUGINSPAGE="http://java.sun.com/products/plugin/index.html#download"\n';
 } else if(applet_type == 2) {
  s = '<object CLASSID="clsid:CAFEEFAC-0016-0000-0000-ABCDEFFEDCBA"\n';
  s += ' CODEBASE="http://java.sun.com/update/1.6.0/jinstall-6-windows-i586.cab"\n';
 } else {
  s = '<applet';
 }


周锐 2009-09-03 15:47 发表评论
]]>
java.lang.NoSuchFieldError: deferredExpression异常http://www.tkk7.com/rain1102/archive/2009/02/10/253995.html周锐周锐Tue, 10 Feb 2009 01:29:00 GMThttp://www.tkk7.com/rain1102/archive/2009/02/10/253995.htmlhttp://www.tkk7.com/rain1102/comments/253995.htmlhttp://www.tkk7.com/rain1102/archive/2009/02/10/253995.html#Feedback3http://www.tkk7.com/rain1102/comments/commentRss/253995.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/253995.html遇到q个异常的时候是用jstl标签Q是版本问题Q由于MyEclipsedJava EE5Q其中自动包括了jstl1.2的版本,lib中又存在一个jstl1.1.2的jar包,把旧版本的删掉就可以?/font>



周锐 2009-02-10 09:29 发表评论
]]>
Grails中paginate标签参数http://www.tkk7.com/rain1102/archive/2008/07/22/216705.html周锐周锐Tue, 22 Jul 2008 12:58:00 GMThttp://www.tkk7.com/rain1102/archive/2008/07/22/216705.htmlhttp://www.tkk7.com/rain1102/comments/216705.htmlhttp://www.tkk7.com/rain1102/archive/2008/07/22/216705.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/216705.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/216705.html<g:paginate next="Forward" prev="Back" maxsteps="0" controller="book" action="list" total="${Book.count()}" />

Attributes
total (required) - The total number of results to paginate
action (optional) - the name of the action to use in the link, if not specified the default action will be linked
controller (optional) - the name of the controller to use in the link, if not specified the current controller will be linked
id (optional) - The id to use in the link
params (optional) - A map containing request parameters
prev (optional) - The text to display for the previous link (defaults to "Previous" as defined by default.paginate.prev property in I18n messages.properties)
next (optional) - The text to display for the next link (defaults to "Next" as defined by default.paginate.next property in I18n messages.properties)
max (optional) - The number of records displayed per page (defaults to 10). Used ONLY if params.max is empty
maxsteps (optional) - The number of steps displayed for pagination (defaults to 10). Used ONLY if params.maxsteps is empty
offset (optional) - Used ONLY if params.offset is empty
source: ./checkout/grails/src/groovy/org/codehaus/groovy/grails/plugins/web/taglib/RenderTagLib.groovy (No such file or directory)


 



周锐 2008-07-22 20:58 发表评论
]]>
jstl 取list 长度http://www.tkk7.com/rain1102/archive/2008/07/21/216313.html周锐周锐Mon, 21 Jul 2008 03:42:00 GMThttp://www.tkk7.com/rain1102/archive/2008/07/21/216313.htmlhttp://www.tkk7.com/rain1102/comments/216313.htmlhttp://www.tkk7.com/rain1102/archive/2008/07/21/216313.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/216313.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/216313.htmljstl/core" prefix="c" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:out value="${fn:length(list)}"></c:out>

周锐 2008-07-21 11:42 发表评论
]]>
如何在JSTL1.0中实现substring功能Q??http://www.tkk7.com/rain1102/archive/2008/05/13/200197.html周锐周锐Tue, 13 May 2008 06:21:00 GMThttp://www.tkk7.com/rain1102/archive/2008/05/13/200197.htmlhttp://www.tkk7.com/rain1102/comments/200197.htmlhttp://www.tkk7.com/rain1102/archive/2008/05/13/200197.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/200197.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/200197.html1Q在web.xml中添加:

  <taglib-uri>http://jakarta.apache.org/taglibs/string-1.0</taglib-uri>
  <taglib-location>/WEB-INF/taglibs-string.tld</taglib-location>
  </taglib>

2Q上?taglibs-string.jar 到web-inf/libQ上传taglibs-string.tld到web-inf/?/p>

3Q在jsp中加入代码:

<%@ taglib uri="
<str:substring start="0" end="40"><c:out value="${messages}"/></str:substring>



周锐 2008-05-13 14:21 发表评论
]]>
ajax jsp 无刷C传文?/title><link>http://www.tkk7.com/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.tkk7.com/rain1102/archive/2008/03/19/187170.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/187170.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2008/03/19/187170.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/187170.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/187170.html</trackback:ping><description><![CDATA[首先要说的就?<span id="7rt9x99" class="hilite1"><span id="bd79pf9" class="hilite1">ajax</span></span> 是无法实C传文件的Q可以想一?span class="hilite1"><span id="ld7hfv9" class="hilite1">ajax</span></span>与后台通信都是通过传递字W串Q怎么能传递文件呢Q其实出于安全考虑js是不能操作文件的Q所以就不要再说?span class="hilite1"><span id="7d999h9" class="hilite1">ajax</span></span>来实现文件的上传了,q是不可能的?br />     而本文实现的<span id="17799dt" class="hilite2"><span id="fjl9nlt" class="hilite2">文g上传</span></span>也是无页面刷新的Q可以说是一U?cM<span id="19jvfv9" class="hilite1"><span id="zdv7hv9" class="hilite1">AJAX</span></span>"Ҏ(gu)?br />     开始之前先说两句无关的Q其实在<span id="1999dtf" class="hilite1"><span id="97pr9fx" class="hilite1">ajax</span></span>出现之前Qweb应用也可以是无刷新的Q那时大多通过IFrame来做到这一炏V当?span class="hilite1"><span id="n9t9hxl" class="hilite1">Ajax</span></span>出现之后Qh们一H蜂地投?span class="hilite1"><span id="1vpxx7f" class="hilite1">Ajax</span></span> 的阵营了QiFrame ׃人问z了。但是用iFrame来实现无h上传文g实一个很好的选择。psQ?span class="hilite1"><span id="fp7x9dl" class="hilite1">Ajax</span></span>技术基本上可以说是由google公司带v来的Q但Gmail中上传文件用的还?IFrameQ所以说使用IFrame来上传文件是最好的选择?br />     我在q里q里用的技术是jspQ其实aspQphp{也是一样可以这么实现的<br />     一׃个文件就可实玎ͼindex.html ?upload.jsp<br /> --index.html<span> <div id="bv7n99h" class="dp-highlighter"> <ol class="dp-j"> <li id="pbvbd7v" class="alt"><span><span>QhtmlQ?  </span></span> <li id="p799f9b" class=""><span>QbodyQ?  </span> <li id="hb79b9f" class="alt"><span>  </span> <li id="7t9h7fv" class=""><span>Qform action=</span><span id="dd7zfr9" class="string">"upload.jsp"</span><span> id=</span><span id="71j7tb9" class="string">"form1"</span><span> name=</span><span id="19nlxhj" class="string">"form1"</span><span> encType=</span><span id="j7997xf" class="string">"multipart/form-data"</span><span>  method=</span><span id="f79dt9j" class="string">"post"</span><span> target=</span><span id="hrr99pv" class="string">"hidden_frame"</span><span> Q?  </span> <li id="h7rp97t" class="alt"><span>    Qinput type=</span><span id="vxlp79v" class="string">"file"</span><span> id=</span><span id="xz79d9z" class="string">"file"</span><span> name=</span><span id="lv79ntj" class="string">"file"</span><span> style=</span><span id="9bvbvx7" class="string">"width:450"</span><span>Q?  </span> <li id="779h7t9" class=""><span>    QINPUT type=</span><span id="9hb9nbz" class="string">"submit"</span><span> value=</span><span id="l9z7fv9" class="string">"上传文g"</span><span>Q<span id=</span><span id="d9979zn" class="string">"msg"</span><span>Q</spanQ?  </span> <li id="7dfdxv9" class="alt"><span>    QbrQ?  </span> <li id="7v9hf9z" class=""><span>    Qfont color=</span><span id="htpjdbl" class="string">"red"</span><span>Q支持JPG,JPEG,GIF,BMP,SWF,RMVB,RM,AVI文g的上传</fontQ?nbsp;                </span> <li id="l7ttd7h" class="alt"><span>    Qiframe name='hidden_frame' id=</span><span id="19h9lj9" class="string">"hidden_frame"</span><span> style='display:none'Q</iframeQ?  </span> <li id="z7p99nv" class=""><span>Q?formQ?  </span> <li id="7vnhj99" class="alt"><span>  </span> <li id="xrbnhtd" class=""><span>Q?bodyQ?  </span> <li id="nrjxphx" class="alt"><span>Q?htmlQ?  </span> <li id="t9b7bbz" class=""><span>  </span> <li id="zrn7hxn" class="alt"><span>Qscript type=</span><span id="1lnrtpb" class="string">"text/javascript"</span><span>Q?  </span> <li id="97p9p9r" class=""><span>function callback(msg)   </span> <li id="x7fnfh9" class="alt"><span>{   </span> <li id="n79pnlb" class=""><span>    document.getElementById(</span><span id="7btnhz9" class="string">"file"</span><span>).outerHTML = document.getElementById(</span><span id="f9d9nt9" class="string">"file"</span><span>).outerHTML;   </span> <li id="1tf7dtb" class="alt"><span>    document.getElementById(</span><span id="xrtxz7b" class="string">"msg"</span><span>).innerHTML = </span><span id="99999bh" class="string">"Qfont color=redQ?</span><span>+msg+</span><span id="9j9f9dj" class="string">"Q?fontQ?</span><span>;   </span> <li id="z7zh99t" class=""><span>}   </span> <li id="npb9ldj" class="alt"><span>Q?scriptQ?nbsp; </span> </li> </ol> </div> <br /> <br /> <font color="#000000"> index.html 中主要要做的是写一?form ?iframe Qƈ?form ?target 设ؓ iframe 的名字,注意要把 iframe 设ؓ不可见,其他的都是正常的<span id="f99n1h9" class="hilite2"><span id="b7j9799" class="hilite2">文g上传</span></span>的写法,q样h的页面就是这个隐藏的 Iframe Q而在 index.html 中是不会有页面刷新的Qjs?callback Ҏ(gu)是回调方法。用于清I?span class="hilite2"><span id="v9p79lt" class="hilite2">文g上传</span></span>框和昄后台信息Q注意清I?span class="hilite2"><span id="7zbnx9z" class="hilite2">文g上传</span></span>框的Ҏ(gu)Q和普通方法有点不一栗?/font><br /> <br /> --upload.jsp<br /> <div id="dr7v97j" class="dp-highlighter"> <ol class="dp-j"> <li id="l7hp9f9" class="alt"><span><span>Q?@ page language=</span><span id="b7xfphn" class="string">"<a title="Java爱好? href="http://www.tkk7.com/rain1102" >Java</a>"</span><span> contentType=</span><span id="z97d1r7" class="string">"text/html; charset=gb2312"</span><span> %Q?  </span></span> <li id="77z1p79" class=""><span>Q?@ page </span><span id="zn77tt9" class="keyword">import</span><span>=</span><span id="pdfzjrj" class="string">"com.jspsmart.upload.SmartUpload"</span><span>%Q?  </span> <li id="njdz7f9" class="alt"><span>  </span> <li id="f7bbddb" class=""><span>Q?   </span> <li id="hvp7rhx" class="alt"><span>    </span><span id="hd7h79f" class="comment">//新徏一个SmartUpload对象 </span><span>  </span> <li id="f7vbnvl" class=""><span>    SmartUpload su = </span><span id="799xfvv" class="keyword">new</span><span> SmartUpload();   </span> <li id="7h99dbb" class="alt"><span>  </span> <li id="xlf7rj9" class=""><span>    </span><span id="7txrtbb" class="comment">//上传初始?</span><span>  </span> <li id="tptvn79" class="alt"><span>    su.initialize(pageContext);   </span> <li id="79nbv99" class=""><span>  </span> <li id="7tnxrjh" class="alt"><span>    </span><span id="jln9r9p" class="comment">// 讑֮上传限制 </span><span>  </span> <li id="97dhr9f" class=""><span>    </span><span id="fxj7d9p" class="comment">//1.限制每个上传文g的最大长度?</span><span>  </span> <li id="pr7dz9b" class="alt"><span>    su.setMaxFileSize(</span><span id="f7vpzrf" class="number">10000000</span><span>);   </span> <li id="9zlv9vl" class=""><span>  </span> <li id="pjt7xnt" class="alt"><span>    </span><span id="rnxz97h" class="comment">//2.限制M传数据的长度?</span><span>  </span> <li id="vhrtf7r" class=""><span>    su.setTotalMaxFileSize(</span><span id="r7b9xvd" class="number">20000000</span><span>);   </span> <li id="7fp99xd" class="alt"><span>  </span> <li id="79nh9x9" class=""><span>    </span><span id="ldpt7t9" class="comment">//3.讑֮允许上传的文Ӟ通过扩展名限Ӟ,仅允许doc,txt文g?</span><span>  </span> <li id="7dx9dt7" class="alt"><span>    su.setAllowedFilesList(</span><span id="99bf9vt" class="string">"doc,txt,jpg,rar,mid,waw,mp3,gif"</span><span>);   </span> <li id="bd9xnv9" class=""><span>       </span> <li id="999xdtf" class="alt"><span>    </span><span id="d7d7999" class="keyword">boolean</span><span> sign = </span><span id="xjtntlr" class="keyword">true</span><span>;   </span> <li id="x9pb9z9" class=""><span>       </span> <li id="9xrtzpf" class="alt"><span>    </span><span id="7rv9h9z" class="comment">//4.讑֮止上传的文Ӟ通过扩展名限Ӟ,止上传带有exe,bat,jsp,htm,html扩展名的文g和没有扩展名的文件?</span><span>  </span> <li id="hz9bf99" class=""><span>    </span><span id="xh7997l" class="keyword">try</span><span> {   </span> <li id="j7979xv" class="alt"><span>        su.setDeniedFilesList(</span><span id="d77n9d9" class="string">"exe,bat,jsp,htm,html"</span><span>);   </span> <li id="tfzlnd7" class=""><span>  </span> <li id="phb7f99" class="alt"><span>        </span><span id="9jdht99" class="comment">//上传文g </span><span>  </span> <li id="r7lv9dd" class=""><span>        su.upload();   </span> <li id="v7tp99h" class="alt"><span>        </span><span id="v7vf9xn" class="comment">//上传文件保存到指定目录 </span><span>  </span> <li id="zbxhxn7" class=""><span>        su.save(</span><span id="hpln79n" class="string">"c:\\"); </span>  <li id="brtn9xn" class="alt"><span> </span> <li id="79nh9zx" class=""><span><span id="z7fjfn1" class="string">    } catch (Exception e) { </span> </span> <li id="79dx99b" class="alt"><span><span id="rtx7zp7" class="string">        e.printStackTrace(); </span> </span> <li id="9p9dpnz" class=""><span><span id="r7td9v9" class="string">        sign = false; </span> </span> <li id="p7dn99l" class="alt"><span><span id="h79zj9v" class="string">    } </span> </span> <li id="7tvx9r9" class=""><span><span id="pv1jtl9" class="string">    if(sign==true) </span> </span> <li id="f99999d" class="alt"><span><span id="9lx9xx9" class="string">    { </span> </span> <li id="1jlnd9f" class=""><span><span id="lhdxdjl" class="string">        out.println("</span><span>QscriptQparent.callback('upload file success')Q?scriptQ?/span><span id="v7vndtn" class="string">"); </span> </span> <li id="vnbv9z9" class="alt"><span><span id="xxr7d79" class="string">    }else </span> </span> <li id="tdfjppf" class=""><span><span id="vz9jnd9" class="string">    { </span> </span> <li id="fzl9ltr" class="alt"><span><span id="pjnxfd7" class="string">        out.println("</span><span>QscriptQparent.callback('upload file error')Q?scriptQ?);   </span></span> <li id="n9f9zfd" class=""><span>    }   </span> <li id="rd7pj99" class="alt"><span>%Q?  </span> </li> </ol> </div> <br /> <br /> <br /> <br /> <font color="#000000">upload.jsp 中只要注意最后输出的格式可以了。其实原理就是输ZDjs代码?iframe 中,然后在iframe中来控制它的爉面?br /> <br />     OKQ至此一个无h的页面上传组件就做好了,</font><font color="#800080"><font color="#000000">不要忘了?WEB-INF/lib 下加上必ȝ jspSmartUpload.jar ?/font></font><font color="#800080"><font color="#000000">?br />     需要说明的是用Iframe来上传,状态栏q是会有h的,因ؓiframe 中的面h了嘛Q但是外部页面,是你所看到的页面是没有h的,所以也可以说是cM<span id="9dhj9jz" class="hilite1"><span id="7r7zjhz" class="hilite1">Ajax</span></span>上传?/font></font></span><img src ="http://www.tkk7.com/rain1102/aggbug/187170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2008-03-19 10:23 <a href="http://www.tkk7.com/rain1102/archive/2008/03/19/187170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL字符串处理函?http://www.tkk7.com/rain1102/archive/2008/03/03/183523.html周锐周锐Mon, 03 Mar 2008 09:29:00 GMThttp://www.tkk7.com/rain1102/archive/2008/03/03/183523.htmlhttp://www.tkk7.com/rain1102/comments/183523.htmlhttp://www.tkk7.com/rain1102/archive/2008/03/03/183523.html#Feedback1http://www.tkk7.com/rain1102/comments/commentRss/183523.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/183523.htmlJSTL使用表达式来化页面的代码Q这对一些标准的Ҏ(gu)Q例如bean的getter/setterҎ(gu)Q请求参数或者context以及session中的数据的访问非常方便,但是我们在实际应用中l常需要在面调用对象的某些方法,例如我需要调用字W串的lengthҎ(gu)来获取字W串的长度时Q在以往的开发过E中我们必须把对象先转ؓStringc,然后在调用其lengthҎ(gu)Q这L代码J琐而且Ҏ(gu)出错?/p>

因此JSTL内置了几个用于字W串操作的方法,可以直接在表辑ּ中用,大大的简化了代码Q提供代码的可读性。在JSTL的表达是中要使用一个函敎ͼ其格式如?/p>

${ns:methodName(args....)}

在用这些函C前必dJSP中引入标准函数的声明

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

下面是JSTL中自带的Ҏ(gu)列表以及其描q?/p>

函数?/strong> 函数说明 使用举例
 contains 判断字符串是否包含另外一个字W串 <c:if test="${fn:contains(name, searchString)}">
 containsIgnoreCase 判断字符串是否包含另外一个字W串(大小写无? <c:if test="${fn:containsIgnoreCase(name, searchString)}">
 endsWith 判断字符串是否以另外字符串结?/font> <c:if test="${fn:endsWith(filename, ".txt")}">
 escapeXml 把一些字W{成XML表示Q例?lt;字符应该转ؓ&lt; ${fn:escapeXml(param:info)}
 indexOf 子字W串在母字符串中出现的位|?/font> ${fn:indexOf(name, "-")}
 join 数l中的数据联合成一个新字符Ԍq用指定字W格开 ${fn:join(array, ";")}
 length 获取字符串的长度Q或者数l的大小 ${fn:length(shoppingCart.products)}
 replace 替换字符串中指定的字W?/font> ${fn:replace(text, "-", "•")}
 split 把字W串按照指定字符切分 ${fn:split(customerNames, ";")}
 startsWith 判断字符串是否以某个子串开?/font> <c:if test="${fn:startsWith(product.id, "100-")}">
 substring 获取子串 ${fn:substring(zip, 6, -1)}
 substringAfter

获取从某个字W所在位|开始的子串

${fn:substringAfter(zip, "-")}
 substringBefore 获取从开始到某个字符所在位|的子串 ${fn:substringBefore(zip, "-")}
 toLowerCase 转ؓ写 ${fn.toLowerCase(product.name)}
 toUpperCase 转ؓ大写字符 ${fn.UpperCase(product.name)}
 trim 去除字符串前后的I格 ${fn.trim(name)}



周锐 2008-03-03 17:29 发表评论
]]>
IE中打开UTF-8~码titleZ文的|页会显C空白页的问?/title><link>http://www.tkk7.com/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.tkk7.com/rain1102/archive/2008/02/29/182999.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/182999.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2008/02/29/182999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/182999.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/182999.html</trackback:ping><description><![CDATA[当页面?utf-8 ~码Ӟ <br />   <title>标签被放?lt;meta>标签前面。当titleZ文的?比如Blog名ؓ中文或者文章标题ؓ中文)Q在IE下会出现昄I白늚问题?<br />    <br />   ׃ utf-8 使用3个字节表CZ个汉字,而GB2312或BIG5使用两个字节。页面输出时Q由于上q原因,使浏览器解析、输?lt;title> </title>的内Ҏ(gu)Q如果在</title>前有奇数个全角字W时QIE?UTF-8 当作两个字节解析时出现半个汉字的情况Q这时该半个汉字会和</title>?lt;l合成一个ؕ码字Q导致IE无法d<title>部分Q致使整个页面ؓI百输出。此时查看源文gQ会发现实际上整个页面全部已l下载了?<br />    <br />   而浏览器解析html的方式是Q浏览器d了页面的html代码后开始进行解析。解析前览器要先知道页面的~码方式Q然后根据编码方式进行解码,然后才能开始解析?<br />   览器可以从下面3个方面得到页面编码方式: <br />   HTTP Header中的"Content-Type"; <br />   q回的html代码开头是否有BOMQByte Order MarkQ; <br />   html代码中的meta标签?<br />    <br />   览?无论是IEq是Firefox)在解析页面时Q首先取HTTP Header中的Content-Type,如果有写明charset的话p定页面的~码方式为charset指定的倹{如果没有指明,则认定ؓ默认倹{根据上表,IE中文版的默认值是GB2312QFirefox中文版的默认值是GBKQ不qIE的GB2312好像和GBK没啥区别。然后,览器会看一下有没有BOM。一旦发现有UTF-8?字节BOMQ则重新认定面的编码方式ؓUTF-8?<br />    <br />   解码阶段Q解码完成后是解析html的阶Dc解析html的过E中Q当解析到head部分的meta标签Ӟ览器会Ҏ(gu)<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />q个语句中的说明Q重新认定编码方式ؓcharset后面的方式,中断h(hun)tml解析q程Q返回到解码步骤重新解码?<br />    <br />   GBK ?UTF-8 的编码范_ <br />   GBK的编码范围是0×8140-0xfefe。从GB2312-80开始,因ؓASCII码的范围?~127Q首字位?Q所以GB2312-80使用双字节,q设|首字位??#8220;GBK 亦采用双字节表示QM~码范围?8140-FEFEQ首字节?81-FE 之间Q尾字节?40-FE 之间?#8221; <br />    <br />   UTF-8中中文都?个字节的Q由于Unicode中中日韩的文字都混在一P可以使用Windows自带的字W映表查看CJK表意字符的范_即ؓ汉字的范围?字节的UTF-8~码是:1110xxxx 10xxxxxx 10xxxxxxQ编码范围是8000-EFFFQ首字节?0-EF之间Q尾字节?0-FF之间?<br />    <br />    昄当一DUTF-8~码的文本被按照GBK方式解码的时候,׃有一些编码在GBK中不存在Q造成解码E序出现错误。当UTF-8文本被按照GBK的方式解码的时候,前两个字节会被认为是一个字Q后一个字节将和下一个字W结合。当<title>标签里的汉字数是偶数个时Q勉强有3/4的概率通过解码E序(因ؓGBK的第二个字节要求?0-FE)Q当有奇C汉字的时候,最后一个汉字的三个字节的最后一个字节会?lt; /title>的第一个字W?lt;l合Q?lt;的编码是3CQ正好不在尾字节40-FE的范围中Q造成错误。如?lt; /title>标签前有多余的空g会生错误,因ؓI格的编?0也不在范围中?<br />    <br />   meta 标签的作用:详细L 《HTML中meta的作用?<br />   “meta是用来在HTML文档中模拟HTTP协议的响应头报文?#8221;在meta标签中写和在HTTP头里写是一LQ这也是Z解决用普通HTML写网늚人无法自行定义HTTP头的问题。但是,meta是一个html标签Q所以必进入到html解析的步骤才能生效,而生效后Q浏览器会退回几步,重新讄好HTTP头从头再开始解码、解析html。所以meta中写的内容会覆盖HTTP头里的内容,无论哪个览器都是这L?<br />    <br />   出现I白必ȝ3Ҏ(gu)Ӟ <br />   1.title标签里的内容Z文其他双字节字符Q?<br />   2.指定|页~码?meta 信息?title 标签的下方; <br />   3.另存或{换utf-8~码时没有包?unicode {֐?<br />    <br />   BOM QByte Order MarkQ字节序标识Q的作用Q?<br />   用于UTF-16~码的文Ӟ在UTF-8~码的文件中不需要标识字节序Q所以被用来标识q是一个UTF-8~码文g?<br />    <br />   q个问题q是IE的兼Ҏ(gu)问题,在解码的时候如果遇到错误的~码׃断解码?<br />   q个是IE的bugQ不q也不要认ؓ你用的是MyIE、MyIE2、遨游Maxthon、GreenBrowser、腾讯TT׃会受到媄响。Firefox或者Opera更不会了?<br />    <br />   解决办法Q?<br />   utf8面应该使用标准序 <br />   <meta http-equiv=”content-type” content=”text/html; charset=UTF-8″ /> <br />   <meta http-equiv=”content-language” content=”zh-CN” /> <br />   <meta name=”robots” content=”index,follow” /> <br />   <meta name=”keywords” content=”" /> <br />   <meta name=”description” content=”" /> <br />   <meta name=”rating” content=”general” /> <br />   <meta name=”author” content=”" /> <br />   <meta name=”copyright” content=”" /> <br />   <meta name=”generator” content=”" /> <br />   <title></title> <br />    <br />   参考文章: <br />   http://hewei.org/website-research/shtml-utf8-bom/ shtml调用在utf8~码下多出空行的问题Q解冻I <br />   IE中打开UTF-8~码titleZ文的|页会显C空白页的问?(文中大部分是q里的观? <br />     做h要厚道,h明{自酷|动?www.ASPCOOL.COM)?img src ="http://www.tkk7.com/rain1102/aggbug/182999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2008-02-29 17:31 <a href="http://www.tkk7.com/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..http://www.tkk7.com/rain1102/archive/2008/02/26/182143.html周锐周锐Tue, 26 Feb 2008 01:53:00 GMThttp://www.tkk7.com/rain1102/archive/2008/02/26/182143.htmlhttp://www.tkk7.com/rain1102/comments/182143.htmlhttp://www.tkk7.com/rain1102/archive/2008/02/26/182143.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/182143.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/182143.html一下{帖别人博客的解决方式 http://blog.csdn.net/f9inux/archive/2006/11/05/1368428.aspx
应用部vq行的时候出现JSP异常, 发生在用JSTL库的时? According to TLD or attribute directive in tag file, attribute value does not accept any expressions, 可能是因Z用了JSP2.0版本, 同时又没有用JSTL core库的备用版本(RT?, 以下有两U处理方?

1. 修改web.xml.
<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">

改ؓ2.3版本?
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

2. 使用JSTL core RT?

JSTL core库的有两Utaglib伪指? 其中RT库即是依赖于JSP传统的请求时属性? 而不是依赖于EL来实?UCؓEL?JSP2.0支持EL)

JSP中?lt;%@ taglib uri=http://java.sun.com/jstl/core prefix="c"%>?.3版本都可??.4׃行了, N是版本不兼容?

只要?
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>

改ؓ
<%@ taglib uri=http://java.sun.com/jstl/core_rt prefix="c"%>

周锐 2008-02-26 09:53 发表评论
]]>
J2SE APIdProperties文g六种Ҏ(gu)(转蝲)http://www.tkk7.com/rain1102/archive/2008/01/11/174544.html周锐周锐Fri, 11 Jan 2008 03:06:00 GMThttp://www.tkk7.com/rain1102/archive/2008/01/11/174544.htmlhttp://www.tkk7.com/rain1102/comments/174544.htmlhttp://www.tkk7.com/rain1102/archive/2008/01/11/174544.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/174544.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/174544.html
  2。用java.util.ResourceBundlecȝgetBundle()Ҏ(gu)CZQResourceBundlerb=ResourceBundle.getBundle(name,Locale.getDefault());

  3。用java.util.PropertyResourceBundlecȝ构造函数示例:InputStreamin=newBufferedInputStream(newFileInputStream(name));ResourceBundlerb=newPropertyResourceBundle(in);

  4。用class变量的getResourceAsStream()Ҏ(gu)CZQInputStreamin=JProperties.class.getResourceAsStream(name);Propertiesp=newProperties();p.load(in);

  5。用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()Ҏ(gu)CZQInputStreamin=JProperties.class.getClassLoader().getResourceAsStream(name);Propertiesp=newProperties();p.load(in);

  6。用java.lang.ClassLoadercȝgetSystemResourceAsStream()静态方法示例:InputStreamin=ClassLoader.getSystemResourceAsStream(name);Propertiesp=newProperties();p.load(in);

  补充

  Servlet中可以用javax.servlet.ServletContext的getResourceAsStream()Ҏ(gu)CZQInputStreamin=context.getResourceAsStream(path);Propertiesp=newProperties();p.load(in);

周锐 2008-01-11 11:06 发表评论
]]>
SimpleTag的开?/title><link>http://www.tkk7.com/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.tkk7.com/rain1102/archive/2007/01/22/95362.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/95362.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2007/01/22/95362.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/95362.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/95362.html</trackback:ping><description><![CDATA[SimpleTag的生命周期:<br />1.每次遇到标签Ӟ容器构造一个SimpleTag的实例,q且q个构造方法没有参数。和l典的标{一PSimpleTag不能q行~冲Q故不能重用Q每ơ都需要构造新的实例?br />2.调用了构造方法后Q就调用setJspContext()和setParent()Ҏ(gu)Q只有这个标{֜另一个标{之内时Q才调用setParent()Ҏ(gu)?br />3.容器调用每个属性的setterҎ(gu)以设|这些属性的倹{?br />4.如果存在BodyQ那么就使用setJspBodyҎ(gu)来设|这个标{标签体?br />5.容器调用doTagҎ(gu)Q所以的标签的逻辑、P代和Body计算Q都在这个方法中?br />6.当doTagҎ(gu)q回Ӟ所有的参数被锁定?img src ="http://www.tkk7.com/rain1102/aggbug/95362.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2007-01-22 16:24 <a href="http://www.tkk7.com/rain1102/archive/2007/01/22/95362.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发P代的标签?/title><link>http://www.tkk7.com/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.tkk7.com/rain1102/archive/2007/01/22/95358.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/95358.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2007/01/22/95358.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/95358.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/95358.html</trackback:ping><description><![CDATA[<p>package com.rain.tag;</p> <p>import <a title="Java爱好? href="http://www.tkk7.com/rain1102" >Java</a>.io.IOException;<br />import <a title="Java爱好? href="http://www.tkk7.com/rain1102" >Java</a>.util.Collection;<br />import <a title="Java爱好? href="http://www.tkk7.com/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中表C的一个属性的名字<br /> private Iterator it;     //代表要P代的内容<br /> private String type;  //表示it中对象的cd<br /> <br /> public void setCollection(Collection collection){<br />  if(collection.size()>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 />׃BodyTagSupportcdCTagSupportQ而TagSupport又实CTterationTag接口。故在开发P代标{时可以直接从BodyTagSupportl承?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的几个常敎ͼ如下所C:<br />1.NESTEDQ标{中的参数在starttag到endtag之间是有效的?br />2.AT_BENGINQ标{中的参数在标签的开始到JSP面l束是有效的?br />3.AT_ENDQ标{中的参数在标签的结束到JSP面l束是有效的?br /></p> <hr /> <p>在标{描述中,必须同时指定标签的实现类和IterateTEIcR?br />       <tag><br />          <name>iterate</name><br />            <font color="#006400"><tag-class>com.rain.tag.IterateTag</tag-class><br />            <tei-class>com.rain.tag.IterateTEI</tei-class><br /></font>          <body-content>jsp</body-content><br />          <attribute><br />            <name>collection</name><br />            <required>true</required><br />            <rtexprvalue>true</rtexprvalue><br />          </attribute><br />          <attribute><br />            <name>name</name><br />            <required>true</required><br />          </attribute><br />          <attribute><br />            <name>type</name><br />            <required>true</required><br />          </attribute><br />      </tag><br /></p> <hr /> <?xml version="1.0" encoding="UTF-8"?><br /><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<a ><br /><web-app><br /> <taglib><br />   <taglib-uri>/demotag</taglib-uri><br />   <taglib-location>/WEB-INF/mytag.tld</taglib-location><br /> </taglib><br /></web-app><br /><hr /> <%@ page language="<a title="Java爱好? href="http://www.tkk7.com/rain1102" >Java</a>" contentType="text/html; charset=UTF-8"%><br /><jsp:directive.page import="<a title="Java爱好? href="http://www.tkk7.com/rain1102" >Java</a>.util.Collection"/><br /><%@ taglib uri="/demotag" prefix="mt" %><br /><html><br /><head><br /><title>Insert title here</title><br /></head><br /><body><br /><%<br /> String one="one";<br /> String two="two";<br /> String three="three";<br /> Collection list=new <a title="Java爱好? href="http://www.tkk7.com/rain1102" >Java</a>.util.ArrayList();<br /> list.add(one);<br /> list.add(two);<br /> list.add(three);<br />%><br /><mt:iterate name="scott" type="String" collection="<%=list%>"><br />  <%=scott%><br><br /></mt:iterate><br /></body><br /></html><p>q行l果Q?br />one<br />two<br />three<br /></p><img src ="http://www.tkk7.com/rain1102/aggbug/95358.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2007-01-22 16:15 <a href="http://www.tkk7.com/rain1102/archive/2007/01/22/95358.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多个标签的嵌?/title><link>http://www.tkk7.com/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.tkk7.com/rain1102/archive/2007/01/22/95350.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/95350.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2007/01/22/95350.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/95350.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/95350.html</trackback:ping><description><![CDATA[<p>package com.rain.tag;</p> <p>import <a title="Java爱好? href="http://www.tkk7.com/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:<tag:if value=true><br /> *       ...<br /> *       </tag:if><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.tkk7.com/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 /><tag><br />          <name>if</name><br />          <tag-class>com.rain.tag.IfTag</tag-class><br />          <body-content>jsp</body-content><br />          <attribute><br />            <name>value</name><br />            <required>true</required><br />            <rtexprvalue>true</rtexprvalue><br />          </attribute><br />        </tag><br />        <tag><br />          <name>out</name><br />          <tag-class>com.rain.tag.OutTag</tag-class><br />          <body-content>jsp</body-content><br />          <attribute><br />            <name>value</name><br />            <required>true</required><br />            <rtexprvalue>true</rtexprvalue><br />          </attribute><br />        </tag><br /><hr /><br /><?xml version="1.0" encoding="UTF-8"?><br /><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<a ><br /><web-app><br /> <taglib><br />   <taglib-uri>/demotag</taglib-uri><br />   <taglib-location>/WEB-INF/mytag.tld</taglib-location><br /> </taglib><br /></web-app><br /><hr /><br /><%@ page language="<a title="Java爱好? href="http://www.tkk7.com/rain1102" >Java</a>" contentType="text/html; charset=UTF-8"%><br /><%@ taglib uri="/demotag" prefix="mt" %><br /><html><br /><head><br /><title>Insert title here</title><br /></head><br /><body><br /><%<br />  boolean flag=true;<br />  String outValue="Hello World!";<br />%><br /><mt:if value="<%=flag%>"><br />  <mt:out value="<%=outValue%>"><br />    q是mt:out...>打印的内宏V?br />  </mt:out><br /></mt:if><br /><br><br /><mt:if value="false"><br />  <mt:out value="<%=outValue%>"><br />    q些内容不会昄在客L?br />  </mt:out><br /></mt:if><br /></body><br /></html><br /><hr /><br />l果昄Q?br />控制?br />value is true<br />Hello World!<br />value is false<br />面<br />Hello World! q是mt:out...>打印的内宏V?img src ="http://www.tkk7.com/rain1102/aggbug/95350.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2007-01-22 15:27 <a href="http://www.tkk7.com/rain1102/archive/2007/01/22/95350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发带Body的标{ֺhttp://www.tkk7.com/rain1102/archive/2007/01/22/95330.html周锐周锐Mon, 22 Jan 2007 06:11:00 GMThttp://www.tkk7.com/rain1102/archive/2007/01/22/95330.htmlhttp://www.tkk7.com/rain1102/comments/95330.htmlhttp://www.tkk7.com/rain1102/archive/2007/01/22/95330.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/95330.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/95330.html带有Body的Tag必须实现javax.servlet.jsp.tagext.BodyTag接口?br />BodyTag的处理过E:
1.当容器创Z个新的标{֮例后Q通过setPageContext来设|标{面上下文?br />2.使用setParentҎ(gu)讄q个标签的上一U标{,如果没有上一U嵌套,讄为null?br />3.讄标签的属性,q个属性在标签库描q文件中定义Q如果没有定义属性,׃用调用此cL法?br />4.调用doStartTagҎ(gu)Q这个方法可以返回EVAL_BODY_INCLUDE和SKIP_BODYQ当q回EVAL_BODY_INCLUDEӞp标{BodyQ如果返回SKIP_BODYQ就不再计算标签的Body?br />5.调用setBodyContent讄当前的BodyContent?br />6.调用doInitBodyQ如果在计算BodyContent旉要进行一些初始化Q就在这个方法中q行?br />7.每次计算完BodyTag后调用doAfterBodyQ如果返回EVAL_BODY_TAGQ新的ؓEVAL_BODY_AGAINQ,pCl计一ơBodyTagQ直到返回SKIP_BODY才l执行第8步?br />8.调用doEndTagҎ(gu)Q这个方法可以返回EVAL_PAGE或者SKIP_PAGEQ当q回EVAL_PAGEӞ容器在标签l束时l计JSP面其他的部分;如果q回SKIP_PAGEQ容器将在标{束时停止计算JSP面其他的部分?br />9.调用release()Ҏ(gu)释放标签E序占用的Q何资源?br />
下面是一个P代器标签例子Q?br />package com.rain.tag;

import Java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class BodyTagExample extends BodyTagSupport {

 int counts;    //countsP代的ơ数
 
 public BodyTagExample(){
  super();
 }
 
 /*
  * 讄counts属性,q个Ҏ(gu)由容器自动调?br />  */
 public void setCounts(int c){
  this.counts=c;
 }
 
 @Override
 public int doAfterBody() throws JspException {
  // TODO Auto-generated method stub
  System.out.println("doAfterBody"+counts);
  if(counts>1){
   counts--;
   return EVAL_BODY_AGAIN;
  }else{
   return SKIP_BODY;
  }
 }

 @Override
 public int doEndTag() throws JspException {
  // TODO Auto-generated method stub
  System.out.println("doEndTag");
  try{
   if(bodyContent!=null){
    bodyContent.writeOut(bodyContent.getEnclosingWriter());
   }
  }catch(IOException e){
   throw new JspTagException("IO Error:"+e.getMessage());
  }
  return EVAL_PAGE;
 }

 @Override
 public void doInitBody() throws JspException {
  // TODO Auto-generated method stub
  System.out.println("doInitBody");
 }

 @Override
 public int doStartTag() throws JspException {
  // TODO Auto-generated method stub
  System.out.println("doStartTag");
  if(counts>0){
   return EVAL_BODY_AGAIN;
  }else{
   return SKIP_BODY;
  }
 }

 @Override
 public void setBodyContent(BodyContent arg0) {
  // TODO Auto-generated method stub
  System.out.println("setBodyContent");
  this.bodyContent=arg0;
 }
}

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="        xmlns:xsi="        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
        version="2.0">
        <description>A tag library exercising SimpleTag handlers.</description>
        <tlib-version>1.0</tlib-version>
       
        <short-name>examples</short-name>
        <uri>/demotag</uri>
        <description>JSP应用开?lt;/description>
        
          <tag>
          <name>loop</name>
          <tag-class>com.rain.tag.BodyTagExample</tag-class>
          <body-content>jsp</body-content>    Body-Content必须为JSP
          <attribute>
            <name>counts</name>                    定义中必LsetCounts(int counts)Ҏ(gu)
            <required>true</required>               表示q个属性是必须?/font>
            <rtexprvalue>true</rtexprvalue>       支持JSP表达?br />          </attribute>
        </tag>
</taglib>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<web-app>
 <taglib>
   <taglib-uri>/demotag</taglib-uri>
   <taglib-location>/WEB-INF/mytag.tld</taglib-location>
 </taglib>
</web-app>

<%@ page language="
Java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="/demotag" prefix="bodytag" %>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<bodytag:loop counts="5">
  现在旉?<%=new Java.util.Date()%><br>
</bodytag:loop>
</body>
</html>

执行l果Q?/strong>
控制台打印出
doStartTag
setBodyContent
doInitBody
doAfterBody5
doAfterBody4
doAfterBody3
doAfterBody2
doAfterBody1
doEndTag

面昄
现在旉?Mon Jan 22 14:52:43 CST 2007
现在旉?Mon Jan 22 14:52:43 CST 2007
现在旉?Mon Jan 22 14:52:43 CST 2007
现在旉?Mon Jan 22 14:52:43 CST 2007
现在旉?Mon Jan 22 14:52:43 CST 2007



周锐 2007-01-22 14:11 发表评论
]]>
JSP中开发自定义标签Q实现Tag接口Q?/title><link>http://www.tkk7.com/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.tkk7.com/rain1102/archive/2007/01/22/95258.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/95258.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2007/01/22/95258.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/95258.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/95258.html</trackback:ping><description><![CDATA[<p>开发和使用自定义标{序有三个步骤Q?br />1.开发标{֮现类<br />2.~写标签描述Q这个描q通常是以.tldl尾的文?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;  //q回SKIP_BODYQ表CZ计算标签?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 />~写标签库描q?br /><br /><?xml version="1.0" encoding="UTF-8" ?><br /><taglib xmlns="<a <br />        xmlns:xsi="<a <br />        xsi:schemaLocation="<a >http://java.sun.com/xml/ns/j2ee</a> web-jsptaglibrary_2_0.xsd"<br />        version="2.0"><br />        <description>A tag library exercising SimpleTag handlers.</description><br />        <tlib-version>1.0</tlib-version><br />        <br />        <short-name>examples</short-name><br />        <uri>/demotag</uri><br />        <description>JSP应用开?lt;/description><br />        <br />        <font color="#006400"><tag><br />          <description>Outputs Hello,World</description><br />          <name>hello_int</name><br />          <tag-class>com.rain.tag.HelloTag</tag-class><br />          <body-content>empty</body-content><br />        </tag><br /></font></taglib><br /><br />使用自定义标{?br /><br /><?xml version="1.0" encoding="UTF-8"?><br /><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<a ><br /><web-app><br /> <taglib><br />   <taglib-uri>/demotag</taglib-uri><br />   <taglib-location>/WEB-INF/mytag.tld</taglib-location><br /> </taglib><br /></web-app><br /><br /><br /><%@ page language="<a title="Java爱好? href="/rain1102">Java</a>" contentType="text/html; charset=UTF-8"%><br /><%@ taglib uri="/demotag" prefix="hello" %><br /><html><br /><head><br /><title>Insert title here</title><br /></head><br /><body><br /><p>以下的内Ҏ(gu)从Taglib中显C的Q?lt;/p><br /><p><i><hello:hello_int/></i></p><br /></body><br /></html><br /><br />本实例是实现Tag接口Q但Z在开发中方便单,一般直接承TagSupportc,只覆盖doStartTag和doEndTag两个Ҏ(gu)可以。TagSupport是Tag的子cR?/p><img src ="http://www.tkk7.com/rain1102/aggbug/95258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2007-01-22 11:53 <a href="http://www.tkk7.com/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.tkk7.com/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.tkk7.com/rain1102/archive/2007/01/19/94945.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/94945.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2007/01/19/94945.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/94945.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/94945.html</trackback:ping><description><![CDATA[事例Q?<br /><% <br />String newImg="yes"; <br />request.setAttribute("newImg",newImg); <br />%> <br />${newImg} <br /><c:set var="newImg1" value="${'10'}"/> <br />${newImg1} <br /><%= pageContext.getAttribute("newImg1")%> <br /><br /><br />原理Q?<br />jstl中的变量在赋?lt;c:set>的时候有个scope属性,它是用来讄该变量的作用域的Q可以是 <br />page <br />request <br />session <br />application <br />默认是pageQ同一jsp面有效 <br /><br />q四个scope对应在jsp中可以通过 <br />pageContext.getAttribute() <br />request.getAttribute() <br />session.getAttribute() <br />application.getAttribute() <br />得到倹{?<br /><br />如下Q?<br /><br /><c:set var="a" value="hello a" scope="request" /> <br /><c:set var="b" value="hello b"/> <br /><br /><% <br />out.print(request.getAttribute("a") + "<br/>"); <br />out.print(pageContext.getAttribute("b")); <br />%> <br /><br />同理Q也可以从jsp中得到变量放入jstl的变量中?img src ="http://www.tkk7.com/rain1102/aggbug/94945.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2007-01-19 15:40 <a href="http://www.tkk7.com/rain1102/archive/2007/01/19/94945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jstl的函数库http://www.tkk7.com/rain1102/archive/2007/01/19/94944.html周锐周锐Fri, 19 Jan 2007 07:39:00 GMThttp://www.tkk7.com/rain1102/archive/2007/01/19/94944.htmlhttp://www.tkk7.com/rain1102/comments/94944.htmlhttp://www.tkk7.com/rain1102/archive/2007/01/19/94944.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/94944.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/94944.html其他函数Q?

函数
描述

fn:contains(string, substring)
如果参数string中包含参数substringQ返回true

fn:containsIgnoreCase(string, substring)
如果参数string中包含参数substringQ忽略大写Q,q回true

fn:endsWith(string, suffix)
如果参数 string 以参数suffixl尾Q返回true

fn:escapeXml(string)
有Ҏ(gu)意义的XML (和HTML)转换为对应的XML character entity codeQƈq回

fn:indexOf(string, substring)
q回参数substring在参数string中第一ơ出现的位置

fn:join(array, separator)
一个给定的数组array用给定的间隔Wseparator串在一Pl成一个新的字W串q返回?

fn:length(item)
q回参数item中包含元素的数量。参数Itemcd是数l、collection或者String。如果是Stringcd,q回值是String中的字符数?

fn:replace(string, before, after)
q回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方Qƈq回替换后的l果

fn:split(string, separator)
q回一个数l,以参数separator 为分割符分割参数stringQ分割后的每一部分是数组的一个元?

fn:startsWith(string, prefix)
如果参数string以参数prefix开_q回true

fn:substring(string, begin, end)
q回参数string部分字符? 从参数begin开始到参数end位置Q包括end位置的字W?

fn:substringAfter(string, substring)
q回参数substring在参数string中后面的那一部分字符?

fn:substringBefore(string, substring)
q回参数substring在参数string中前面的那一部分字符?

fn:toLowerCase(string)
参数string所有的字符变ؓ写Qƈ其q回

fn:toUpperCase(string)
参数string所有的字符变ؓ大写Qƈ其q回

fn:trim(string)
去除参数string 首尾的空|q将其返?img src ="http://www.tkk7.com/rain1102/aggbug/94944.html" width = "1" height = "1" />

周锐 2007-01-19 15:39 发表评论
]]>
写入内容到文件中http://www.tkk7.com/rain1102/archive/2007/01/19/94883.html周锐周锐Fri, 19 Jan 2007 03:05:00 GMThttp://www.tkk7.com/rain1102/archive/2007/01/19/94883.htmlhttp://www.tkk7.com/rain1102/comments/94883.htmlhttp://www.tkk7.com/rain1102/archive/2007/01/19/94883.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/94883.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/94883.htmlPrintWriter writer=new PrintWriter(new BufferedWriter(new FileWriter("d:\\foo.txt")));
writer.write("test");
writer.close();
q样每次写入新的内容的时候都会把原来的内容删除。如果想保存原来的内容,可以修改为:
PrintWriter writer=new PrintWriter(new BufferedWriter(new FileWriter("d:\\foo.txt",true)));


周锐 2007-01-19 11:05 发表评论
]]>
使用FileReaderd文ghttp://www.tkk7.com/rain1102/archive/2007/01/19/94879.html周锐周锐Fri, 19 Jan 2007 02:56:00 GMThttp://www.tkk7.com/rain1102/archive/2007/01/19/94879.htmlhttp://www.tkk7.com/rain1102/comments/94879.htmlhttp://www.tkk7.com/rain1102/archive/2007/01/19/94879.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/94879.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/94879.html可以在JSP中用FileReader和FileInputStream{类来读取文件的内容。由于FileReaderh比FileInputStream更好的性能Q在q里使用FileReader来读取文件的内容?br /><%@ page language="Java" import="Java.io.*" contentType="text/html; charset=gb2312" buffer="64kb"%>
<html>
<head>
<title>Read file</title>
</head>
<body>
<%
  try{
  BufferedReader in=new BufferedReader(new FileReader("e:\\test.txt"));  //可以是Q意位|的文g
  String file="";
  String temp="";
  while((temp=in.readLine())!=null){
   file+=temp;
  }
  in.close();
  out.println(file);
  out.flush();
  }catch(Exception e){
   out.println(e);
   e.printStackTrace();
  }
%>
</body>
</html>



周锐 2007-01-19 10:56 发表评论
]]>
使用ServletContextd文g内容http://www.tkk7.com/rain1102/archive/2007/01/19/94874.html周锐周锐Fri, 19 Jan 2007 02:49:00 GMThttp://www.tkk7.com/rain1102/archive/2007/01/19/94874.htmlhttp://www.tkk7.com/rain1102/comments/94874.htmlhttp://www.tkk7.com/rain1102/archive/2007/01/19/94874.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/94874.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/94874.html
<%@ page language="Java" import="Java.io.*" contentType="text/html; charset=gb2312" buffer="64kb"%>
<html>
<head>
<title>Read file</title>
</head>
<body>
<%
  try{
   InputStream in=getServletContext().getResourceAsStream("/file.txt");
   String file="";
   String temp="";
   BufferedReader buffer=new BufferedReader(new InputStreamReader(new BufferedInputStream(in)));
   while((temp=buffer.readLine())!=null){
    file+=temp;
   }
   buffer.close();
   in.close();
   out.println(file);
   out.flush();
  }catch(Exception e){
   out.println(e);
   e.printStackTrace();
  }
%>
</body>
</html>

Java.io.getResourceAsStream和java.lang.Class.getResourceAsStreamҎ(gu)不同Q后者用ClassLoader来获得指定的资源?br />带缓冲的输入来d文g资源Q不仅速度快,占用pȝ资源,而且不会出现中文q问题?/font>

周锐 2007-01-19 10:49 发表评论
]]>
在不同页面或者不同用户之间共享数据的Ҏ(gu)http://www.tkk7.com/rain1102/archive/2007/01/19/94855.html周锐周锐Fri, 19 Jan 2007 01:44:00 GMThttp://www.tkk7.com/rain1102/archive/2007/01/19/94855.htmlhttp://www.tkk7.com/rain1102/comments/94855.htmlhttp://www.tkk7.com/rain1102/archive/2007/01/19/94855.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/94855.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/94855.html 对于同一用户的会?/span> , 惌在不同页面之间共享数?/span> , 可以有以下几U:

1Q?span style="FONT: 7pt 'Times New Roman'">  把数据保存在 Session 中(q是常见方式Q;

2Q?span style="FONT: 7pt 'Times New Roman'">  通过 Cookie Q?/span>

3Q?span style="FONT: 7pt 'Times New Roman'">  通过隐含的表单把数据提交C一个页面;

4Q?span style="FONT: 7pt 'Times New Roman'">  通过 ServletContext 对象Q?/span>

5Q?span style="FONT: 7pt 'Times New Roman'">  通过 Application 对象Q?/span>

6Q?span style="FONT: 7pt 'Times New Roman'">  通过文gpȝ或者数据库?/span>

在不同用户之间共享数据,通常用法是:

1Q?span style="FONT: 7pt 'Times New Roman'">  通过 ServletContext 对象Q?/span>

2Q?span style="FONT: 7pt 'Times New Roman'">  通过 Application 对象Q?/span>

3Q?span style="FONT: 7pt 'Times New Roman'">  通过文gpȝ或者数据库?/span>



周锐 2007-01-19 09:44 发表评论
]]>
Tomcat+JSPl典配置实例http://www.tkk7.com/rain1102/archive/2006/11/22/82663.html周锐周锐Wed, 22 Nov 2006 01:02:00 GMThttp://www.tkk7.com/rain1102/archive/2006/11/22/82663.htmlhttp://www.tkk7.com/rain1102/comments/82663.htmlhttp://www.tkk7.com/rain1102/archive/2006/11/22/82663.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/82663.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/82663.html

l常看到jsp的初学者问tomcat下如何配|jsp、servlet和bean的问题,于是ȝ了一下如何tomcat下配|jsp、servlet和benQ希望对那些初学者有所帮助?/p>

一、开发环境配|?/strong>

W一步:下蝲j2sdk和tomcatQ到sun官方站(http://java.sun.com/j2se/1.5.0/download.jspQ下载j2sdkQ注意下载版本ؓWindows Offline Installation的SDKQ同时最好下载J2SE 1.5.0 DocumentationQ然后到tomcat官方站点Qhttp://jakarta.apache.org/site/downloads/downloads_tomcat-5.cgiQ下载tomcatQ下载最?.5.9版本的tomcatQ;

W二步:安装和配|你的j2sdk和tomcatQ执行j2sdk和tomcat的安装程序,然后按默认设|进行安装即可?/p>

1.安装j2sdk以后Q需要配|一下环境变量,在我的电(sh)?>属?>高->环境变量->pȝ变量中添加以下环境变?假定你的j2sdk安装在c:\j2sdk1.5.0Q:

JAVA_HOME=c:\j2sdk1.5.0
 classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;Q?;一定不能少Q因为它代表当前路径)
 path=%JAVA_HOME%\bin

接着可以写一个简单的javaE序来测试J2SDK是否已安装成功:

public class Test{
public static void main(String args[]){
System.out.println("This is a test program.");
}
}

上面的q段E序保存为文件名为Test.java的文件?/p>

然后打开命o提示W窗口,cdC的Test.java所在目录,然后键入下面的命?/p>

javac Test.java
 Java Test

此时如果看到打印出来This is a test program.的话说明安装成功了,如果没有打印句话Q你需要仔l检查一下你的配|情c?/p>

2.安装Tomcat后,在我的电(sh)?>属?>高->环境变量->pȝ变量中添加以下环境变?假定你的tomcat安装在c:\tomcat)Q?/p>

CATALINA_HOME=c:\tomcat
 CATALINA_BASE=c:\tomcat

然后修改环境变量中的classpathQ把tomat安装目录下的common\lib下的(可以Ҏ(gu)实际q加)servlet.jarq加到classpath中去Q修改后的classpath如下Q?/p>

classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;

接着可以启动tomcatQ在IE中访问http://localhost:8080Q如果看到tomcat的欢q页面的话说明安装成功了?/p>

W三步:建立自己的jsp app目录

1.到Tomcat的安装目录的webapps目录Q可以看到ROOTQexamples, tomcat-docs之类Tomcat自带的的目录Q?br /> 2.在webapps目录下新Z个目录,起名叫myappQ?br /> 3.myapp下新Z个目录WEB-INFQ注意,目录名称是区分大写的;
 4.WEB-INF下新Z个文件web.xmlQ内容如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>My Web Application</display-name>
<description>
A application for test.
</description>
</web-app>

5.在myapp下新Z个测试的jsp面Q文件名为index.jspQ文件内容如下:

<html><body><center>
Now time is: <%=new Java.util.Date()%>
</center></body></html>

6.重启Tomcat

7.打开览器,输入http://localhost:8080/myapp/index.jsp 看到当前旉的话说明成功了?/p>

W四步:建立自己的ServletQ?/p>

1.用你最熟?zhn)的编辑器Q徏议用有语法查的java ideQ新Z个servletE序Q文件名为Test.javaQ文件内容如下:

package test;
import Java.io.IOException;
import Java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Test extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out=response.getWriter();
out.println("<html><body><h1>This is a servlet test.</h1></body></html>");
out.flush();
}
}

2 .~译
 Test.java攑֜c:\test下,使用如下命o~译Q?/p>

C:\Test>javac Test.java

然后在c:\Test下会产生一个编译后的servlet文gQTest.class

3 .结构test\Test.class剪切?CATALINA_HOME%\webapps\myapp\WEB-INF\classes下,也就是剪切那个test目录到classes目录下,如果classes目录不存在,新Z个?现在webapps\myapp\WEB-INF\classes下有test\Test.class的文件目录结?/p>

4 .修改webapps\myapp\WEB-INF\web.xmlQ添加servlet和servlet-mapping

~辑后的web.xml如下所C,U色为添加的内容:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>My Web Application</display-name>
<description>
A application for test.
</description>
<servlet>
<servlet-name>Test</servlet-name>
<display-name>Test</display-name>
<description>A test Servlet</description>
<servlet-class>test.Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/Test</url-pattern>
</servlet-mapping>
</web-app>

q段话中的servletq一D声明了你要调用的ServletQ而servlet-mapping则是声明的servlet"映射"到地址/Test?/p>

5 .好了Q重启动TomcatQ启动浏览器Q输入http://localhost:8080/myapp/Test 如果看到输出This is a servlet test.p明编写的servlet成功了?/p>

注意Q修改了web.xml以及新加了classQ都要重启Tomcat

W四步:建立自己的BeanQ?/p>

1.用你最熟?zhn)的编辑器Q徏议用有语法查的java ideQ新Z个javaE序Q文件名为TestBean.javaQ文件内容如下:

package test;
public class TestBean{
private String name = null;
public TestBean(String strName_p){
this.name=strName_p;
}
public void setName(String strName_p){
this.name=strName_p;
}
public String getName(){
return this.name;
}
}

2 .~译

TestBean.java攑֜c:\test下,使用如下命o~译Q?/p>

C:\Test>javac TestBean.java

然后在c:\Test下会产生一个编译后的bean文gQTestBean.class

3 .TestBean.class文g剪切?%CATALINA_HOME%\webapps\myapp\WEB-INF\classes\test下,

4 .新徏一个TestBean.jsp文gQ文件内容ؓQ?/p>
<%@ page import="test.TestBean" %>
<html><body><center>
<%
TestBean testBean=new TestBean("This is a test Java bean.");
%>
Java bean name is: <%=testBean.getName()%>
</center></body></html>

5 .好了Q重启TomcatQ启动浏览器Q输入http://localhost:8080/myapp/TestBean.jsp 如果看到输出Java bean name is: This is a test Java bean.p明编写的Bean成功了?/p>

q样完成了整个Tomcat下的jsp、servlet和javabean的配|。接下来需要做的事情就是多看书、多d人的好代码,自己多动手写代码以增己在q方面开发的能力了?/p>

jvm应填写到
 c:\j2sdk\bin

l你一个简单的配置Q:Q:

JSP环境配置心得

首先要说的是Q用jdk+tomcat完全可以配置我们的jsp服务器,不再需要其实Q何东东,有很多文章介l了ApacheQ其实根本用不着Q一般的学习调试tomcat完全可以胜Q了?/p>

安装jdk后,tomcat在安装之前会自动扑ֈjdk的安装\径,一路点?下一?Q经q一D|间的文g复制Q最?close"Q完成comcat的安装?/p>

(zhn)最好去下蝲一个版本较高的tomcatQ比?.1以上的,因ؓ它不需要设|太多的pȝ变量Q右?我的?sh)?Q选择"属?->"高"->"环境变量"->"pȝ变量"Q新Z个TOMCAT_HOMEQD|成你的tomcat所在的路径Q比如:D:\Program Files\Apache Group\Tomcat 5.5Q配|完成?/p>

从开始菜单中扑ֈtomcat选项Q一般打开序是:开?>E序->Apache Tomcat 5.5Q选择"Start Tomcat"Q让jsp服务器开始运行,此时会打开一个类似Dos的窗口,会显CZ些相关的信息?/p>

如果(zhn)用代理上|,一定要先撤掉代理,不然(zhn)的jspE序永远也得不到执行。如果不是代理的Q这一步就跌了?/p>

打开览器,在地址栏中输入Qhttp://localhost:8080Q如果看到有老虎Q我也不知道是老虎q是猫)的画面,恭喜(zhn),(zhn)成功了一半?/p>

先来享受一下成功的喜?zhn)吧,误入下面的代码Q?/p>
<html>
<head>
<title>First Page</title>
</head>
<body>
<H3>Today is: h
<%= new Java.util.Date() %>
</H3>
</body>
</html>

该E序保存?First.jspQ放到Tomcat的ROOT目录下,然后在浏览器的地址栏中输入Qhttp://localhost:8080/First.jspQ?First.jsp跟我们保存的文g名的大小写要一?回RQ如果不出意外,应该可以看到形如Today is: h Fri Apr 11 08:32:38 CST 2003 的结果?/p>

注意QROOT是tomcat的默认虚拟目录,如果要改成自q虚拟目录怎么办呢Q请l箋往下看吧?/p>

要改成自q虚拟目录Q就要请出server.xml来了Q该文g是一个配|文Ӟ在Tomcat\conf目录下,使用M文本~辑软g都能打开它,我们先找C面一句:

<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="20000"
useURIValidationHack="false" disableUploadTimeout="true" />

q里的port="8080"是端口Q我们完全可以用别的端口来代替,但不能是被系l占用的端口Q?--1023Q,q里单提一下?/p>

下面我们再往下找Q会发现以下的语句:

</Context>
 </Host>

我们应该找到这两个语句Q如果不懂E文,(zhn)就认定q两个语句好了。然后我们将该语句更改如下:

</Context>
<Context path="/myjsp" debug="0" docBase="e:/myjsp" reloadable="true">
</Context>
</Host>

q里的path="/myjsp"是我们配|的虚拟目录了,以后在地址栏中输入http://localhost:8080/myjsp卛_。而docBase="e:/myjsp" 则是机器本地路径Q他们通过q个语句形成一个映关p,其它照抄?/p>

上面的First.jsp文g攑ֈe:/myjsp目录下,输入http://localhost:8080/myjsp/First.jspQ是不是有一U喜上眉梢的感觉Q?/p>

在论坛里我见得最多的是很多Z知道javaBean文g攑ֈ哪里Q老实说开始我也不知道Q更令h不解的是Q十个h有九(ji)U不同的说法Q这更让我们茫然。其实这问题也不是我们想像的那么复杂Q我们以一个例子说明:

先徏立一个javaE序Q代码如下:

package hall;
public class SimpleBean {
private String message = "No message specified";
public String getMessage() {
return(message);
}
public void setMessage(String message) {
this.message = message;
}
}

保存为SimpleBean.javaQ编译后会生成一个包Q其实就相当于一个目录,也就是SimpleBean.class会存攑֜hall目录中,暂且保存hQ将来备用?/p>

再输入以下代码:

<HTML>
<HEAD>
<TITLE>Reusing JavaBeans in JSP</TITLE>
</HEAD>
<BODY>
<CENTER>
<TABLE BORDER=5>
<TR><TH CLASS="TITLE">
Reusing JavaBeans in JSP</TABLE>
</CENTER>
<P>
<jsp:useBean id="test" class="hall.SimpleBean" />
<jsp:setProperty name="test" property="message" value="Hello WWW" />
<H1>Message: <I>
<jsp:getProperty name="test" property="message" />
</I></H1>
</BODY>

保存在我们刚才徏立的虚拟目录e:/myjsp下面Qƈ命名为:BeanTest.jsp?/p>

现在我们应该hallQ包Q目录放在哪儿呢Q别急,我们先在e:/myjsp下徏立一个文件夹WEB-INFQ然后再在WEB-INF下徏立一个classes文g夹,最后将hall目录攑ֈclasses下,当然Qhall下的字节码文件SimpleBean.class也一q要U过来,而SimpleBean.java和BeanTest.jsp攑ֈ同一目录吧(可以不需要放的,自己试试Q?/p>

重新启动机器Q如果?zhn)试了好多ơ都不行Q这一步一定要做)Q在览器中输入Qhttp://localhost:8080/myjsp/BeanTest.jspQ?zhn)看到了什么?呵,别告诉我(zhn)什么都没看刎ͼ那肯定是(zhn)设|的问题了?/p>

Java学习 - 技术文章中?/p>

初学者问的诸如:《怎样配置环境变量》《怎样q行Servlet》啊Q这L问题太多了,现在我写一个初学者入门必读,以便对初学者有指导作用Q?/p>

首先是下载工P

我徏议初学者用EditplusQJDKQ我觉得如果用例如JBQEclipseQJCreatorQ虽然刚开始的时候比较方便,但是初学者门不知道怎样配置环境变量Q?/p>

从而难以达到知其然Q知其所以然的地?/p>

可以通过如下地址下蝲Q?/p>

Editplus(最新版本是v2.11)Qhttp://count.skycn.com/softdown.php?id=3641&url=http://sc-http.skycn.net/down/epp211a_cn.exe(要照注册码就自己扑֐Q网上很多的Q?/p>

JDK(最新版本是Java2sdk1_5_0)Qhttp://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.exeQ这是For WindowsQ?/p>

然后是安装JDKQ我是把它装Cc:\JDK目录下面Q?/p>

然后是CLASSPATH的问题了Q?/p>

正如操作pȝ利用PATH来搜索可执行E序一PJavaq行环境也会遍历CLASSPATH来查扄Q即便是HelloWorldq样单的E序QJVM也会遍历

CLASSPATH定义的每一个\径,直到扑ֈ相应的文件ؓ止?/p>

怿大家用的pȝ不是2k是XPQ然后就应当如下讄PathQ?/p>

我的?sh)?>属?>高->环境变量

然后在环境变量的Path后面q加: C:\JDK\bin;.;C:\JDK\lib

也可以这样配|?C:\JDK\bin;.;C:\JDK\lib\dt.jar;C:\JDK\lib\tools.jar

★记?环境变量中的 . 切记不能,它表C当前\径,如果掉出现的错误等会就_

dt.jar是关于运行环境的cdQtools.jar是关于一些工Lcd

如果没有配置:C:\JDK\binQ则会出?" javac′ 不是内部或外部命令,也不是可q行的程序或批处理文件?q样的错误?/p>

然后下面p写程序了Q?/p>

首先?HelloWorld.java),打开EditplusQ新Z个Java文gQ请照着如下输入Q要一字不漏,q且分清大小写:

public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello,World!");
}
}

然后把这个文件保?ctrl + s)到HelloWorld.java,C大小写一定要分清Q是HelloWorld.java不是helloworld.java或者其它的

下面pq行了,开?>q行->cmd

在控制台中把目录切换到当前目录:

javac HelloWorld.java
 Java HelloWorld

你就会在控制C看见输出的Hello,World!(没出来?我把?sh)脑吃了Q))

javac是编译命令,它把HelloWorld.java~译成HelloWorld.class

java是解释命oQJVM把HelloWorld.class解释执行.

在这个时候:

1。如果出现Exception in thread "main" Java.lang.NoClassDefFoundError: HelloWorld

那就是你在环境变量中没有加上那个.(dot)

2。如果出现Exception in thread "main" Java.lang.NoSuchMethodError: main

或者HelloWorld.java:1: Public class helloworld must be defined in a file called

"HelloWorld.java".

那就是你没有分清大小写的写入q个HelloWorldQ或者保存得时候没有保存ؓHelloWorld.java

q个名字一定要跟public class的名字一?/p>

对于环境变量的问题就说到q里Q下面我先所说怎么在Editplus里面~译和运行,在ToolsQ?gt;参数讄->配置用户工具

1.d工具Q添加应用程序)

菜单文字QCompile Java Program

E序QC:\JDK\bin\javac.exe

参数Q文件名U?/p>

初始目录Q文件目?/p>

2.d工具Q添加应用程序)

菜单文字QRun Java Program

E序QC:\JDK\bin\java.exe

参数Q文件名Uͼ不含扩展名)

初始目录Q文件目?/p>

工具l名U可以随便添Q比如Debug Java Program

然后在Tools的下拉菜单中Q你׃看见Compile Java Program以及Run Java Programq两个选项Q以后你可以利用ctrl + 1~译和ctrl Q?q行E序?/p>

下面p论Servlet的运行:

首先要运行ServletQ则需要JSP/Servlet containerQ我初学者用Tomcat

TomcatQ最新版?.5Q:http://apache.justdn.org/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9.exe然后把这个压~包解压刎ͼ

C:\Tomcat

然后再配|环境变量:

d三个pȝ变量Q?/p>

JAVA_HOME: C:\JDK
 TOMCAT_HOME: C:\Tomcat
 CLASSPATH: %JAVA_HOME%\lib;%TOMCAT_HOME%\lib

Tomcat的环境变量就配置完毕了,下面验Tomcat是否能够q行Q?/p>

在控制台中{到C:\Tomcat\binq个目录Q运行startupQ然后回出现一个窗口,q蟩一大串东西Q最后表CServer已经q行

在浏览器中输入http://localhost:8080Q出现欢q界面,则表CTomcat没问题了

然后和上面一P写入你的W一个Servlet

import Java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head><title>");
out.println("This is my first Servlet");
out.println("</title></head><body>");
out.println("<h1>Hello,World!</h1>");
out.println("</body></html>");

}
}

然后照样用javac HelloWorld.java来编译这个文Ӟ如果出现无法import javax.servlet.*

那么是应该把C:\Tomcat\common\lib里面的servlet.jarQ根据实际来看)文g拯到C:\JDK\jre\lib\ext中,再次~译Q就没有问题了!

然后在Tomcat目录里面的C:\Tomcat\webapps\ROOT里面按如下的文gl构Q?/p>
ROOT\index.html
ROOT\welcom.jsp
ROOT\WEB-INF\lib\MyServlet.jarQ如果你的servlet?class打成?jar文gQ则攑֜lib下面)
ROOT\WEB-INF\classes\HelloWorld.class(把上面生成的HelloWorld.class文g攑֜q个里面)

然后在浏览器中输入http://localhost:8080/servlet/HelloWorld,于是Server众望所归的报错?Error 404--Not Found

怎么回事呢?

Servlet必须使用C:\Tomcat\webapps\ROOT\WEB-INFq个目录下面的web.xml文gq行注册Q用EP打开q个web.xml文gQ在里面加入

<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/servlet/helloworld</url-pattern>
</servlet-mapping>

q样的结?/p>
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>

表示指定包含的servletc?而以下的l构

<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/servlet/HelloWorld</url-pattern>
</servlet-mapping>

表示指定HelloServlet应当映射到哪一UURL模式?/p>

在修改web.xml完毕q后Q重新启动ServerQ然后再输入http://localhost:8080/servlet/HelloWorldQ那么偌大一个Hello,World!{着你呢?/p>



周锐 2006-11-22 09:02 发表评论
]]>
IllegalStateException: getOutputStream() 异常的解x?/title><link>http://www.tkk7.com/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.tkk7.com/rain1102/archive/2006/11/20/82291.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/82291.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2006/11/20/82291.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/82291.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/82291.html</trackback:ping><description><![CDATA[<div>在写JSPE序的时候,如果E序中调用了response.getOutputStream()d客户端输出文件等数据?容器׃抛出q样的异常:<br /><a title="Java爱好? href="http://www.tkk7.com/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 />产生q样的异常原因是web容器生成的servlet代码中有out.write(""),q个和JSP中调用的response.getOutputStream()产生冲突Q?br />下面是web容器生成的部分servlet代码Q?br />      out = pageContext.getOut();<br />      _jspx_out = out;</div> <div>      out.write("\r\n");<br />      out.write("\r\n");<br />解决的方法有两步Q?、如果JSP中有<br /><%@ page import ... %><br /><%@ page import ... %><br />q样的代码,则改为:<br /><%@ page import ... %><%<br />%><%@ page import ... %><%<br />%><%<br />// ...getOutputStream()...<br />%><br />改完后生成的servlet代码Q?br />      out = pageContext.getOut();<br />      _jspx_out = out;</div> <div>      //out.write("\r\n");q个被L<br />      //out.write("\r\n");q个被L<br />2、如果第一步改完还是有异常Q则在程序的最后添加:<br />out.clear(); <br />out = pageContext.pushBody(); <br />可以解决了?/div><img src ="http://www.tkk7.com/rain1102/aggbug/82291.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2006-11-20 15:37 <a href="http://www.tkk7.com/rain1102/archive/2006/11/20/82291.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>"Unterminated &lt;%= tag"问题http://www.tkk7.com/rain1102/archive/2006/11/02/78712.html周锐周锐Thu, 02 Nov 2006 07:53:00 GMThttp://www.tkk7.com/rain1102/archive/2006/11/02/78712.htmlhttp://www.tkk7.com/rain1102/comments/78712.htmlhttp://www.tkk7.com/rain1102/archive/2006/11/02/78712.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/78712.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/78712.html

周锐 2006-11-02 15:53 发表评论
]]>
用JSP下蝲word文gQ不会直接用IE打开Q?/title><link>http://www.tkk7.com/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.tkk7.com/rain1102/archive/2006/10/18/75885.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/75885.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2006/10/18/75885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/75885.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/75885.html</trackback:ping><description><![CDATA[<p><<a href="mailto:%@page">%@page</a> import="<a title="Java爱好? href="http://www.tkk7.com/rain1102" >Java</a>.util.*"%><br /><<a href="mailto:%@page">%@page</a> import="<a title="Java爱好? href="http://www.tkk7.com/rain1102" >Java</a>.io.*"%><br /><<a href="mailto:%@page">%@page</a> import="<a title="Java爱好? href="http://www.tkk7.com/rain1102" >Java</a>.net.*"%><br /><%<br />    String filename = "";<br />    if (request.getParameter("file") != null) {<br />        filename =     request.getParameter("file");<br />    }<br />    response.setContentType("application/msword");<br />    response.setHeader("Content-disposition","attachment; filename="+filename);<br />    <br />    BufferedInputStream bis = null;<br />    BufferedOutputStream bos = null;<br />    try {<br />        bis = new BufferedInputStream(new FileInputStream(getServletContext().getRealPath("" + filename)));<br />        bos = new BufferedOutputStream(response.getOutputStream());</p> <p>        byte[] buff = new byte[2048];<br />        int bytesRead;</p> <p>        while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {<br />            bos.write(buff,0,bytesRead);<br />        }</p> <p>    } catch(final IOException e) {<br />        System.out.println ( "出现IOException." + e );<br />    } finally {<br />        if (bis != null)<br />            bis.close();<br />        if (bos != null)<br />            bos.close();<br />    }<br />    return;<br />%><br /></p><img src ="http://www.tkk7.com/rain1102/aggbug/75885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2006-10-18 13:37 <a href="http://www.tkk7.com/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.tkk7.com/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.tkk7.com/rain1102/archive/2006/09/28/72432.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/72432.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2006/09/28/72432.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/72432.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/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>初始的请求已l接受,客户应当l箋发送请求的其余部分?/td> </tr> <tr> <td height="20">101</td> <td>Switching Protocols</td> <td>服务器将遵从客户的请求{换到另外一U协?/td> </tr> <tr> <td height="20">200</td> <td>OK</td> <td>一切正常,对GET和POSTh的应{文档跟在后面?/td> </tr> <tr> <td height="20">201</td> <td>Created</td> <td>服务器已l创Z文档QLocation头给Z它的URL?/td> </tr> <tr> <td height="20">202</td> <td>Accepted</td> <td>已经接受hQ但处理未完成?/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>没有新文档,览器应该l显C原来的文档。如果用户定期地h面Q而Servlet可以定用户文档_斎ͼq个状态代码是很有用的?/td> </tr> <tr> <td height="20">205</td> <td>Reset Content</td> <td>没有新的内容Q但览器应该重|它所昄的内宏V用来强制浏览器清除表单输入内容 </td> </tr> <tr> <td height="20">206</td> <td>Partial Content</td> <td>客户发送了一个带有Range头的GEThQ服务器完成了它?/td> </tr> <tr> <td height="20">300</td> <td>Multiple Choices</td> <td>客户h的文档可以在多个位置扑ֈQ这些位|已l在q回的文档内列出。如果服务器要提Z先选择Q则应该在Location应答头指明?/td> </tr> <tr> <td height="20">301</td> <td>Moved Permanently</td> <td>客户h的文档在其他地方Q新的URL在Location头中l出Q浏览器应该自动地访问新的URL?/td> </tr> <tr> <td height="20">302</td> <td>Found</td> <td>cM?01Q但新的URL应该被视Z时性的替代Q而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved</td> </tr> <tr> <td height="20">303</td> <td>See Other</td> <td>cM?01/302Q不同之处在于,如果原来的请求是POSTQLocation头指定的重定向目标文档应该通过GET提取 </td> </tr> <tr> <td height="20">304</td> <td>Not Modified</td> <td>客户端有~冲的文档ƈ发出了一个条件性的hQ一般是提供If-Modified-Since头表C客户只x指定日期更新的文档)。服务器告诉客户Q原来缓冲的文档q可以l用?/td> </tr> <tr> <td height="20">305</td> <td>Use Proxy</td> <td>客户h的文档应该通过Location头所指明的代理服务器提取 </td> </tr> <tr> <td height="20">307</td> <td>Temporary Redirect</td> <td>?02QFoundQ相同。许多浏览器会错误地响应302应答q行重定向,即原来的请求是POSTQ即使它实际上只能在POSTh的应{是303时才能重定向。由于这个原因,HTTP 1.1新增?07Q以便更加清除地区分几个状态代码:当出?03应答Ӟ览器可以跟随重定向的GET和POSThQ如果是307应答Q则览器只能跟随对GETh的重定向?/td> </tr> <tr> <td height="20">400</td> <td>Bad Request</td> <td>h出现语法错误?/td> </tr> <tr> <td height="20">401</td> <td>Unauthorized</td> <td>客户试图未经授权讉K受密码保护的面。应{中会包含一个WWW-Authenticate_览器据此显C用户名?密码对话框,然后在填写合适的Authorization头后再次发出h?/td> </tr> <tr> <td height="20">403</td> <td>Forbidden</td> <td>资源不可用。服务器理解客户的请求,但拒l处理它。通常׃服务器上文g或目录的权限讄D?/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>hҎ(gu)QGET、POST、HEAD、DELETE、PUT、TRACE{)Ҏ(gu)定的资源不适用?/td> </tr> <tr> <td height="20">406</td> <td>Not Acceptable</td> <td>指定的资源已l找刎ͼ但它的MIMEcd和客户在Accpet头中所指定的不兼容 </td> </tr> <tr> <td height="20">407</td> <td>Proxy</td> <td>cM?01Q表C客户必dl过代理服务器的授权?/td> </tr> <tr> <td height="20">408</td> <td>Request Timeout</td> <td>在服务器许可的等待时间内Q客户一直没有发ZQ何请求。客户可以在以后重复同一h?/td> </tr> <tr> <td height="20">409</td> <td>Conflict</td> <td>通常和PUTh有关。由于请求和资源的当前状态相冲突Q因此请求不能成功?/td> </tr> <tr> <td height="20">410</td> <td>Gone</td> <td>所h的文档已l不再可用,而且服务器不知道应该重定向到哪一个地址。它?04的不同在于,q回407表示文档怹地离开了指定的位置Q?04表示׃未知的原因文档不可用?/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>h头中指定的一些前提条件失?</td> </tr> <tr> <td height="20">413</td> <td>Request Entity Too Large</td> <td>目标文档的大超q服务器当前愿意处理的大。如果服务器认ؓ自己能够E后再处理该hQ则应该提供一个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>服务器不能满_户在h中指定的Range头?/td> </tr> <tr> <td height="20">500</td> <td>Internal Server Error</td> <td>服务器遇C意料不到的情况,不能完成客户的请求?/td> </tr> <tr> <td height="20">501</td> <td>Not Implemented</td> <td>服务器不支持实现h所需要的功能。例如,客户发出了一个服务器不支持的PUTh?/td> </tr> <tr> <td height="20">502</td> <td>Bad Gateway</td> <td>服务器作为网x者代理时Qؓ了完成请求访问下一个服务器Q但该服务器q回了非法的应答?/td> </tr> <tr> <td height="20">503</td> <td>Service Unavailable</td> <td>服务器由于维护或者负载过重未能应{。例如,Servlet可能在数据库q接池已满的情况下返?03。服务器q回503时可以提供一个Retry-After头?/td> </tr> <tr> <td height="20">504</td> <td>Gateway Timeout</td> <td>׃Z理或|关的服务器使用Q表CZ能及时地从远E服务器获得应答?/td> </tr> <tr> <td height="20">505</td> <td>HTTP Version Not Supported</td> <td>服务器不支持h中所指明的HTTP版本?/td> </tr> </tbody> </table><img src ="http://www.tkk7.com/rain1102/aggbug/72432.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2006-09-28 08:19 <a href="http://www.tkk7.com/rain1102/archive/2006/09/28/72432.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL教程http://www.tkk7.com/rain1102/archive/2006/09/06/68063.html周锐周锐Wed, 06 Sep 2006 08:49:00 GMThttp://www.tkk7.com/rain1102/archive/2006/09/06/68063.htmlhttp://www.tkk7.com/rain1102/comments/68063.htmlhttp://www.tkk7.com/rain1102/archive/2006/09/06/68063.html#Feedback0http://www.tkk7.com/rain1102/comments/commentRss/68063.htmlhttp://www.tkk7.com/rain1102/services/trackbacks/68063.html阅读全文

周锐 2006-09-06 16:49 发表评论
]]>
两个相联下拉?/title><link>http://www.tkk7.com/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.tkk7.com/rain1102/archive/2006/09/04/67635.html</guid><wfw:comment>http://www.tkk7.com/rain1102/comments/67635.html</wfw:comment><comments>http://www.tkk7.com/rain1102/archive/2006/09/04/67635.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rain1102/comments/commentRss/67635.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rain1102/services/trackbacks/67635.html</trackback:ping><description><![CDATA[<p><script language="javascript"><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 /></script></p> <p> <br /><select name="kind1" id="kind1" onChange="onchange_kind1(this.value);"><br />         <%<br />         Vector myvector=null;<br />      myvector=kind1info.selectInfor();<br />      for(int i=0;i<myvector.size();i++)<br />      { <br />        kind1id=((kind1Unit)myvector.elementAt(i)).getID();<br />        kindname1=((kind1Unit)myvector.elementAt(i)).getKindName1();<br />      %><br />                      <option value="<%=kind1id%>"><%=kindname1%></option><br />                      <%<br />        }//循环l束<br />      %><br />                    </select></td><br />                    <td width="81%"><div id="divKind" name="divKind"><br />                      <select name="kind2" id="kind2"><br />                      </select><br />                    </div></p> <p><iframe id="frmcontent" name="frmcontent" width="400" height="40" src=""></iframe> </p> <p> </p> <p> <br />W二面<br /><div id="divKind" name="divKind"><br /><select name="kind2" id="kind2" ><br />      <%<br />  Vector myvector=null;<br />  myvector=kind2info.selectInfor(kind1id);<br />  for(int i=0;i<myvector.size();i++)<br />     { <br />   kind2id=((kind2Unit)myvector.elementAt(i)).getID();<br />   kindname2=((kind2Unit)myvector.elementAt(i)).getKindName2();<br />  %><br />  <option value="<%=kind2id%>"><%=kindname2%></option><br />    <%<br />    }//循环l束<br />    %><br /></select><br /></div></p> <p><script language="javascript"><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 /></script><br /></p><img src ="http://www.tkk7.com/rain1102/aggbug/67635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rain1102/" target="_blank">周锐</a> 2006-09-04 17:11 <a href="http://www.tkk7.com/rain1102/archive/2006/09/04/67635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://yy9977.com" target="_blank">ŷxxxxx</a>| <a href="http://avqq222.com" target="_blank">AV뾫ƷëƬ </a>| <a href="http://fenglengqi.com" target="_blank">þþ뾫Ʒպ˳ </a>| <a href="http://b7277.com" target="_blank">Ļ˳޵Ӱ</a>| <a href="http://mllm999.com" target="_blank">AVƷһ</a>| <a href="http://416164.com" target="_blank">Ƶ߹ۿַ</a>| <a href="http://milbolg.com" target="_blank">޼Ƶվ</a>| <a href="http://wwwseselu.com" target="_blank">ŮAëƬ</a>| <a href="http://527352.com" target="_blank">һɫƬ</a>| <a href="http://6nn5.com" target="_blank">ŮƵ</a>| <a href="http://qiseka.com" target="_blank">ŷպĻһ </a>| <a href="http://aaa99999.com" target="_blank">ëƬؿ</a>| <a href="http://vc77777.com" target="_blank">ɫ͵С˵</a>| <a href="http://yisaoma.com" target="_blank">Ƶֻ߹ۿַ</a>| <a href="http://www137av.com" target="_blank">޳AVƬ</a>| <a href="http://sswg2.com" target="_blank">ԻȫƵվ</a>| <a href="http://zhuoyueyc.com" target="_blank">޹˾Ʒһ</a>| <a href="http://zhxydq.com" target="_blank">aëƬƵۿ</a>| <a href="http://ksyy888.com" target="_blank">ҰƵ߹1</a>| <a href="http://caoliusq1024.com" target="_blank">޾Ʒ</a>| <a href="http://ziguang1688.com" target="_blank">ҹѸСӰ</a>| <a href="http://www3ratcom.com" target="_blank">sss߲</a>| <a href="http://www-135888.com" target="_blank">ŪƵ</a>| <a href="http://ncmyw.com" target="_blank">aëƬaëƬ</a>| <a href="http://www-15706.com" target="_blank">޳ҹӰ</a>| <a href="http://820111com.com" target="_blank">߹ۿƵ</a>| <a href="http://tianwu520.com" target="_blank">һػɫѴƬƵ</a>| <a href="http://ksyanhui.com" target="_blank">þþƷ鶹</a>| <a href="http://zxbj0471.com" target="_blank">97߹Ƶۿ</a>| <a href="http://4466n.com" target="_blank">ֳִִӲ3pƵ</a>| <a href="http://zhuguangbaoyu.com" target="_blank">AVۺɫһ</a>| <a href="http://zxbj0471.com" target="_blank">ŮƵѵַ</a>| <a href="http://caobi97.com" target="_blank">þƷƵ</a>| <a href="http://ttays.com" target="_blank">˳ӰԺ</a>| <a href="http://fuzhiwushu.com" target="_blank">߹ۿȤƵ</a>| <a href="http://jlzjjy.com" target="_blank">aëƬѹۿ</a>| <a href="http://hn283.com" target="_blank">ij</a>| <a href="http://saob19.com" target="_blank">Ʒһ</a>| <a href="http://haohaoshuo.com" target="_blank">ҪWWWѿƵ</a>| <a href="http://24aabb.com" target="_blank">׾Ʒһ</a>| <a href="http://eeussdd.com" target="_blank">vaþþþ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>