﻿<?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-XZC.Log-随笔分类-Web</title><link>http://www.blogjava.net/xzclog/category/17326.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 24 Jul 2012 21:03:51 GMT</lastBuildDate><pubDate>Tue, 24 Jul 2012 21:03:51 GMT</pubDate><ttl>60</ttl><item><title>avaScript世界的一等公民 - 函数</title><link>http://www.blogjava.net/xzclog/archive/2012/07/24/383831.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Tue, 24 Jul 2012 05:45:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2012/07/24/383831.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/383831.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2012/07/24/383831.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/383831.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/383831.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自：http://software.intel.com/zh-cn/articles/javascript-first-class-citizen-function/?cid=sw:prccsdn229032简介在很多传统语言（C/C++/Java/C#等）中，函数都是作为一个二等公民存在，你只能用语言的关键字声明一个函数然后调用它，如果需要把函数作为参数传给另一个函数，或是赋值给一个本地变量，...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2012/07/24/383831.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/383831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2012-07-24 13:45 <a href="http://www.blogjava.net/xzclog/archive/2012/07/24/383831.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>静态html文件js读取url参数 </title><link>http://www.blogjava.net/xzclog/archive/2011/12/12/366165.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Mon, 12 Dec 2011 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2011/12/12/366165.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/366165.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2011/12/12/366165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/366165.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/366165.html</trackback:ping><description><![CDATA[<div class="cnt" id="blog_text"><font size="2">在ajax应用流行时，有时我们可能为了降低服务器的负担，把动态内容生成静态html页面或者是xml文件，供客户端访问！但是在我们的网站或系统中往住页面中某些部分是在后台没有进行修改时，其内容不会发生变化的。但是页面中也往往有部分内容是动态的更新的，比如一个新闻页面，新闻内容往往生成了之后就是静态的，但是新闻的最新评论往往是变化的，在这个时候有几种解决方案：<br /><br /></font>1、重新生成该静态页面，优点是用户访问时页面上的肉容可以实现全静态，不与服务器程序及数据库后端打交道！缺点是每次用户对页面任何部分更新都必须重新生成。<br /><br />2、js调用请求动态内容，优点是静态页面只生成一次，动态部分才动态加载，却点是服务器端要用输出一段js代码并用js代码输出网页内容，也不利于搜索引擎收录。<br /><br />3、ajax调用动态内容，和js基本相似，只是与服务器交互的方式不同！并且页面显示不会受到因动态调用速度慢而影响整个页面的加载速度！至于ajax不利于搜索收录，当然在《ajax <span style="color: #0000ff">in</span> acation》等相关书籍中也介绍有变向的解决方案！<br /><br />4、在服务器端ssl动态内容，用服务器端优化及缓存解决是时下最流行的方法！<br /><br />对于第二种和第三种方法都是我最青睐的静态解决方法，适合以内容为主的中小型网站。那么在有时候可能会有js读取url参数的需求，事实证明的确也有很多时候有这种需求，特别是在胖客户端的情况下！以前也写过这样的代码，其实原理很简单就是利用javascript接口提供location对像得到url地址，然后通过分析url以取得参数，以下是我收录的一些优秀的url参数读取代码：<br /><br />一、字符串分割分析法。<br />这里是一个获取URL+?带QUESTRING参数的JAVASCRIPT客户端解决方案，相当于asp的request.querystring，PHP的$_GET<br />函数:<br /><br />&lt;script&gt;<br /><span style="color: #0000ff">function</span> GetRequest()<br />{<br /><span style="color: #0000ff">var</span> url = location.search; <span style="color: #008000">//获取url中"?"符后的字串</span><br /><span style="color: #0000ff">var</span> theRequest = <span style="color: #0000ff">new</span> <span style="color: #808000">Object</span>();<br /><span style="color: #0000ff">if</span>(url.indexOf(<span style="color: #ff00ff">"?"</span>) != -1)<br />{ <br />&nbsp;&nbsp;<span style="color: #0000ff">var</span> str = url.substr(1);<br />&nbsp;&nbsp;&nbsp; strs = str.split(<span style="color: #ff00ff">"&amp;"</span>);<br />&nbsp;&nbsp;<span style="color: #0000ff">for</span>(<span style="color: #0000ff">var</span> i = 0; i &lt; strs.length; i ++)<br />&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp; theRequest[strs[i].split(<span style="color: #ff00ff">"="</span>)[0]]=unescape(strs[i].split(<span style="color: #ff00ff">"="</span>)[1]);<br />&nbsp;&nbsp;&nbsp; }<br />}<br /><span style="color: #0000ff">return</span> theRequest;<br />}<br />&lt;/script&gt;<br /><br />然后我们通过调用此函数获取对应参数值：<br /><br />&lt;script&gt;<br /><span style="color: #0000ff">var</span> Request=<span style="color: #0000ff">new</span> <span style="color: #808000">Object</span>();<br />Request=GetRequest();<br /><span style="color: #0000ff">var</span> 参数1,参数2,参数3,参数N;<br />参数1=Request[<span style="color: #ff00ff">'参数1'</span>];<br />参数2=Request[<span style="color: #ff00ff">'参数2'</span>];<br />参数3=Request[<span style="color: #ff00ff">'参数3'</span>];<br />参数N=Request[<span style="color: #ff00ff">'参数N'</span>];<br />&lt;/script&gt;<br /><br /><br />以此获取url串中所带的同名参数<br /><br />二、正则分析法。<br /><br /><span style="color: #0000ff">function</span>&nbsp;&nbsp;&nbsp;&nbsp; GetQueryString(name)&nbsp;&nbsp;&nbsp;<br />{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;&nbsp;&nbsp;&nbsp; reg&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">new</span>&nbsp;&nbsp;&nbsp;<span style="color: #808000">RegExp</span>(<span style="color: #ff00ff">"(^|&amp;)"</span>+&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp; +<span style="color: #ff00ff">"=([^&amp;]*)(&amp;|$)"</span>);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;&nbsp;&nbsp;&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; window.location.search.substr(1).match(reg);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">if</span>&nbsp;&nbsp;&nbsp;&nbsp; (r!=<span style="color: #0000ff">null</span>)&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">return</span>&nbsp;&nbsp;&nbsp;&nbsp; unescape(r[2]);&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">return</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">null</span>;&nbsp;&nbsp;&nbsp;<br />}&nbsp;&nbsp;&nbsp;<br />alert(GetQueryString(<span style="color: #ff00ff">"参数名1"</span>));&nbsp;&nbsp;&nbsp;<br />alert(GetQueryString(<span style="color: #ff00ff">"参数名2"</span>));&nbsp;&nbsp;&nbsp;<br />alert(GetQueryString(<span style="color: #ff00ff">"参数名3"</span>));</div><img src ="http://www.blogjava.net/xzclog/aggbug/366165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2011-12-12 17:15 <a href="http://www.blogjava.net/xzclog/archive/2011/12/12/366165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Cookie 中文乱码解决方法 </title><link>http://www.blogjava.net/xzclog/archive/2011/10/03/359956.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Mon, 03 Oct 2011 03:29:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2011/10/03/359956.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/359956.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2011/10/03/359956.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/359956.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/359956.html</trackback:ping><description><![CDATA[<ol><li><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span>&nbsp;java.net.*;&nbsp; &nbsp;&nbsp;</span></li><li><span>String&nbsp;&nbsp;&nbsp;key=URLEncoder.encode(</span><span class="string"><font color="#0000ff">"中文key"</font></span><span>,</span><span class="string"><font color="#0000ff">"GBK"</font></span><span>); &nbsp;&nbsp;</span></span></li><li><span>String&nbsp;&nbsp;&nbsp;value=URLEncoder.encode(</span><span class="string"><font color="#0000ff">"中文value"</font></span><span>,</span><span class="string"><font color="#0000ff">"GBK"</font></span><span>); &nbsp;&nbsp;</span></span></li><li><span>Cookie&nbsp;&nbsp;&nbsp;cook=</span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span>&nbsp;Cookie(key,value);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li><li><span>String&nbsp;&nbsp;&nbsp;key=cook.getName(),value=cook.getValue();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>key=URLDecoder.decode(key,</span><span class="string"><font color="#0000ff">"GBK"</font></span><span>);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li><li><span>value=URLDecoder.decode(value,</span><span class="string"><font color="#0000ff">"GBK"</font></span><span>);&nbsp;&nbsp;&nbsp;</span></li></ol>
<p><span><br /><br />&nbsp;</p>
<p>String value = java.net.URLEncoder.encode("中文","utf-8");</p>
<p>Cookie cookie = new Cookie("chinese_code",value);</p>
<p>cookie.setMaxAge(60*60*24*6);</p>
<p>response.addCookie(cookie);</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>encode() 只有一个参数的已经过时了，现在可以设置编码格式， 取cookie值的时候 也不用解码了。</p>
<p></span>&nbsp;</p> <img src ="http://www.blogjava.net/xzclog/aggbug/359956.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2011-10-03 11:29 <a href="http://www.blogjava.net/xzclog/archive/2011/10/03/359956.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>web.xml中load-on-startup的作用</title><link>http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 29 Sep 2011 07:22:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/359789.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/359789.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/359789.html</trackback:ping><description><![CDATA[<span style="color: #1f4799">如下一段配置，熟悉DWR的再熟悉不过了：</span><br /><span style="color: #1f4799">&lt;servlet&gt;</span><br /><span style="color: #1f4799">&nbsp;&nbsp; &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;</span><br /><span style="color: #1f4799">&nbsp;&nbsp; &lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;/servlet-class&gt;</span><br /><span style="color: #1f4799">&nbsp;&nbsp; &lt;init-param&gt;</span><br /><span style="color: #1f4799">&nbsp;&nbsp;&nbsp; &lt;param-name&gt;debug&lt;/param-name&gt;</span><br /><span style="color: #1f4799">&nbsp;&nbsp;&nbsp; &lt;param-value&gt;true&lt;/param-value&gt;</span><br /><span style="color: #1f4799">&nbsp;&nbsp; &lt;/init-param&gt;</span><br /><span style="color: #1f4799">&nbsp;&nbsp; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</span><br /><span style="color: #1f4799">&lt;/servlet&gt;</span><br /><span style="color: #1f4799">&lt;servlet-mapping&gt;</span><br /><span style="color: #1f4799">&nbsp;&nbsp; &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;</span><br /><span style="color: #1f4799">&nbsp;&nbsp; &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt;</span><br /><span style="color: #1f4799">&lt;/servlet-mapping&gt;</span> 
<p><span style="color: #1f4799">我们注意到它里面包含了这段配置：&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;，那么这个配置有什么作用呢？</span></p>
<p><span style="color: #1f4799">贴一段英文原汁原味的解释如下：</span><br /><span style="color: #1f4799">Servlet specification:</span><br /><span style="color: #1f4799">The load-on-startup element indicates that this servlet should be loaded (</span><span style="color: red">instantiated and have its init() called</span><span style="color: #1f4799">) on the startup of the web application. The optional contents of these element must be an integer indicating the order in which the servlet should be loaded. If the value is a negative integer, or the element is not present, the container is free to load the servlet whenever it chooses.&nbsp;&nbsp; If the value is a positive integer or 0, the container must load and initialize the servlet as the application is deployed. The container must guarantee that servlets marked with lower integers are loaded before servlets marked with higher integers. The container may choose the order of loading of servlets with the same load-on-start-up value.</span></p>
<p><span style="color: #1f4799">翻译过来的意思大致如下：</span><br /><span style="color: #1f4799">1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。</span></p>
<p><span style="color: #1f4799">2)它的值必须是一个整数，表示servlet应该被载入的顺序</span></p>
<p><span style="color: #1f4799">2)当值为0或者大于0时，表示容器在应用启动时就加载并初始化这个servlet；</span></p>
<p><span style="color: #1f4799">3)当值小于0或者没有指定时，则表示容器在该servlet被选择时才会去加载。</span></p>
<p><span style="color: #1f4799">4)正数的值越小，该servlet的优先级越高，应用启动时就越先加载。</span></p>
<p><span style="color: #1f4799">5)当值相同时，容器就会自己选择顺序来加载。</span></p>
<p><span style="color: #1f4799">所以，&lt;load-on-startup&gt;x&lt;/load-on-startup&gt;，中x的取值1，2，3，4，5代表的是优先级，而非启动延迟时间。</span></p>
<p><span style="color: #1f4799">如下题目：</span></p><span style="color: #1f4799">
<p><span>2.web.xml<span style="font-family: 宋体">中不包括哪些定义（多选）</span></span><span></span></p>
<p><span></span></p>
<p><span>a.<span style="font-family: 宋体">默认起始页</span></span><span></span></p>
<p><span></span></p>
<p><span>b.servlet<span style="font-family: 宋体">启动延迟时间定义</span></span><span></span></p>
<p><span></span></p>
<p><span>c.error<span style="font-family: 宋体">处理页面</span></span><span></span></p>
<p><span></span></p>
<p><span>d.jsp<span style="font-family: 宋体">文件改动后重新载入时间</span></span><span></span></p>
<p><span></span></p>
<p><span>答案：<span style="font-family: Times New Roman">b,d</span></span><span></span></p></span>
<p><span style="color: #1f4799">通常大多数Servlet是在用户第一次请求的时候由应用服务器创建并初始化，但&lt;load-on-startup&gt;n&lt;/load-on-startup&gt;&nbsp;&nbsp; 可以用来改变这种状况，根据自己需要改变加载的优先级！</span></p><img src ="http://www.blogjava.net/xzclog/aggbug/359789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2011-09-29 15:22 <a href="http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js 高级编程</title><link>http://www.blogjava.net/xzclog/archive/2011/07/09/353978.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Sat, 09 Jul 2011 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2011/07/09/353978.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/353978.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2011/07/09/353978.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/353978.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/353978.html</trackback:ping><description><![CDATA[<div class="mcnt ztag">
<div class="nbw-bitm bdwb bds2 bdc0 ">
<div></div>
<div class="bct fc05 fc11 nbw-blog ztag js-fs2">
<p>研究发现：属性（变量）可分为三类（对象属性、全局变量和局部变量）<br />对象属性：声明时以&#8220;this.&#8221;开头，只能被&#8220;类的实例&#8221;即对象所调用，不能被&#8220;类内部（对外不对内）&#8221;调用；全局变量：声明时直接以变量名开头，可以任意调用（对内对外）；局部变量：只能被</p>
<p>&#8220;类内部（对内不对外）&#8221;调用。</p>
<p>&nbsp;</p>
<p>JS函数的声明与访问原理</p>
<p>&lt;script type="text/javas<wbr>cript"&gt;&nbsp;&nbsp; <br />//类&nbsp;&nbsp; <br />var testClass = function(){&nbsp;&nbsp; <br />&nbsp; //对象属性(对外不对内,类调用)&nbsp;&nbsp; <br />&nbsp; this.age ="25";&nbsp;&nbsp; <br />&nbsp; //全局变量(对内对外)&nbsp;&nbsp; <br />&nbsp; name="jack";&nbsp;&nbsp; <br />&nbsp; //局部变量(对内不对外)<br />&nbsp; var address = "beijing";<br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; //全局函数（对内对外）&nbsp;&nbsp; <br />&nbsp; add = function(a,b){&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; //可访问：全局变量和局部变量&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; multiply(a,b);&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; return a+b;&nbsp;&nbsp; <br />&nbsp; }&nbsp;&nbsp; <br />&nbsp; //实例函数（由类的对象调用）&nbsp;&nbsp; <br />&nbsp; this.minus = function(a,b){&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; //可以访问：对象属性、全局变量和局部变量&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; return a-b;&nbsp;&nbsp; <br />&nbsp; }&nbsp;&nbsp; <br />&nbsp; //局部函数（内部直接调用）&nbsp;&nbsp; <br />&nbsp; var multiply = function(a,b){&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; //只能访问：全局变量和局部变量&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; return a*b;&nbsp;&nbsp; <br />&nbsp; }&nbsp;&nbsp; <br />}&nbsp;&nbsp; <br />&nbsp; <br />&nbsp; <br />//类函数（由类名直接调用）&nbsp;&nbsp; <br />testClass.talk= function(){&nbsp;&nbsp; <br />&nbsp; //只能访问：全局变量和全局函数&nbsp;&nbsp; <br />&nbsp; this.what = function(){&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; alert("What can we talk about?");&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; about();&nbsp;&nbsp; <br />&nbsp; }&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; var about = function(){&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; alert("about name："+name);<br />&nbsp;&nbsp;&nbsp; alert("about add(1,1):"+add(1,1));<br />&nbsp; }&nbsp;&nbsp; <br />}&nbsp;&nbsp; <br />&nbsp; <br />&nbsp; <br />//原型函数(由类的对象调用)&nbsp;&nbsp; <br />testClass.prototype.walk = function(){&nbsp;&nbsp; <br />&nbsp; //只能访问:全局变量和全局函数&nbsp;&nbsp; <br />&nbsp; this.where = function(){&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; alert("Where can we go?");<br />&nbsp;&nbsp;&nbsp; go();&nbsp;&nbsp; <br />&nbsp; }&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; var go = function(){&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; alert("go name:"+name);&nbsp; <br />&nbsp;&nbsp;&nbsp; alert("go add(1,1):"+add(1,1));<br />&nbsp; }&nbsp;&nbsp; <br />}&nbsp;&nbsp; <br />&lt;/script&gt;&nbsp; </p>
<p><br />下面看看如何调用: </p>
<p>&lt;script type="text/javas<wbr>cript"&gt;&nbsp;&nbsp; <br />//获取一个cbs类的实例&nbsp;&nbsp; <br />var cbs= new testClass();&nbsp;&nbsp; <br />//调用类的对象属性age&nbsp;&nbsp; <br />alert("age:"+cbs.age);&nbsp;&nbsp; <br />&nbsp; <br />//获取类函数talk的实例&nbsp;&nbsp; <br />var talk = new testClass.talk();<br />//调用类函数的实例函数&nbsp;&nbsp; <br />talk.what();&nbsp;&nbsp; <br />&nbsp; <br />//获取原型函数walk的实例&nbsp;&nbsp; <br />var walk = new cbs.walk();&nbsp;&nbsp; <br />//调用原型函数的实例函数&nbsp;&nbsp; <br />walk.where();&nbsp;&nbsp; <br />&lt;/script&gt;&nbsp;</p></div></div></div><img src ="http://www.blogjava.net/xzclog/aggbug/353978.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2011-07-09 11:34 <a href="http://www.blogjava.net/xzclog/archive/2011/07/09/353978.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>当Ajax遭遇GBK编码 (完全解决方案) </title><link>http://www.blogjava.net/xzclog/archive/2011/06/21/352729.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Tue, 21 Jun 2011 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2011/06/21/352729.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/352729.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2011/06/21/352729.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/352729.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/352729.html</trackback:ping><description><![CDATA[<div><span class="Apple-style-span" style="font-size: 15px; line-height: 19px; font-family: Arial, Helvetica, sans-serif; background-color: #ffffff">&nbsp; 
<p style="margin-top: 0px; margin-bottom: 0px">
<div>[原文:&nbsp;<a href="http://www.imxylz.info/wiki/Java/AjaxGBK">http://www.imxylz.info/wiki/Java/AjaxGBK</a>&nbsp;]<br /></div>早起的国内互联网都使用GBK编码，久之，所有项目都以GBK来编码了。对于J2EE项目，为了减少编码的干扰通常都是设置一个编码的Filter，强制将Request/Response编码改为GBK。例如一个Spring的常见配置如下： 
<p>&nbsp;</p><pre class="escaped" style="border-right: 1px dashed; padding-right: 5px; border-top: 1px dashed; overflow-y: auto; padding-left: 5px; font-size: 0.9em; overflow-x: auto; padding-bottom: 5px; margin: 2px; border-left: 1px dashed; line-height: 1.2em; padding-top: 5px; border-bottom: 1px dashed; font-family: 'Lucida Console', 'Andale Mono', 'Courier New', Courier, monospace; background-color: #f9f9f9; background-origin: initial; background-clip: initial; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; border-bottom-right-radius: 5px 5px; border-bottom-left-radius: 5px 5px">&lt;filter&gt;
    &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;
    &lt;filter-class&gt;org.springframework.web.filter.CharacterEncodingFilter&lt;/filter-class&gt;
    &lt;init-param&gt;
        &lt;param-name&gt;encoding&lt;/param-name&gt;
        &lt;param-value&gt;GBK&lt;/param-value&gt;
    &lt;/init-param&gt;
    &lt;init-param&gt;
        &lt;param-name&gt;forceEncoding&lt;/param-name&gt;
        &lt;param-value&gt;true&lt;/param-value&gt;
    &lt;/init-param&gt;
&lt;/filter&gt;
</pre>
<p style="margin-top: 0px; margin-bottom: 0px">毫无疑问，这在GBK编码的页面访问、提交数据时是没有乱码问题的。但是遇到Ajax就不一样了。Ajax强制将中文内容进行UTF-8编码，这样导致进入后端后使用GBK进行解码时发生乱码。网上的所谓的终极解决方案都是扯淡或者过于复杂，例如下面的文章：</p>
<ul style="margin-top: 0px; margin-bottom: 0px"><li><a class="urllink" style="text-decoration: none" href="http://blog.csdn.net/shimiso/archive/2010/07/08/5721640.aspx" rel="nofollow">GBK编码下jQuery Ajax中文乱码终极暴力解决方案</a></li><li><a class="urllink" style="text-decoration: none" href="http://hi.baidu.com/vcoso/blog/item/f619f43dda4ec4e63c6d97a3.html" rel="nofollow">关于AJAX-gbk(gb2312)中文乱码的解决方案</a></li><li><a class="urllink" style="text-decoration: none" href="http://www.cnblogs.com/meil/archive/2006/08/19/481408.html" rel="nofollow">Ajax 中XmlHttp 乱码 的解决方法 (UTF8,GB2312 编码 解码)</a></li></ul>
<p class="vspace" style="margin-top: 1.33em; margin-bottom: 0px">这样的文章很多，显然：</p>
<ul style="margin-top: 0px; margin-bottom: 0px"><li>使用VB进行UTF-8转换成GBK提交是完全不可行（多浏览器、多平台完全不可用）</li><li>使用复杂的js函数进行一次、多次编码，后端进行一次、多次解码也是不靠谱的，成本太高，无法重复使用</li></ul>
<p class="vspace" style="margin-top: 1.33em; margin-bottom: 0px">如果提交数据的时候能够告诉后端传输的编码信息是否就可以避免这种问题？比如Ajax请求告诉后端是UTF-8，其它请求告诉后端是GBK，这样后端分别根据指定的编码进行解码是不是就解决问题了。</p>
<p class="vspace" style="margin-top: 1.33em; margin-bottom: 0px">有两个问题：</p>
<ol style="margin-top: 0px; margin-bottom: 0px"><li>如何通过Ajax告诉后端的编码？Header过于复杂，Cookie成本太高，使用参数最方便。</li><li>后端何时进行解码？每一个请求进行解码，过于繁琐；获取参数时解码，此时已经乱码；在Filter里面动态设置编码是最完善的方案。</li><li>如何从参数中获取编码？如果是POST的body显然无法获取，因此在获取之前所有参数就已经按照某种编码解码过了，无法还原。所以通过URL传递编码最有效。支持GET/POST，同时成本很低。</li></ol>
<p class="vspace" style="margin-top: 1.33em; margin-bottom: 0px">解决了上述问题，来看具体实现方案。 列一段Java代码：</p><pre class="escaped" style="border-right: 1px dashed; padding-right: 5px; border-top: 1px dashed; overflow-y: auto; padding-left: 5px; font-size: 0.9em; overflow-x: auto; padding-bottom: 5px; margin: 2px; border-left: 1px dashed; line-height: 1.2em; padding-top: 5px; border-bottom: 1px dashed; font-family: 'Lucida Console', 'Andale Mono', 'Courier New', Courier, monospace; background-color: #f9f9f9; background-origin: initial; background-clip: initial; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; border-bottom-right-radius: 5px 5px; border-bottom-left-radius: 5px 5px">import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.util.ClassUtils;
import org.springframework.web.filter.OncePerRequestFilter;

/** 自定义编码过滤器
 * @author <a title="imxylz" href="http://www.imxylz.info/" target="_blank">imxylz</a> (imxylz#gmail.com)
 * @sine 2011-6-9
 */
public class MutilCharacterEncodingFilter extends OncePerRequestFilter {

    static final Pattern inputPattern = Pattern.compile(".*_input_encode=([\\w-]+).*");

    static final Pattern outputPattern = Pattern.compile(".*_output_encode=([\\w-]+).*");

    // Determine whether the Servlet 2.4 HttpServletResponse.setCharacterEncoding(String)
    // method is available, for use in the "doFilterInternal" implementation.
    private final static boolean responseSetCharacterEncodingAvailable = ClassUtils.hasMethod(HttpServletResponse.class,
          "setCharacterEncoding", new Class[] { String.class });

    private String encoding;

    private boolean forceEncoding = false;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
 throws ServletException, IOException {
        String url = request.getQueryString();
        Matcher m = null;
        if (url != null &amp;&amp; (m = inputPattern.matcher(url)).matches()) {//输入编码
            String inputEncoding = m.group(1);
            request.setCharacterEncoding(inputEncoding);
            m = outputPattern.matcher(url);
            if (m.matches()) {//输出编码
                response.setCharacterEncoding(m.group(1));
            } else {
                if (this.forceEncoding &amp;&amp; responseSetCharacterEncodingAvailable) {
                    response.setCharacterEncoding(this.encoding);
                }
            }
        } else {
            if (this.encoding != null &amp;&amp; (this.forceEncoding || request.getCharacterEncoding() == null)) {
                request.setCharacterEncoding(this.encoding);
                if (this.forceEncoding &amp;&amp; responseSetCharacterEncodingAvailable) {
                    response.setCharacterEncoding(this.encoding);
                }
            }
        }
        filterChain.doFilter(request, response);
    }

    public void setEncoding(String encoding) {
        this.encoding = encoding;
    }

    public void setForceEncoding(boolean forceEncoding) {
        this.forceEncoding = forceEncoding;
    }
}

</pre>
<p class="vspace" style="margin-top: 1.33em; margin-bottom: 0px">解释下：</p>
<ul style="margin-top: 0px; margin-bottom: 0px"><li>如果URL的QueryString中包含_input_encode就使用此编码进行设置Request编码，以后参数按照此编码进行解析，例如如果是Ajax就传入UTF-8，如果是普通的GBK请求则无视此参数。</li><li>如果无视此参数，则按照web.xml中配置的编码规则进行反编码，如果是GBK就按照GBK规则解析。</li><li>对于输出编码同样使用上述规则。需要输出编码依赖输入编码，也就是说如果有一个_output_encode的输出编码，则同时需要有一个_input_encode编码来指定输入编码。当然你可以改造成不依赖输入编码。</li><li>完全兼容Spring的org.springframework.web.filter.CharacterEncodingFilter编码规则，只需要替换类即可。</li><li>没有继承org.springframework.web.filter.CharacterEncodingFilter类的原因是，org.springframework.web.filter.CharacterEncodingFilter里面的encoding参数和forceEncoding参数是private，子类无法使用。在有_input_encode而无_output_encode的时候想依然保持Spring的Response解析规则的话无法做到，所以将里面的代码拷贝过来使用。（为了展示方便，注释都删掉了）</li><li>正则表达式可以改进成只需要匹配一次，从而可以提高一点点效率。</li><li>所有后端请求将无视编码的存在，前端Ajax的GET/POST请求也将无视编码的存在，只是在URL地址中加上一个_input_encode=UTF-8的参数。仅此而已。</li><li>如果想输出的编码也是UTF-8，比如手机端请求、跨站请求等，则需要URL地址参数_input_encode=UTF-8&amp;_output_encode=UTF-8。</li><li>对于POST请求，编码参数不能写在body里面，否则无法解析。</li><li>显然，这种终极解决方案，在任何编码中都可以解决，GBK/UTF-8/ISO8859-1等编码任何组合都可以实现。<br /></li><li>唯一局限性是，此解决方案限制在J2EE项目中，其它平台不知是否有类似Filter这样的组件能够设置编码的概念。</li></ul></span><br /></div><img src ="http://www.blogjava.net/xzclog/aggbug/352729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2011-06-21 11:54 <a href="http://www.blogjava.net/xzclog/archive/2011/06/21/352729.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Buffalo Ajax框架使用 </title><link>http://www.blogjava.net/xzclog/archive/2011/06/16/352439.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 16 Jun 2011 08:44:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2011/06/16/352439.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/352439.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2011/06/16/352439.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/352439.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/352439.html</trackback:ping><description><![CDATA[buffalo-2.0（国人开发的Ajax框架），下载buffalo-2.0-bin就可以了，个人认为也下载buffalo-2.0-src<br />下载地址：<a href="http://sourceforge.net/project/showfiles.php?group_id=178867"><font color="#1a8bc8">http://sourceforge.net/project/showfiles.php?group_id=178867</font></a><br /><br />1．buffalo-2.0.jar<br />在buffalo-2.0-bin里，把它加到Web应用程序里的lib<br /><br />2．buffalo.js和prototype.js<br />我把这两个文件放到Web应用程序的scripts/目录下，buffalo.js在buffalo-2.0-bin里，prototype.js在buffalo-demo.war里找<br /><br />4．web.xml内容<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee" twffan="done"><span style="color: #0000ff" twffan="done">&lt;?</span><span style="color: #ff00ff" twffan="done">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff" twffan="done">?&gt;</span><span style="color: #000000" twffan="done"><br /></span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">web-app&nbsp;</span><span style="color: #ff0000" twffan="done">version</span><span style="color: #0000ff" twffan="done">="2.4"</span><span style="color: #ff0000" twffan="done">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns</span><span style="color: #0000ff" twffan="done">="http://java.sun.com/xml/ns/j2ee"</span><span style="color: #ff0000" twffan="done">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000ff" twffan="done">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000" twffan="done">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff" twffan="done">="http://java.sun.com/xml/ns/j2ee&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">servlet</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">servlet-name</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">bfapp</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">servlet-name</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">servlet-class</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">net.buffalo.web.servlet.ApplicationServlet</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">servlet-class</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">servlet</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">servlet-mapping</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">servlet-name</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">bfapp</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">servlet-name</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">url-pattern</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">/bfapp/*</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">url-pattern</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">servlet-mapping</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">web-app</span><span style="color: #0000ff" twffan="done">&gt;</span></div><br /><br />5．index.jsp文件<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee" twffan="done"><span style="color: #000000; background-color: #ffff00" twffan="done">&lt;%</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">@&nbsp;page&nbsp;language</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">=</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">"</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">java</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">"</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">&nbsp;pageEncoding</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">=</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">"</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">UTF-8</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">"</span><span style="color: #000000; background-color: #ffff00" twffan="done">%&gt;</span><span style="color: #000000" twffan="done"><br /><br /><br /></span><span style="color: #0000ff" twffan="done">&lt;!</span><span style="color: #ff00ff" twffan="done">DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br /></span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">html</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">head</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">title</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">第一个&nbsp;buffalo&nbsp;示例程序</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">title</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">script&nbsp;</span><span style="color: #ff0000" twffan="done">language</span><span style="color: #0000ff" twffan="done">="JavaScript"</span><span style="color: #ff0000" twffan="done">&nbsp;src</span><span style="color: #0000ff" twffan="done">="scripts/prototype.js"</span><span style="color: #0000ff" twffan="done">&gt;&lt;/</span><span style="color: #800000" twffan="done">script</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">script&nbsp;</span><span style="color: #ff0000" twffan="done">language</span><span style="color: #0000ff" twffan="done">="JavaScript"</span><span style="color: #ff0000" twffan="done">&nbsp;src</span><span style="color: #0000ff" twffan="done">="scripts/buffalo.js"</span><span style="color: #0000ff" twffan="done">&gt;&lt;/</span><span style="color: #800000" twffan="done">script</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">script&nbsp;</span><span style="color: #ff0000" twffan="done">type</span><span style="color: #0000ff" twffan="done">="text/javascript"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000; background-color: #f5f5f5" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5" twffan="done">var</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">&nbsp;endPoint</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">=</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">"</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">&lt;%=request.getContextPath()%&gt;/bfapp</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">"</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5" twffan="done">var</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">&nbsp;buffalo&nbsp;</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">=</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5" twffan="done">new</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">&nbsp;Buffalo(endPoint);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5" twffan="done">function</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">&nbsp;hello(me)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffalo.remoteCall(</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">"</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">demoService.getHello</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">"</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">,&nbsp;[me.value],&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5" twffan="done">function</span><span style="color: #000000; background-color: #f5f5f5" twffan="done">(reply)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(reply.getResult());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">script</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">head</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">body</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;输入你的名字:</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">input&nbsp;</span><span style="color: #ff0000" twffan="done">type</span><span style="color: #0000ff" twffan="done">="text"</span><span style="color: #ff0000" twffan="done">&nbsp;name</span><span style="color: #0000ff" twffan="done">="myname"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">input&nbsp;</span><span style="color: #ff0000" twffan="done">type</span><span style="color: #0000ff" twffan="done">="button"</span><span style="color: #ff0000" twffan="done">&nbsp;value</span><span style="color: #0000ff" twffan="done">="Buffao远程调用"</span><span style="color: #ff0000" twffan="done">&nbsp;onclick</span><span style="color: #0000ff" twffan="done">="hello($('myname'));"</span><span style="color: #0000ff" twffan="done">&gt;&lt;</span><span style="color: #800000" twffan="done">br</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">body</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br /></span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">html</span><span style="color: #0000ff" twffan="done">&gt;</span></div><br />说明：remoteCall是远程调用方法，demoService是buffalo-service.properties文件的键，getHello是被调用java类方法名，me.value是传给getHello方法的参数，reply.getResult()是getHello返回的值。<br /><br />6．DemoService.java文件<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee" twffan="done"><span style="color: #0000ff" twffan="done">package</span><span style="color: #000000" twffan="done">&nbsp;demo.buffalo;<br /><br /></span><span style="color: #008000" twffan="done">/**</span><span style="color: #008000" twffan="done"><br />&nbsp;*&nbsp;<br />&nbsp;*&nbsp;@文件名&nbsp;demo.buffalo.DemoService.java<br />&nbsp;*&nbsp;@作者&nbsp;chenlb<br />&nbsp;*&nbsp;@创建时间&nbsp;2007-7-14&nbsp;下午12:42:17&nbsp;<br />&nbsp;</span><span style="color: #008000" twffan="done">*/</span><span style="color: #000000" twffan="done"><br /></span><span style="color: #0000ff" twffan="done">public</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #0000ff" twffan="done">class</span><span style="color: #000000" twffan="done">&nbsp;DemoService&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">public</span><span style="color: #000000" twffan="done">&nbsp;String&nbsp;getHello(String&nbsp;name)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">return</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">Hello&nbsp;,&nbsp;</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">+</span><span style="color: #000000" twffan="done">name&nbsp;</span><span style="color: #000000" twffan="done">+</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">&nbsp;这是第一个buffalo示例程序</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div><br />7．buffalo-service.properties文件放到WEB-INF/classes/目录下<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee" twffan="done"><span style="color: #000000" twffan="done">demoService</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">demo.buffalo.DemoService</span></div>说明：框架是通过此文件来查找远程调用的类的。<br /><br />8．现在可以运行了。<br /><br /><a href="http://www.blogjava.net/chenlb/Files/chenlb/buffalodemo.rar"><font color="#1a8bc8">示例下载<br /></font></a>注意：Eclipse项目，文件编码是UTF-8<br /><br />官方地址：<br />Buffalo中文论坛：<a href="http://groups.google.com/group/amowa"><font color="#1a8bc8">http://groups.google.com/group/amowa</font></a><br /><a href="http://buffalo.sourceforge.net/tutorial.html" target="blank"><font color="#1a8bc8">http://buffalo.sourceforge.net/tutorial.html</font></a><br />
<p><a href="http://confluence.redsaga.com/pages/viewpage.action?pageId=1643" target="blank"><font color="#1a8bc8">http://confluence.redsaga.com/pages/viewpage.action?pageId=1643</font></a> </p>JavaScript API ：<a href="http://confluence.redsaga.com/display/BUFFALO/JavaScript+API"><font color="#1a8bc8">http://confluence.redsaga.com/display/BUFFALO/JavaScript+API</font></a><br /><a href="http://www.amowa.net/buffalo/zh/index.html"><font color="#1a8bc8">http://www.amowa.net/buffalo/zh/index.html</font></a> <br /><img src ="http://www.blogjava.net/xzclog/aggbug/352439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2011-06-16 16:44 <a href="http://www.blogjava.net/xzclog/archive/2011/06/16/352439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javaScript通用数据类型校验</title><link>http://www.blogjava.net/xzclog/archive/2008/09/03/226682.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 03 Sep 2008 07:01:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2008/09/03/226682.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/226682.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2008/09/03/226682.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/226682.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/226682.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;/** * 取得字符串的字节长度 */ 代码    function&nbsp;strlen(str) &nbsp;&nbsp;    { &nbsp;&nbsp;    &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;i; &nbsp;&nbsp;    &nbsp;&nbsp;&nbsp;&nbsp;var&...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2008/09/03/226682.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/226682.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2008-09-03 15:01 <a href="http://www.blogjava.net/xzclog/archive/2008/09/03/226682.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FCKeditor与JSF的整合 </title><link>http://www.blogjava.net/xzclog/archive/2006/10/14/75159.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Sat, 14 Oct 2006 09:13:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2006/10/14/75159.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/75159.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2006/10/14/75159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/75159.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/75159.html</trackback:ping><description><![CDATA[FCKeditor，作为现在功能最强大的在线HTML编辑器，网上关于他的功能介绍以及基本配置已经很多了。然而其中不少文章涉及面都比较局限。最近，笔者需要在自己项目中使用到FCKeditor，并用之于和已有的基于JSF的web应用整合。从对FCKeditor一窍不通到成功达成整合，我从网上学到了不少知识，自己也积累了不少经验，因此，也想和大家一起分析这一过程。<br /><br />  <font size="5"><strong><em> 1.基本配置：<br /></em></strong></font><br />      知之为知之，不知google之。关于FCKeditor的基本配置在网上自有高人指点，这里我也不多耽误大家时间。主要是谈下自己当初配置的问题：<br />    a.基本路径：<br />        注意FCKeditor的基本路径应该是/（你的web应用名称）/（放置FCKeditor文件的文件夹名）/<br />        我的目录结构为：<br />        <img id="ViewPicture1_GalleryImage" style="BORDER-RIGHT: black 2px solid; BORDER-TOP: black 2px solid; BORDER-LEFT: black 2px solid; WIDTH: 542px; BORDER-BOTTOM: black 2px solid; HEIGHT: 232px" src="http://www.blogjava.net/images/blogjava_net/dyerac/9435/r_str.jpg" /><br />        因此，我的基本路径设置为：/fck/FCKeditor/<br /><br />     b.文件浏览以及上传路径设置：<br />        我个人的参考如下：<br />       
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">FCKConfig.LinkBrowser = true ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=connectors/jsp/connector' ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.LinkBrowserWindowWidth    = FCKConfig.ScreenWidth * 0.7 ;        // 70%<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.LinkBrowserWindowHeight    = FCKConfig.ScreenHeight * 0.7 ;    // 70%<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.ImageBrowser = true ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image</span><span style="COLOR: #ff0000">&amp;Connector</span><span style="COLOR: #000000">=connectors/jsp/connector';<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.ImageBrowserWindowWidth  = FCKConfig.ScreenWidth * 0.7 ;    // 70% ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.ImageBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ;    // 70% ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.FlashBrowser = true ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Flash</span><span style="COLOR: #ff0000">&amp;Connector</span><span style="COLOR: #000000">=connectors/jsp/connector' ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.FlashBrowserWindowWidth  = FCKConfig.ScreenWidth * 0.7 ;    //70% ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.FlashBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ;    //70% ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.LinkUpload = true ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=File' ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.LinkUploadAllowedExtensions    = "" ;            // empty for all<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.LinkUploadDeniedExtensions    = ".(php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi)$" ;    // empty for no one<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.ImageUpload = true ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.ImageUploadURL =FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Image' ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.ImageUploadAllowedExtensions    = ".(jpg|gif|jpeg|png)$" ;        // empty for all<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.ImageUploadDeniedExtensions    = "" ;                            // empty for no one<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.FlashUpload = true ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Flash' ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.FlashUploadAllowedExtensions    = ".(swf|fla)$" ;        // empty for all<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />FCKConfig.FlashUploadDeniedExtensions    = "" ;                    // empty for no one</span></div><br /><br /><font size="5"><strong><em>2.与JSF整合。<br /><br /></em></strong></font>  FCKeditor与JSF整合的最大问题，在于需要从JSF环境中相应Bean读取值赋予给FCKeditor，同时从FCKeditor里面读取结果赋予给相应的数据持有Bean。由于这一过程在传统的JSF标签中是通过值绑定有框架自动完成，因此这里需要我们手动来实现这一过程。<br />  以下要展示的demo由两部分组成：<br />   form.jsp显示编辑内容，点击其submit按钮跳转至test.jsp，test.jsp调用FCKeditor对form.jsp中显示的已有内容进行显示和编辑。编辑完后点击submit，页面将重新跳转到form.jsp，显示修改后的内容。<br />  其实，这就是一个很基本的编辑功能，在论坛和blog中都可以看到它的身影。<br />   而ContextBean用于持有待编辑的内容，它的scope是session范围。ContextServlet用于读取FCKeditor修改后的内容，并赋予ContextBean中。<br /><br />    首先来看form.jsp<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">f:view</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">h:form</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">pre</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">h:outputText </span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="#{td.name}"</span><span style="COLOR: #ff0000"> escape</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">h:outputText</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">pre</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">h:commandButton </span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="submit"</span><span style="COLOR: #ff0000"> action</span><span style="COLOR: #0000ff">="#{td.submit}"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">h:commandButton</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">h:form</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">f:view</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span></div><br />    这个页面很简单，其中td对应的就是ContextBean，ContextBean.name用于保存编辑内容<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.dyerac;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_46_226_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_226_Open_Text.style.display='none'; Codehighlighter1_46_226_Closed_Image.style.display='inline'; Codehighlighter1_46_226_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_46_226_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_46_226_Closed_Text.style.display='none'; Codehighlighter1_46_226_Open_Image.style.display='inline'; Codehighlighter1_46_226_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ContextBean </span><span id="Codehighlighter1_46_226_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_46_226_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_96_114_Open_Image" onclick="this.style.display='none'; Codehighlighter1_96_114_Open_Text.style.display='none'; Codehighlighter1_96_114_Closed_Image.style.display='inline'; Codehighlighter1_96_114_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_96_114_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_96_114_Closed_Text.style.display='none'; Codehighlighter1_96_114_Open_Image.style.display='inline'; Codehighlighter1_96_114_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getName() </span><span id="Codehighlighter1_96_114_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_96_114_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_151_174_Open_Image" onclick="this.style.display='none'; Codehighlighter1_151_174_Open_Text.style.display='none'; Codehighlighter1_151_174_Closed_Image.style.display='inline'; Codehighlighter1_151_174_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_151_174_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_151_174_Closed_Text.style.display='none'; Codehighlighter1_151_174_Open_Image.style.display='inline'; Codehighlighter1_151_174_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setName(String name) </span><span id="Codehighlighter1_151_174_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_151_174_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_201_224_Open_Image" onclick="this.style.display='none'; Codehighlighter1_201_224_Open_Text.style.display='none'; Codehighlighter1_201_224_Closed_Image.style.display='inline'; Codehighlighter1_201_224_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_201_224_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_201_224_Closed_Text.style.display='none'; Codehighlighter1_201_224_Open_Image.style.display='inline'; Codehighlighter1_201_224_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String submit() </span><span id="Codehighlighter1_201_224_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_201_224_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">edit</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br /><br />下面来看test.jsp<br /> 用过FCKeditor的都知道，FCKeditor可以通过三种方式来调用：<br /> script， jsp 标签以及java代码。<br />这里，为了方便从ContextBean中读取name属性内容作为其初始值，我使用了第三种方法<br />其中<span style="COLOR: #000000">FCKeditor fck</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FCKeditor(request,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">EditorDefault</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);初始化FCKeditor，第二个参数即为该FCKeditor实例的id，当提交后FCKeditor内的内容将以该参数为变量名保存在request中。<br /></span>比如，这里我选择了<span style="COLOR: #000000">EditorDefault，所以日后读取FCKeditor内容时，可以通过以下语句：<br />request.getParameter(<span style="COLOR: #000000">"</span><span style="COLOR: #000000">EditorDefault</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)</span><br /></span><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">body</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">form action</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/fck/servlet/ContextServlet</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> method</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">post</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> target</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">_blank</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #000000">&lt;%</span><span style="COLOR: #000000">FCKeditor fck</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FCKeditor(request,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">EditorDefault</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />          FacesContext fcg</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">FacesContext.getCurrentInstance();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />          ContextBean td</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(ContextBean)fcg.getApplication().getVariableResolver().resolveVariable(fcg,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">td</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />          fck.setBasePath(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/fck/FCKeditor/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />          fck.setValue(td.getName());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />          fck.setHeight(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Integer(</span><span style="COLOR: #000000">600</span><span style="COLOR: #000000">).toString());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />          out.print(fck.create());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span><span style="COLOR: #000000">%&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">input type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">submit</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Submit</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">body</span><span style="COLOR: #000000">&gt;</span></div><p> 修改后的结果以post方式提交给/fck/servlet/ContextServlet，该url对应的即为ContextServlet。<br />ContextServlet负责读取FCKeditor里的内容，并赋予给session中的ContextBean。doPost()方法用于实现该功能<br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> doPost(HttpServletRequest request, HttpServletResponse response)<br /><img id="Codehighlighter1_117_529_Open_Image" onclick="this.style.display='none'; Codehighlighter1_117_529_Open_Text.style.display='none'; Codehighlighter1_117_529_Closed_Image.style.display='inline'; Codehighlighter1_117_529_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_117_529_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_117_529_Closed_Text.style.display='none'; Codehighlighter1_117_529_Open_Image.style.display='inline'; Codehighlighter1_117_529_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> ServletException, IOException </span><span id="Codehighlighter1_117_529_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_117_529_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        FacesContext fcg </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> getFacesContext(request,response);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        ContextBean td </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (ContextBean) fcg.getApplication()<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                .getVariableResolver().resolveVariable(fcg, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">td</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        String name</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String(request.getParameter(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">EditorDefault</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).getBytes(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ISO-8859-1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">UTF-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        td.setName(name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        RequestDispatcher rd</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">getServletContext().getRequestDispatcher(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/form.faces</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        rd.forward(request, response);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span></div><p>需要注意两个问题，<br />其一：FCKeditor内的中文信息读取是可能出现乱码，需要额外的处理：<br />   String name<span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String(request.getParameter(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">EditorDefault</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).getBytes(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ISO-8859-1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">UTF-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span>其二：由于servlet处于FacesContext范围外，因此不能通过FacesContext.getCurrentInstance()来得到当前FacesContext，因此ContextServlet定义了自己的方法用于获取FacesContext：<br /><br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">//</span><span style="COLOR: #008000">     You need an inner class to be able to call FacesContext.setCurrentInstance<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">     since it's a protected method</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">abstract</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> InnerFacesContext </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> FacesContext<br /><img id="Codehighlighter1_184_331_Open_Image" onclick="this.style.display='none'; Codehighlighter1_184_331_Open_Text.style.display='none'; Codehighlighter1_184_331_Closed_Image.style.display='inline'; Codehighlighter1_184_331_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_184_331_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_184_331_Closed_Text.style.display='none'; Codehighlighter1_184_331_Open_Image.style.display='inline'; Codehighlighter1_184_331_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />    </span><span id="Codehighlighter1_184_331_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_184_331_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_271_328_Open_Image" onclick="this.style.display='none'; Codehighlighter1_271_328_Open_Text.style.display='none'; Codehighlighter1_271_328_Closed_Image.style.display='inline'; Codehighlighter1_271_328_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_271_328_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_271_328_Closed_Text.style.display='none'; Codehighlighter1_271_328_Open_Image.style.display='inline'; Codehighlighter1_271_328_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />      </span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setFacesContextAsCurrentInstance(FacesContext facesContext) </span><span id="Codehighlighter1_271_328_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_271_328_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        FacesContext.setCurrentInstance(facesContext);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />      }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_422_1866_Open_Image" onclick="this.style.display='none'; Codehighlighter1_422_1866_Open_Text.style.display='none'; Codehighlighter1_422_1866_Closed_Image.style.display='inline'; Codehighlighter1_422_1866_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_422_1866_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_422_1866_Closed_Text.style.display='none'; Codehighlighter1_422_1866_Open_Image.style.display='inline'; Codehighlighter1_422_1866_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> FacesContext getFacesContext(ServletRequest request, ServletResponse response) </span><span id="Codehighlighter1_422_1866_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_422_1866_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Try to get it first</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">      FacesContext facesContext </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> FacesContext.getCurrentInstance();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (facesContext </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">) </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> facesContext;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      FacesContextFactory contextFactory </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (FacesContextFactory)FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      LifecycleFactory lifecycleFactory </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (LifecycleFactory)FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      Lifecycle lifecycle </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Either set a private member servletContext = filterConfig.getServletContext();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> in you filter init() method or set it here like this:<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> ServletContext servletContext = ((HttpServletRequest)request).getSession().getServletContext();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Note that the above line would fail if you are using any other protocol than http</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">      ServletContext servletContext </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ((HttpServletRequest)request).getSession().getServletContext();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Doesn't set this instance as the current instance of FacesContext.getCurrentInstance</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">      facesContext </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> contextFactory.getFacesContext(servletContext, request, response, lifecycle);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Set using our inner class</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">      InnerFacesContext.setFacesContextAsCurrentInstance(facesContext);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> set a new viewRoot, otherwise context.getViewRoot returns null<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">UIViewRoot view = facesContext.getApplication().getViewHandler().createView(facesContext, "yourOwnID");<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">facesContext.setViewRoot(view);</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> facesContext;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"> </span></div><p>   ContextServlet处理完了FCKeditor内容后，将跳转到form.jsp。<br />这样一个简单的编辑功能就完成了。<br /><br /><em><font size="5"><strong>3.遗留问题：<br /></strong></font></em><br />   我在上传文件时还是会出现中文乱码的问题，按照其他人说的那样把网页的charset=utf-8改成gb2312一样会有问题，还请各位高手赐教^_^<br /><br /><br />另外，关于整个demo的源代码如果大家需要，可以留言给我，我用邮箱发给您。不足之处，还请各位多多指点</p><img src ="http://www.blogjava.net/xzclog/aggbug/75159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2006-10-14 17:13 <a href="http://www.blogjava.net/xzclog/archive/2006/10/14/75159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FCKeditor使用说明 </title><link>http://www.blogjava.net/xzclog/archive/2006/10/14/75158.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Sat, 14 Oct 2006 09:08:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2006/10/14/75158.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/75158.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2006/10/14/75158.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/75158.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/75158.html</trackback:ping><description><![CDATA[
		<div style="MARGIN-TOP: 5px; MARGIN-LEFT: 15px">
				<b>关键字:</b>        </div>
		<div style="MARGIN-TOP: 10px; MARGIN-LEFT: 15px">
				<table width="100%">
						<tbody>
								<tr>
										<td>
												<p>开发环境： <br />Tomcat5.5 Eclipse3.2</p>
												<p>FCKeditor 版本 FCKeditor_2.3.1 FCKeditor.Java 2.3</p>
												<p>下载地址： <a href="http://www.fckeditor.net/download/default.html" target="blank">http://www.fckeditor.net/download/default.html</a></p>
												<p>开始： <br />新建工程，名称为 fekeditor <br />解压 FCKeditor_2.3.1 包中的 edit 文件夹到项目中的 WebContent 目录</p>
												<p>解压 FCKeditor_2.3.1 包中的 fckconfig.js、fckeditor.js、fckstyles.xml、fcktemplates.xml 文件夹到项目中的 WebContent 目录</p>
												<p>解压 FCKeditor-2.3.zip 包中的 \web\WEB-INF\lib 下的两个 jar 文件到项目的 WebContent\WEB-INF\lib 目录</p>
												<p>解压 FCKeditor-2.3.zip 包中的 \src 下的 FCKeditor.tld 文件到项目的 WebContent\WEB-INF 目录</p>
												<p>删除 WebContent\edit 目录下的 _source 文件夹 <br /></p>
												<p>修改 web.xml 文件，加入以下内容</p>
												<p>
												</p>
												<div class="code_title">代码</div>
												<div class="code_div">
														<pre>
																<span class="punct">&lt;</span>
																<span class="ident">servlet</span>
																<span class="punct">&gt;</span>
																<br />
																<span class="punct">&lt;</span>
																<span class="ident">servlet</span>
																<span class="punct">-</span>
																<span class="ident">name</span>
																<span class="punct">&gt;</span>
																<span class="constant">Connector</span>
																<span class="punct">&lt;/</span>
																<span class="regex">servlet-name&gt;
<br />  &lt;servlet-class&gt;
<br />   com.fredck.FCKeditor.connector.ConnectorServlet
<br />  &lt;</span>
																<span class="punct">/</span>
																<span class="ident">servlet</span>
																<span class="punct">-</span>
																<span class="keyword">class</span>
																<span class="punct">&gt;</span>
																<br />
																<span class="punct">&lt;</span>
																<span class="ident">init</span>
																<span class="punct">-</span>
																<span class="ident">param</span>
																<span class="punct">&gt;</span>
																<br />
																<span class="punct">&lt;</span>
																<span class="ident">param</span>
																<span class="punct">-</span>
																<span class="ident">name</span>
																<span class="punct">&gt;</span>
																<span class="ident">baseDir</span>
																<span class="punct">&lt;/</span>
																<span class="regex">param-name&gt;
<br />   &lt;!-- 此为文件浏览路径 --&gt;
<br />   &lt;param-value&gt;</span>
																<span class="punct">/</span>
																<span class="constant">UserFiles</span>
																<span class="punct">/&lt;/</span>
																<span class="regex">param-value&gt;
<br />  &lt;</span>
																<span class="punct">/</span>
																<span class="ident">init</span>
																<span class="punct">-</span>
																<span class="ident">param</span>
																<span class="punct">&gt;</span>
																<br />
																<span class="punct">&lt;</span>
																<span class="ident">init</span>
																<span class="punct">-</span>
																<span class="ident">param</span>
																<span class="punct">&gt;</span>
																<br />
																<span class="punct">&lt;</span>
																<span class="ident">param</span>
																<span class="punct">-</span>
																<span class="ident">name</span>
																<span class="punct">&gt;</span>
																<span class="ident">debug</span>
																<span class="punct">&lt;/</span>
																<span class="regex">param-name&gt;
<br />   &lt;param-value&gt;true&lt;</span>
																<span class="punct">/</span>
																<span class="ident">param</span>
																<span class="punct">-</span>
																<span class="ident">value</span>
																<span class="punct">&gt;</span>
																<br />
																<span class="punct">&lt;/</span>
																<span class="regex">init-param&gt;
<br />  &lt;load-on-startup&gt;1&lt;</span>
																<span class="punct">/</span>
																<span class="ident">load</span>
																<span class="punct">-</span>
																<span class="ident">on</span>
																<span class="punct">-</span>
																<span class="ident">startup</span>
																<span class="punct">&gt;</span>
																<br />
																<span class="punct">&lt;/</span>
																<span class="regex">servlet&gt; &lt;servlet&gt;
<br />  &lt;servlet-name&gt;SimpleUploader&lt;</span>
																<span class="punct">/</span>
																<span class="ident">servlet</span>
																<span class="punct">-</span>
																<span class="ident">name</span>
																<span class="punct">&gt;</span>
																<br />
																<span class="punct">&lt;</span>
																<span class="ident">servlet</span>
																<span class="punct">-</span>
																<span class="keyword">class</span>
																<span class="punct">&gt;</span>
																<br />
																<span class="ident">com</span>
																<span class="punct">.</span>
																<span class="ident">fredck</span>
																<span class="punct">.</span>
																<span class="ident">FCKeditor</span>
																<span class="punct">.</span>
																<span class="ident">uploader</span>
																<span class="punct">.</span>
																<span class="ident">SimpleUploaderServlet</span>
																<br />
																<span class="punct">&lt;/</span>
																<span class="regex">servlet-class&gt;
<br />  &lt;init-param&gt;
<br />   &lt;param-name&gt;baseDir&lt;</span>
																<span class="punct">/</span>
																<span class="ident">param</span>
																<span class="punct">-</span>
																<span class="ident">name</span>
																<span class="punct">&gt;</span>
																<br />
																<span class="punct">&lt;!--</span> 此为文件上传路径，需要在<span class="constant">WebContent</span> 目录下新建 <span class="constant">UserFiles</span> 文件夹 <span class="punct">--&gt;</span><br /><span class="punct">&lt;!--</span> 根据文件的类型还需要新建相关的文件夹 <span class="constant">Image、</span><span class="constant">Flash</span><span class="punct">--&gt;</span><br /><span class="punct">&lt;</span><span class="ident">param</span><span class="punct">-</span><span class="ident">value</span><span class="punct">&gt;/</span><span class="regex">UserFiles</span><span class="punct">/&lt;/</span><span class="regex">param-value&gt;
<br />  &lt;</span><span class="punct">/</span><span class="ident">init</span><span class="punct">-</span><span class="ident">param</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">init</span><span class="punct">-</span><span class="ident">param</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">param</span><span class="punct">-</span><span class="ident">name</span><span class="punct">&gt;</span><span class="ident">debug</span><span class="punct">&lt;/</span><span class="regex">param-name&gt;
<br />   &lt;param-value&gt;true&lt;</span><span class="punct">/</span><span class="ident">param</span><span class="punct">-</span><span class="ident">value</span><span class="punct">&gt;</span><br /><span class="punct">&lt;/</span><span class="regex">init-param&gt;
<br />  &lt;init-param&gt;
<br />   &lt;!-- 此参数为是否开启上传功能 --&gt;
<br />   &lt;param-name&gt;enabled&lt;</span><span class="punct">/</span><span class="ident">param</span><span class="punct">-</span><span class="ident">name</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">param</span><span class="punct">-</span><span class="ident">value</span><span class="punct">&gt;</span><span class="constant">false</span><span class="punct">&lt;/</span><span class="regex">param-value&gt;
<br />  &lt;</span><span class="punct">/</span><span class="ident">init</span><span class="punct">-</span><span class="ident">param</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">init</span><span class="punct">-</span><span class="ident">param</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">param</span><span class="punct">-</span><span class="ident">name</span><span class="punct">&gt;</span><span class="constant">AllowedExtensionsFile</span><span class="punct">&lt;/</span><span class="regex">param-name&gt;
<br />   &lt;param-value&gt;&lt;</span><span class="punct">/</span><span class="ident">param</span><span class="punct">-</span><span class="ident">value</span><span class="punct">&gt;</span><br /><span class="punct">&lt;/</span><span class="regex">init-param&gt;
<br />  &lt;init-param&gt;    &lt;!-- 此参数为文件过滤，以下的文件类型都不可以上传 --&gt;
<br />   &lt;param-name&gt;DeniedExtensionsFile&lt;</span><span class="punct">/</span><span class="ident">param</span><span class="punct">-</span><span class="ident">name</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">param</span><span class="punct">-</span><span class="ident">value</span><span class="punct">&gt;</span><br /><span class="ident">php</span><span class="punct">|</span><span class="ident">php3</span><span class="punct">|</span><span class="ident">php5</span><span class="punct">|</span><span class="ident">phtml</span><span class="punct">|</span><span class="ident">asp</span><span class="punct">|</span><span class="ident">aspx</span><span class="punct">|</span><span class="ident">ascx</span><span class="punct">|</span><span class="ident">jsp</span><span class="punct">|</span><span class="ident">cfm</span><span class="punct">|</span><span class="ident">cfc</span><span class="punct">|</span><span class="ident">pl</span><span class="punct">|</span><span class="ident">bat</span><span class="punct">|</span><span class="ident">exe</span><span class="punct">|</span><span class="ident">dll</span><span class="punct">|</span><span class="ident">reg</span><span class="punct">|</span><span class="ident">cgi</span><br /><span class="punct">&lt;/</span><span class="regex">param-value&gt;
<br />  &lt;</span><span class="punct">/</span><span class="ident">init</span><span class="punct">-</span><span class="ident">param</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">init</span><span class="punct">-</span><span class="ident">param</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">param</span><span class="punct">-</span><span class="ident">name</span><span class="punct">&gt;</span><span class="constant">AllowedExtensionsImage</span><span class="punct">&lt;/</span><span class="regex">param-name&gt;
<br />   &lt;param-value&gt;jpg|gif|jpeg|png|bmp&lt;</span><span class="punct">/</span><span class="ident">param</span><span class="punct">-</span><span class="ident">value</span><span class="punct">&gt;</span><br /><span class="punct">&lt;/</span><span class="regex">init-param&gt;
<br />  &lt;init-param&gt;
<br />   &lt;param-name&gt;DeniedExtensionsImage&lt;</span><span class="punct">/</span><span class="ident">param</span><span class="punct">-</span><span class="ident">name</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">param</span><span class="punct">-</span><span class="ident">value</span><span class="punct">&gt;&lt;/</span><span class="regex">param-value&gt;
<br />  &lt;</span><span class="punct">/</span><span class="ident">init</span><span class="punct">-</span><span class="ident">param</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">init</span><span class="punct">-</span><span class="ident">param</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">param</span><span class="punct">-</span><span class="ident">name</span><span class="punct">&gt;</span><span class="constant">AllowedExtensionsFlash</span><span class="punct">&lt;/</span><span class="regex">param-name&gt;
<br />   &lt;param-value&gt;swf|fla&lt;</span><span class="punct">/</span><span class="ident">param</span><span class="punct">-</span><span class="ident">value</span><span class="punct">&gt;</span><br /><span class="punct">&lt;/</span><span class="regex">init-param&gt;
<br />  &lt;init-param&gt;
<br />   &lt;param-name&gt;DeniedExtensionsFlash&lt;</span><span class="punct">/</span><span class="ident">param</span><span class="punct">-</span><span class="ident">name</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">param</span><span class="punct">-</span><span class="ident">value</span><span class="punct">&gt;&lt;/</span><span class="regex">param-value&gt;
<br />  &lt;</span><span class="punct">/</span><span class="ident">init</span><span class="punct">-</span><span class="ident">param</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">load</span><span class="punct">-</span><span class="ident">on</span><span class="punct">-</span><span class="ident">startup</span><span class="punct">&gt;</span><span class="number">1</span><span class="punct">&lt;/</span><span class="regex">load-on-startup&gt;
<br /> &lt;</span><span class="punct">/</span><span class="ident">servlet</span><span class="punct">&gt;</span><span class="punct">&lt;</span><span class="ident">servlet</span><span class="punct">-</span><span class="ident">mapping</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">servlet</span><span class="punct">-</span><span class="ident">name</span><span class="punct">&gt;</span><span class="constant">Connector</span><span class="punct">&lt;/</span><span class="regex">servlet-name&gt;
<br />  &lt;url-pattern&gt;
<br /></span><span class="punct">/</span><span class="ident">editor</span><span class="punct">/</span><span class="ident">filemanager</span><span class="punct">/</span><span class="ident">browser</span><span class="punct">/</span><span class="ident">default</span><span class="punct">/</span><span class="ident">connectors</span><span class="punct">/</span><span class="ident">jsp</span><span class="punct">/</span><span class="ident">connector</span><br /><span class="punct">&lt;/</span><span class="regex">url-pattern&gt;
<br /> &lt;</span><span class="punct">/</span><span class="ident">servlet</span><span class="punct">-</span><span class="ident">mapping</span><span class="punct">&gt;</span><span class="punct">&lt;</span><span class="ident">servlet</span><span class="punct">-</span><span class="ident">mapping</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">servlet</span><span class="punct">-</span><span class="ident">name</span><span class="punct">&gt;</span><span class="constant">SimpleUploader</span><span class="punct">&lt;/</span><span class="regex">servlet-name&gt;
<br />  &lt;url-pattern&gt;
<br /></span><span class="punct">/</span><span class="ident">editor</span><span class="punct">/</span><span class="ident">filemanager</span><span class="punct">/</span><span class="ident">upload</span><span class="punct">/</span><span class="ident">simpleuploader</span><br /><span class="punct">&lt;/</span><span class="regex">url-pattern&gt;
<br /> &lt;</span><span class="punct">/</span><span class="ident">servlet</span><span class="punct">-</span><span class="ident">mapping</span><span class="punct">&gt;</span></pre>
												</div>
												<br />新建一个提交页 jsp1.jsp 文件和一个接收页 jsp2.jsp 文件 
<p></p><p>jsp1.jsp 代码如下：</p><p></p><div class="code_title">代码</div><div class="code_div"><pre><span class="punct">&lt;%@</span><span class="string"> page contentType = "text/html;charset=UTF-8" language = "java" %&gt;
<br />&lt;%</span><span class="punct">@</span><span class="ident">taglib</span><span class="ident">uri</span><span class="punct">=</span><span class="punct">"</span><span class="string">/WEB-INF/FCKeditor.tld</span><span class="punct">"</span><span class="ident">prefix</span><span class="punct">=</span><span class="punct">"</span><span class="string">fck</span><span class="punct">"</span><span class="punct">%&gt;</span><span class="string">&lt;html</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">head</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">title</span><span class="punct">&gt;</span><span class="constant">Test</span><span class="punct">&lt;/</span><span class="regex">title&gt;
<br />  &lt;</span><span class="punct">/</span><span class="ident">head</span><span class="punct">&gt;</span><span class="punct">&lt;</span><span class="ident">body</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="constant">FORM</span><span class="ident">action</span><span class="punct">=</span><span class="punct">"</span><span class="string">jsp2.jsp</span><span class="punct">"</span><span class="punct">&gt;</span><br /><span class="punct">&lt;</span><span class="ident">fck</span><span class="symbol">:editor</span><span class="ident">id</span><span class="punct">=</span><span class="punct">"</span><span class="string">testfck</span><span class="punct">"</span><span class="ident">basePath</span><span class="punct">=</span><span class="punct">"</span><span class="string">/fekeditor/</span><span class="punct">"</span><br /><span class="ident">height</span><span class="punct">=</span><span class="punct">"</span><span class="string">100%</span><span class="punct">"</span><br /><span class="ident">skinPath</span><span class="punct">=</span><span class="punct">"</span><span class="string">/fekeditor/editor/skins/default/</span><span class="punct">"</span><br /><span class="ident">toolbarSet</span><span class="punct">=</span><span class="punct">"</span><span class="string">Default</span><span class="punct">"</span><br /><span class="ident">imageBrowserURL</span><span class="punct">=</span><span class="punct">"</span><span class="string">/fekeditor/editor/filemanager/browser/default/browser.html?Type=Image&amp;Connector=connectors/jsp/connector</span><span class="punct">"</span><br /><span class="ident">linkBrowserURL</span><span class="punct">=</span><span class="punct">"</span><span class="string">/fekeditor/editor/filemanager/browser/default/browser.html?Connector=connectors/jsp/connector</span><span class="punct">"</span><br /><span class="ident">flashBrowserURL</span><span class="punct">=</span><span class="punct">"</span><span class="string">/fekeditor/editor/filemanager/browser/default/browser.html?Type=Flash&amp;Connector=connectors/jsp/connector</span><span class="punct">"</span><br /><span class="ident">imageUploadURL</span><span class="punct">=</span><span class="punct">"</span><span class="string">/fekeditor/editor/filemanager/upload/simpleuploader?Type=Image</span><span class="punct">"</span><br /><span class="ident">linkUploadURL</span><span class="punct">=</span><span class="punct">"</span><span class="string">/fekeditor/editor/filemanager/upload/simpleuploader?Type=File</span><span class="punct">"</span><br /><span class="ident">flashUploadURL</span><span class="punct">=</span><span class="punct">"</span><span class="string">/fekeditor/editor/filemanager/upload/simpleuploader?Type=Flash</span><span class="punct">"</span><span class="punct">&gt;</span><br /><span class="punct">&lt;/</span><span class="regex">fck:editor&gt;
<br />  &lt;input type="submit" </span><span class="punct">/&gt;</span><br /><span class="punct">&lt;/</span><span class="regex">FORM&gt;
<br />  &lt;</span><span class="punct">/</span><span class="ident">body</span><span class="punct">&gt;</span><br /><span class="punct">&lt;/</span><span class="regex">html&gt;jsp2.jsp 代码如下：&lt;html&gt;
<br />  &lt;head&gt;
<br />    &lt;title&gt;TEST&lt;</span><span class="punct">/</span><span class="ident">title</span><span class="punct">&gt;</span><br /><span class="punct">&lt;/</span><span class="regex">head&gt;  &lt;body&gt;
<br />    &lt;%=request.getParameter( "testfck" )%&gt;
<br />  &lt;</span><span class="punct">/</span><span class="ident">body</span><span class="punct">&gt;</span><br /><span class="punct">&lt;/</span><span class="regex">html&gt;</span></pre></div><br />在 WebContent 目录下新建 UserFiles 文件夹，在此文件夹下新建 File,Image,Flash 三个文件夹。 
<p></p><p>ok现在运行一下看看吧！ <br /></p></td>
								</tr>
						</tbody>
				</table>
		</div>
<img src ="http://www.blogjava.net/xzclog/aggbug/75158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2006-10-14 17:08 <a href="http://www.blogjava.net/xzclog/archive/2006/10/14/75158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FCKeditor在线编辑器的使用</title><link>http://www.blogjava.net/xzclog/archive/2006/10/11/74629.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 11 Oct 2006 09:19:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2006/10/11/74629.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/74629.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2006/10/11/74629.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/74629.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/74629.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td valign="top" width="402">
										<div align="left">
												<p align="left">试用了一下FCKeditor,根据网上的文章小结一下：<br />1.下载<br />FCKeditor.java 2.3 (FCKeditot for java)<br />FCKeditor 2.2 (FCKeditor基本文件)</p>
												<p>2.建立项目:tomcat/webapps/TestFCKeditor.</p>
												<p>3.将FCKeditor2.2解压缩,将整个目录FCKeditor复制到项目的根目录下，<br />目录结构为：tomcat/webapps/TestFCKeditor/FCKeditor<br />然后将FCKeditor-2.3.zip（java）压缩包中\web\WEB-INF\lib\目录下的两个jar文件拷到项目的\WEB-INF\lib\目录下。把其中的src目录下的FCKeditor.tld文件copy到TestFCKedit/FCKeitor/WEB-INF/下</p>
												<p>4.将FCKeditor-2.3.zip压缩包中\web\WEB-INF\目录下的web.xml文件合并到项目的\WEB-INF\目录下的web.xml文件中。</p>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
		<p>5. 修改合并后的web.xml文件，将名为SimpleUploader的Servlet的enabled参数值改为true，<br />以允许上传功能，Connector Servlet的baseDir参数值用于设置上传文件存放的位置。<br />添加标签定义:<br />&lt;taglib&gt;<br />&lt;taglib-uri&gt;/TestFCKeditor&lt;/taglib-uri&gt;<br />&lt;taglib-location&gt;/WEB-INF/FCKeditor.tld&lt;/taglib-location&gt;<br />&lt;/taglib&gt;</p>
		<p>运行图：</p>
		<p>
				<img height="457" src="http://www.java3z.com/cwbwebhome/article/article1/images/fckeditor.gif" width="550" />
		</p>
		<p>6. 上面文件中两个servlet的映射分别为：/editor/filemanager/browser/default/connectors/jsp/connector<br />和/editor/filemanager/upload/simpleuploader，需要在两个映射前面加上/FCKeditor，<br />即改为/FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector和<br />/FCKeditor/editor/filemanager/upload/simpleuploader。</p>
		<p>7.进入skin文件夹，如果你想使用fckeditor默认的这种奶黄色，<br />那就把除了default文件夹外的另两个文件夹直接删除.</p>
		<p>8.删除/FCKeditor/目录下除fckconfig.js, fckeditor.js, fckstyles.xml, fcktemplates.xml四个文件以外的所有文件 <br />删除目录/editor/_source,<br />删除/editor/filemanager/browser/default/connectors/下的所有文件<br />删除/editor/filemanager/upload/下的所有文件<br />删除/editor/lang/下的除了fcklanguagemanager.js, en.js, zh.js, zh-cn.js四个文件的所有文件</p>
		<p>9.打开/FCKeditor/fckconfig.js<br />修改 FCKConfig.DefaultLanguage = 'zh-cn' ; <br />把FCKConfig.LinkBrowserURL等的值替换成以下内容：<br />FCKConfig.LinkBrowserURL<br />= FCKConfig.BasePath + "filemanager/browser/default/browser.html?Connector=connectors/jsp/connector" ;<br /><br />FCKConfig.ImageBrowserURL<br />= FCKConfig.BasePath + "filemanager/browser/default/browser.html?Type=Image&amp;Connector=connectors/jsp/connector" ;<br /><br />FCKConfig.FlashBrowserURL<br />= FCKConfig.BasePath + "filemanager/browser/default/browser.html?Type=Flash&amp;Connector=connectors/jsp/connector" ;</p>
		<p>
				<br />FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=File' ;<br />FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Flash' ;<br />FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Image' ;<br /></p>
		<p>10.其它<br />fckconfig.js总配置文件，可用记录本打开，修改后将文件存为utf-8 编码格式。找到：</p>
		<p>FCKConfig.TabSpaces = 0 ; 改为FCKConfig.TabSpaces = 1 ; 即在编辑器域内可以使用Tab键。</p>
		<p>如果你的编辑器还用在网站前台的话，比如说用于留言本或是日记回复时，那就不得不考虑安全了，<br />在前台千万不要使用Default的toolbar，要么自定义一下功能，要么就用系统已经定义好的Basic，<br />也就是基本的toolbar，找到：<br />FCKConfig.ToolbarSets["Basic"] = [<br />['Bold','Italic','-','OrderedList','UnorderedList','-',/*'Link',*/'Unlink','-','Style','FontSize','TextColor','BGColor','-',<br />'Smiley','SpecialChar','Replace','Preview'] ] ;<br />这是改过的Basic，把图像功能去掉，把添加链接功能去掉，因为图像和链接和flash和图像按钮添加功能都能让前台<br />页直接访问和上传文件， fckeditor还支持编辑域内的鼠标右键功能。<br /><br />FCKConfig.ContextMenu = ['Generic',/*'Link',*/'Anchor',/*'Image',*/'Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField',<br />/*'ImageButton',*/'Button','BulletedList','NumberedList','TableCell','Table','Form'] ;<br /><br />这也是改过的把鼠标右键的“链接、图像，FLASH，图像按钮”功能都去掉。</p>
		<p>　　找到： FCKConfig.FontNames = 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;<br />加上几种我们常用的字体 <br />FCKConfig.FontNames <br />= '宋体;黑体;隶书;楷体_GB2312;Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;<br /></p>
		<p>7.添加文件 /TestFCKeditor/test.jsp:<br />&lt;%@ page language="java" import="com.fredck.FCKeditor.*" %&gt;<br />&lt;%@ taglib uri="/TestFCKeditor" prefix="FCK" %&gt;<br />&lt;script type="text/javascript" src="/TestFCKeditor/FCKeditor/fckeditor.js"&gt;&lt;/script&gt;</p>
		<p>&lt;%--<br />三种方法调用FCKeditor<br />1.FCKeditor自定义标签 (必须加头文件 &lt;%@ taglib uri="/TestFCKeditor" prefix="FCK" %&gt; )<br />2.script脚本语言调用 (必须引用 脚本文件 &lt;script type="text/javascript" src="/TestFCKeditor/FCKeditor/fckeditor.js"&gt;&lt;/script&gt; )<br />3.FCKeditor API 调用 (必须加头文件 &lt;%@ page language="java" import="com.fredck.FCKeditor.*" %&gt; )<br />--%&gt;<br /><br />&lt;%--<br />&lt;form action="show.jsp" method="post" target="_blank"&gt;<br />&lt;FCK:editor id="content" basePath="/TestFCKeditor/FCKeditor/"<br />width="700"<br />height="500"<br />skinPath="/TestFCKeditor/FCKeditor/editor/skins/silver/"<br />toolbarSet = "Default"<br />&gt;<br />input<br />&lt;/FCK:editor&gt;<br />&lt;input type="submit" value="Submit"&gt;<br />&lt;/form&gt;<br />--%&gt;</p>
		<p>&lt;form action="show.jsp" method="post" target="_blank"&gt;<br />&lt;table border="0" width="700"&gt;&lt;tr&gt;&lt;td&gt;<br />&lt;textarea id="content" name="content" style="WIDTH: 100%; HEIGHT: 400px"&gt;input&lt;/textarea&gt;<br />&lt;script type="text/javascript"&gt;<br />var oFCKeditor = new FCKeditor('content') ;<br />oFCKeditor.BasePath = "/TestFCKeditor/FCKeditor/" ;<br />oFCKeditor.Height = 400;<br />oFCKeditor.ToolbarSet = "Default" ; <br />oFCKeditor.ReplaceTextarea();<br />&lt;/script&gt;<br />&lt;input type="submit" value="Submit"&gt;<br />&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;<br />&lt;/form&gt;</p>
		<p>&lt;%--<br />&lt;form action="show.jsp" method="post" target="_blank"&gt;<br />&lt;%<br />FCKeditor oFCKeditor ;<br />oFCKeditor = new FCKeditor( request, "content" ) ;<br />oFCKeditor.setBasePath( "/TestFCKeditor/FCKeditor/" ) ;<br />oFCKeditor.setValue( "input" );<br />out.println( oFCKeditor.create() ) ;<br />%&gt;<br />&lt;br&gt;<br />&lt;input type="submit" value="Submit"&gt;<br />&lt;/form&gt;<br />--%&gt;<br /></p>
		<p>添加文件/TestFCKeditor/show.jsp:<br />&lt;%<br />String content = request.getParameter("content");<br />out.print(content);<br />%&gt;</p>
		<p>8.浏览http://localhost:8080/TestFCKeditor/test.jsp<br />ok!<br /></p>
<img src ="http://www.blogjava.net/xzclog/aggbug/74629.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2006-10-11 17:19 <a href="http://www.blogjava.net/xzclog/archive/2006/10/11/74629.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>祥解WEB应用的部署文件web.xml</title><link>http://www.blogjava.net/xzclog/archive/2006/08/10/62796.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 10 Aug 2006 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2006/08/10/62796.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/62796.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2006/08/10/62796.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/62796.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/62796.html</trackback:ping><description><![CDATA[本文使用的服务器是Tomcat服务器，Web应用发布描述文件web.xml是在Servlet规范中定义的。web.xml存放在WEB-INF/目录下<br />&#160;&#160;&#160; 在分析web.xml文档之前我想先说一下web.xml中根元素&lt;web-app&gt;各子元素的顺序问题，因为在web.xml中元素定义的先后顺序是不能颠倒的（除非<font size="3">在<font color="#cc0033">web.xml</font>文件中使用XML Schema，本文不做讨论</font>），否则Tomcat服务器可能抛出SAXParseException。<br />&#160;&#160;&#160; 顺序如下：<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&lt;web-app&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;display-name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;description&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;distributable&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;context-param&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;filter&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;filter-mapping&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;listener&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;servlet&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;servlet-mapping&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;session-config&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;mime-mapping&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;welcome-file-list&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;error-page&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;taglib&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;resource-env-ref&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;resource-ref&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;security-constraint&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;login-config&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;security-role&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;env-entry&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;ejb-ref&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;ejb-local-ref&gt;<br />web.xml中的开头几行是固定的，它定义了该文件的字符编码，XML版本以及引用的DTD文件。<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&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; 
<p>在web.xml中顶层元素为&lt;web-app&gt;，其他所有的子元素都必须定义在&lt;web-app&gt;内</p><p>&lt;display-name&gt;元素定义这个web应用的名字，Java Web 服务器的Web管理工具将用这个名字来标志Web应用。</p><p>&lt;description&gt;元素用来声明Web应用的描述信息</p><p>&lt;context-param&gt;元素用来配置外部引用的，在servlet中如果要获得该元素中配置的值，String param-value = getServletContext().getInitParameter("param-name")</p><p>&lt;filter&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;filter-name&gt;SampleFilter&lt;/filter-name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;filter-class&gt;com.lpdev.SampleFilter&lt;/filter-class&gt;<br />&lt;/filter&gt;<br />&lt;filter-mapping&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;filter-name&gt;SampleFilter&lt;/filter-name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt;<br />以上是配置了一个servlet过滤器，对于servlet容器收到的客户请求以及发出的响应结果，servlet都能检查和修改其中的信息，以上代码指名当客户请求访问Web应用中的所有JSP文件时，将触发SampleFilter过滤器工作，具体的过滤事务在由&lt;filter-class&gt;中指定的类来完成</p><p>&#160;&lt;servlet&gt;<br />&#160;&#160;&lt;servlet-name&gt;IncludeServlet&lt;/servlet-name&gt;<br />&#160;&#160;&lt;servlet-class&gt;com.lpdev.IncludeServlet&lt;/servlet-class&gt;<br />&#160;&#160;<br />&#160;&#160;&lt;init-param&gt;<br />&#160;&#160;&#160;&#160; &lt;param-name&gt;copyright&lt;/param-name&gt;<br />&#160;&#160;&#160;&#160; &lt;param-value&gt;/foot.jspf&lt;/param-value&gt;<br />&#160;&#160;&#160;&#160; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />&#160;&#160;&lt;/init-param&gt;<br />&#160;&lt;/servlet&gt;<br />配置Servlet，&lt;servlet-name&gt;是servlet的名字，&lt;servlet-class&gt;是实现这个Servlet的类，&lt;init-param&gt;定义Servlet的初始化参数（参数名和参数值），一个Servlet可以有多个&lt;init-param&gt;，在Servlet类中通过getInitParameter(String name)方法访问初始化参数</p><p>&#160;&lt;servlet-mapping&gt;<br />&#160;&#160;&lt;servlet-name&gt;IncludeServlet&lt;/servlet-name&gt;<br />&#160;&#160;&lt;url-pattern&gt;/IncludeServlet&lt;/url-pattern&gt;<br />&#160;&lt;/servlet-mapping&gt;<br />配置Servlet映射，&lt;servlet-mapping&gt;元素用来设定客户访问某个Servlet的URL，这里只需给出对于整个web应用的相对的URL路径，&lt;url-pattern&gt;中的&#8220;/&#8221;表示开始于Web应用的根目录例如，如果你在你本地机器上使用Tomcat4.1.x，并且创建了名为&#8220;myapp&#8221;的应用程序，&lt;url-pattern&gt;/IncludeServlet&lt;/url-pattern&gt;该Servlet的完整web地址就是<a href="http://localhost:8080/myapp/IncludeServlet">http://localhost:8080/myapp/IncludeServlet</a></p><p>&lt;session-config&gt;元素用来设定HttpSession的生命周期，该元素只有一个&lt;session-timeout&gt;属性，时间单位是&#8220;秒&#8221;。</p><p>&lt;welcome-file-list&gt;当用户访问web时，如果仅仅给出web应用的Root URL，没有指定具体文件名，容器调用该配置，该元素可以包含多个&lt;welcome-file&gt;属性。</p><p>&lt;taglib&gt;元素用来设置web引用的tag library,例示定义了一个&#8220;/mytaglib&#8221;标签库，它对应的tld文件为：/WEB_INF/mytaglib.tld<br />&lt;taglib&gt;<br />&#160;&#160;&#160; &lt;taglib-url&gt;/mytaglib&lt;/taglib-url&gt;<br />&#160;&#160;&#160; &lt;taglib-locationg&gt;/WEB-INF/mytaglib.tld&lt;/taglib-location&gt;<br />&lt;/taglib&gt;</p><p>&lt;resource-ref&gt;如果web应用由Servlet容器管理的某个JNDI Resource，必须在web.xml中声明对这个JNDI Resource的引用。<br />&lt;resource-ref&gt;<br />&#160;&#160;&#160; &lt;description&gt;DB Connection&lt;/description&gt; //说明<br />&#160;&#160;&#160; &lt;res-ref-name&gt;jdbc/sampleDB&lt;/res-ref-name&gt; //引用资源的JNDI名字<br />&#160;&#160;&#160; &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt; //引用资源的类名字<br />&#160;&#160;&#160; &lt;res-auth&gt;Container&lt;/res-auth&gt; //管理引用资源的Manager<br />&lt;/resource-ref&gt;</p><p>&lt;security-constraint&gt;用来为Web应用定义安全约束<br />&#160;&lt;security-constraint&gt;<br />&#160;&#160;&#160; &lt;web-resource-collection&gt;//声明受保护的web资源<br />&#160;&#160;&#160;&#160;&#160;&#160; &lt;web-resource-name&gt;ResourceServlet&lt;/web-resource-name&gt;//标识受保护web资源<br />&#160;&#160;&#160;&#160;&#160;&#160; &lt;url-pattern&gt;/ResourceServlet&lt;/url-pattern&gt;//指定受保护的URL路径<br />&#160;&#160;&#160;&#160;&#160;&#160; &lt;http-method&gt;GET&lt;/http-method&gt;//指定受保护的方法<br />&#160;&#160;&#160;&#160;&#160;&#160; &lt;http-method&gt;POST&lt;/http-method&gt;<br />&#160;&#160;&#160; &lt;/web-resource-collection&gt;<br />&#160;&#160;&#160; &lt;auth-constraint&gt;//可以访问受保护资源的角色<br />&#160;&#160;&#160;&#160;&#160;&#160; &lt;description&gt;this applies only to admin secrity role&lt;/description&gt;<br />&#160;&#160;&#160;&#160;&#160; &#160;&lt;role-name&gt;admin&lt;/role-name&gt;<br />&#160;&#160;&#160; &lt;/auth-constraint&gt;<br />&#160;&#160;&#160; &lt;user-data-constraint&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160; &lt;transport-guarantee&gt;NONE&lt;/transport-guarantee&gt;<br />&#160;&#160;&#160; &lt;/user-data-constraint&gt;<br />&#160;&lt;/security-constraint&gt;</p><p>&lt;login-config&gt;元素指定当Web客户访问受保护资源时，系统弹出的登陆对话框的类型。例示配置了基于表单验证的登陆界面<br />&lt;login-config&gt;<br />&#160;&#160;&#160; &lt;auth-method&gt;FORM&lt;/auth-method&gt;//BASIC(基本验证法)，DIGEST(摘要验证)，FORM(表单验证)<br />&#160;&#160;&#160; &lt;real-name&gt;设定安全域的名称&lt;/realname&gt;<br />&#160;&#160;&#160; &lt;form-login-config&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;form-login-page&gt;/login.jsp&lt;/form-login-page&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;form-error-page&gt;/error.jsp&lt;/form-error-page&gt;<br />&#160;&#160;&#160; &lt;/form-login-config&gt;</p><p>&lt;security-role&gt;指明这个Web应用引用的所有角色名字<br />&lt;security-role&gt;<br />&#160;&#160;&#160; &lt;description&gt;描述&lt;/description&gt;<br />&#160;&#160;&#160; &lt;role-name&gt;admin&lt;/role-name&gt;<br />&lt;/security-role&gt;</p>   <img src ="http://www.blogjava.net/xzclog/aggbug/62796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2006-08-10 15:10 <a href="http://www.blogjava.net/xzclog/archive/2006/08/10/62796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>