﻿<?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-sealyu-文章分类-web</title><link>http://www.blogjava.net/sealyu/category/30735.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 10 Apr 2008 16:16:47 GMT</lastBuildDate><pubDate>Thu, 10 Apr 2008 16:16:47 GMT</pubDate><ttl>60</ttl><item><title>用HttpClient来模拟浏览器GET POST（转载）</title><link>http://www.blogjava.net/sealyu/articles/192012.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 10 Apr 2008 14:57:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/articles/192012.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/192012.html</wfw:comment><comments>http://www.blogjava.net/sealyu/articles/192012.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/192012.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/192012.html</trackback:ping><description><![CDATA[<h1><strong>用HttpClient来模拟浏览器GET&nbsp;POST</strong></h1>
<h2>作者:jaddy0302 日期:2006-12-21</h2>
<div>
<div>字体大小: <a accesskey="1" href="javascript:SetFont('12px')">小</a> <a accesskey="2" href="javascript:SetFont('14px')">中</a> <a accesskey="3" href="javascript:SetFont('16px')">大</a></div>
<div><img style="margin: 0px 2px -6px 0px;" alt="" src="http://www.360doc.com/DownloadImg/16749/327716_1.gif" /><img alt="" src="http://www.360doc.com/DownloadImg/16749/327716_2.gif" /> <img style="margin: 0px 2px -1px 0px;" alt="" src="http://www.360doc.com/DownloadImg/16749/327716_3.gif" /> </div>
</div>
<p><font size="4">一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器，用来浏览页面查看信息或者提交
一些数据等等。所访问的这些页面有的仅仅是一些普通的页面，有的需要用户登录后方可使用，或者需要认证以及是一些通过加密方式传输，例如HTTPS。目前
我们使用的浏览器处理这些情况都不会构成问题。不过你可能在某些时候需要通过程序来访问这样的一些页面，比如从别人的网页中&#8220;偷&#8221;一些数据；利用某些站点
提供的页面来完成某种功能，例如说我们想知道某个手机号码的归属地而我们自己又没有这样的数据，因此只好借助其他公司已有的网站来完成这个功能，这个时候
我们需要向网页提交手机号码并从返回的页面中解析出我们想要的数据来。如果对方仅仅是一个很简单的页面，那我们的程序会很简单，本文也就没有必要大张旗鼓
的在这里浪费口舌。但是考虑到一些服务授权的问题，很多公司提供的页面往往并不是可以通过一个简单的URL就可以访问的，而必须经过注册然后登录后方可使
用提供服务的页面，这个时候就涉及到COOKIE问题的处理。我们知道目前流行的***页技术例如ASP、JSP无不是通过COOKIE来处理会话信息
的。为了使我们的程序能使用别人所提供的服务页面，就要求程序首先登录后再访问服务页面，这过程就需要自行处理cookie，想想当你用
java.net.HttpURLConnection来完成这些功能时是多么恐怖的事情啊！况且这仅仅是我们所说的顽固的WEB服务器中的一个很常见的
&#8220;顽固&#8221;！再有如通过HTTP来上传文件呢？不需要头疼，这些问题有了&#8220;它&#8221;就很容易解决了！ </font></p>
<p><font size="4">我们不可能列举所有可能的顽固，我们会针对几种最常见的问题进行处理。当然了，正如前面说到的，如果我们自己使用
java.net.HttpURLConnection来搞定这些问题是很恐怖的事情，因此在开始之前我们先要介绍一下一个开放源码的项目，这个项目就是
Apache开源组织中的httpclient，它隶属于Jakarta的commons项目，目前的版本是2.0RC2。commons下本来已经有一
个net的子项目，但是又把httpclient单独提出来，可见http服务器的访问绝非易事。</font></p>
<p><font size="4">Commons-httpclient项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。通过它可以
让原来很头疼的事情现在轻松的解决，例如你不再管是HTTP或者HTTPS的通讯方式，告诉它你想使用HTTPS方式，剩下的事情交给
httpclient替你完成。本文会针对我们在编写HTTP客户端程序时经常碰到的几个问题进行分别介绍如何使用httpclient来解决它们，为了
让读者更快的熟悉这个项目我们最开始先给出一个简单的例子来读取一个网页的内容，然后循序渐进解决掉前进中的所形侍狻?/font&gt;
</font></p>
<p><font size="4"><font size="4">1． 读取网页(HTTP/HTTPS)内容</font></font></p>
<p><font size="4"><font size="4">下面是我们给出的一个简单的例子用来访问某个页面</font></font></p>
<p><font size="4"><font size="4">/*</font></font></p>
<p><font size="4"><font size="4">&nbsp;* Created on 2003-12-14 by Liudong</font></font></p>
<p><font size="4"><font size="4">&nbsp;*/</font></font></p>
<p><font size="4"><font size="4">package http.demo;</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">import java.io.IOException;</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">import org.apache.commons.httpclient.*;</font></font></p>
<p><font size="4"><font size="4">import org.apache.commons.httpclient.methods.*;</font></font></p>
<p><font size="4"><font size="4">/**</font></font></p>
<p><font size="4"><font size="4">&nbsp;* 最简单的HTTP客户端,用来演示通过GET或者POST方式访问某个页面</font></font></p>
<p><font size="4"><font size="4">&nbsp;* @author Liudong</font></font></p>
<p><font size="4"><font size="4">&nbsp;*/</font></font></p>
<p><font size="4"><font size="4">public class SimpleClient {</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws IOException</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; {</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient client = new HttpClient();&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置代理服务器地址和端口&nbsp;&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port);</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用GET方法，如果服务器需要通过HTTPS连接，那只需要将下面URL中的http换成https</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpMethod method = new GetMethod("</font><a href="http://java.sun.com/"><font size="4">http://java.sun.com</font></a><font size="4">"); </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用POST方法</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //HttpMethod method = new PostMethod("</font><a href="http://java.sun.com/"><font size="4">http://java.sun.com</font></a><font size="4">"); </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.executeMethod(method);</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打印服务器返回的状态</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(method.getStatusLine());</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打印返回的信息</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(method.getResponseBodyAsString());</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //释放连接</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method.releaseConnection();</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; }<br />
}</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">在这个例子中首先创建一个HTTP客户端(HttpClient)的实例，然后选择
提交的方法是GET或者POST，最后在HttpClient实例上执行提交的方法，最后从所选择的提交方法中读取服务器反馈回来的结果。这就是使用
HttpClient的基本流程。其实用一行代码也就可以搞定整个请求的过程，非常的简单！</font></font></p>
<p><font size="4"><br />
<font size="4">2． 以GET或者POST方式向网页提交参数</font></font></p>
<p><font size="4"><font size="4">其实前面一个最简单的示例中我们已经介绍了如何使用GET或者POST方式来请求一
个页面，本小节与之不同的是多了提交时设定页面所需的参数，我们知道如果是GET的请求方式，那么所有参数都直接放到页面的URL后面用问号与页面地址隔
开，每个参数用&amp;隔开，例如：</font><a href="http://java.sun.com/?name=liudong&amp;mobile=123456"><font size="4">http://java.sun.com?name=liudong&amp;mobile=123456</font></a><font size="4">，但是当使用POST方法时就会稍微有一点点麻烦。本小节的例子演示向如何查询手机号码所在的城市，代码如下：</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">/*</font></font></p>
<p><font size="4"><font size="4">&nbsp;* Created on 2003-12-7 by Liudong</font></font></p>
<p><font size="4"><font size="4">&nbsp;*/</font></font></p>
<p><font size="4"><font size="4">package http.demo;</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">import java.io.IOException;</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">import org.apache.commons.httpclient.*;</font></font></p>
<p><font size="4"><font size="4">import org.apache.commons.httpclient.methods.*;</font></font></p>
<p><font size="4"><font size="4">/**</font></font></p>
<p><font size="4"><font size="4">&nbsp;* 提交参数演示</font></font></p>
<p><font size="4"><font size="4">&nbsp;* 该程序连接到一个用于查询手机号码所属地的页面</font></font></p>
<p><font size="4"><font size="4">&nbsp;* 以便查询号码段1330227所在的省份以及城市</font></font></p>
<p><font size="4"><font size="4">&nbsp;* @author Liudong</font></font></p>
<p><font size="4"><font size="4">&nbsp;*/</font></font></p>
<p><font size="4"><font size="4">public class SimpleHttpClient {</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws IOException</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; {</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient client = new HttpClient();</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.getHostConfiguration().setHost("</font><a href="http://www.imobile.com.cn/"><font size="4">www.imobile.com.cn</font></a><font size="4">", 80, "http");</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpMethod method = getPostMethod();//使用POST方式提交数据</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.executeMethod(method);</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打印服务器返回的状态</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(method.getStatusLine());</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打印结果页面</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String response =</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new String(method.getResponseBodyAsString().getBytes("8859_1"));</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打印返回的信息</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(response);</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method.releaseConnection();</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; }</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; /**</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; * 使用GET方式提交数据</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; * @return</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; */</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; private static HttpMethod getGetMethod(){</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new GetMethod("/simcard.php?simcard=1330227");</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; }</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; /**</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; * 使用POST方式提交数据</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; * @return</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; */</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; private static HttpMethod getPostMethod(){</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostMethod post = new PostMethod("/simcard.php");</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NameValuePair simcard = new NameValuePair("simcard","1330227");</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestBody(new NameValuePair[] { simcard});</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return post;</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; }</font></font></p>
<p><font size="4"><font size="4">}</font></font></p>
<p><font size="4"><font size="4">在上面的例子中页面</font><a href="http://www.imobile.com.cn/simcard.php"><font size="4">http://www.imobile.com.cn/simcard.php</font></a><font size="4">需要一个参数是simcard，这个参数值为手机号码段，即手机号码的前七位，服务器会返回提交的手机号码对应的省份、城市以及其他详细信息。GET的提交方法只需要在URL后加入参数信息，而POST则需要通过NameValuePair类来设置参数名称和它所对应的值</font></font></p>
<p><font size="4"><font size="4">3． 处理页面重定向</font></font></p>
<p><font size="4"><font size="4">在JSP/Servlet编程中response.sendRedirect方法就
是使用HTTP协议中的重定向机制。它与JSP中的&lt;jsp:forward
&#8230;&gt;的区别在于后者是在服务器中实现页面的跳转，也就是说应用容器加载了所要跳转的页面的内容并返回给客户端；而前者是返回一个状态码，这些状态码
的可能值见下表，然后客户端读取需要跳转到的页面的URL并重新加载新的页面。就是这样一个过程，所以我们编程的时候就要通过
HttpMethod.getStatusCode()方法判断返回值是否为下表中的某个值来判断是否需要跳转。如果已经确认需要进行页面跳转了，那么可
以通过读取HTTP头中的location属性来获取新的地址。</font></font></p>
<p><font size="4"><font size="4">状态码<br />
&nbsp;对应HttpServletResponse的常量<br />
&nbsp;详细描述<br />
&nbsp;<br />
301<br />
&nbsp;SC_MOVED_PERMANENTLY<br />
&nbsp;页面已经永久移到另外一个新地址<br />
&nbsp;<br />
302<br />
&nbsp;SC_MOVED_TEMPORARILY<br />
&nbsp;页面暂时移动到另外一个新的地址<br />
&nbsp;<br />
303<br />
&nbsp;SC_SEE_OTHER<br />
&nbsp;客户端请求的地址必须通过另外的URL来访问<br />
&nbsp;<br />
307<br />
&nbsp;SC_TEMPORARY_REDIRECT<br />
&nbsp;同SC_MOVED_TEMPORARILY<br />
&nbsp;</font></font></p>
<p><font size="4"><br />
<font size="4">下面的代码片段演示如何处理页面的重定向</font></font></p>
<p><font size="4"><font size="4">client.executeMethod(post);</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(post.getStatusLine().toString()); </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.releaseConnection();</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //检查是否重定向</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int statuscode = post.getStatusCode();</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((statuscode == HttpStatus.SC_MOVED_TEMPORARILY) ||</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (statuscode == HttpStatus.SC_MOVED_PERMANENTLY) ||</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (statuscode == HttpStatus.SC_SEE_OTHER) ||</font></font></p>
<p><font size="4"><font size="4">(statuscode == HttpStatus.SC_TEMPORARY_REDIRECT)) {</font></font></p>
<p><font size="4"><font size="4">//读取新的URL地址</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Header header = post.getResponseHeader("location");</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (header != null) {</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String newuri = header.getValue();</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((newuri == null) || (newuri.equals("")))</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newuri = "/"; </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetMethod redirect = new GetMethod(newuri);</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.executeMethod(redirect);</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Redirect:"+ redirect.getStatusLine().toString()); </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirect.releaseConnection();</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Invalid redirect");</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></font></p>
<p><font size="4"><font size="4">我们可以自行编写两个JSP页面，其中一个页面用response.sendRedirect方法重定向到另外一个页面用来测试上面的例子。</font></font></p>
<p><font size="4"><font size="4">4． 模拟输入用户名和口令进行登录</font></font></p>
<p><font size="4"><font size="4">本小节应该说是HTTP客户端编程中最常碰见的问题，很多网站的内容都只是对注册用
户可见的，这种情况下就必须要求使用正确的用户名和口令登录成功后，方可浏览到想要的页面。因为HTTP协议是无状态的，也就是连接的有效期只限于当前请
求，请求内容结束后连接就关闭了。在这种情况下为了保存用户的登录信息必须使用到Cookie机制。以JSP/Servlet为例，当浏览器请求一个
JSP或者是Servlet的页面时，应用服务器会返回一个参数，名为jsessionid（因不同应用服务器而异），值是一个较长的唯一字符串的
Cookie，这个字符串值也就是当前访问该站点的会话标识。浏览器在每访问该站点的其他页面时候都要带上jsessionid这样的Cookie信息，
应用服务器根据读取这个会话标识来获取对应的会话信息。</font></font></p>
<p><font size="4"><font size="4">对于需要用户登录的网站，一般在用户登录成功后会将用户资料保存在服务器的会话中，
这样当访问到其他的页面时候，应用服务器根据浏览器送上的Cookie中读取当前请求对应的会话标识以获得对应的会话信息，然后就可以判断用户资料是否存
在于会话信息中，如果存在则允许访问页面，否则跳转到登录页面中要求用户输入帐号和口令进行登录。这就是一般使用JSP开发网站在处理用户登录的比较通用
的方法。</font></font></p>
<p><font size="4"><font size="4">这样一来，对于HTTP的客户端来讲，如果要访问一个受保护的页面时就必须模拟浏览
器所做的工作，首先就是请求登录页面，然后读取Cookie值；再次请求登录页面并加入登录页所需的每个参数；最后就是请求最终所需的页面。当然在除第一
次请求外其他的请求都需要附带上Cookie信息以便服务器能判断当前请求是否已经通过验证。说了这么多，可是如果你使用httpclient的话，你甚
至连一行代码都无需增加，你只需要先传递登录信息执行登录过程，然后直接访问想要的页面，跟访问一个普通的页面没有任何区别，因为类HttpClient
已经帮你做了所有该做的事情了，太棒了！下面的例子实现了这样一个访问的过程。</font></font></p>
<p><font size="4"><br />
<font size="4">/*</font></font></p>
<p><font size="4"><font size="4">&nbsp;* Created on 2003-12-7 by Liudong</font></font></p>
<p><font size="4"><font size="4">&nbsp;*/</font></font></p>
<p><font size="4"><font size="4">package http.demo;</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">import org.apache.commons.httpclient.*;</font></font></p>
<p><font size="4"><font size="4">import org.apache.commons.httpclient.cookie.*;</font></font></p>
<p><font size="4"><font size="4">import org.apache.commons.httpclient.methods.*;</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">/**</font></font></p>
<p><font size="4"><font size="4">&nbsp;* 用来演示登录表单的示例</font></font></p>
<p><font size="4"><font size="4">&nbsp;* @author Liudong</font></font></p>
<p><font size="4"><font size="4">&nbsp;*/</font></font></p>
<p><font size="4"><font size="4">public class FormLoginDemo {</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; static final String LOGON_SITE = "localhost";</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; static final int&nbsp;&nbsp;&nbsp; LOGON_PORT = 8080;</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws Exception{</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient client = new HttpClient();</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT);</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //模拟登录页面login.jsp-&gt;main.jsp</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostMethod post = new PostMethod("/main.jsp");</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NameValuePair name = new NameValuePair("name", "ld");&nbsp;&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NameValuePair pass = new NameValuePair("password", "ld");&nbsp;&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestBody(new NameValuePair[]{name,pass});</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int status = client.executeMethod(post);</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(post.getResponseBodyAsString());</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.releaseConnection();&nbsp; </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看cookie信息</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CookieSpec cookiespec = CookiePolicy.getDefaultSpec();</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cookie[] cookies = cookiespec.match(LOGON_SITE, LOGON_PORT, "/", false, client.getState().getCookies());</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (cookies.length == 0) {</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("None");&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; cookies.length; i++) {</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(cookies[i].toString());&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //访问所需的页面main2.jsp</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetMethod get = new GetMethod("/main2.jsp");</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.executeMethod(get);</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(get.getResponseBodyAsString());</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get.releaseConnection();</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; }</font></font></p>
<p><font size="4"><font size="4">}</font></font></p>
<p><font size="4"><font size="4">5． 提交XML格式参数</font></font></p>
<p><font size="4"><font size="4">提交XML格式的参数很简单，仅仅是一个提交时候的ContentType问题，下面的例子演示从文件文件中读取XML信息并提交给服务器的过程，该过程可以用来测试Web服务。</font></font></p>
<p><font size="4"><font size="4">import java.io.File;</font></font></p>
<p><font size="4"><font size="4">import java.io.FileInputStream;</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">import org.apache.commons.httpclient.HttpClient;</font></font></p>
<p><font size="4"><font size="4">import org.apache.commons.httpclient.methods.EntityEnclosingMethod;</font></font></p>
<p><font size="4"><font size="4">import org.apache.commons.httpclient.methods.PostMethod;</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">/**</font></font></p>
<p><font size="4"><font size="4">&nbsp;* 用来演示提交XML格式数据的例子</font></font></p>
<p><font size="4"><font size="4">&nbsp;*/</font></font></p>
<p><font size="4"><font size="4">public class PostXMLClient {</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws Exception {</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File input = new File(&#8220;test.xml&#8221;);</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostMethod post = new PostMethod(&#8220;http://localhost:8080/httpclient/xml.jsp&#8221;);</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置请求的内容直接从文件中读取</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestBody(new FileInputStream(input));</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (input.length() &lt; Integer.MAX_VALUE) </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestContentLength(input.length());</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestContentLength(EntityEnclosingMethod.CONTENT_LENGTH_CHUNKED);</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 指定请求内容的类型</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestHeader("Content-type", "text/xml; charset=GBK");</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient httpclient = new HttpClient(); </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int result = httpclient.executeMethod(post); </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Response status code: " + result);</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Response body: ");</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(post.getResponseBodyAsString());</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.releaseConnection();</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; }</font></font></p>
<p><font size="4"><font size="4">}</font></font></p>
<p><font size="4"><font size="4">6． 通过HTTP上传文件</font></font></p>
<p><font size="4"><font size="4">httpclient使用了单独的一个HttpMethod子类来处理文件的上传，这个类就是MultipartPostMethod，该类已经封装了文件上传的细节，我们要做的仅仅是告诉它我们要上传文件的全路径即可，下面的代码片段演示如何使用这个类。</font></font></p>
<p><font size="4"><font size="4">MultipartPostMethod filePost = new MultipartPostMethod(targetURL);</font></font></p>
<p><font size="4"><font size="4">filePost.addParameter("fileName", targetFilePath);</font></font></p>
<p><font size="4"><font size="4">HttpClient client = new HttpClient();</font></font></p>
<p><font size="4"><font size="4">//由于要上传的文件可能比较大,因此在此设置最大的连接超时时间</font></font></p>
<p><font size="4"><font size="4">client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);</font></font></p>
<p><font size="4"><font size="4">int status = client.executeMethod(filePost);</font></font></p>
<p><font size="4"><br />
<font size="4">上面代码中，targetFilePath即为要上传的文件所在的路径。</font></font></p>
<p><font size="4"><font size="4">7． 访问启用认证的页面</font></font></p>
<p><font size="4"><font size="4">我们经常会碰到这样的页面，当访问它的时候会弹出一个浏览器的对话框要求输入用户名
和密码后方可，这种用户认证的方式不同于我们在前面介绍的基于表单的用户身份验证。这是HTTP的认证策略，httpclient支持三种认证方式包括：
基本、摘要以及NTLM认证。其中基本认证最简单、通用但也最不安全；摘要认证是在HTTP
1.1中加入的认证方式，而NTLM则是微软公司定义的而不是通用的规范，最新版本的NTLM是比摘要认证还要安全的一种方式。</font></font></p>
<p><font size="4"><font size="4">下面例子是从httpclient的CVS服务器中下载的，它简单演示如何访问一个认证保护的页面：</font></font></p>
<p><font size="4"><br />
<font size="4">import org.apache.commons.httpclient.HttpClient;</font></font></p>
<p><font size="4"><font size="4">import org.apache.commons.httpclient.UsernamePasswordCredentials;</font></font></p>
<p><font size="4"><font size="4">import org.apache.commons.httpclient.methods.GetMethod;</font></font></p>
<p><font size="4"><font size="4">&nbsp;</font></font></p>
<p><font size="4"><font size="4">public class BasicAuthenticationExample {</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; public BasicAuthenticationExample() {</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; }</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws Exception {</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient client = new HttpClient();</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.getState().setCredentials(</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "</font><a href="http://www.verisign.com/"><font size="4">www.verisign.com</font></a><font size="4">",</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "realm",</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new UsernamePasswordCredentials("username", "password")</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetMethod get = new GetMethod("</font><a href="https://www.verisign.com/products/index.html"><font size="4">https://www.verisign.com/products/index.html</font></a><font size="4">");</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get.setDoAuthentication( true );</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int status = client.executeMethod( get );</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(status+""+ get.getResponseBodyAsString());</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get.releaseConnection();</font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp;&nbsp; }</font></font></p>
<p><font size="4"><font size="4">}</font></font></p>
<p><font size="4"><font size="4">8． 多线程模式下使用httpclient</font></font></p>
<p><font size="4"><font size="4">多线程同时访问httpclient，例如同时从一个站点上下载多个文件。对于同一
个HttpConnection同一个时间只能有一个线程访问，为了保证多线程工作环境下不产生冲突，httpclient使用了一个多线程连接管理器的
类：MultiThreadedHttpConnectionManager，要使用这个类很简单，只需要在构造HttpClient实例的时候传入即
可，代码如下：</font></font></p>
<p><font size="4"><font size="4">MultiThreadedHttpConnectionManager connectionManager = </font></font></p>
<p><font size="4"><font size="4">&nbsp;&nbsp; new MultiThreadedHttpConnectionManager();</font></font></p>
<p><font size="4"><font size="4">HttpClient client = new HttpClient(connectionManager);</font></font></p>
<p><font size="4"><font size="4">以后尽管访问client实例即可。</font></font></p>
<p><font size="4"><font size="4">参考资料：</font></font></p>
<font size="4"><font size="4">httpclient首页：&nbsp;&nbsp;&nbsp; </font><a href="http://jakarta.apache.org/commons/httpclient/"><font size="4">http://jakarta.apache.org/commons/httpclient/</font></a><br />
<font size="4">关于NTLM是如何工作：&nbsp; </font><a href="http://davenport.sourceforge.net/ntlm.html"><font size="4">http://davenport.sourceforge.net/ntlm.html</font></a></font>
<img src ="http://www.blogjava.net/sealyu/aggbug/192012.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2008-04-10 22:57 <a href="http://www.blogjava.net/sealyu/articles/192012.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对FckEditor编辑器在MAXTHON浏览器下选择服务器文件对话框显示不正常的改进 -...（转载）</title><link>http://www.blogjava.net/sealyu/articles/192009.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 10 Apr 2008 14:53:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/articles/192009.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/192009.html</wfw:comment><comments>http://www.blogjava.net/sealyu/articles/192009.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/192009.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/192009.html</trackback:ping><description><![CDATA[用过FckEditor的朋友都知道，它的选择图片对话框中&#8220;浏览服
务器&#8221;按钮。点击该按钮可以浏览以前已经上传过的文件。不过这个按钮点击后弹出的对话框在MAXTHON浏览器下是以标签形式打开的，这样模态对话框就始
终显示在了浏览文件窗口之前，要想选择文件得先关掉模态对话框。先前有朋友提出把弹出模态对话框的功能改为ShowModlessDialog，这个终究
不是解决之道，现将我的解决方法写下来与大家分享：<br />
思路就是基于IE内核的浏览器采用模态对话框弹出浏览服务器窗口，其他的仍然window.open不变
1:修改"fckeditor"editor"dialog"common"fck_dialog_common.js<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><span style="color: rgb(0, 128, 128);">&nbsp;1</span>&nbsp;<span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;OpenFileBrowser(&nbsp;url,&nbsp;width,&nbsp;height&nbsp;)<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;2</span>&nbsp;<span style="color: rgb(0, 0, 0);">{<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;3</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;oEditor&nbsp;must&nbsp;be&nbsp;defined.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;4</span>&nbsp;<span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;5</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;iLeft&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;(&nbsp;oEditor.FCKConfig.ScreenWidth&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">&nbsp;width&nbsp;)&nbsp;</span><span style="color: rgb(0, 0, 0);">/</span>&nbsp;<span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;6</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;iTop&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;(&nbsp;oEditor.FCKConfig.ScreenHeight&nbsp;</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">&nbsp;height&nbsp;)&nbsp;</span><span style="color: rgb(0, 0, 0);">/</span>&nbsp;<span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;7</span>&nbsp;<span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;8</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;sOptions&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span>&nbsp;<span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">toolbar=no,status=no,resizable=no,dependent=yes,scrollbars=yes</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;9</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;sOptions&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span>&nbsp;<span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,width=</span><span style="color: rgb(0, 0, 0);">"</span>&nbsp;<span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;width&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">10</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;sOptions&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span>&nbsp;<span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,height=</span><span style="color: rgb(0, 0, 0);">"</span>&nbsp;<span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;height&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">11</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;sOptions&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span>&nbsp;<span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,left=</span><span style="color: rgb(0, 0, 0);">"</span>&nbsp;<span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;iLeft&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">12</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;sOptions&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span>&nbsp;<span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,top=</span><span style="color: rgb(0, 0, 0);">"</span>&nbsp;<span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;iTop&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">13</span>&nbsp;<span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">14</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;The&nbsp;"PreserveSessionOnFileBrowser"&nbsp;because&nbsp;the&nbsp;above&nbsp;code&nbsp;could&nbsp;be</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">15</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;blocked&nbsp;by&nbsp;popup&nbsp;blockers.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">16</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(&nbsp;oEditor.FCKConfig.PreserveSessionOnFileBrowser&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;&amp;</span><span style="color: rgb(0, 0, 0);">&nbsp;oEditor.FCKBrowserInfo.IsIE&nbsp;)<br />
</span><span style="color: rgb(0, 128, 128);">17</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">18</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;The&nbsp;following&nbsp;change&nbsp;has&nbsp;been&nbsp;made&nbsp;otherwise&nbsp;IE&nbsp;will&nbsp;open&nbsp;the&nbsp;file</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">19</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;browser&nbsp;on&nbsp;a&nbsp;different&nbsp;server&nbsp;session&nbsp;(on&nbsp;some&nbsp;cases):</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">20</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;http://support.microsoft.com/default.aspx?scid=kb;en-us;831678</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">21</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;by&nbsp;Simone&nbsp;Chiaretta.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">22</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;oWindow&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;oEditor.window.open(&nbsp;url,&nbsp;'FCKBrowseWindow',&nbsp;sOptions&nbsp;)&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">23</span>&nbsp;<span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">24</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(&nbsp;oWindow&nbsp;)<br />
</span><span style="color: rgb(0, 128, 128);">25</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">26</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;Detect&nbsp;Yahoo&nbsp;popup&nbsp;blocker.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">27</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">28</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">29</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;sTest&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;oWindow.name&nbsp;;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;Yahoo&nbsp;returns&nbsp;"something",&nbsp;but&nbsp;we&nbsp;can't&nbsp;access&nbsp;it,&nbsp;so&nbsp;detect&nbsp;that&nbsp;and&nbsp;avoid&nbsp;strange&nbsp;errors&nbsp;for&nbsp;the&nbsp;user.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">30</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oWindow.opener&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;window&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">31</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">32</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);">(e)<br />
</span><span style="color: rgb(0, 128, 128);">33</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">34</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(&nbsp;oEditor.FCKLang.BrowseServerBlocked&nbsp;)&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">35</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">36</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">37</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">38</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(&nbsp;oEditor.FCKLang.BrowseServerBlocked&nbsp;)&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">39</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">40</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">41</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这里是修改部分<br />
</span><span style="color: rgb(0, 128, 128);">42</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(oEditor.FCKBrowserInfo.IsIE)<br />
</span><span style="color: rgb(0, 128, 128);">43</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">44</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.showModalDialog(url</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&amp;rdm=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;Date(),window,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">status:false;dialogWidth:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">width</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">px;dialogHeight:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">height</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">px"</span><span style="color: rgb(0, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">45</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">46</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
</span><span style="color: rgb(0, 128, 128);">47</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">48</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.open(&nbsp;url,&nbsp;'FCKBrowseWindow',&nbsp;sOptions&nbsp;)&nbsp;;<br />
</span><span style="color: rgb(0, 128, 128);">49</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">50</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">51</span>&nbsp;<span style="color: rgb(0, 0, 0);">}</span></div>
<br />
2:修改"fckeditor"editor"filemanager"browser"default"frmresourceslist.html<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;OpenFile(&nbsp;fileUrl&nbsp;)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(&nbsp;window.dialogArguments)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.dialogArguments.SetUrl(&nbsp;fileUrl&nbsp;)&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.close()&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.dialogArguments.focus()&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.top.opener.SetUrl(&nbsp;fileUrl&nbsp;)&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.top.close()&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.top.opener.focus()&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<img src ="http://www.blogjava.net/sealyu/aggbug/192009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2008-04-10 22:53 <a href="http://www.blogjava.net/sealyu/articles/192009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>css属性列表 和 属性值含义  （转载）</title><link>http://www.blogjava.net/sealyu/articles/192006.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 10 Apr 2008 14:50:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/articles/192006.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/192006.html</wfw:comment><comments>http://www.blogjava.net/sealyu/articles/192006.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/192006.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/192006.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: css属性列表                                                                                                属性名称                                                字体属性（Font）             ...&nbsp;&nbsp;<a href='http://www.blogjava.net/sealyu/articles/192006.html'>阅读全文</a><img src ="http://www.blogjava.net/sealyu/aggbug/192006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2008-04-10 22:50 <a href="http://www.blogjava.net/sealyu/articles/192006.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>