﻿<?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-风之力</title><link>http://www.blogjava.net/windforce/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 01:14:12 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 01:14:12 GMT</pubDate><ttl>60</ttl><item><title>Finally 块未正常完成</title><link>http://www.blogjava.net/windforce/archive/2007/07/27/132879.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Fri, 27 Jul 2007 12:04:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2007/07/27/132879.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/132879.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2007/07/27/132879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/132879.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/132879.html</trackback:ping><description><![CDATA[一个try块可以不执行finally子句就能够退出的唯一方法是通过调用System.exit()方法来实现的。<br /><br />如果控制因为一个return,continue或break语句离开这个try块,那么finally快会在控制转移到它的新的目标代码之前执行.<br /><br />也就是说如果在finally块中使用return,continue或break。逻辑可能就不是你本身要表达的意思了。<br />package test;<br /><br />public class TryTest {<br />    public static void main(String[] args) {<br />        try {<br />            System.out.println(TryTest.test());// 返回结果为true其没有任何异常<br />        } catch (Exception e) {<br />            System.out.println("Exception from main");<br />            e.printStackTrace();<br />        }<br />    }<br /><br />    public static boolean test() throws Exception {<br />        try {<br />            throw new Exception("Something error");// 1.抛出异常<br />        } catch (Exception e) {// 2.捕获的异常匹配(声明类或其父类），进入控制块<br />            System.out.println("Exception from e");// 3.打印<br />            return false;// 4. return前控制转移到finally块,执行完后再返回<br />        } finally {<br />            return true; // 5. 控制转移，直接返回，吃掉了异常<br />        }<br />    }<br />}<br /><img src ="http://www.blogjava.net/windforce/aggbug/132879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2007-07-27 20:04 <a href="http://www.blogjava.net/windforce/archive/2007/07/27/132879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>列 'b_col' 在选择列表中无效，因为该列未包含在聚合函数中，并且没有 GROUP BY 子句</title><link>http://www.blogjava.net/windforce/archive/2007/07/26/132598.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Thu, 26 Jul 2007 09:53:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2007/07/26/132598.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/132598.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2007/07/26/132598.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/132598.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/132598.html</trackback:ping><description><![CDATA[select sum(a_col) ,sum(b_col) from abc_table 就出了上面的错误,google后很多人说<br />指定 GROUP BY 时，<font style="BACKGROUND-COLOR: #ffffff">选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY 列表中，或者 GROUP BY 表达式必须与选择列表表达式完全匹配。<br />就是说要 select sum(a_col) ,sum(b_col) from abc_table group by a_col。<br />而<br />select sum(a_col) ,sum(b_col) from abc_table<br />union<br />select sum(a_col) ,sum(b_col) from abc_table 又是正常的。<br /></font><img src ="http://www.blogjava.net/windforce/aggbug/132598.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2007-07-26 17:53 <a href="http://www.blogjava.net/windforce/archive/2007/07/26/132598.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE客户端连服务器的注意事项：[转]</title><link>http://www.blogjava.net/windforce/archive/2007/07/05/128240.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Thu, 05 Jul 2007 01:35:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2007/07/05/128240.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/128240.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2007/07/05/128240.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/128240.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/128240.html</trackback:ping><description><![CDATA[ ORACLE客户端连服务器的注意事项：<br /><br />        1. 通过SQL*NET协议，ORACLE客户端连服务器时一般需要配置sqlnet.ora和tnsnames.ora。<br />	   它们默认的目录在$ORACLE_HOME/network/admin 目录下<br />	   <br />	   也可以设置环境变量TNS_ADMIN指向你想用的sqlnet.ora和tnsnames.ora目录<br />	   例如：<br />	   TNS_ADMIN=/home/oracle/config/9.0.1;export TNS_ADMIN <br />	   <br />	   sqlnet.ora文件决定找数据库服务器别名的方式<br />	   <br />	   默认的参数有<br />	   NAMES.DEFAULT_DOMAIN = WORLD<br />	   NAMES.DIRECTORY_PATH = (TNSNAMES, ONAMES, HOSTNAME)<br />	   <br />	   如果你的ORACLE客户端和服务器默认的域名不一样，需要用#号注释第一行<br />	   #NAMES.DEFAULT_DOMAIN = WORLD<br />	   使它不起作用。<br /><br />           NAMES.DIRECTORY_PATH指定找服务器别名的顺序 (本地的tnsnames.ora文件, 命名服务器, 主机名方式)<br />           <br />           服务器的sqlnet.ora里可以设置检查客户端是否alive的时间间隔<br />           sqlnet.expire_time = 10<br />           <br />           tnsnames.ora文件里写数据库服务器别名的详细内容，有以下几种写法:<br /><br />           # 一般的写法           <br />           APPDB =<br />             (DESCRIPTION =<br />               (ADDRESS_LIST =<br />                 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.35)(PORT = 1521))<br />               )<br />               (CONNECT_DATA =<br />                 (SERVICE_NAME = appdb)<br />               )<br />             )<br /><br />           # 明确标明用dedicated方式连接数据库<br />           APPD= <br />           (DESCRIPTION= <br />             (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.35)(PORT=1521))<br />             (CONNECT_DATA=<br />               (SERVICE_NAME=appdb)<br />               (SERVER=DEDICATED)))	<br />    <br />           # 对多个listener端口做均衡负载方式连接数据库<br />           APPS =<br />             (DESCRIPTION =<br />             (ADDRESS_LIST =<br />                 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.35)(PORT = 1521))<br />                 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.35)(PORT = 1856))<br />              )<br />               (CONNECT_DATA =<br />                 (SERVICE_NAME = appdb)<br />               )<br />             )    <br />          <br />     # 注意：如果数据库服务器用MTS，客户端程序需要用database link时最好明确指明客户端用dedicated直连方式,<br />     #       不然会遇到很多跟分布式环境有关的ORACLE BUG。<br />     #	    一般情况下数据库服务器用直接的连接会好一些，除非你的实时数据库连接数接近1000。<br />             <br />        2. /etc/hosts (UNIX)<br />           或者windows\hosts(WIN98)  winnt\system32\drivers\etc\hosts (WIN2000)<br />           客户端需要写入数据库服务器IP地址和主机名的对应关系。<br />           <br />           127.0.0.1       localhost<br />           192.168.0.35    oracledb	oracledb<br />           192.168.0.45    tomcat	tomcat<br />           202.84.10.193   bj_db   	bj_db    <br />           <br />           有些时候我们配置好第一步后，tnsping 数据库服务器别名显示是成功的，<br />           但是sqlplus username/password@servicename不通,jdbc thin link 也不通的时候,         <br />           一定不要忘了在客户端做这一步，原因可能是DNS服务器里没有设置这个服务器IP地址和主机名的对应关系。<br />           <br />           如果同时有私有IP和Internet上公有IP，私有IP写在前面，公有IP写在后面。<br />           <br />           编辑前最好留一个备份，增加一行时也最好用复制粘贴，避免编辑hosts时空格或者tab字符错误。<br />           <br />        3. UNIX下ORACLE多数据库的环境，OS客户端需要配置下面两个环境变量<br />        <br />           ORACLE_SID=appdb;export ORACLE_SID <br />           TWO_TASK=appdb;export TWO_TASK  <br />           <br />           来指定默认的目标数据库。<img src ="http://www.blogjava.net/windforce/aggbug/128240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2007-07-05 09:35 <a href="http://www.blogjava.net/windforce/archive/2007/07/05/128240.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java的中文编程与配置心得[转载]</title><link>http://www.blogjava.net/windforce/archive/2007/06/07/122517.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Thu, 07 Jun 2007 02:18:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2007/06/07/122517.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/122517.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2007/06/07/122517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/122517.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/122517.html</trackback:ping><description><![CDATA[
		<p style="TEXT-INDENT: 2em">Java的中文问题历史悠久，连绵不绝，至今也没有完全解决，但是上有政策下有对策，我们总是有办法搞定它的。跟Java相关的中文问题主要有两类，一类是编程的问题，涉及到I/O，内码转换等。第二类是Java运行环境的配置，涉及字体，属性配置等。我刚刚用了一天的时间解决这些问题，觉得很有必要给自己写个备忘录之类的。 </p>
		<p style="TEXT-INDENT: 2em">我看还是从问题入手吧，这样不致于让大家打瞌睡。我想写个程序，这个程序有个基本功能就是显示文件内容，我用JTextArea来做显示的事情，程序简单的到家了，但是就是中文都是乱码。我的配置是JBuilder7，JBuilder自带的JDK1.3.3_b24，我自己装的JDK是JDK1.4.0_02_b02，都是主流的JDK。操作系统是英文Windows2000加中文支持包。 </p>
		<p style="TEXT-INDENT: 2em">我尝试换JDK，1.3.3和1.4.0都不行，down一个最新的j2sdk-1_4_1-rc也是不行，好像不是JDK的问题，于是我就把精力集中到I/O的编码转换上，我查阅了网上若干关于JAVA中文问题的文章，把编码转换搞的倍儿清楚，可是怎么试，换什么编码折腾都不行，反而显示的更糟糕，当初还是乱的有些规矩，就是象在纯英文系统上显示的那样，好歹我还知道那是汉字，只是显示不出来，等我折腾编码，就变得都是问号了。唉，郁闷！ </p>
		<p style="TEXT-INDENT: 2em">
				<strong>编码转换心得： </strong>
		</p>
		<p style="TEXT-INDENT: 2em">JAVA内部是UNICODE编码，在I/O时如果使用Reader/Writer就要发生编码转换，使用系统属性file.encoding作为编码方式。如果使用Stream就没有转换的事情了，那是Binary的数据。 </p>
		<p style="TEXT-INDENT: 2em">有用的方法有：1。在Reader/Writer上加encoding的选项，注意编码的方向，在Reader中的encoding表示把数据从encoding转换成Unicode，writer就是把Unicode的字符转换成encoding格式的。2。用String.getByte()把字符串转换成指定编码。 </p>
		<p style="TEXT-INDENT: 2em">常用的编码格式：ISO8859_1，这个是英文系统缺省的8bit编码，因为是8bit的，所以不会把汉字的高位删去，所以用它也是可以处理汉字的（我自己这么理解，总觉得有些不妥，但又不知道不妥在何处，还望高人指出）。GB2312和GBK，汉字编码，推荐使用GBK，它兼容GB2312并且支持更多汉字。UNICODE，一个大的字符集，不知是不是国际标准反正大家都支持，使用16位对每个字符编码，汉字虽然正合适，但英文却吃亏了，要用多一倍的空间来存储，所以很多人还是老大不乐意，写的程序不支持UNICODE。 </p>
		<p style="TEXT-INDENT: 2em">JSP/Servlet的中文问题有两种解决办法：1。不在程序中进行编码转换，把这个工作交给浏览器，方法就是用javac –encoding GBK *.java来编译所有的bean，然后在JSP页面上加 </p>
		<p style="TEXT-INDENT: 2em">&lt;%@ page contentType="text/html;charset=gb2312" %&gt;</p>
		<p style="TEXT-INDENT: 2em">
				<strong>或者是在HTML中直接加： </strong>
		</p>
		<p style="TEXT-INDENT: 2em">到底加那个，试试就知道了，我也搞不清楚了。 </p>
		<p style="TEXT-INDENT: 2em">2。在程序中指定编码，用javac –encoding ISO8859_1 *.java来编译所有的bean，在涉及到中文显示的程序上加 </p>
		<p style="TEXT-INDENT: 2em">str=new String(str.getBytes("ISO8859_1")); </p>
		<p style="TEXT-INDENT: 2em">上面两种方法不能混用，意思就是要么就是GBK，要么就是ISO8859_1，从里到外都一样就好了。 </p>
		<p style="TEXT-INDENT: 2em">数据库JDBC的中文问题，一般只要按照数据库指定的编码进行转换，比如按照ISO8859_1读，ISO8859_1写，一般就没什么问题了。 </p>
		<p style="TEXT-INDENT: 2em">虽然有这些编码上的心得，但是并不能解决我的问题。看来我的程序输入输出用的都是ISO8859_1，我的问题跟编码没什么关系。是不是字体的问题呢？在Swing的组件中，字体总是那么几个，基本上是定死的，选那个都不行。但是我突然发现可以更改这些字体的配置，就是font.properties 这个文件，一般JDK都带了中文的字体配置文件，可能是font.properties.zh之类的，不同版本的JDK名字有些差别，你要做的就是用中文的配置覆盖font.properties文件。我满心欢喜的以为成功了，但是失败无情的又一次打击了我。不是这种方法不对，但是在Windows系统中，java能够比较自动的检查你的系统编码，使用最合适的字体配置文件，一般不需要你改动了，在JDK1.2之前确实是要这么改的，难怪那篇文章是JDK1.1的文档呢。 </p>
		<p style="TEXT-INDENT: 2em">连font.properties也不灵了，唉，是不是JBuilder有问题呀？到了这儿，我不得不怀疑它了，虽然它从没让我失望过，我关掉JBuilder，拿起JDK命令行，哎呀！可爱的中文竟然出来了！简直是.....莫名其妙呀，因为JBuilder也是用的这个JDK呀？没理由呀，我再次打开JBuilder，运行，乱码！怪事.......我来看看.....我把JBuilder里面的执行命令拷贝到DOS窗口里手动执行....没有中文.....怪怪怪，我仔细对照我手敲的命令和JBuilder拷出来的命令，除了我用的是java它用的是javaw之外，别的几乎都一样，难道.......这个java和javaw竟然会不一样？ </p>
		<p style="TEXT-INDENT: 2em">唉.......要我说什么呢，答案就是这个了，javaw会使用与java不同的Local配置进行工作，导致了我一直看不到中文，而java就是好好的。JBuilder也是好好的，没有问题，调用javaw也不是它的错，难道你想每次运行或者调试的时候蹦出个DOS黑框么？呵呵。这是JDK的一个Bug，我在java的网站上查到这个bug，描述的情况跟我的一样，然后Sun说这个Bug已经修复了，嘿嘿，简直就是扯淡！修复个茄子！Bug编号是：4629351。不信可以去看看。 </p>
		<p style="TEXT-INDENT: 2em">但是难道我就不能在JBuilder里面看我可爱的中文了吗？好像JBuilder5的时候还能选择是用java还是javaw，现在好像没法儿选了。怎么才能让javaw支持中文呢？经过又是一番苦苦查找，竟然没有什么结果，郁闷！正当苦闷之时，突然想起当初配置过UNIX下的TOMCAT，好像加了些启动参数，就能让tomcat支持中文了，赶快翻出以前的文档，啊，幸好我当初写了工作心得，要不然又抓瞎了。其实道理很简单，就是给JAVA虚拟机加上一些属性： </p>
		<p style="TEXT-INDENT: 2em">-Dfile.encoding=GBK -Ddefault.client.encoding=GBK -Duser.language=zh -Duser.region=CN </p>
		<p style="TEXT-INDENT: 2em">把它跟在javaw的命令行后面当参数，哈哈，搞定！ </p>
		<p style="TEXT-INDENT: 2em">在JBuilder中选择Project-&gt;Project Properties-&gt;run-&gt;edit-&gt;VM Parameters，填上就行了！ </p>
		<p style="TEXT-INDENT: 2em">
				<strong>配置心得： </strong>
		</p>
		<p style="TEXT-INDENT: 2em">在JDK低版本和UNIX下，需要改动font.properties，让JAVA VM能够找到合适的字体来显示汉字。 </p>
		<p style="TEXT-INDENT: 2em">目前为止，javaw有Bug，只使用英文的Local，需要给VM加上属性才行正常显示中文。<br />文章出处：<a href="http://www.javajia.com">Java家(www.javajia.com)</a></p>
<img src ="http://www.blogjava.net/windforce/aggbug/122517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2007-06-07 10:18 <a href="http://www.blogjava.net/windforce/archive/2007/06/07/122517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于安装mssqlserver时老是提示以前有一个安装被挂起,要求重新启动</title><link>http://www.blogjava.net/windforce/archive/2007/05/29/120675.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Tue, 29 May 2007 05:47:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2007/05/29/120675.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/120675.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2007/05/29/120675.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/120675.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/120675.html</trackback:ping><description><![CDATA[
		<div>
				<h4 class="TextColor1" id="subjcns!69450a55566e9106!116" style="MARGIN-BOTTOM: 0px">
						<font style="FONT-SIZE: 14px">关于安装mssqlserver时老是提示以前有一个安装被挂起,要求重新启动</font>
				</h4>
				<div id="msgcns!69450a55566e9106!116">
						<p>解决方法:<br />打开注册表,删除<br />HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager</p>
						<p>下PendingFileRenameOperations子键。</p>
						<p>就可以了</p>
				</div>
		</div>
		<p> </p>
<img src ="http://www.blogjava.net/windforce/aggbug/120675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2007-05-29 13:47 <a href="http://www.blogjava.net/windforce/archive/2007/05/29/120675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>郁闷的~~c3p0连接池配置</title><link>http://www.blogjava.net/windforce/archive/2007/04/20/112202.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Fri, 20 Apr 2007 06:49:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2007/04/20/112202.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/112202.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2007/04/20/112202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/112202.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/112202.html</trackback:ping><description><![CDATA[正常配置：<br />&lt;bean id="dataSource"<br />  class="com.mchange.v2.c3p0.ComboPooledDataSource"<br />  destroy-method="close"&gt;<br />  &lt;property name="driverClass"&gt;<br />   &lt;value&gt;com.microsoft.jdbc.sqlserver.SQLServerDriver&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="jdbcUrl"&gt;<br />   &lt;value&gt;jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=xxx&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="user"&gt;<br />   &lt;value&gt;xxx&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="password"&gt;<br />   &lt;value&gt;xxx&lt;/value&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br />使用IDE格式化后，变为<br />&lt;bean id="dataSource"<br />  class="com.mchange.v2.c3p0.ComboPooledDataSource"<br />  destroy-method="close"&gt;<br />  &lt;property name="driverClass"&gt;<br />   &lt;value&gt;com.microsoft.jdbc.sqlserver.SQLServerDriver&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="jdbcUrl"&gt;<br /><font color="#ff3300">   &lt;value&gt;<br />      jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=xxx<br />   &lt;/value&gt;<br /></font>  &lt;/property&gt;<br />  &lt;property name="user"&gt;<br />   &lt;value&gt;xxx&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="password"&gt;<br />   &lt;value&gt;xxx&lt;/value&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br />就死活也不认得了，我狂晕哦....<br /><br /><img src ="http://www.blogjava.net/windforce/aggbug/112202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2007-04-20 14:49 <a href="http://www.blogjava.net/windforce/archive/2007/04/20/112202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>盘点2006【原创】</title><link>http://www.blogjava.net/windforce/archive/2007/01/03/91588.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Wed, 03 Jan 2007 09:08:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2007/01/03/91588.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/91588.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2007/01/03/91588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/91588.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/91588.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0">
				<span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 仿宋_GB2312">大学毕业出来也已经半年。这半年来的学到最多的应该是工作的心态，人生的规划。<span lang="EN-US"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0">
				<span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 仿宋_GB2312">大学的时候更多的还是一种应试的生活态度，每年只要可以考过期末考试就<span lang="EN-US">ok</span>了。其他的时候学校对学生是没有硬性要求的。当然，有的人利用课余的时间学习充电。更早的去接触了社会、工作。为自己的将来打下了坚实的基础。而有的人则在游戏中虚度了青春年华。我就是后者中的一员。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0">
				<span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 仿宋_GB2312">出来找工作的时候，才真正意识到自己的不足。考试对我来说没什么意义，一个学期不上课。最后还是可以轻松通过。但是真正到面试公司问我做过什么项目是。我就懵了，刚毕业你问我做什么项目…<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0">
				<span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 仿宋_GB2312">总算还是找到了工作。刚开始，没有人会教你该怎么做。一切都要自己动手，没有所谓的培训。学习都是靠自己抽时间来完成。没有人会逼你去学东西，当时做项目的时候。交给你的任务是没有所谓的“我没学过”的理由。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0">
				<span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 仿宋_GB2312">到年底了，也打听了下其他同学的状况。自己还是在社会的底层生活哈。现实并不是和学校里想象的那样样子。在学校，每个月有伙食费再加那么一点点的零花就过的很安逸了。现在满脑子想到的都是钱。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0">
				<span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 仿宋_GB2312">积累。生活的真谛！人生就是要积累。一点一滴的积累。任何的工作成果，都应该有一个合理有效的方式将其收集为以后可以复用的资源。这样工作才有进步，而自身的价值才可以沉淀、升值。大学的学习过程是自己的一个空档期。并不是没有尝试去学习新的东西。而是经过一段时间的学习后。就放下了，没有整理。久而久之就又忘了。就连玩游戏也是，玩一个丢一个。连帐号密码都会忘了，的确是太随便了。这种随性的性格、习惯也注定了我要碰壁、失败。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0">
				<span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 仿宋_GB2312">规划。选择真正适合自己的路、自己喜欢的工作方式、自己喜欢的生活方式。人生要靠自己去开拓，只有自己才是最清楚自己的真实能力、了解自己的渴望。没有规划就像航海中找不到方向。原地踏步或者是绕圈子，注定不会寻找到属于自己的港湾。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
<img src ="http://www.blogjava.net/windforce/aggbug/91588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2007-01-03 17:08 <a href="http://www.blogjava.net/windforce/archive/2007/01/03/91588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE不加载ActiveX控件【原创】</title><link>http://www.blogjava.net/windforce/archive/2007/01/03/91577.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Wed, 03 Jan 2007 08:50:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2007/01/03/91577.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/91577.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2007/01/03/91577.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/91577.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/91577.html</trackback:ping><description><![CDATA[这段时间在做项目实施。其中遇到一个用户就是死活装不上activex控件。<br />具体处理：1、修改IE设置。直接将站点添加到“安全站点”，安全级别设为默认。结果——失败。。。登陆进去进入加载界面，系统仍然毫无反映。<br />2、将相关dll文件打包传给用户，使用regsvr32手工注控件。控件注册过程没有问题，相关注册表项目齐全。打开IE，“工具”——&gt;“管理加载项”——&gt;“系统已加载控件”。踪影全无，进入对应功能，还是报错。<br />3、查询相关资料，忽然想起有一款防止恶意软件的工具“notroubleme”。下来一试<br />，症状和上面提到的一样。查询修改，原来是在loacal_machine——&gt;software——&gt;microsoft——&gt;Internet Explorer——&gt;ActiveX Compatibility下新建了一个以控件classID的注册项。Compatibility Flags设为400，将其改为0，终于可以看到控件正常运作了。<img src ="http://www.blogjava.net/windforce/aggbug/91577.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2007-01-03 16:50 <a href="http://www.blogjava.net/windforce/archive/2007/01/03/91577.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring下lob数据处理【原创】</title><link>http://www.blogjava.net/windforce/archive/2006/11/08/79880.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Wed, 08 Nov 2006 08:20:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2006/11/08/79880.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/79880.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2006/11/08/79880.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/79880.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/79880.html</trackback:ping><description><![CDATA[
		<p>
				<font size="1">做了个简单的通告管理，在本机测试时数据量比较小。最开始用的时varchar2到2000，之后用hibernate中的text类型，对应数据库中的Clob类型。当数据量小于4000时，可以直接使用setObject()插入数据库。当数据量大于4000时。报错：socket write error。<br />查找了一些资料，说当数据量超过4000时，应该使用流方式操作。看到头昏昏，烦都烦死了......<br />最后发现Spring封装了对lob数据的操作，可以直接使用jdbcTemple操作lob数据。<br />当使用MySql、MSSQL、Oracle 10g时，使用DefaultLobHandler；使用Oracle 9i时使用OracleLobHandler。<br />示例代码：【转值javaWorld】<br /></font>
		</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">
				<font size="1">
						<span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> File binaryFile </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> File(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">c:\\workspace\\wish.jpg</span><span style="COLOR: #000000">"</span></font>
				<font size="1">
						<span style="COLOR: #000000">);<br /></span>
						<span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> File txtFile </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> File(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">c:\\workspace\\test.txt</span><span style="COLOR: #000000">"</span></font>
				<font size="1">
						<span style="COLOR: #000000">);<br /></span>
						<span style="COLOR: #008080"> 3</span> </font>
				<font size="1">
						<span style="COLOR: #000000">       <br /></span>
						<span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> InputStream is </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span></font>
				<font size="1">
						<span style="COLOR: #000000"> FileInputStream(binaryFile);<br /></span>
						<span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> Reader reader </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span></font>
				<font size="1">
						<span style="COLOR: #000000"> FileReader(txtFile);<br /></span>
						<span style="COLOR: #008080"> 6</span> </font>
				<font size="1">
						<span style="COLOR: #000000">       <br /></span>
						<span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">        JdbcTemplate jdbcTemplate </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span></font>
				<font size="1">
						<span style="COLOR: #000000"> JdbcTemplate(dataSource);<br /></span>
						<span style="COLOR: #008080"> 8</span> </font>
				<font size="1">
						<span style="COLOR: #000000">       <br /></span>
						<span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> LobHandler lobHandler </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span></font>
				<font size="1">
						<span style="COLOR: #000000"> DefaultLobHandler();<br /></span>
						<span style="COLOR: #008080">10</span> </font>
				<font size="1">
						<span style="COLOR: #000000">       <br /></span>
						<span style="COLOR: #008080">11</span> <span style="COLOR: #000000">        jdbcTemplate.execute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">INSERT INTO test (txt, image) VALUES(?, ?)</span><span style="COLOR: #000000">"</span></font>
				<font size="1">
						<span style="COLOR: #000000">,<br /></span>
						<span style="COLOR: #008080">12</span> <span style="COLOR: #000000">                     </span><span style="COLOR: #0000ff">new</span></font>
				<font size="1">
						<span style="COLOR: #000000"> AbstractLobCreatingPreparedStatementCallback(lobHandler) {<br /></span>
						<span style="COLOR: #008080">13</span> <span style="COLOR: #000000">                        </span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span></font>
				<font size="1">
						<span style="COLOR: #000000"> setValues(PreparedStatement pstmt, LobCreator lobCreator)<br /></span>
						<span style="COLOR: #008080">14</span> <span style="COLOR: #000000">                                                           </span><span style="COLOR: #0000ff">throws</span></font>
				<font size="1">
						<span style="COLOR: #000000"> SQLException, DataAccessException {<br /></span>
						<span style="COLOR: #008080">15</span> <span style="COLOR: #000000">                            lobCreator.setClobAsCharacterStream(pstmt, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">, reader, (</span><span style="COLOR: #0000ff">int</span></font>
				<font size="1">
						<span style="COLOR: #000000">) txtFile.length());<br /></span>
						<span style="COLOR: #008080">16</span> <span style="COLOR: #000000">                            lobCreator.setBlobAsBinaryStream(pstmt, </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">, is, (</span><span style="COLOR: #0000ff">int</span></font>
				<font size="1">
						<span style="COLOR: #000000">) binaryFile.length());<br /></span>
						<span style="COLOR: #008080">17</span> </font>
				<font size="1">
						<span style="COLOR: #000000">                        }<br /></span>
						<span style="COLOR: #008080">18</span> </font>
				<font size="1">
						<span style="COLOR: #000000">                     });<br /></span>
						<span style="COLOR: #008080">19</span> </font>
				<font size="1">
						<span style="COLOR: #000000">       <br /></span>
						<span style="COLOR: #008080">20</span> </font>
				<font size="1">
						<span style="COLOR: #000000">        reader.close();<br /></span>
						<span style="COLOR: #008080">21</span> </font>
				<font size="1">
						<span style="COLOR: #000000">        is.close();<br /></span>
						<span style="COLOR: #008080">22</span> <span style="COLOR: #000000"></span></font>
		</div>
		<p>
				<font size="1">读取代码：<br /><br /></font>
		</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">
				<font size="1">
						<span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> Writer writer </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FileWriter(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">c:\\workspace\\test_bak.txt</span><span style="COLOR: #000000">"</span></font>
				<font size="1">
						<span style="COLOR: #000000">);<br /></span>
						<span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> OutputStream os </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FileOutputStream(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> File(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">c:\\workspace\\wish_bak.jpg</span><span style="COLOR: #000000">"</span></font>
				<font size="1">
						<span style="COLOR: #000000">));<br /></span>
						<span style="COLOR: #008080"> 3</span> </font>
				<font size="1">
						<span style="COLOR: #000000">       <br /></span>
						<span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000">        jdbcTemplate.query(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SELECT txt,image FROM test WHERE id = ?</span><span style="COLOR: #000000">"</span></font>
				<font size="1">
						<span style="COLOR: #000000">,<br /></span>
						<span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">                </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Object[] {</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Integer(</span><span style="COLOR: #000000">1</span></font>
				<font size="1">
						<span style="COLOR: #000000">)},<br /></span>
						<span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000">                </span><span style="COLOR: #0000ff">new</span></font>
				<font size="1">
						<span style="COLOR: #000000"> AbstractLobStreamingResultSetExtractor() {<br /></span>
						<span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">                    </span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> streamData(ResultSet rs) </span><span style="COLOR: #0000ff">throws</span></font>
				<font size="1">
						<span style="COLOR: #000000"> SQLException, IOException, DataAccessException {<br /></span>
						<span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">                        FileCopyUtils.copy(lobHandler.getClobAsCharacterStream(rs, </span><span style="COLOR: #000000">1</span></font>
				<font size="1">
						<span style="COLOR: #000000">), writer);<br /></span>
						<span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">                        FileCopyUtils.copy(lobHandler.getBlobAsBinaryStream(rs, </span><span style="COLOR: #000000">2</span></font>
				<font size="1">
						<span style="COLOR: #000000">), os);<br /></span>
						<span style="COLOR: #008080">10</span> </font>
				<font size="1">
						<span style="COLOR: #000000">                    }<br /></span>
						<span style="COLOR: #008080">11</span> </font>
				<font size="1">
						<span style="COLOR: #000000">                 });<br /></span>
						<span style="COLOR: #008080">12</span> </font>
				<font size="1">
						<span style="COLOR: #000000">        writer.close();<br /></span>
						<span style="COLOR: #008080">13</span> </font>
				<font size="1">
						<span style="COLOR: #000000">        os.close();<br /></span>
						<span style="COLOR: #008080">14</span> </font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="1">
						<span style="COLOR: #008080">15</span> <span style="COLOR: #000000"></span></font>
		</div>
		<font size="1">备注1：OracleLobHandler要求注入CommonsDbcpNativeJdbcExtractor，否则报错：要求使用OracleConnection，不可以使用Dbcp连接池。<br /></font>
		<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">
				<font size="1">
						<span style="COLOR: #008080">1</span>
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<span style="COLOR: #000000">    </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">bean id</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">lobHandler</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">class</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">org.springframework.jdbc.support.lob.OracleLobHandler</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">&gt;</span>
				</font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="1">
						<span style="COLOR: #008080">2</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">property name</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">nativeJdbcExtractor</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">&gt;</span>
				</font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="1">
						<span style="COLOR: #008080">3</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">bean </span>
						<span style="COLOR: #0000ff">class</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">/&gt;</span>
				</font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="1">
						<span style="COLOR: #008080">4</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
						<span style="COLOR: #000000">&lt;/</span>
						<span style="COLOR: #000000">property</span>
						<span style="COLOR: #000000">&gt;</span>
				</font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="1">
						<span style="COLOR: #008080">5</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
						<span style="COLOR: #000000">&lt;/</span>
						<span style="COLOR: #000000">bean</span>
						<span style="COLOR: #000000">&gt;</span>
				</font>
		</div>
		<font size="1">备注2：Oracle驱动版本很多，要求使用正确的驱动。当驱动版本错误时,报错：无法释放LobHandler；无法关闭Writer；无法从套接字读取更多的信息。执行插入操作，但是Clob类型数据为空。</font>
<img src ="http://www.blogjava.net/windforce/aggbug/79880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2006-11-08 16:20 <a href="http://www.blogjava.net/windforce/archive/2006/11/08/79880.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cookie、userdata、sessionStorage[转载]</title><link>http://www.blogjava.net/windforce/archive/2006/10/26/77465.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Thu, 26 Oct 2006 12:14:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2006/10/26/77465.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/77465.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2006/10/26/77465.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/77465.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/77465.html</trackback:ping><description><![CDATA[cookie，容量4kb，默认各种浏览器都支持，缺陷就是每次请求，浏览器都会把本机存的cookies发送到服务器，无形中浪费带宽。<br /><br />userdata，只有ie支持，单个容量64kb，每个域名最多可存10个共计640k数据。默认保存在C:\Documents and Settings\Administrator\UserData\目录下，保存格式为xml。关于userdata更多资料参考<a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/behaviors/reference/behaviors/userdata.asp" target="_blank">http://msdn.microsoft.com/library/default.asp?url=/workshop/author/behaviors/reference/behaviors/userdata.asp</a><br /><br />sessionStorage，只有firefox2支持的临时数据保存，容量大小不祥。<br /><br /><br />以下是js片段，拿来替代cookies还是蛮爽滴，HOHO。<br /><table class="ubb_code" cellspacing="1" cellpadding="0" width="90%" border="0"><tbody><tr><td><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"><span style="COLOR: #008080"> 1</span> <span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(window.ActiveXObject) {document.documentElement.addBehavior(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">#default#userdata</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);};<br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000">  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> Cache ＝ {<br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000">    set : </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(key, value) {<br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">      </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(window.ActiveXObject) {</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">for ie5.0+</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">with</span><span style="COLOR: #000000">(document.documentElement){<br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">          </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">            load(key);<br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">            setAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">js</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, value);<br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000">            save(key);<br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000">          }</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (ex){<br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000">            setAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">js</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, value);<br /></span><span style="COLOR: #008080">13</span> <span style="COLOR: #000000">            save(key);<br /></span><span style="COLOR: #008080">14</span> <span style="COLOR: #000000">          };<br /></span><span style="COLOR: #008080">15</span> <span style="COLOR: #000000">        };<br /></span><span style="COLOR: #008080">16</span> <span style="COLOR: #000000">      }</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(window.sessionStorage) {</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">for firefox2.0+</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">17</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">        sessionStorage.setItem(key, value);<br /></span><span style="COLOR: #008080">18</span> <span style="COLOR: #000000">      };<br /></span><span style="COLOR: #008080">19</span> <span style="COLOR: #000000">    },<br /></span><span style="COLOR: #008080">20</span> <span style="COLOR: #000000">    get : </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(key) {<br /></span><span style="COLOR: #008080">21</span> <span style="COLOR: #000000">      </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(window.ActiveXObject) {<br /></span><span style="COLOR: #008080">22</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">with</span><span style="COLOR: #000000">(document.documentElement){<br /></span><span style="COLOR: #008080">23</span> <span style="COLOR: #000000">          </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">24</span> <span style="COLOR: #000000">            load(key);<br /></span><span style="COLOR: #008080">25</span> <span style="COLOR: #000000">            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> getAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">js</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">26</span> <span style="COLOR: #000000">          }</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (ex){<br /></span><span style="COLOR: #008080">27</span> <span style="COLOR: #000000">            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">28</span> <span style="COLOR: #000000">          };<br /></span><span style="COLOR: #008080">29</span> <span style="COLOR: #000000">        };<br /></span><span style="COLOR: #008080">30</span> <span style="COLOR: #000000">      }</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(window.sessionStorage) {<br /></span><span style="COLOR: #008080">31</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> sessionStorage.getItem(key);<br /></span><span style="COLOR: #008080">32</span> <span style="COLOR: #000000">      }</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">33</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">34</span> <span style="COLOR: #000000">      };<br /></span><span style="COLOR: #008080">35</span> <span style="COLOR: #000000">    },<br /></span><span style="COLOR: #008080">36</span> <span style="COLOR: #000000">    remove : </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(key) {<br /></span><span style="COLOR: #008080">37</span> <span style="COLOR: #000000">      </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(window.ActiveXObject) {<br /></span><span style="COLOR: #008080">38</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">with</span><span style="COLOR: #000000">(document.documentElement){<br /></span><span style="COLOR: #008080">39</span> <span style="COLOR: #000000">          </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">40</span> <span style="COLOR: #000000">            load(key);<br /></span><span style="COLOR: #008080">41</span> <span style="COLOR: #000000">            expires </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Date(</span><span style="COLOR: #000000">315532799000</span><span style="COLOR: #000000">).toUTCString();<br /></span><span style="COLOR: #008080">42</span> <span style="COLOR: #000000">            save(key);<br /></span><span style="COLOR: #008080">43</span> <span style="COLOR: #000000">          }</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (ex){};<br /></span><span style="COLOR: #008080">44</span> <span style="COLOR: #000000">        };<br /></span><span style="COLOR: #008080">45</span> <span style="COLOR: #000000">      }</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(window.sessionStorage) {<br /></span><span style="COLOR: #008080">46</span> <span style="COLOR: #000000">        sessionStorage.removeItem(key);<br /></span><span style="COLOR: #008080">47</span> <span style="COLOR: #000000">      };<br /></span><span style="COLOR: #008080">48</span> <span style="COLOR: #000000">    }<br /></span><span style="COLOR: #008080">49</span> <span style="COLOR: #000000">  }</span></div></td></tr></tbody></table><br />感谢emu的说明<a href="/emu/archive/2006/10/04/73385.html" target="_blank">http://www.blogjava.net/emu/archive/2006/10/04/73385.html</a><br /><img src ="http://www.blogjava.net/windforce/aggbug/77465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2006-10-26 20:14 <a href="http://www.blogjava.net/windforce/archive/2006/10/26/77465.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>读取RSS历程</title><link>http://www.blogjava.net/windforce/archive/2006/10/20/76442.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Fri, 20 Oct 2006 12:09:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2006/10/20/76442.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/76442.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2006/10/20/76442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/76442.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/76442.html</trackback:ping><description><![CDATA[
		<div dir="ltr" style="MARGIN-RIGHT: 0px">
				<pre>   无聊想写个读取RSS的东东，思路比较清晰：<br />      ⒈用ajax根据url抓取xml数据；<br />      ⒉解析数据，提取有用的信息；<br />      ⒊将提取出来的数据以合理的方式显示。<br />   本来以为比较简单的，谁知道在第一步就卡住了。首先，ajax存在跨域问题，直接抓取没有权限。那只好后台用URL去取。<br />可是抓回来的xml文件，只要有中文就是乱码。用new(string.getByte(),"UTF-8")解码，会出现中文部分乱码。抓取代码如下：<br />   简单总结问题原因：读取xml文件流的时候要使用相符合的编码方式。一般xml都是用UTF-8编码，而系统的默认读取应该是GBK<br />(简体中文)。上一点只是猜想：因为我用new(string.getByte(),"UTF-8")，用的是默认GBK读取，可以解出部分中文。<br />所以因该在读取xml时候指定编码，下面代码注释1。<br />   解出的代码，如果直接传回ajax处理，会得步到xml对象。细看下最后输出得xml文件，发现最后多了一个"?"。这个问号因该是<br />用来表明xml结束的。但是dom对xml格式要求和严格，所以直接给回肯定是的不到responseXML.documentElement对象的。去掉后<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"><span style="COLOR: #008080"> 1</span><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">class</span><span style="COLOR: #000000"> GetRss </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> HttpServlet<br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img id="Codehighlighter1_40_1556_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_1556_Open_Text.style.display='none'; Codehighlighter1_40_1556_Closed_Image.style.display='inline'; Codehighlighter1_40_1556_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_40_1556_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_40_1556_Closed_Text.style.display='none'; Codehighlighter1_40_1556_Open_Image.style.display='inline'; Codehighlighter1_40_1556_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_40_1556_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_40_1556_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> Logger logger </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Logger.getLogger(GetRss.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   <br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> doGet(HttpServletRequest request, HttpServletResponse response) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> ServletException, IOException<br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img id="Codehighlighter1_243_1553_Open_Image" onclick="this.style.display='none'; Codehighlighter1_243_1553_Open_Text.style.display='none'; Codehighlighter1_243_1553_Closed_Image.style.display='inline'; Codehighlighter1_243_1553_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_243_1553_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_243_1553_Closed_Text.style.display='none'; Codehighlighter1_243_1553_Open_Image.style.display='inline'; Codehighlighter1_243_1553_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_243_1553_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_243_1553_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        String url </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> request.getParameter(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">RssUrl</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        logger.info(url);<br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id="Codehighlighter1_344_1281_Open_Image" onclick="this.style.display='none'; Codehighlighter1_344_1281_Open_Text.style.display='none'; Codehighlighter1_344_1281_Closed_Image.style.display='inline'; Codehighlighter1_344_1281_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_344_1281_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_344_1281_Closed_Text.style.display='none'; Codehighlighter1_344_1281_Open_Image.style.display='inline'; Codehighlighter1_344_1281_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_344_1281_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_344_1281_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            URL RssUrl </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> URL(url);<br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            InputStream stream </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> RssUrl.openStream();<br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            BufferedReader in </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> BufferedReader(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> InputStreamReader(stream),</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">UTF-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" />1</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            </span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000"> loop </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">; <br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            StringBuffer sb </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> StringBuffer(); <br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           <br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img id="Codehighlighter1_662_886_Open_Image" onclick="this.style.display='none'; Codehighlighter1_662_886_Open_Text.style.display='none'; Codehighlighter1_662_886_Closed_Image.style.display='inline'; Codehighlighter1_662_886_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_662_886_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_662_886_Closed_Text.style.display='none'; Codehighlighter1_662_886_Open_Image.style.display='inline'; Codehighlighter1_662_886_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000"> (loop) </span><span id="Codehighlighter1_662_886_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_662_886_Open_Text"><span style="COLOR: #000000">{ <br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img id="Codehighlighter1_695_871_Open_Image" onclick="this.style.display='none'; Codehighlighter1_695_871_Open_Text.style.display='none'; Codehighlighter1_695_871_Closed_Image.style.display='inline'; Codehighlighter1_695_871_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_695_871_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_695_871_Closed_Text.style.display='none'; Codehighlighter1_695_871_Open_Image.style.display='inline'; Codehighlighter1_695_871_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> ( in.ready() ) </span><span id="Codehighlighter1_695_871_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_695_871_Open_Text"><span style="COLOR: #000000">{ <br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; <br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img id="Codehighlighter1_747_829_Open_Image" onclick="this.style.display='none'; Codehighlighter1_747_829_Open_Text.style.display='none'; Codehighlighter1_747_829_Closed_Image.style.display='inline'; Codehighlighter1_747_829_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_747_829_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_747_829_Closed_Text.style.display='none'; Codehighlighter1_747_829_Open_Image.style.display='inline'; Codehighlighter1_747_829_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000"> (i</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_747_829_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_747_829_Open_Text"><span style="COLOR: #000000">{ <br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> in.read();<br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                sb.append((</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">)i);<br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"> <br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            loop </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">; <br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"> <br /></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> len </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sb.length();<br /></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            String out </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sb.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, len</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" />2</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">30</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            response.setContentType(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/xml;charset=utf-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            response.setHeader(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Cache-Control</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">no-cache</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            <br /></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            PrintWriter pw</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> PrintWriter(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> OutputStreamWriter(response.getOutputStream(),</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">UTF-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br /></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            pw.write(out);<br /></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            pw.close();<br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (MalformedURLException e)<br /></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img id="Codehighlighter1_1331_1423_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1331_1423_Open_Text.style.display='none'; Codehighlighter1_1331_1423_Closed_Image.style.display='inline'; Codehighlighter1_1331_1423_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1331_1423_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1331_1423_Closed_Text.style.display='none'; Codehighlighter1_1331_1423_Open_Image.style.display='inline'; Codehighlighter1_1331_1423_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_1331_1423_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_1331_1423_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            <br /></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            logger.error(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">GetRss.execute Error. </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> e.getMessage());<br /></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (IOException e)<br /></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img id="Codehighlighter1_1463_1542_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1463_1542_Open_Text.style.display='none'; Codehighlighter1_1463_1542_Closed_Image.style.display='inline'; Codehighlighter1_1463_1542_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1463_1542_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1463_1542_Closed_Text.style.display='none'; Codehighlighter1_1463_1542_Open_Image.style.display='inline'; Codehighlighter1_1463_1542_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_1463_1542_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_1463_1542_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            logger.error(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">GetRss.execute Error. </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> e.getMessage());<br /></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000">     <br /></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br /></pre>
		</div>
<img src ="http://www.blogjava.net/windforce/aggbug/76442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2006-10-20 20:09 <a href="http://www.blogjava.net/windforce/archive/2006/10/20/76442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cross Site AJAX [转载]</title><link>http://www.blogjava.net/windforce/archive/2006/10/16/75439.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Mon, 16 Oct 2006 08:38:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2006/10/16/75439.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/75439.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2006/10/16/75439.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/75439.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/75439.html</trackback:ping><description><![CDATA[
		<p>一般情形下，为安全起见，浏览器不允许你在客户端通过XMLHttpRequest访问别的域(参考连接1,2)，即使是同一域的子域也不行，譬如www.joycode.com 到 blog.joycode.com。(你可以通过某些设置来访问子域，但因为这方法不是很通行，所有就不考虑了，但如果你感兴趣，参考连接2。) 
</p>
		<p>但很明显，在不少情形下，访问别的网站，获取别的网站的信息/服务是非常有用的，特别是在这个Web 2.0时代。 
</p>
		<p>常用的跨站访问的方法有3种(参考连接3，4)： 
</p>
		<ol>
				<li>在同一域的服务器端建立一个代理，浏览器向该代理网址发送请求，然后该代理向其他域的网址发请求，在获取回复后，或作处理或按原样发回到浏览器 
</li>
				<li>使用按需(On-Demand) Javascript 脚本。在页面内动态生成新的&lt;script&gt;，将其src属性指向别的网站的网址，这个网址返回的内容必须是合法的Javascript脚本，常用的是JSON消息。 
</li>
				<li>使用IFRAME。在页面内嵌或动态生成指向别的网站的IFRAME，然后这2个网页间可以通过改变对方的anchor hash fragment来传输消息。改变一个网页的anchor hash fragment并不会使浏览器重新装载网页，所以一个网页的状态得以保持，而网页本身则可以通过一个计时器(timer)来察觉自己anchor hash的变化，从而相应改变自己的状态(参考<a href="http://blog.joycode.com/saucer/archive/2006/09/13/83457.aspx">这个帖子</a>中提及的<a href="http://www.nikhilk.net/Entry.aspx?id=139" target="_blank">Nikhil Kothari的历史控件</a>中的方法)。 <a href="http://blog.monstuff.com/" target="_blank">Julien Couvreur</a>在他的《<a href="http://blog.monstuff.com/archives/000304.html" target="_blank">Cross-document messaging hack</a>》里描述了一个更复杂的应用情形，<br />"....<br />For example, if you have page A containing an iframe B in a different domain,then B can create a new iframe and load it with a url in the same domain as A. The url that is loaded doesn't generate a request to the server if it is properly cached and only the fragment identifier is used to pass changing information. Page A can now get the DOM handle on the new iframe and successfully retrieve the information transmitted in the url by B...." (大体这样，网页A包含了一个IFRAME B，B的网页来自一个不同的域。然后B页可以生成一个IFRAME C，把它指向与网页A同域的某个地址，因为是A与C同域，网页A可以访问C里的信息，反之亦然。) </li>
		</ol>
		<p>
				<a href="http://atlas.asp.net/Default.aspx?tabid=47">ASP.NET AJAX扩展(即Atlas)</a>提供了一个桥(bridge)机制让你在服务器端配置来访问别的网站，并同时支持POX和SOAP这2种协议。想了解其中细节，请参考Atlas文档里的<a href="http://atlas.asp.net/docs/Walkthroughs/DevScenarios/bridge.aspx" target="_blank">《Building Mash-ups with "Atlas"》</a>。当然你完全可以自己建立一个web service，通过它来访问其他网站并返回信息。 
</p>
		<p>据说，Atlas中的 IFrameExecutor 可以实现跨域的调用，我按照MSDN博客<a href="http://blogs.msdn.com/federaldev/default.aspx" target="_blank">Federal Developer Weblog</a>的这篇帖子<a href="http://blogs.msdn.com/federaldev/archive/2006/07/31/684229.aspx" target="_blank">《Calling web services hosted outside of your application with “Atlas”》</a>上的步骤试了一下，但在Windows 2003 Server SP1上得到却是“Access is denied”的错误信息。然后我下载了<a href="http://www.federaldeveloper.com/Shared%20Documents/Presentations%20by%20Marc%20Schweigert/CallAtlasWebServiceInDifferentProject.zip">该文中的项目</a>，试验的结果仍旧是“Access is denied”。也许需要改动一些浏览器中的什么设置才能成功，但这不是我的目的，我需要一个在普通设置下都能成功的例子。 
</p>
		<p>按需(On-Demand) Javascript脚本的实现是很简单的，譬如我有这样一个网页，(想测试的话，需要改动其中的网址) 
</p>
		<div style="MARGIN: 2em">
				<code>
						<p>&lt;html&gt;<br />&lt;head&gt;<br />&lt;script language="javascript" type="text/javascript"&gt;<br />function loadContent()<br />{<br />var s=document.createElement('SCRIPT');<br />s.src='<a href="http://www.anotherdomain.com/TestCrossJS.aspx?f=setDivContent';">http://www.anotherdomain.com/TestCrossJS.aspx?f=setDivContent';</a><br />document.body.appendChild(s);<br />} 
</p>
						<p>function setDivContent(v)<br />{<br />var dv = document.getElementById("dv");<br />dv.innerHTML = v; <br />}<br />&lt;/script&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;div id="dv"&gt;&lt;/div&gt; 
</p>
						<p>&lt;input type="button" value="Click Me" onclick="loadContent()"&gt;<br />&lt;/body&gt;<br />&lt;/html&gt; </p>
				</code>
		</div>
		<p>其中的www.anotherdomain.com/TestCrossJS.aspx是这样的， 
</p>
		<div style="MARGIN: 2em">
				<code>
						<p>&lt;script language="C#" runat="server"&gt;<br />void Page_Load(object sender, EventArgs e)<br />{<br />  string f = Request.QueryString["f"];<br />  Response.Clear();<br />  Response.ContentType = "application/x-javascript";<br />  Response.Write(String.Format(@"<br />                   {0}('{1}');", <br />                   f,<br />                   DateTime.Now));<br />  Response.End();<br />}<br />&lt;/script&gt; </p>
				</code>
		</div>
		<p>点击“Click Me”按钮，生成一个新的script tag，下载对应的 Javascript 脚本，结束时回调其中的setDivContent()，从而更新网页上一个div的内容。 
</p>
		<p>IFRAME的方法好像很流行，除了<a href="http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book75" target="_blank">dojo工具包支持</a>外，据微软的<a href="http://www.25hoursaday.com/weblog/default.aspx" target="_blank">Dare Obasanjo</a>说(参考连接9)，<a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=3b03cf9d-b589-4838-806e-64efcc0a1a15" target="_blank">Windows Live Contacts Gadget使用了这个方法来获取Hotmail的address book</a>。最近，<a href="http://www.plaxo.com/" target="_blank">Plaxo</a>公司的开发人员 Joseph Smarr在七月的OSCON 2006会议上作了一个题为<a href="http://blog.plaxo.com/archives/2006/07/oscon_crosssite.html" target="_blank">《Cross-site Ajax: Challenges and Techniques for Building Rich Web 2.0 Mashups》</a>的讲座[来源：<a href="http://www.sitepoint.com/blogs/2006/07/28/oscon-2006-cross-site-ajax/" target="_blank">Kevin Yank--OSCON 2006: Cross-site Ajax</a>]，<a href="http://www.plaxo.com/api" target="_blank">他们将这个方法做成了一个平台</a>，允许合作伙伴间合作，他们开发的方案叫“The JavaScript Wormhole(虫洞)”，据说准备将其推广为一个标准。他讲座的PPT可以在<a href="http://blog.plaxo.com/archives/2006/07/oscon_crosssite.html" target="_blank">这里</a><a href="http://www.plaxo.com/css/api/Joseph-Smarr-Plaxo-OSCON-2006.ppt">下载</a>，里面对这个方案做了说明，非常值得看一下。 
</p>
		<p>现在将IFRAME的方法简单示范如下: 
</p>
		<p>1. <a href="http://domain1/TestCross.html:">http://domain1/TestCross.html:</a></p>
		<div style="MARGIN: 2em">
				<code>
						<p>&lt;html&gt;<br />&lt;head&gt;<br />&lt;script language="javascript" type="text/javascript"&gt;<br />var url = "<a href="http://domain2/TestCross.html&quot;;">http://domain2/TestCross.html"</a><br />var oldHash = null;<br />var timer = null; 
</p>
						<p>function getHash() <br />{<br />var hash = window.location.hash;<br />if ((hash.length &gt;= 1) &amp;&amp; (hash.charAt(0) == '#')) <br />{<br />hash = hash.substring(1);<br />} 
</p>
						<p>return hash;<br />}<br />function sendRequest()<br />{<br />var d = document;<br />var t = d.getElementById('request');<br />var f = d.getElementById('alienFrame');<br />f.src = url + "#" + t.value + "&lt;br/&gt;" + new Date();<br />} 
</p>
						<p>function setDivHtml(v)<br />{<br />var d = document;<br />var dv = d.getElementById('response');<br />dv.innerHTML = v;<br />} 
</p>
						<p>function idle()<br />{<br />var newHash = getHash(); 
</p>
						<p>if (newHash != oldHash)<br />{<br />setDivHtml(newHash);<br />oldHash = newHash;<br />} 
</p>
						<p>timer = window.setTimeout(idle, 100);<br />} 
</p>
						<p>function window.onload()<br />{<br />timer = window.setTimeout(idle, 100);<br />}<br />&lt;/script&gt;<br />&lt;/head&gt;<br />&lt;body&gt; 
</p>
						<p>请求：&lt;input type="text" id="request"&gt; &lt;input type="button" value="发送" onclick="sendRequest()" /&gt;&lt;br/&gt;<br />回复：&lt;div id="response"&gt;&lt;/div&gt; 
</p>
						<p>&lt;iframe id="alienFrame" src="<a href="http://domain2/TestCross.html&quot;">http://domain2/TestCross.html"</a>&gt;&lt;/iframe&gt; 
</p>
						<p>&lt;/body&gt;<br />&lt;/html&gt; </p>
				</code>
		</div>
		<p>2. <a href="http://domain2/TestCross.html:">http://domain2/TestCross.html:</a></p>
		<div style="MARGIN: 2em">
				<code>
						<p>&lt;html&gt;<br />&lt;head&gt;<br />&lt;script language="javascript" type="text/javascript"&gt;<br />var url = "<a href="http://domain1/TestCross.html&quot;;">http://domain1/TestCross.html"</a><br />var oldHash = null;<br />var timer = null; 
</p>
						<p>function getHash() <br />{<br />var hash = window.location.hash;<br />if ((hash.length &gt;= 1) &amp;&amp; (hash.charAt(0) == '#')) <br />{<br />hash = hash.substring(1);<br />} 
</p>
						<p>return hash;<br />}<br />function sendRequest()<br />{<br />var d = document;<br />var t = d.getElementById('request');<br />var f = parent;<br />//alert(f.document); //试着去掉这个注释，你会得到“Access is denied”<br />f.location.href = url + "#" + t.value + "&lt;br/&gt;" + new Date();<br />} 
</p>
						<p>function setDivHtml(v)<br />{<br />var d = document;<br />var dv = d.getElementById('response');<br />dv.innerHTML = v;<br />} 
</p>
						<p>function idle()<br />{<br />var newHash = getHash(); 
</p>
						<p>if (newHash != oldHash)<br />{<br />setDivHtml(newHash);<br />oldHash = newHash;<br />} 
</p>
						<p>timer = window.setTimeout(idle, 100);<br />} 
</p>
						<p>function window.onload()<br />{<br />timer = window.setTimeout(idle, 100);<br />}<br />&lt;/script&gt;<br />&lt;/head&gt;<br />&lt;body&gt; 
</p>
						<p>请求：&lt;input type="text" id="request"&gt; &lt;input type="button" value="发送" onclick="sendRequest()" /&gt;&lt;br/&gt;<br />回复：&lt;div id="response"&gt;&lt;/div&gt; 
</p>
						<p>&lt;/body&gt;<br />&lt;/html&gt; </p>
				</code>
		</div>
		<p>两个网页基本相同，第一个网页内嵌一个IFRAME，在点击“发送”按钮后，会将文本框里的内容通过hash fragment传给IFRAME。点击IFRAME里的“发送”按钮后，它会将文本框里的内容通过hash fragment传给父窗口。因为是只改动了hash fragment，浏览器不会重新load网页内容，这里使用了一个计时器来检测URL变化，如果变化了，就更新其中一个div的内容 。 
</p>
		<p>
		</p>
		<p>这个方法是不是个安全漏洞？考虑到微软的Windows Live都在使用这个方法，估计不是，<img src="http://blog.joycode.com/emoticons/emotion-1.gif" />。这个方法是不是很安全？考虑到这个方法只有在2个网站协作的情形才能成功，安全问题好像不是很大，除非其中涉及的网站本身有XSS的问题。</p>
		<p>【参考连接】 </p>
		<p>1. Security Considerations: Dynamic HTML<br /><a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/sec_dhtml.asp">http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/sec_dhtml.asp</a></p>
		<p>2. About Cross-Frame Scripting and Security<br /><a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/om/xframe_scripting_security.asp">http://msdn.microsoft.com/library/default.asp?url=/workshop/author/om/xframe_scripting_security.asp</a></p>
		<p>3. Cross-Domain Proxy<br /><a href="http://ajaxpatterns.org/Cross-Domain_Proxy">http://ajaxpatterns.org/Cross-Domain_Proxy</a></p>
		<p>4. Cross Domain XMLHttpRequest using an IFrame Proxy<br /><a href="http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book75">http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book75</a></p>
		<p>5. Back Button Support for Atlas UpdatePanels<br /><a href="http://www.nikhilk.net/BackButtonSupport.aspx">http://www.nikhilk.net/BackButtonSupport.aspx</a></p>
		<p>6. Cross-document messaging hack<br /><a href="http://blog.monstuff.com/archives/000304.html">http://blog.monstuff.com/archives/000304.html</a></p>
		<p>7. Building Mash-ups with "Atlas"<br /><a href="http://atlas.asp.net/docs/Walkthroughs/DevScenarios/bridge.aspx">http://atlas.asp.net/docs/Walkthroughs/DevScenarios/bridge.aspx</a></p>
		<p>8. Calling web services hosted outside of your application with “Atlas”<br /><a href="http://blogs.msdn.com/federaldev/archive/2006/07/31/684229.aspx">http://blogs.msdn.com/federaldev/archive/2006/07/31/684229.aspx</a></p>
		<p>
				<a href="http://www.federaldeveloper.com/Shared%20Documents/Presentations%20by%20Marc%20Schweigert/CallAtlasWebServiceInDifferentProject.zip">http://www.federaldeveloper.com/Shared%20Documents/Presentations%20by%20Marc%20Schweigert/CallAtlasWebServiceInDifferentProject.zip</a>
		</p>
		<p>9. AJAX Tip: Passing Messages Between iframes <br /><a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=3b03cf9d-b589-4838-806e-64efcc0a1a15">http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=3b03cf9d-b589-4838-806e-64efcc0a1a15</a></p>
		<p>10. OSCON Cross-site Ajax Slides<br /><a href="http://blog.plaxo.com/archives/2006/07/oscon_crosssite.html">http://blog.plaxo.com/archives/2006/07/oscon_crosssite.html</a></p>
		<p>
				<a href="http://www.plaxo.com/css/api/Joseph-Smarr-Plaxo-OSCON-2006.ppt">http://www.plaxo.com/css/api/Joseph-Smarr-Plaxo-OSCON-2006.ppt</a>
		</p>
		<p>11. OSCON 2006: Cross-site Ajax<br /><a href="http://www.sitepoint.com/blogs/2006/07/28/oscon-2006-cross-site-ajax/">http://www.sitepoint.com/blogs/2006/07/28/oscon-2006-cross-site-ajax/</a></p>
<img src ="http://www.blogjava.net/windforce/aggbug/75439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2006-10-16 16:38 <a href="http://www.blogjava.net/windforce/archive/2006/10/16/75439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在JDK1.4中使用JAXP1.3[转载]</title><link>http://www.blogjava.net/windforce/archive/2006/09/28/72675.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Thu, 28 Sep 2006 13:03:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2006/09/28/72675.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/72675.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2006/09/28/72675.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/72675.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/72675.html</trackback:ping><description><![CDATA[
		<div>在JDK1.4中使用JAXP1.3</div>
		<div>由于JDK1.5以上已经自带jaxp了，而jdk1.4以下版本需要自己添加jaxp库文件。</div>
		<div> </div>
		<div>1。下载</div>
		<div>因为jwsdp-1.5中带的jaxp是1.26版本，因此需要单独重新下载jaxp</div>
		<div>
				<a href="https://jaxp.dev.java.net/files/documents/913/7831/JAXP_RI_20041025.class">https://jaxp.dev.java.net/files/documents/913/7831/JAXP_RI_20041025.class</a>
		</div>
		<div> </div>
		<div>参考：</div>
		<div>
				<a href="https://jaxp.dev.java.net/">https://jaxp.dev.java.net</a>
		</div>
		<div>
				<a href="http://java.sun.com/xml/jaxp/index.jsp">http://java.sun.com/xml/jaxp/index.jsp</a>
		</div>
		<div> </div>
		<div>2.安装:</div>
		<div>JAXP_RI_20041025.class所在的目录下,进入命令行，</div>
		<div>运行：java -cp . JAXP_RI_20041025</div>
		<div>然后屏幕上列出所有解压出来的文件名字。</div>
		<div>此时，在当前目录下会有一个叫jaxp-1_3的目录，里面有jaxp的jar文件和api文档。</div>
		<div> </div>
		<div>3.jaxp需要用到的jar为(都在jaxp-1_3目录下)：</div>
		<div>dom.jar,jaxp-api.jar,sax.jar,xalan.jar,xercesImpl.jar</div>
		<div> </div>
		<div>4.接下来就可以根据自己需要来使用jaxp1.3了</div>
		<div> </div>
		<div>5.由于sun默认使用的解析器是经过其包装后的(基于<strong>Xerces version 2.6.0 和 XSLTC version 2.5.2</strong>),比如：</div>
		<div>com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl(可查看javax.xml.parsers.SAXParserFactory 的源代码),</div>
		<div>com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl(可查看javax.xml.transform.TransformerFactory 的源代码).</div>
		<div>因此在需要使用其它解析器的时候，需要通过设置系统属性值的方式，</div>
		<div>或者在$java.home/lib/jaxp.properties进行配置($java.home为System.getProperty("java.home")所得到的路径，具体可以查看javax.xml.parsers.FactoryFinder源代码中的 static Object find(String factoryId, String fallbackClassName) 方法)来选择具体的解析器实现。</div>
		<div>jaxp.properties中支持以下属性.</div>
		<div> </div>
		<div>示例文件如下(实际就是jaxp的默认值)：</div>
		<div>javax.xml.transform.TransformerFactory=com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl</div>javax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl 
<div>javax.xml.datatype.DatatypeFactory=com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl</div><div> </div><div>假如需要使用apache的解析器，那么如下操作 。</div><div>a.下载<a href="http://www.apache.org/dist/xml/xerces-j/Xerces-J-bin.2.6.2.zip">http://www.apache.org/dist/xml/xerces-j/Xerces-J-bin.2.6.2.zip</a></div><div><a href="http://www.eu.apache.org/dist/xml/xalan-j/binaries/xalan-j_2_6_0-bin.zip">http://www.eu.apache.org/dist/xml/xalan-j/binaries/xalan-j_2_6_0-bin.zip</a></div><div>(均为当前最新版本)</div><div>b.解压获得相应的jar文件,放入classpath中。</div><div>3.配置jaxp.properties为：</div><div>javax.xml.transform.TransformerFactory=org.apache.xalan.xsltc.trax.TransformerFactoryImpl</div><div>#也可以使用</div><div>#javax.xml.transform.TransformerFactory=org.apache.xalan.processor.TransformerFactoryImpl</div><div>javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl</div><div>javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl </div><div>javax.xml.datatype.DatatypeFactory=org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl</div><div> </div><div> </div><div> </div><div> </div><div> </div><div>6.需要关于jaxp的调试信息，设置系统属性jaxp.debug为1即可</div><div>   System.setProperty("jaxp.debug","1");</div><div>或者运行时的命令为： java -Djaxp.debug=1 com.lizongbo.TestJAXP</div><div> </div><div> </div><div> </div><div>几篇非常好的资料：</div><div> </div><div><div><span class="atitle">JAXP 专述 <span class="atitle2">Sun 的 Java API for XML 语法分析</span></span></div><div><a href="http://www-128.ibm.com/developerworks/cn/xml/jaxp/index.html">http://www-128.ibm.com/developerworks/cn/xml/jaxp/index.html</a></div><span class="atitle">JAXP 再述 <span class="atitle2">Sun 的 Java API for XML Parsing，1.1 版</span></span></div><div><span class="atitle"><span class="atitle2"><a href="http://www-128.ibm.com/developerworks/cn/xml/jaxp1/index.html">http://www-128.ibm.com/developerworks/cn/xml/jaxp1/index.html</a></span></span></div><div><span class="atitle"><span class="atitle2"></span></span> </div><div><span class="atitle">JAXP 1.3 的新特性，第 1 部分</span></div><div><span class="atitle"><span class="atitle2">技术综述，考察解析 API 的变化和新的验证 API</span></span></div><div><a href="http://www-128.ibm.com/developerworks/cn/xml/x-jaxp13a.html">http://www-128.ibm.com/developerworks/cn/xml/x-jaxp13a.html</a></div><div><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr valign="top"><td width="2"><img height="1" alt="" src="file:///C:/Documents%20and%20Settings/Administrator/Local%20Settings/Temp/WebCatcher/160_files/c[3].gif" width="2" border="0" /></td><td><div><span class="atitle">JAXP 1.3 的新特性，第 2 部分</span></div><div><span class="atitle"><span class="atitle2">XPath 功能、支持名称空间的工具和其他改进</span></span></div></td></tr></tbody></table></div><div><a href="http://www-128.ibm.com/developerworks/cn/xml/x-jaxp13b.html">http://www-128.ibm.com/developerworks/cn/xml/x-jaxp13b.html</a></div><div><span class="atitle">JAXP 全面介绍，第 1 部分</span></div><div><span class="atitle"><span class="atitle2">XML 处理工具包使解析和验证变得更容易</span></span></div><div><a href="http://www-128.ibm.com/developerworks/cn/xml/x-jaxp/index.html">http://www-128.ibm.com/developerworks/cn/xml/x-jaxp/index.html</a></div><div> </div><div>Factory模式和Abstract Factory模式<a href="http://www-128.ibm.com/developerworks/cn/xml/jaxp/"></a></div><div><a href="http://www.netbei.com/Article/jsp/jsp6/200409/2771.html">http://www.netbei.com/Article/jsp/jsp6/200409/2771.html</a></div><div> </div><strong>Java中关于XML的API一瞥</strong><div><a href="http://www.matrix.org.cn/article/1073.html">http://www.matrix.org.cn/article/1073.html</a></div><div> </div><div> </div><br /><br /><p id="TBPingURL">Trackback: http://tb.donews.net/TrackBack.aspx?PostId=418679</p><img src ="http://www.blogjava.net/windforce/aggbug/72675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2006-09-28 21:03 <a href="http://www.blogjava.net/windforce/archive/2006/09/28/72675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sendRedirect VS forword</title><link>http://www.blogjava.net/windforce/archive/2006/09/17/70139.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Sun, 17 Sep 2006 07:06:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2006/09/17/70139.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/70139.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2006/09/17/70139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/70139.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/70139.html</trackback:ping><description><![CDATA[1.sendRedirect时，服务器端先响应客户端一个状态码（通常是302），告诉客户端应该向location报头指定的URL（可以是相对路径）重新发送请求。然后客户端按照指示进行第二次请求；<br />2.forward时，操作完全在服务器端进行，由服务器直接执行新的URL。客户端甚至毫不知情。<br />3.由于sendRedirect是由客户端自动请求的，所以客户的第一次的请求数据就不能得到保存；相反，在forward的情况，客户第一次的请求数据得到了保存，即在新的URL里能够得到原先的请求数据。<br />4.在相同的情况下，由于sendRedirect相当于客户的两次请求，所以forward的效率较sendRedirect要好。<br />5.sendRedirect()一定要在response对象,别的语言的头域输出没有输出正文时才能使用,因为按W3C标准,头域在在输出后是不许改变状态的,只有JSP和SERVLET可以改变它,而一但有正文输出,就会产生BUFFER阻塞.<br /><br />比如\r<br />&lt;%<br />out.println("sss");<br />response.sendRedirect("url");<br />%&gt;<br />这是错误的.或者在此之前有HTML<br />&lt;HTMLMWPW&gt;<br />&lt;%<br />response.sendRedirect("url");<br />%&gt;<br />这了是错误的,因为HTML内容也是out对象输出的,response对象已经被占用.这时应该用forward()才对.<br /><img src ="http://www.blogjava.net/windforce/aggbug/70139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2006-09-17 15:06 <a href="http://www.blogjava.net/windforce/archive/2006/09/17/70139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用的DOCUMENT.EXECCOMMAND </title><link>http://www.blogjava.net/windforce/archive/2006/09/14/69582.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Thu, 14 Sep 2006 03:05:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2006/09/14/69582.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/69582.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2006/09/14/69582.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/69582.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/69582.html</trackback:ping><description><![CDATA[&lt;input type=button value=剪切 onclick=document.execCommand('Cut')&gt;<br />&lt;input type=button value=拷贝 onclick=document.execCommand('Copy')&gt;<br />&lt;input type=button value=粘贴 onclick=document.execCommand('Paste')&gt;<br />&lt;input type=button value=撤消 onclick=document.execCommand('Undo')&gt;<br />&lt;input type=button value=重做 onclick=document.execCommand('Redo') id=button2 name=button2&gt;<br />&lt;input&gt;<br />&lt;input type=button value=删除 onclick=document.execCommand('Delete')&gt;<br />&lt;input type=button value=黑体 onclick=document.execCommand('Bold')&gt;<br />&lt;input type=button value=斜体 onclick=document.execCommand('Italic')&gt;<br />&lt;input type=button value=下划线 onclick=document.execCommand('Underline')&gt;<br />&lt;input type=button value=停止 onclick=document.execCommand('stop')&gt;<br />&lt;input type=button value=保存 onclick=document.execCommand('SaveAs')&gt;<br />&lt;input type=button value=另存为 onclick=document.execCommand('Saveas',false,'c:\\test.htm')&gt;<br />&lt;input type=button value=字体 onclick=document.execCommand('FontName',false,fn)&gt;<br />&lt;input type=button value=字体大小 onclick=document.execCommand('FontSize',false,fs)&gt;<br />&lt;input type=button value=刷新 onclick=document.execCommand('refresh',false,0)&gt; <br />只可在ie使用......<img src ="http://www.blogjava.net/windforce/aggbug/69582.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2006-09-14 11:05 <a href="http://www.blogjava.net/windforce/archive/2006/09/14/69582.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>40种网页常用小技巧(javascript) </title><link>http://www.blogjava.net/windforce/archive/2006/09/13/69420.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Wed, 13 Sep 2006 09:18:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2006/09/13/69420.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/69420.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2006/09/13/69420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/69420.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/69420.html</trackback:ping><description><![CDATA[
		<p>
				<span editor_id="mce_editor_0">1. oncontextmenu=window.event.returnValue=false 将彻底屏蔽鼠标右键<br />&lt;table border oncontextmenu=return(false)&gt;&lt;td&gt;no&lt;/table&gt; 可用于Table<br /><br />2. &lt;body onselectstart=return false&gt; 取消选取、防止复制<br /><br />3. onpaste=return false 不准粘贴<br /><br />4. oncopy=return false; oncut=return false; 防止复制<br /><br />5. &lt;link rel=Shortcut Icon href=favicon.ico&gt; IE地址栏前换成自己的图标<br /><br />6. &lt;link rel=Bookmark href=favicon.ico&gt; 可以在收藏夹中显示出你的图标<br /><br />7. &lt;input style=ime-mode:disabled&gt; 关闭输入法<br /><br />8. 永远都会带着框架<br />&lt;script language=<i>javascript</i>&gt;&lt;!--<br />if (window == top)top.location.href = frames.htm; //frames.htm为框架网页<br />// --&gt;&lt;/script&gt;<br /><br />9. 防止被人frame<br />&lt;SCRIPT LANGUAGE=<i>javascript</i>&gt;&lt;!-- <br />if (top.location != self.location)top.location=self.location;<br />// --&gt;&lt;/SCRIPT&gt;<br /><br />10. 网页将不能被另存为<br />&lt;noscript&gt;&lt;iframe src=*.html&gt;&lt;/iframe&gt;&lt;/noscript&gt; <br /><br />11. &lt;input type=button value=查看网页源代码 <br />onclick=window.location = view-source:+ http://www.pconline.com.cn&gt;<br /><br />12.删除时确认<br />&lt;a href=<i>javascript</i>:if(confirm(确实要删除吗?))location=boos.asp?&amp;areyou=删除&amp;page=1&gt;删除&lt;/a&gt; <br /><br />13. 取得控件的绝对位置<br />//<i>javascript</i><br />&lt;script language=<i>javascript</i>&gt;<br />function getIE(e){<br />var t=e.offsetTop;<br />var l=e.offsetLeft;<br />while(e=e.offsetParent){<br />t+=e.offsetTop;<br />l+=e.offsetLeft;<br />}<br />alert(top=+t+/nleft=+l);<br />}<br />&lt;/script&gt;<br /><br />//VBScript<br />&lt;script language=VBScript&gt;&lt;!--<br />function getIE()<br />dim t,l,a,b<br />set a=document.all.img1<br />t=document.all.img1.offsetTop<br />l=document.all.img1.offsetLeft<br />while a.tagName&lt;&gt;BODY<br />set a = a.offsetParent<br />t=t+a.offsetTop<br />l=l+a.offsetLeft<br />wend<br />msgbox top=&amp;t&amp;chr(13)&amp;left=&amp;l,64,得到控件的位置<br />end function<br />--&gt;&lt;/script&gt;<br /><br />14. 光标是停在文本框文字的最后<br />&lt;script language=<i>javascript</i>&gt;<br />function cc()<br />{<br />var e = event.srcElement;<br />var r =e.createTextRange();<br />r.moveStart(character,e.value.length);<br />r.collapse(true);<br />r.select();<br />}<br />&lt;/script&gt;<br />&lt;input type=text name=text1 value=123 onfocus=cc()&gt;<br /><br />15. 判断上一页的来源<br /><i>javascript</i>:<br />document.referrer<br /><br />16. 最小化、最大化、关闭窗口<br />&lt;object id=hh1 classid=clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11&gt; <br />&lt;param name=Command value=Minimize&gt;&lt;/object&gt;<br />&lt;object id=hh2 classid=clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11&gt; <br />&lt;param name=Command value=Maximize&gt;&lt;/object&gt;<br />&lt;OBJECT id=hh3 classid=clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11&gt;<br />&lt;PARAM NAME=Command VALUE=Close&gt;&lt;/OBJECT&gt;<br />&lt;input type=button value=最小化 onclick=hh1.Click()&gt;<br />&lt;input type=button value=最大化 onclick=hh2.Click()&gt;<br />&lt;input type=button value=关闭 onclick=hh3.Click()&gt;<br />本例适用于IE<br /><br />17.屏蔽功能键Shift,Alt,Ctrl<br />&lt;script&gt;<br />function look(){ <br />if(event.shiftKey) <br />alert(禁止按Shift键!); //可以换成ALT　CTRL<br />} <br />document.onkeydown=look; <br />&lt;/script&gt;<br /><br />18. 网页不会被缓存<br />&lt;META HTTP-EQUIV=pragma CONTENT=no-cache&gt;<br />&lt;META HTTP-EQUIV=Cache-Control CONTENT=no-cache, must-revalidate&gt;<br />&lt;META HTTP-EQUIV=expires CONTENT=Wed, 26 Feb 1997 08:21:57 GMT&gt;<br />或者&lt;META HTTP-EQUIV=expires CONTENT=0&gt;<br /><br />19.怎样让表单没有凹凸感？<br />&lt;input type=text style=border:1 solid #000000&gt; <br />或<br />&lt;input type=text style=border-left:none; border-right:none; border-top:none; border-bottom: <br /><br />1 solid #000000&gt;&lt;/textarea&gt;<br /><br />20.&lt;div&gt;&lt;span&gt;&amp;&lt;layer&gt;的区别？ <br />&lt;div&gt;(division)用来定义大段的页面元素，会产生转行 <br />&lt;span&gt;用来定义同一行内的元素，跟&lt;div&gt;的唯一区别是不产生转行 <br />&lt;layer&gt;是ns的标记，ie不支持，相当于&lt;div&gt;<br /><br />21.让弹出窗口总是在最上面:<br />&lt;body onblur=this.focus();&gt;<br /><br />22.不要滚动条? <br />让竖条没有: <br />&lt;body style=overflow:scroll;overflow-y:hidden&gt; <br />&lt;/body&gt; <br />让横条没有: <br />&lt;body style=overflow:scroll;overflow-x:hidden&gt; <br />&lt;/body&gt; <br />两个都去掉？更简单了 <br />&lt;body scroll=no&gt; <br />&lt;/body&gt; <br /><br />23.怎样去掉图片链接点击后，图片周围的虚线？<br />&lt;a href=# onFocus=this.blur()&gt;&lt;img src=logo.jpg border=0&gt;&lt;/a&gt;<br /><br />24.电子邮件处理提交表单<br />&lt;form name=form1 method=post action=mailto:****@***.com enctype=text/plain&gt; <br />&lt;input type=submit&gt;<br />&lt;/form&gt;<br /><br />25.在打开的子窗口刷新父窗口的代码里如何写？<br />window.opener.location.reload()<br /><br />26.如何设定打开页面的大小<br />&lt;body onload=top.resizeTo(300,200);&gt;<br />打开页面的位置&lt;body onload=top.moveBy(300,200);&gt;<br /><br />27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动 <br />&lt;STYLE&gt; <br />body <br />{background-image:url(logo.gif); background-repeat:no-repeat; <br />background-position:center;background-attachment: fixed} <br />&lt;/STYLE&gt; <br /><br />28. 检查一段字符串是否全由数字组成<br />&lt;script language=<i>javascript</i>&gt;&lt;!--<br />function checkNum(str){return str.match(//D/)==null}<br />alert(checkNum(1232142141))<br />alert(checkNum(123214214a1))<br />// --&gt;&lt;/script&gt;<br /><br />29. 获得一个窗口的大小<br />document.body.clientWidth; document.body.clientHeight<br /><br />30. 怎么判断是否是字符<br />if (/[^/x00-/xff]/g.test(s)) alert(含有汉字);<br />else alert(全是字符);<br /><br />31.TEXTAREA自适应文字行数的多少<br />&lt;textarea rows=1 name=s1 cols=27 onpropertychange=this.style.posHeight=this.scrollHeight&gt;<br />&lt;/textarea&gt;<br />32. 日期减去天数等于第二个日期<br />&lt;script language=<i>javascript</i>&gt;<br />function cc(dd,dadd)<br />{<br />//可以加上错误处理<br />var a = new Date(dd)<br />a = a.valueOf()<br />a = a - dadd * 24 * 60 * 60 * 1000<br />a = new Date(a)<br />alert(a.getFullYear() + 年 + (a.getMonth() + 1) + 月 + a.getDate() + 日)<br />}<br />cc(12/23/2002,2)<br />&lt;/script&gt;<br /><br />33. 选择了哪一个Radio<br />&lt;HTML&gt;&lt;script language=vbscript&gt;<br />function checkme()<br />for each ob in radio1<br />if ob.checked then window.alert ob.value<br />next<br />end function<br />&lt;/script&gt;&lt;BODY&gt;<br />&lt;INPUT name=radio1 type=radio value=style checked&gt;Style<br />&lt;INPUT name=radio1 type=radio value=barcode&gt;Barcode<br />&lt;INPUT type=button value=check onclick=checkme()&gt;<br />&lt;/BODY&gt;&lt;/HTML&gt;<br /><br />34.脚本永不出错<br />&lt;SCRIPT LANGUAGE=<i>javascript</i>&gt; <br />&lt;!-- Hide <br />function killErrors() { <br />return true; <br />} <br />window.onerror = killErrors; <br />// --&gt; <br />&lt;/SCRIPT&gt;<br /><br />35.ENTER键可以让光标移到下一个输入框<br />&lt;input onkeydown=if(event.keyCode==13)event.keyCode=9&gt;<br /><br />36. 检测某个网站的链接速度：<br />把如下代码加入&lt;body&gt;区域中:<br />&lt;script language=<i>javascript</i>&gt;<br />tim=1<br />setInterval(tim++,100)<br />b=1<br />var autourl=new Array()<br />autourl[1]=www.njcatv.net<br />autourl[2]=javacool.3322.net<br />autourl[3]=www.sina.com.cn<br />autourl[4]=www.nuaa.edu.cn<br />autourl[5]=www.cctv.com<br />function butt(){<br />document.write(&lt;form name=autof&gt;)<br />for(var i=1;i&lt;autourl.length;i++)<br />document.write(&lt;input type=text name=txt+i+ size=10 value=测试中……&gt; =》&lt;input type=text <br />name=url+i+ size=40&gt; =》&lt;input type=button value=GO <br /><br />onclick=window.open(this.form.url+i+.value)&gt;&lt;br&gt;)<br />document.write(&lt;input type=submit value=刷新&gt;&lt;/form&gt;)<br />}<br />butt()<br />function auto(url){<br />document.forms[0][url+b].value=url<br />if(tim&gt;200)<br />{document.forms[0][txt+b].value=链接超时}<br />else<br />{document.forms[0][txt+b].value=时间+tim/10+秒}<br />b++<br />}<br />function run(){for(var i=1;i&lt;autourl.length;i++)document.write(&lt;img src=http://+autourl+/+Math.random()+ width=1 height=1 <br /><br />onerror=auto(http://+autourl+)&gt;)}<br />run()&lt;/script&gt;<br /><br />37. 各种样式的光标<br />auto ：标准光标<br />default ：标准箭头<br />hand ：手形光标<br />wait ：等待光标<br />text ：I形光标<br />vertical-text ：水平I形光标<br />no-drop ：不可拖动光标<br />not-allowed ：无效光标<br />help ：?帮助光标<br />all-scroll ：三角方向标<br />move ：移动标<br />crosshair ：十字标<br />e-resize<br />n-resize<br />nw-resize<br />w-resize<br />s-resize<br />se-resize<br />sw-resize<br /><br />38.页面进入和退出的特效<br />进入页面&lt;meta http-equiv=Page-Enter content=revealTrans(duration=x, transition=y)&gt;<br />推出页面&lt;meta http-equiv=Page-Exit content=revealTrans(duration=x, transition=y)&gt; <br />这个是页面被载入和调出时的一些特效。duration表示特效的持续时间，以秒为单位。transition表示使用哪种特效，取值为1-23:<br />　　0 矩形缩小 <br />　　1 矩形扩大 <br />　　2 圆形缩小<br />　　3 圆形扩大 <br />　　4 下到上刷新 <br />　　5 上到下刷新<br />　　6 左到右刷新 <br />　　7 右到左刷新 <br />　　8 竖百叶窗<br />　　9 横百叶窗 <br />　　10 错位横百叶窗 <br />　　11 错位竖百叶窗<br />　　12 点扩散 <br />　　13 左右到中间刷新 <br />　　14 中间到左右刷新<br />　　15 中间到上下<br />　　16 上下到中间 <br />　　17 右下到左上<br />　　18 右上到左下 <br />　　19 左上到右下 <br />　　20 左下到右上<br />　　21 横条 <br />　　22 竖条 <br />　　23 以上22种随机选择一种<br /><br />39.在规定时间内跳转<br />&lt;META http-equiv=V=REFRESH content=5;URL=http://www.51js.com&gt; <br /><br />40.网页是否被检索<br />&lt;meta name=ROBOTS content=属性值&gt;<br />　　其中属性值有以下一些:<br />　　属性值为all: 文件将被检索，且页上链接可被查询；<br />　　属性值为none: 文件不被检索，而且不查询页上的链接；<br />　　属性值为index: 文件将被检索；<br />　　属性值为follow: 查询页上的链接；<br />　　属性值为noindex: 文件不检索，但可被查询链接；<br />　　属性值为nofollow: 文件不被检索，但可查询页上的链接。<br /></span>
		</p>
<img src ="http://www.blogjava.net/windforce/aggbug/69420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2006-09-13 17:18 <a href="http://www.blogjava.net/windforce/archive/2006/09/13/69420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts下解决乱码一法</title><link>http://www.blogjava.net/windforce/archive/2006/09/13/69323.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Wed, 13 Sep 2006 02:51:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2006/09/13/69323.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/69323.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2006/09/13/69323.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/69323.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/69323.html</trackback:ping><description><![CDATA[新建一个SetCharacterEncodingServlet的类（继承ActionServlet）,重写process()方法。如下示：<br />          protected void process(HttpServletRequest request,<br />            HttpServletResponse response) throws java.io.IOException,<br />            javax.servlet.ServletException<br />          {<br />                request.setCharacterEncoding("UTF-8");<br />              super.process(request, response);<br />            }<br />在web.xml中部署ActionServlet。<br />&lt;servlet&gt;<br />    &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />    &lt;servlet-class&gt;com..util.UTF8ActionServlet&lt;/servlet-class&gt;<br />    &lt;init-param&gt;<br />      &lt;param-name&gt;config&lt;/param-name&gt;<br />      &lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br />     &lt;init-param&gt;<br />      &lt;param-name&gt;debug&lt;/param-name&gt;<br />      &lt;param-value&gt;3&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br />    &lt;init-param&gt;<br />      &lt;param-name&gt;detail&lt;/param-name&gt;<br />      &lt;param-value&gt;3&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br />    &lt;load-on-startup&gt;0&lt;/load-on-startup&gt;<br />  &lt;/servlet&gt;<br /><br />   &lt;servlet-mapping&gt;<br />    &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />    &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;<br />   &lt;/servlet-mapping&gt;<img src ="http://www.blogjava.net/windforce/aggbug/69323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2006-09-13 10:51 <a href="http://www.blogjava.net/windforce/archive/2006/09/13/69323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于commons-fileupload组件中文乱码的问题</title><link>http://www.blogjava.net/windforce/archive/2006/09/13/69313.html</link><dc:creator>风之力</dc:creator><author>风之力</author><pubDate>Wed, 13 Sep 2006 02:07:00 GMT</pubDate><guid>http://www.blogjava.net/windforce/archive/2006/09/13/69313.html</guid><wfw:comment>http://www.blogjava.net/windforce/comments/69313.html</wfw:comment><comments>http://www.blogjava.net/windforce/archive/2006/09/13/69313.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/windforce/comments/commentRss/69313.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windforce/services/trackbacks/69313.html</trackback:ping><description><![CDATA[
		<p>    在使用commons-fileupload组件过程中，刚开始出现乱码并没有在意。加了一个过滤器，编码全部UTF-8,OK!进行调试,出来还是乱码，我倒！改成gb2312，结果竟然好了，文件名、输出都是中文<br />    后来经过再研究过后，发现commons-fileupload的DiskFileUpload有一个setHeadEncoding的方法，在获取文件名的时候是要用到的。如果没有设置，就使用默认的gb2312编码。<br />   setHeadEncoding("UTF-8")，调试一切ok。</p>
<img src ="http://www.blogjava.net/windforce/aggbug/69313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windforce/" target="_blank">风之力</a> 2006-09-13 10:07 <a href="http://www.blogjava.net/windforce/archive/2006/09/13/69313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>