<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>garydo</title>
    <description>简单就是最好的</description>
    <link>http://garydo.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>fckeditor2.6 for jsp 配置方法</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/226595" style="color:red;">http://garydo.javaeye.com/blog/226595</a>&nbsp;
          发表时间: 2008年08月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1、首先登陆www.fckeditor.net/download下载FCKeditor的最新版本，需要下载2个压缩包，一个是基本应用，另一个是在为在jsp下所准备的配置。<br /><br />      FCKeditor 2.6 下载地址：sourceforge.net/project/downloading.php<br /><br />      FCKeditor.Java 下载地址：sourceforge.net/project/downloading.php<br /><br />下载之后分别为：FCKeditor_2.6.zip 和 FCKeditor-2.3.zip 将它们分别解压。<br /><br /> <br /><br />2、首先在Eclipse下建立一个新项目例如：test    即http://localhost:8080/test<br /><br />     在项目中新建文件夹 FCKeditor，然后将解压后的FCKeditor_2.6下fckeditor里面的editor、fckconfig.js、fckeditor.js、fckstyles.xml、fcktemplates.xml拷贝到FCKeditor目录下<br /><br />      将解压后的FCKeditor-2.3文件夹中web/WEB-INF/lib下的包拷贝到test项目的lib中。<br /><br />      将FCKeditor-2.3文件夹下src下的FCKeditor.tld拷贝到test项目的WEB-INF下。<br />3、将WEB-INF下的web.xml 加入如下内容：<br /><pre name="code" class="xml">
&lt;strong>     &lt;servlet>
       &lt;servlet-name>Connector&lt;/servlet-name>
       &lt;servlet-class>com.fredck.FCKeditor.connector.ConnectorServlet&lt;/servlet-class>
       &lt;init-param>
           &lt;param-name>baseDir&lt;/param-name>
           &lt;param-value>/UserFiles/&lt;/param-value>
       &lt;/init-param>
       &lt;init-param>
           &lt;param-name>debug&lt;/param-name>
           &lt;param-value>true&lt;/param-value>
       &lt;/init-param>
       &lt;load-on-startup>1&lt;/load-on-startup>
   &lt;/servlet>

   &lt;servlet>
       &lt;servlet-name>SimpleUploader&lt;/servlet-name>
       &lt;servlet-class>com.fredck.FCKeditor.uploader.SimpleUploaderServlet&lt;/servlet-class>
       &lt;init-param>
           &lt;param-name>baseDir&lt;/param-name>
           &lt;param-value>/UserFiles/&lt;/param-value>
       &lt;/init-param>
       &lt;init-param>
           &lt;param-name>debug&lt;/param-name>
           &lt;param-value>true&lt;/param-value>
       &lt;/init-param>
       &lt;init-param>
           &lt;param-name>enabled&lt;/param-name>
           &lt;param-value>true&lt;/param-value>
       &lt;/init-param>
       &lt;init-param>
           &lt;param-name>AllowedExtensionsFile&lt;/param-name>
           &lt;param-value>&lt;/param-value>
       &lt;/init-param>
       &lt;init-param>
           &lt;param-name>DeniedExtensionsFile&lt;/param-name>
           &lt;param-value>php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi&lt;/param-value>
       &lt;/init-param>
       &lt;init-param>
           &lt;param-name>AllowedExtensionsImage&lt;/param-name>
           &lt;param-value>jpg|gif|jpeg|png|bmp&lt;/param-value>
       &lt;/init-param>
       &lt;init-param>
           &lt;param-name>DeniedExtensionsImage&lt;/param-name>
           &lt;param-value>&lt;/param-value>
       &lt;/init-param>
       &lt;init-param>
           &lt;param-name>AllowedExtensionsFlash&lt;/param-name>
           &lt;param-value>swf|fla&lt;/param-value>
       &lt;/init-param>
       &lt;init-param>
           &lt;param-name>DeniedExtensionsFlash&lt;/param-name>
           &lt;param-value>&lt;/param-value>
       &lt;/init-param>
       &lt;load-on-startup>1&lt;/load-on-startup>
   &lt;/servlet>

&lt;servlet-mapping>
    &lt;servlet-name>Connector&lt;/servlet-name>
    &lt;url-pattern>/FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector&lt;/url-pattern>
&lt;/servlet-mapping>

&lt;servlet-mapping>
    &lt;servlet-name>SimpleUploader&lt;/servlet-name>
    &lt;url-pattern>/FCKeditor/editor/filemanager/upload/simpleuploader&lt;/url-pattern>
&lt;/servlet-mapping>&lt;/strong>

</pre><br /> 4、修改FCKeditor文件夹下的fckeditor.js<br /><br /> <br /><br />      修改第50行的FCKeditor.BasePath。<br /><br />改之后：<br /><pre name="code" class="xml">
50 FCKeditor.BasePath = 'FCKeditor/' ;
</pre><br />5、修改FCKeditor文件夹下的fckconfig.js<br /><br />     修改FCKConfig.DefaultLanguage、FCKConfig.LinkBrowserURL、FCKConfig.ImageBrowserURL、FCKConfig.FlashBrowserURL、<br /><br />改之后：<br /><pre name="code" class="xml">
FCKConfig.DefaultLanguage   = 'zh-cn' ;

FCKConfig.LinkBrowserURL = FCKConfig.BasePath + "filemanager/browser/default/browser.html?Connector=connectors/jsp/connector" ;

FCKConfig.ImageBrowserURL = FCKConfig.BasePath + "filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector" ;

FCKConfig.FlashBrowserURL = FCKConfig.BasePath + "filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/jsp/connector" ;

FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=File' ;

FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Image' ;

FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Flash' ;

</pre><br />6、default.jsp内容如下：<br /><pre name="code" class="html">
&lt;%@ page language="java" contentType="text/html; charset=gb2312"
	pageEncoding="gb2312"%>
&lt;%@ taglib prefix="s" uri="/struts-tags"%>
&lt;%@ taglib prefix="fck" uri="/WEB-INF/FCKeditor.tld"%>
&lt;%request.setCharacterEncoding("gb2312");%>
&lt;html>
&lt;head>
&lt;title>新闻管理&lt;/title>
&lt;body>
&lt;form name="gamenewsform" method="post" >
&lt;table cellpadding="2" cellspacing="1" border="0" width="100%"
	align="center">
	
	&lt;tr>
		&lt;td width="19%" align="right" class='td1'>&lt;strong> 新闻标题：&lt;/strong>&lt;font
			color='#FF0000'>*&lt;/font>&lt;/td>
		&lt;td width="81%" class='td1'>&lt;input name='productName' type='text'
			size='40'>&lt;span id="check2">&lt;/span>&lt;/td>
	&lt;/tr>

	
	&lt;tr>
		&lt;td width="19%" align="right" class='td1'>&lt;strong> 文章内容：&lt;/strong>&lt;font
			color='#FF0000'>*&lt;/font>&lt;/td>
		&lt;td width="81%" class='td1'>&lt;fck:editor id="contentinfo"
			height="400" width="100%" toolbarSet="Default"
			imageBrowserURL="../filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector"
			linkBrowserURL="../filemanager/browser/default/browser.html?Connector=connectors/jsp/connector"
			flashBrowserURL="../filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/jsp/connector"
			imageUploadURL="../filemanager/upload/simpleuploader?Type=Image"
			linkUploadURL="../filemanager/upload/simpleuploader?Type=File"
			flashUploadURL="../filemanager/upload/simpleuploader?Type=Flash">
		&lt;/fck:editor> &lt;span id="check4">&lt;/span>&lt;/td>
	&lt;/tr>
	

	&lt;tr align="center">
		&lt;td colspan="2" class='td1'>&lt;input type='button' value=' 添 加 '
			onclick='dosubmit()'> &lt;input type="button" value=" 取 消 "
			onclick="window.location.href='shopinfo_selectShopInfoNews.action'">&lt;/td>
	&lt;/tr>
&lt;/table>
&lt;/form>
&lt;/html>

</pre><br />7，如果你使用的是struts2.0框架。上传图片则会报错，如下：<br /><pre name="code" class="java">java.lang.NullPointerException
	at com.fredck.FCKeditor.uploader.SimpleUploaderServlet.doPost(SimpleUploaderServlet.java:142)</pre><br />这是struts2.0拦截器的问题，将web.xml 文件下的：<br /><pre name="code" class="java">
&lt;!-- FilterDispatcher用来初始化Struts2 并且处理所用的web请求 -->
	&lt;filter-mapping>
		&lt;filter-name>struts2&lt;/filter-name>
		&lt;url-pattern>/*&lt;/url-pattern>
	&lt;/filter-mapping>
</pre><br />改为<br /><pre name="code" class="java">
&lt;!-- FilterDispatcher用来初始化Struts2 并且处理所用的web请求 -->
	&lt;filter-mapping>
		&lt;filter-name>struts2&lt;/filter-name>
		&lt;url-pattern>*.action&lt;/url-pattern>
		&lt;url-pattern>*.jsp&lt;/url-pattern>
	&lt;/filter-mapping>
</pre><br />OK！！可以上传了！！！
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/226595#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 11 Aug 2008 14:04:37 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/226595</link>
        <guid>http://garydo.javaeye.com/blog/226595</guid>
      </item>
      <item>
        <title>powerDesigner设定identity类型快捷方式</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/225120" style="color:red;">http://garydo.javaeye.com/blog/225120</a>&nbsp;
          发表时间: 2008年08月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          工具这个东西就是不用则手生！还是找个地方记录下，比较好哦！<br />A。自增长类型增加<br />1.如果dbms是MsSql,则选定表后，database-> edit   current   dbms-> 出现DBMS   properties对话框，选择General页，左侧的树选择SQL   2000-> Profile-> Column-> Extended   Attributes   下面的ExtIdentityIncrement是步进值，ExtIdentitySeed是起始值，分别设定默认值，后返回。<br />2.在表的属性对话框里面，选择Clumns页，按Ctrl+U,在Idenitity前面打上钩。如有必要，也可以将ExtIdentityIncrement和ExtIdentitySeed也打上勾，这样在设定Idenitity时也可以直接指定起始值和步进值了。 <br />B。。。。。
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/225120#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 06 Aug 2008 16:53:41 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/225120</link>
        <guid>http://garydo.javaeye.com/blog/225120</guid>
      </item>
      <item>
        <title>全国最爆笑的人名</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/219500" style="color:red;">http://garydo.javaeye.com/blog/219500</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          全国最爆笑的人名如下：<br />刘产  <br />杨伟  <br />赖月京(还是个男的)  <br />范剑  <br />姬从良  <br />范统  <br />夏建仁  <br />朱逸群  <br />秦寿生(亏他父母想的出)  <br />庞光  <br />杜琦燕  <br />魏生津  <br />矫厚根  <br />沈京兵<br />毕云涛<br />杜子腾
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/219500#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 13:49:29 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/219500</link>
        <guid>http://garydo.javaeye.com/blog/219500</guid>
      </item>
      <item>
        <title>xisoso回来了哦</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/219387" style="color:red;">http://garydo.javaeye.com/blog/219387</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          xisoso<br />差不多停了一年了吧？<br /><br />这个网站曾经是我最喜欢的搜索，整合了百度，GOOGLE，YAHOO搜索结果，找资料挺方便的，而且还整合博客搜，RSS搜，我觉得是大陆最好的元搜索（呵呵！！），我还在XISOSO收藏好多东东呢，本来都以为找不回来咯。昨天偶然连了下xisoso网站，竟然发现可以进入了，页面还是那个老样子，不知道这个运营商怎末想的，停了一年界面也不变化。输入用户名密码，嘿还能进去，看来这个运营商还保存了偶的信息。登录进去我收藏的信息还在。<br /><br />谢天谢地！
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/219387#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 11:16:31 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/219387</link>
        <guid>http://garydo.javaeye.com/blog/219387</guid>
      </item>
      <item>
        <title>linux中查询raid信息</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/219321" style="color:red;">http://garydo.javaeye.com/blog/219321</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          有些情况下系统不是自己装的，raid也不是自己配置的，远程登录系统后可能就不知道系统是否有做raid，raid级别？因此稍微总结一下Linux下查看软、硬raid信息的方法。<br /><br />软件raid：只能通过Linux系统本身来查看<br /><br />cat /proc/mdstat<br /><br />可以看到raid级别，状态等信息。<br /><br />硬件raid： 最佳的办法是通过已安装的raid厂商的管理工具来查看，有cmdline，也有图形界面。如Adaptec公司的硬件卡就可以通过下面的命令进行查看：<br /><br /># /usr/dpt/raidutil -L all<br /><br />可以看到非常详细的信息。<br /><br />当然更多情况是没有安装相应的管理工具，只能依靠Linux本身的话一般我知道的是两种方式：<br /><br /><strong># dmesg |grep -i raid<br /><br /># cat /proc/scsi/scsi<br /></strong><br />上面这两个命令很有用哦！<br />显示的信息差不多，raid的厂商，型号，级别，但无法查看各块硬盘的信息。<br /><br />另外经过实际测试，Dell的服务器可以通过命令来显示，而HP、IBM等的服务器通过上面的命令是显示不出的。只能够通过装硬件厂商的管理工具来查看
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/219321#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 09:17:05 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/219321</link>
        <guid>http://garydo.javaeye.com/blog/219321</guid>
      </item>
      <item>
        <title>又遇到了同样的问题linux java图形显示</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/218267" style="color:red;">http://garydo.javaeye.com/blog/218267</a>&nbsp;
          发表时间: 2008年07月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Java在图形处理时调用了本地的图形处理库。在利用Java作图形处理（比如：图片缩放，图片签名，生成报表）时，如果运行在windows上不会出问题。如果将程序移植到Linux/Unix上的时候有可能出现图形不能显示的错误。 <br /><br /><span style="color: orange">提示信息："Can't connect to X11 window server"这是由于Linux的图形处理需要一个X Server服务器。<br /></span><br /><br />解决办法：<br />1.如果服务器上安装有图形界面，可以通过设置环境变量：DISPALY=127.0.0.1:0.0解决。<br />2.如果没有安装图形界面，可以在Java运行时加上参数：-Djava.awt.headless=true。<br />3.使用PJA库来代替本地图形处理库。<br /><br />Tomcat的修改如下：<br />打开 %Tomcat_home%/bin/catalina.sh 文件在文件的86%处，启动Tomcat的脚本中加上:-Djava.awt.headless=true \ <br /><br />添加位置在这里：（使用vim 打开文件，直接用/stop定位，很容易找到的哦）<br /><br /><strong>RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \<br />-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS"<br />-classpath "$CLASSPATH" \<br />-Dcatalina.base="$CATALINA_BASE" \<br />-Dcatalina.home="$CATALINA_HOME" \<br />-Djava.io.tmpdir="$CATALINA_TMPDIR" \<br />-Djava.awt.headless=true \<br />org.apache.catalina.startup.Bootstrap "$@" start \<br />>> "$CATALINA_BASE"/logs/catalina.out 2>&1 &<br />if [ ! -z "$CATALINA_PID" ]; then<br />echo $! > $CATALINA_PID fi<br />fielif [ "$1" = "stop" ] ; then</strong><br /><br /><br />保存后，重新启动就可以处理图形了。
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/218267#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Jul 2008 16:48:14 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/218267</link>
        <guid>http://garydo.javaeye.com/blog/218267</guid>
      </item>
      <item>
        <title>30个为网页设计者和开发人员精选的Firefox扩展插件</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/217352" style="color:red;">http://garydo.javaeye.com/blog/217352</a>&nbsp;
          发表时间: 2008年07月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Dejan Cancarevic是一名优秀的网页设计者和开发人员，下面他精选了30个他经常使用的Firefox插件，这些插件都能很好的帮助网页设计者和开发人员，简化工作量，或是增加设计应用功能等等。<br /><br />1. CSSMate - 在线的CSS编辑器扩展插件<br /><br />2. ViewSourceWith - 让你查看页面资源的Firefox扩展应用<br /><br />3. PicLens - 变换你的浏览器为一个三维的浏览环境来查看网页图片的Firefox扩展插件<br /><br />4. FireShot -强大的网页截图/截屏插件<br /><br />5. SeoQuake - 搜索引擎优化和网站推广插件<br /><br />6. Font Finder -简单的高亮一个事件并且左键点击弹出菜单可以查看CSS样式<br /><br />7. Live HTTP Headers - 在浏览网页的同时查看一个页面的HTTP头部信息<br /><br />8. Modify Headers - 允许你添加、修改或过滤http头部请求信息的Firefox扩展插件<br /><br />9. CSSViewer -一个简单实用的扩张，可以让你查看当前网页中任何部分的CSS代码<br /><br />10. EditCSS - 只需要右键点击就可以在浏览器的侧边栏中查看和编辑样式表代码<br /><br />11. Firebug - 查看，编辑和跟踪 网页上面的CSS, HTML和Javascript的Firefox插件<br /><br />12. View Formatted Source -为网页上的每一个元素格式化并使用不同的颜色高亮显示<br /><br />13. Professor X -让你不看源代码就能看到页面头部信息的Firefox插件<br /><br />14. CSS validator - 一键检查当前网页是否符合W3C CSS 标准的验证器插件<br /><br />15. Validaty -提供给你一个类似于validator.w3.org的校验器按钮<br /><br />16. Html Validator - 添加HTML校验器<br /><br />17. Copy as HTML Link -给选中的文本创建一个当前页面的HTML链接<br /><br />18. TableTools - 过滤、排序 HTML表格等的Firefox扩展插件<br /><br />19. CHM Reader - 让Firefox支持HTML编译文件的Firefox扩展插件<br /><br />20. PageDiff - 帮助网页设计者和开发人员在不同的网页之前查看页面源代码<br /><br />21. Clipmarks - 让你保存当前页面中的任何元素的Firefox插件<br /><br />22. SourceEditor - 查看和编辑HTML元素代码的Firefox扩展插件<br /><br />23. Total Validator -使用官方DTDs提供一个真正的HTML检查器的Firefox扩展插件<br /><br />24. LinkChecker - 检查任何网页上面的有效链接的Firefox扩展插件<br /><br />25. Web Developer - 添加一个菜单和工具栏，包含各种网页开发工具的Firefox扩展插件<br /><br />26. Style Sheet Chooser II - 让你选择网站作者为网站提供的候补风格的Firefox扩展插件<br /><br />27. View Dependencies -显示网页上面所有被装载的元素信息的Firefox扩展插件<br /><br />28. Accessibar - 可以轻松地操纵网页显示和文本语音输出的Firefox扩展插件<br /><br />29. Aardvark - 用来清楚网页的冗余信息和打印网页等功能的Firefox扩展插件<br /><br />30. JSview - 添加能够查看外部档案源代码的功能
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/217352#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jul 2008 22:02:46 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/217352</link>
        <guid>http://garydo.javaeye.com/blog/217352</guid>
      </item>
      <item>
        <title>firefox23个扩展</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/216833" style="color:red;">http://garydo.javaeye.com/blog/216833</a>&nbsp;
          发表时间: 2008年07月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          * Cache Status 0.7.1<br />      这个插件可以实时看到Cache的大小（软、硬），也可以实时清空Cache。<br />    * Copy Link Name 1.2.4<br />      复制连接文本，减少误点击（当很多密集连接出现的时候，我们往往无法复制连接文本，而会点击上去）<br />    * CSSViewer 1.0.2<br />      看具体DOM的CSS，Web开发者可以用。<br />    * CustomizeGoogle 0.59<br />      让Google按照你的方式工作：）<br />    * Download Statusbar 0.9.4.6<br />      这个插件好处在于可以很方便地管理下载的文件。由于FF本身的下载机制比较优秀，以及很多时候我们没有必要打开Flashget或者Gigaget(讯雷)，因此用这样一个小东西来管理下载文件，非常方便实用。<br />    * Firebug 1.05<br />      调试JS的利器，同时也可进行一些简单的DOM Hook。特爽。<br />      唯一的缺陷就是狂吃资源，如果不是Debug时间，最好把它disable掉<br />    * FireFTP 0.96.4<br />      上FTP的，很多人推荐，不过我倒是不怎么用。<br />    * FLV Downloader 1.1<br />      这个是由我的同门师弟quchao开发的，非常不错的一个插件，可以方便地下载很多视频网站的节目，可以去www.quchao.com找到。<br />    * Greasemonkey 0.6.8.20070314.0<br />      自定义网页JavaScript。这个插件能极大提高专业人士的工作效率（例如你老是需要处理一些繁杂的客户信息）。<br />    * Header Spy 1.2.1<br />      看看人家用了什么Server：） - 虽然有Firebug等强大的debug插件，我仍然很喜爱。<br />    * IE Tab 1.3.2.20070404<br />      没什么好说的，这个插件让我的IE彻底死亡<br />    * InFormEnter 0.5.3<br />      自动填写表单。例如可以自动填写你的姓名，你的Email，包括你复杂的密码。非常方便，可惜在FF2.0下面，快捷键Ins似乎失效了，我至今也没有找到解决方法，不知道有没有知道的xdjm~<br />    * JSView 1.2.9<br />      我人为非常重要的，可以查看当前页面的外埠js和css，这对开发者来说很重要。<br />    * Live HTTP Headers 0.13.1<br />      跟Header Spy很像<br />    * MM3-ProxySwitch 2007.20<br />      代理必备，不多说了：）<br />    * MR Tech Local Install 5.3.2.3<br />      这就是产生当前插件列表的软件了，感谢Colin推荐：）<br />    * Pearl Crescent Page Saver Basic 1.4<br />      非常好的网页抓图软件。这下我再也不用去找那些五花八门的网页抓图软件了(有一个抓图工具害我死机n次)<br />    * Regular Expressions Tester 1.0.8.9<br />      嘿嘿，以后写正则表达式不用愁了。<br />    * SearchStatus 1.18<br />      好东西，迅速查看PR和Alexa，虽然这俩东西都是浮云，但我想坚持不懈的努力换来的进步是对人最好的鼓励。<br />    * SeoQuake 1.4.1<br />      站长必备，我的看法。<br />    * Stylish 0.4<br />      纯娱乐，没什么实际意义，鸡肋。<br />    * View Source Chart 2.5.02<br />      看DOM Chart，建议Web开发者使用<br />    * Web Developer 1.1.3<br />      功能上可能跟Firebug有一些重叠，但是也很强大<br /><br />Disabled Extensions: [2]<br /><br />    * Browser Statistics 1.0<br />    * Talkback 2.0.0.3<br /><br />Total Extensions: 26<br /><br />Installed Themes: [2]<br /><br />    * Firefox (default)<br />    * miniFoxFlat 0.4.3<br /><br />Installed Plugins: (15)<br /><br />    * 2007 Microsoft Office system<br />    * Adobe Acrobat<br />    * IE Tab Plug-in<br />    * Java(TM) 2 Platform Standard Edition 5.0 Update 6<br />    * Microsoft Office 2003<br />    * Microsoft? DRM<br />    * Mozilla ActiveX control plugin support by Mozine China<br />    * Mozilla Default Plug-in<br />    * QuickTime Plug-in 7.1.5<br />    * RealJukebox NS Plugin<br />    * RealPlayer Version Plugin<br />    * RealPlayer(tm) G2 LiveConnect-Enabled Plug-In (32-bit)<br />    * Shockwave Flash<br />    * Windows Media Player Plug-in Dynamic Link Library<br />    * WPFe Plug-In<br /><br />其他朋友们的插件一览～<br /><br />Fdream<br />http://www.afdream.com/blog/blogview.asp?logID=423<br /><br />ColinBear<br />http://bearcolin.sitesled.com/2006/11/firefox.html<br /><br />V2EX的一篇合集<br />http://www.v2ex.com/topic/view/4168/1.html<br /><br />补充，感谢Colin的提醒，发现一个更好的Plugin可以很快列出你的FF的相关配置，我看了一下，功能很强大<br />- MR Tech Local Install 5.3.2.1
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/216833#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jul 2008 11:05:22 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/216833</link>
        <guid>http://garydo.javaeye.com/blog/216833</guid>
      </item>
      <item>
        <title>提高浏览体验的五十个最佳FireFox扩展插件</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/216819" style="color:red;">http://garydo.javaeye.com/blog/216819</a>&nbsp;
          发表时间: 2008年07月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          　FireFox的扩展插件有成百上千，你要用哪个呢？这里收集了50个流行的扩展插件，下载后安装，会让你的FireFox浏览更轻松。请注意，大多数扩展插件可以在FireFox2.0上使用，如果无法使用，那么使用Nightly Tester Tools扩展来让他们工作。当一个新的FireFox版本发布后，这个扩展插件可以允许你轻松更新这些已经存在的扩展。<br /><br />　　标签页管理<br /><br />　　All-in-One Gestures - 多合一鼠标手势，集合了流行的滚动、导航等方位插件的鼠标手势。<br /><br />　　Tabbrowser Preferences - 增强式标签页浏览扩展，提供一个很全面的图形界面，以便让用户能够轻松更改Firefox中的隐藏设置，让Firefox的标签页浏览功能更加强大和完善，并提供关于链接打开方式的详细设置。<br /><br />　　Tab Mix Plus - 在页签上增加了更多的功能，允许你在一个页签上打开多个链接，或者在多个页签打开同一个链接，合并或者关闭同一个域名的链接等。<br /><br />　　Restart Firefox - 在文件菜单中加了一项“重启firefox”，在安装扩展或插件后，使用这个插件可以很方便，不用关闭FireFox。<br /><br />　　Sessionsaver - 恢复上一次打开的页面，如果你上次用过FireFox的话，这对于崩溃的FireFox同样有效。<br /><br /> 　　Duplicate Tab - 允许你在新窗口或当前窗口复制相同的页签（包括浏览历史等）。<br /><br />　　Colorful Tabs - 可以让打开的标签变成彩色的，使得界面美化。<br /><br />　　Viamatic foXpose - 在状态栏上增加一个图标，点一下就可以打开所有的页签。<br /><br />　　Firefox Showcase - 简化定位和选择当前窗口的操作。<br /><br />　　Separe - 帮助整理当前页签。<br /><br />　　Permatabs - 使得一个被选定的页签不能被关闭，并且永远驻留在内存。<br /><br />　　FaviconizeTab - 调整页签的宽度，并且只显示图标。<br /><br />　　网页链接管理<br /><br />　　Linky - 下载选中内容中的所有的网页、图像、文件链接等等。<br /><br />　　WebMailCompose - 让网页上的发邮件链接自动转移到web邮件的发送邮件地址。<br /><br />　　Linkification - 使得FireFox可以在查看纯文本的时候识别链接地址并打开链接。<br /><br />　　IE Tab - 使用IE内核访问网页。对于只支持IE的页面特别有用。<br /><br />　　FirefoxView - 在IE中使用FireFox打开当前的页面。<br /><br />　　Paste and Go - 让你粘贴URL到地址栏后自动打开页面，或者使用快捷键Ctrl-Shift-V。<br /><br />　　ErrorZilla - 修改默认的404错误页面为一个Google的缓存页面。<br /><br />　　文件下载管理<br /><br />　　FlashGot - 多线程下载工具。<br /><br />　　PDF Download - 提供浏览者对PDF更多的操控方式，当你点击一个PDF链接时Firefox会弹出一个对话框供你进行选择性操作：下载、在标签页打开、在新标签页中以HTML方式查看、取消。<br /><br />　　ScrapBook - 方便的保存与管理网页。<br /><br />　　DownThemAll - 只需一点即可下载网页中的所有连接。<br /><br />　　TargetAlert TargetAlert - 可以帮你扫描网页中的所有超链接，在符合特定文件类型的超链接后面，加上一个特定的图标，让你可以不用去看网址就可以知道这是什么类型的文件。<br /><br />　　Download Manager Tweak - 修改FireFox默认的下载管理器，使其可以在书签列（侧边列）或标签页中开启下载管理窗口。<br /><br />　　Download Statusbar - 让你可以从状态列看出目前下载文件的进度。<br /><br />　　Disable Targets For Downloads - 在点击链接下载文件时，防止打开新窗口。<br /><br />　　FireFTP - 在FireFox中实现的一个完全免费的、安全的、跨平台的FTP客户端功能。<br /><br />　　浏览网页管理<br /><br />　　GreaseMonkey - 可以安装用户自己编写的脚本，实现自定义的功能，功能强大。<br /><br />　　Image Zoom - 通过右键与滚轮配合使用，放大缩小图片。<br /><br />　　Fasterfox - 加速FireFox的启动和运行，网络性能调节与优化。<br /><br />　　SpellBound - 对于当前的填写的表单进行英文拼写检查。<br /><br />　　BugMeNot - 绕过网站设置的登录限制，直接进入浏览网页，可以免去烦琐的注册网站的过程。<br /><br />　　AutoCopy - 在页面上选择任何内容都会自动将其复制到剪贴板中，按中间的鼠标粘贴。<br /><br />　　Copy Plain Text - 无格式复制当前文本内容，将当前页面的所有字体等格式删除后复制。<br /><br />　　Google Images Re-Linker - 绕过Google图片搜索的框架预览页面，直接浏览里面的略缩图的大图。<br /><br />　　Stop-or-Reload Button - 将刷新和停止整合为一个按钮。<br /><br />　　Extended Statusbar - 像Opera的状态栏那样的东西，一个显示速度、进度百分比、时间和载入字节数的状态条。<br /><br />　　Resizeable Textarea - 可以让你调节表单文字录入框的大小，不用再不停的拖滚动条了。<br /><br />　　Adblock Plus - Adblock plus是Adblock的加强版。可以阻挡特定网址及网页上的广告对象（例如图片、Flash）。<br /><br />　　Flashblock - 阻挡所有Flash。<br /><br />　　Sage - 一个轻量级的RSS阅读器，在侧边栏提供一个窗口阅读RSS。<br /><br />　　Cacheout - 让你通过Google的缓存或者代理来访问某个页面。<br /><br />　　Pearl Crescent Page Saver - 截屏程序，可以将整个页面保存为一个图片。<br /><br />　　Reload Every - 自动去刷新某个页面。<br /><br />　　Copy URL+  - 能让使用者在复制网页上面选取的文字时，也同时复制网页的网址与标题。<br /><br />　　InFormEnter - 以半自动模式填写表单的助手。这个扩展在一个网页表单的每个输入栏加入一个能够点击的小图标，你能从这里选择条目插入——不需要键入。你能通过菜单设定，使它显示你经常用到的信息，例如名字、email、地址等等。<br /><br />　　All-in-One Sidebar - 在侧边栏中就可以快速切换书签、下载项和扩展等面板，或者在侧边栏登陆网站、查看源代码；另外，还有侧栏切换柄和工具栏，单击浏览器一侧的突起边缘，即可打开/关闭扩展，所有这些都允许用户自由定制<br /><br />　　Text size toolbar - 添加一个按钮，可以增加或者减小字体，也可以回复到默认字体。<br /><br />　　Reveal - 让你可以在历史记录里看到页面的缩略图，以便快速找到你需要的网页。<br /><br />　　Mystickies - 让你可以在Web上放一个便条纸，并使用Tag标记。<br /><br />　　Clear Cache Button - 在工具栏中添加一个清除缓存的按钮，单击一次即可清除历史记录。<br /><br />　　gTranslate - 在页面上右击即可使用Google来翻译当前网页的内容。<br /><br />　　Xinha Here! - 一个所见即所得的文本编辑器。<br /><br />　　Yoono - 即时显示建议的网址，并分享大家共同感兴趣的网址。<br /><br />　　BlueOrganizer - 帮你定制你的个性化信息，帮助你节省时间找到相关的信息。<br /><br />　　隐私与安全管理<br /><br />　　SwitchProxy - 让你在多个代理服务器上快速切换，以实现匿名上网。<br /><br />　　NoScript - 只允许受信任的网站启用JavaScript、Java 或其他插件。白名单基于优先阻止机制，在不损失任何功能的情况下，阻止利用已知或未知安全漏洞的攻击。<br /><br />　　Always Remember Password - 让一些网站永远记住你的密码，不用再重新输入。用于对付一些总让你输密码的网站，如银行等。<br /><br />　　CookieCuller - 增强版本的Cookie管理器。<br /><br />　　Stealther - 使用浏览网页不留下任何痕迹。<br /><br />　　网页搜索管理<br /><br />　　Google Toolbar for Firefox - Google工具栏软件，可以实现多种实用的功能。<br /><br />　　CustomizeGoogle - 增强的Google搜索结果，添加很多附加信息，同时删除一些没用的信息（比如Google的广告等，个人觉得这样似乎不太好）。<br /><br />　　NextPlease - 为浏览器添加前进后退按钮，或者说是翻页按钮。<br /><br />　　BetterSearch - 增强Google， MSN Search， Yahoo Search， A9， Answers.com， AllTheWeb， Dogpile.com， del.icio.us and Simpy.com bookmarks等的搜索结果。<br /><br />　　Answers - 按住Alt键后点任何一个单词，可以得到一个快速的相关定义或者解释说明。<br /><br />　　音乐、视频管理<br /><br />　　FoxyTunes - 边上网边听歌。不用离开浏览器就可以控制你喜欢的媒体播放器。<br /><br />　　MediaPlayerConnectivity - 使您轻轻一按就可用外部媒体播放程序播放网页内嵌视频。<br /><br />　　电子邮件管理<br /><br />　　Gmail Manager - 用来同时管理多个GMail账号，即时显示各账号中的新邮件统计。<br /><br />　　Gmail Notifier - 自动检查GMail里的邮件。<br /><br />　　AJAX Yahoo Mail - 为Yahoo Mail加入Ajax功能，可以只用按一下，就查看邮件。<br /><br />　　书签管理<br /><br />　　Bookmark with Del.icio.us - 在FireFox中集成del.icio.us，轻松发布自己的书签而不用离开当前页面。<br /><br />　　Foxmarks Bookmark Synchronizer - 安装这个插件后，其会在后台自动同步当前的书签。<br /><br /> 　　StumbleUpon - 是一个让你更方便的浏览优秀网站的FireFox插件。<br /><br />　　Reliby - 提供一个刷新所有即时书签的功能。<br /><br />　　Clipmarks - 让你保存并分享页面内容而不用进入整个页面。<br /><br />　　其它流行服务管理<br /><br />　　Adsense Notifier - 在状态栏显示Adsense的收入。<br /><br />　　Forecastfox - 在状态栏显示天气预报。<br /><br />　　StockTicker - 显示你喜欢的股票状态。<br /><br />　　DictionarySearch - 在线词典查找单词。<br /><br />　　Web Developer - 网站开发者使用的工具，有很多优秀的功能。<br /><br />　　Performancing for Firefox - 一个Blog编辑器，让你可以轻松的在Wordpress、MovableType或者Blogger中发布文章。<br /><br />　　Map+ - 让你能快速查看地图中选择的地址而不用改变窗口。<br /><br />　　ChatZilla - 一个干净易用的IRC聊天客户端软件。<br /><br />　　以上就是我所推荐的五十个优秀的FireFox扩展插件，并不是说你需要完全赞同我选择的这些扩展插件，这只是一个发现最优秀FireFox扩展插件的一个尝试，这篇文章会不断更新，如果你发现了什么更好的FireFox扩展插件，请留言告诉我。<br /><br />　　英文原文地址：50 Best Firefox Extensions for Power Surfing　　<br /><br />　　William Long整理并翻译最新版本，部分翻译内容来源于xyz黑板。<br /><br /><br />转载自月光博客 [ http://www.williamlong.info/ ]
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/216819#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jul 2008 10:35:48 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/216819</link>
        <guid>http://garydo.javaeye.com/blog/216819</guid>
      </item>
      <item>
        <title>配置cygwin/x以及自动设置DISPLAY</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/214793" style="color:red;">http://garydo.javaeye.com/blog/214793</a>&nbsp;
          发表时间: 2008年07月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我们平时使用Hummingbird Exceed/X-manager其实只用到了它们的X server。而上述两个软件都不是免费软件。我们完全可以使用cygwin的X server来替代它们。<br />使用cygwin的x-server优点：中文自动支持、鼠标支持特别是用emacs浏览code时的滚轮支持等等。下面是使用cygwin的X server的配置过程。<br /><br />1. 启动cygwin/x<br />  有几种方法，参见:<br />  http://x.cygwin.com/docs/ug/using.html#using-starting<br /><br />  startx 每次启动会弹出一个必须保留弹出的xterm,如果退出这个xterm，X-Server自动退出。而且你必须运行xhost + 来允许远程服务器弹出窗口到你的机器上来。<br />  可以通过更改startxwin.sh脚本来启动x-server而无其他窗口弹出，并自动设置xhost：<br />  1) 脚本位置<br />   /usr/X11R6/bin/startxwin.sh<br />  2) 屏蔽掉这几行：<br />   # Startup an xterm, using bash as the shell.<br />   # xterm -e /usr/bin/bash -l &<br />  3) 加上这几行来允许可以显示到你桌面上的服务器：<br />   # add XXX server<br />   xhost + 135.123.123.123<br />   xhost + 135.123.123.124<br />     当然，加入 xhost + 则允许任何机器连接到该 X server<br />  4) 每次启动cygwin后，直接运行startxwin.sh 即可，任务栏会显示Cygwin/X server图标<br />  5) 使用完毕后，记得在图标上点右键退出X-server,要不cygwin会等待它的关闭而长时间退不出。<br /><br />2. 为了将远程机器(server)上运行的GUI程序显示到本地,你必须在远程机器上设置DISPLAY, 我们在使用Exceed或者X-Manager时，startx会在启动Xterm时自动设置，其实我们也可以在.bashrc中加入自动设置 DISPLAY的脚本：<br />#-------------------------------------------------------------<br />#       Set The DISPLAY automatically<br />#-------------------------------------------------------------<br />S_TTY=$(who am i | awk ' { print $2; } ')<br />S_IP=$(last -i $S_TTY -n1 | head -1 | awk ' { print $3; } ')<br />if [ -n "$S_IP" ]; then<br />   DISPLAY="$S_IP":0.0<br />   export DISPLAY<br />fi<br /><br />3. 经过如上设置，每次启动Cygwin后，运行startxwin.sh 后，使用任意工具(如DOS的telnet命令，putty,securCRT等）telnet到服务器上后，直接运行任何图形界面的X-windows 程序即可，如emacs,tkcvs等。<br /><br />4. Enjoy ~ <br />参考文档：<br />1.http://x.cygwin.com/docs/ug/using.html#using-starting<br />2.http://www.x.org/wiki/FAQErrorMessages
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/214793#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 15 Jul 2008 09:38:39 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/214793</link>
        <guid>http://garydo.javaeye.com/blog/214793</guid>
      </item>
      <item>
        <title>cygwin使用心得</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/214010" style="color:red;">http://garydo.javaeye.com/blog/214010</a>&nbsp;
          发表时间: 2008年07月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.在cygwin里访问Windows盘<br />cd /cygdrive/c<br />cd c:<br />2.整合cygwin命令到Windows中<br />假设cygwin安装在d:/develop/cygwin，则将d:/develop/cygwin/bin添加到系统变量PATH中(最好加在 windows前面，这样的话，有些相同的命令的话，是先执行cygwin的命令，而不是windows命令，比如find)<br />就可以直接在cmd.exe下面执行tar czvf xxx.tgz ./<br />基本上所有的命令都可以用了，包括ls,more,less,find,grep等。<br />3.使用TGZ备份<br />将cygwin的BIN加入到PATH<br />建一个BAT文件：<br />@echo off<br />d:<br />cd d:\website\8thmanage<br />tar czvf 8thmanage.tgz 8thmanage<br />4.Windows使用SHELL脚本<br />将cygwin的BIN加入到PATH<br />在$CYGWIN的目录/var/下面建一脚本t.sh，注意，t.sh里面的路径，都是相对于$CYGWIN的，里面需要访问C盘的，请用/cygdrive/c/<br />在Windows下执行：<br />d:\cygwin\bin\bash d:\cygwin\var\t.sh<br />(可以定期执行)<br />5.同步Windows系统用户<br />mkpasswd -l > /etc/passwd<br />mkgroup -l > /etc/group<br />如果有Domain的话，需要加上-d domainname<br />6.安装系统服务<br />cygrunsrv<br />7.cygwing下使用rsync<br />a.安装rsync组件<br />b.进入cygwin,配置服务器<br />vi /etc/rsyncd.conf<br />...screts file=/etc/tom.ipaddr.pas<br />配置文件，参考我写的另外一篇rsync的文章，注意：密码文件权限必须是0400<br />chmod 0400 /etc/tom.ipaddr.pas<br />c.启动服务端<br />rsync --daemon<br />d.客户端同步<br />在客户端的cygwin下面，运行rsync同步，具体命令，请参考另外一篇rsync的文章。<br />8.cygwin下使用SSHD<br />a.需要安装了cygrunsrc,openssh<br />b.运行ssh-host-config -y<br />一路回车，直到出现CYGWIN=时，输入tty ntsec，再回车，<br />(或者，增加一系统环境变量CUGWIN=nesec tty)<br />c.已经安装好SSHD服务到你的Windows服务中，可以直接在服务中启动，关闭。<br />(cygrunsrc -S sshd或者net start sshd)<br />9.中文显示<br />vi ~/.bashrc<br /># 让ls和dir命令显示中文和颜色<br />alias ls='ls --show-control-chars --color'  <br />alias dir='dir -N --color'<br /># 设置为中文环境，使提示成为中文<br />export LANG="zh_CN.GBK"<br /># 输出为中文编码<br />export OUTPUT_CHARSET="GBK"<br />~/.inputrc为  <br />set completion-ignore-case on  <br />set meta-flag on  <br />set output-meta on  <br />set convert-meta off  <br />cygwin.bat脚本为:  <br />@echo off  <br />set MAKE_MODE=UNIX  <br /><br />--------------------------------<br />安装<br />可以直接到http://www.cygwin.com下载一个安装程序,setup.exe，这个程序只是一个安装程序，所有的模块将从网络下载安装。或者，你可以下载一个cygwin.iso的镜像，直接映象成光盘，再从光盘本地安装，这样会快很多，而且不用考虑断线的问题。<br /><br />X下的中文支持<br />locale支持<br />Cygwin的locale支持一直都有问题，好在X程序还可以使用XLOCALE。<br />建议还是使用zh_CN.gbk, 不要使用zh_CN.GB2312<br />在移植程序时需要注意不要让程序连接libcygwin.a里面的setlocale，而是采用libX11.a里面的_Xsetlocale。方法是：检查被移植程序的全部源代码，发现  <br />#include  <br />就修改为  <br />#define X_LOCALE<br />#include  <br />同时注意程序的连接库要添加-lX11.<br />如果对于结果没有把握，可以找个Dependency Walker查看程序是否连接到了cygwin1.dll里面的setlocale，如果是，就说明有遗漏。<br />中文字体<br />PCF点阵字体<br />GTK1.x 和其他一些老的X程序都是用X字体，<br />注意必须要有编码与locale一致的字体，比如用zh_CN.gbk就必须要由GBK编码的字体，用zh_CN.GB2312就必须要有GB2312编码的字体<br />如果使用zh_CN.GB2312，这里有一个RedOffice面带的点阵字体包<br />可以采用ttf2bdf从TTF抽取得到bdf格式，然后再用bdf2pcf得到pcf格式的字体文件。<br />(这里有一个Windows版本的TTF2BDF，可以将Windows TTF字体转换出BDF字体, 注意得到bdf后要手工编辑一下文件头，将编码声明修改正确)<br />得<br />到字体之后，放到某个目录下，执行mkfontdir生成fonts.dir，然后用xset +fp<br />/path/to/your/fonts将字体路径加入即可(注意与fontconfig的配置不同，这里路径是不递归的，如果有的字体放在子目录里面，<br />子目录也需要添加进去才行)。<br /><br />TTF字体<br />很多新的应用程序(比如GTK2)都使用fontconfig/libxft2来显示字体，它对TTF字体的支持比较好(X以前通过freetype, xft模块也支持TTF字体，但对中日韩字体的支持不是太好，而且也在Cygwin下似乎也没有这些模块)<br />完全可以使用Linux下的arphic字体包. 如果没有安装Linux，可以到http://packages.debian.org下载相应的包，然后用7zip解压提取出ttf文件。<br />得到字体文件之后，放到某个目录之下，编辑/etc/fonts/local.conf，将字体路径加入:<br />/path/to/my/ttf/fonts如果只是自己使用，可以将字体文件放到~/.fonts下，不需要修改任何配置，最多三十秒fontconfig就能够发现这些字体了。<br /><br />中文输入法<br />老黄(hzhr)移植了miniChinput到Cygwin，我也移植了fcitx-1.8.5和3.0，均可以从我的网站上找到 http://www.oliwen.com/bama...<br />一般设置了LC_CTYPE和XMODIFIERS就可以在程序中激活输入输入法了(除非这个程序没有XIM支持):<br />LC_CTYPE=zh_CN.gbk<br />XMODIFIERS="@im=Chinput"<br />export LC_CTYPE XMODIFIERS<br />对于fcitx而言，XMODIFIERS设置为什么都可以(但必须要设置)，所以设置为"@im=Chinput"的话chinput和fcitx都可以正常使用<br />VI中的 Backspace 與 Delete 按鍵異常<br />首先確定 $TERM的設定為cygwin<br /><br />echo $TERM<br /><br />若不是，請設定為<br /><br />TERM = cygwin  <br />export TERM<br /><br />Backspace 與 Delete這兩個鍵正常狀況下只有一個有用。可在 $HOME/.bash_profile 任選一個來使用<br /><br />stty erase '^H' //ctrl+v, ctrl+h  <br /><br />stty erase '^?'
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/214010#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Jul 2008 17:17:29 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/214010</link>
        <guid>http://garydo.javaeye.com/blog/214010</guid>
      </item>
      <item>
        <title>Oracle Exp Imp 命令用法，有很好的例子</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/214000" style="color:red;">http://garydo.javaeye.com/blog/214000</a>&nbsp;
          发表时间: 2008年07月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ORACLE数据库有两类备份方法。第一类为物理备份，该方法实现数据库的完整恢复，但<br />数据库必须运行在归挡模式下（业务数据库在非归挡模式下运行），且需要极大的外部<br />存储设备，例如磁带库；第二类备份方式为逻辑备份，业务数据库采用此种方式，此方<br />法不需要数据库运行在归挡模式下，不但备份简单，而且可以不需要外部存储设备。<br />数据库逻辑备份方法<br />ORACLE数据库的逻辑备份分为三种模式：表备份、用户备份和完全备份。<br />表模式<br />备份某个用户模式下指定的对象（表）。业务数据库通常采用这种备份方式。<br />若备份到本地文件，使用如下命令：<br />exp icdmain/icd rows=y indexes=n compress=n buffer=65536<br />feedback=100000 volsize=0<br />file=exp_icdmain_csd_yyyymmdd.dmp<br />log=exp_icdmain_csd_yyyymmdd.log<br />tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo<br />若直接备份到磁带设备，使用如下命令：<br />exp icdmain/icd rows=y indexes=n compress=n buffer=65536<br />feedback=100000 volsize=0<br />file=/dev/rmt0<br />log=exp_icdmain_csd_yyyymmdd.log<br />tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo<br />注：在磁盘空间允许的情况下，应先备份到本地服务器，然后再拷贝到磁带。出于速度<br />方面的考虑，尽量不要直接备份到磁带设备。<br />用户模式<br />备份某个用户模式下的所有对象。业务数据库通常采用这种备份方式。<br />若备份到本地文件，使用如下命令：<br />exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536<br />feedback=100000 volsize=0<br />file=exp_icdmain_yyyymmdd.dmp<br />log=exp_icdmain_yyyymmdd.log<br />若直接备份到磁带设备，使用如下命令：<br />exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536<br />feedback=100000 volsize=0<br />file=/dev/rmt0<br />log=exp_icdmain_yyyymmdd.log<br />注：如果磁盘有空间，建议备份到磁盘，然后再拷贝到磁带。如果数据库数据量较小，<br />可采用这种办法备份。<br />完全模式<br />备份完整的数据库。业务数据库不采用这种备份方式。备份命令为：<br />exp icdmain/icd rows=y indexes=n compress=n buffer=65536<br />feedback=100000 volsize=0 full=y<br />file=exp_fulldb_yyyymmdd.dmp(磁带设备则为/dev/rmt0)<br />log=exp_fulldb_yyyymmdd.log<br />对于数据库备份，建议采用增量备份，即只备份上一次备份以来更改的数据。增量备份<br />命令：<br />exp icdmain/icd rows=y indexes=n compress=n buffer=65536<br />feedback=100000 volsize=0 full=y inctype=incremental<br />file=exp_fulldb_yyyymmdd.dmp(磁带设备则为/dev/rmt0)<br />log=exp_fulldb_yyyymmdd.log<br />注：关于增量备份必须满足下列条件：<br />1.<br />只对完整数据库备份有效，且第一次需要full=y参数，以后需要inctype=increment<br />al参数。<br />2. 用户必须有EXP_FULL_DATABASE的系统角色。<br />3. 话务量较小时方可采用数据库备份。<br />4. 如果磁盘有空间，建议备份到磁盘，然后再备份到磁带。<br />业务数据库备份方法及周期<br />用EXP进行备份前，先在SYS用户下运行CATEXP.SQL文件（如果以前已运行该文件，则不<br />要执行这个脚本）。<br />没有特殊说明，不允许在客户端执行备份命令。<br /><br />备份命令参照表模式下的备份命令。<br />从磁盘文件备份到磁带<br />如果首先备份到本地磁盘文件，则需要转储到磁带设备上。<br />1. 若需查看主机上配置的磁带设备，使用如下命令：<br />lsdev -Cc tape<br />显示的结果如下例所示：<br />rmt0 Available 30-58-00-2,0 SCSI 4mm Tape Drive<br />rmt1 Defined　 30-58-00-0,0 SCSI 4mm Tape Drive<br />标明Available的设备是可用的磁带设备。<br />2. 若需查看磁带存储的内容，使用如下命令：<br />tar -tvf /dev/rmt0<br />显示的结果如下例所示：<br />-rw-r--r-- 300 400 8089600 Jan 11 14:33:57 2001 exp_icdmain_20010111.dmp<br />如果显示类似如下内容，则表示该磁带存储的备份数据是从数据库直接备份到磁带上，<br />而非从本地磁盘转储到磁带的备份文件，因此操作系统无法识别。<br />tar: 0511-193 An error occurred while reading from the media.<br />There is an input or output error.<br />或<br />tar: 0511-169 A directory checksum error on media; -267331077 not equal to<br />2<br />5626.<br />3. 对于新磁带或无需保留现存数据的磁带，使用如下命令：<br />tar -cvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp<br />注：A. 该命令将无条件覆盖磁带上的现存数据。<br />　 B. 文件名不允许包含路径信息，如：/backup/exp_icdmain_yyyymmdd.dmp。<br />4. 对于需要保留现存数据的磁带，使用如下命令：<br />tar -rvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp<br />注：该命令将文件exp_icdmain_yyyymmdd.dmp追加到磁带的末端，不会覆盖现存的数据<br />。<br />特别强调：如果备份时是从数据库直接备份到磁带上，则不可再向该磁带上追加复制任<br />何其他文件，否则该备份数据失效。<br />5. 若需将转储到磁带上的备份文件复制到本地硬盘，使用如下命令：<br />A. 将磁带上的全部文件复制到本地硬盘的当前目录<br />tar -xvf /dev/rmt0<br />B. 将磁带上的指定文件复制到本地硬盘的当前目录<br />tar -xvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp<br />备份时间安排<br />由于备份时对系统I/O有较大影响，所以，建议在晚上11点以后进行备份工作。<br />业务数据库Oracle版本的恢复<br />恢复方案需根据备份方案确定。由于业务数据库采用表备份和用户备份相结合的方案，<br />所以业务数据库的恢复需根据实际情况采用表恢复和用户恢复相结合的方案。<br />恢复方案<br />数据库的逻辑恢复分为表恢复、用户恢复、完全恢复三种模式。<br />表模式<br />此方式将根据按照表模式备份的数据进行恢复。<br />A. 恢复备份数据的全部内容<br />若从本地文件恢复，使用如下命令：<br />imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n<br />commit=y buffer=65536 feedback=100000 ignore=n volsize=0<br />file=exp_icdmain_cs<br />d_yyyymmdd.dmp<br />log=imp_icdmain_csd_yyyymmdd.log<br />若从磁带设备恢复，使用如下命令：<br />imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n<br />commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=/dev/rmt0<br />log=imp_icdmain_csd_yyyymmdd.log<br />B. 恢复备份数据中的指定表<br />若从本地文件恢复，使用如下命令：<br />imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n<br />commit=y buffer=65536 feedback=100000 ignore=n volsize=0<br />file=exp_icdmain_cs<br />d_yyyymmdd.dmp<br />log=imp_icdmain_csd_yyyymmdd.log<br />tables=commoninformation,serviceinfo<br />若从磁带设备恢复，使用如下命令：<br />imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n<br />commit=y buffer=65536 feedback=100000 ignore=n volsize=0<br />file=/dev/rmt0<br />log=imp_icdmain_csd_yyyymmdd.log<br />tables=commoninformation,serviceinfo<br />用户模式<br />此方式将根据按照用户模式备份的数据进行恢复。<br />A. 恢复备份数据的全部内容<br />若从本地文件恢复，使用如下命令：<br />imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n<br />commit=y buffer=65536 feedback=100000 ignore=n volsize=0<br />file=exp_icdmain_yy<br />yymmdd.dmp<br />log=imp_icdmain_yyyymmdd.log<br />若从磁带设备恢复，使用如下命令：<br />imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n<br />commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=/dev/rmt0<br />log=imp_icdmain_yyyymmdd.log<br />B. 恢复备份数据中的指定表<br />若从本地文件恢复，使用如下命令：<br />imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n<br />commit=y buffer=65536 feedback=100000 ignore=n volsize=0<br />file=exp_icdmain_yy<br />yymmdd.dmp<br />log=imp_icdmain_yyyymmdd.log<br />tables=commoninformation,serviceinfo<br />若从磁带设备恢复，使用如下命令：<br />imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n<br />commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=/dev/rmt0<br />log=imp_icdmain_yyyymmdd.log<br />tables=commoninformation,serviceinfo<br />完全模式<br />如果备份方式为完全模式，采用下列恢复方法：<br />若从本地文件恢复，使用如下命令：<br />imp system/manager rows=y indexes=n commit=y buffer=65536<br />feedback=100000 ignore=y volsize=0 full=y<br />file=exp_icdmain_yyyymmdd.dmp<br />log=imp_icdmain_yyyymmdd.log<br />若从磁带设备恢复，使用如下命令：<br />imp system/manager rows=y indexes=n commit=y buffer=65536<br />feedback=100000 ignore=y volsize=0 full=y<br />file=/dev/rmt0<br />log=imp_icdmain_yyyymmdd.log<br />参数说明<br />1. ignore参数<br />Oracle在恢复数据的过程中，当恢复某个表时，该表已经存在，<br />就要根据ignore参数的设置来决定如何操作。<br />若ignore=y，Oracle不执行CREATE TABLE语句，直接将数据<br />插入到表中，如果插入的记录违背了约束条件，比如主键约束，<br />则出错的记录不会插入，但合法的记录会添加到表中。<br />若ignore=n，Oracle不执行CREATE TABLE语句，同时也不会<br />将数据插入到表中，而是忽略该表的错误，继续恢复下一个表。<br />2. indexes参数<br />在恢复数据的过程中，若indexes=n，则表上的索引不会被恢复<br />，但是主键对应的唯一索引将无条件恢复，这是为了保证数据<br />的完整性。<br />字符集转换<br />对于单字节字符集（例如US7ASCII），恢复时，数据库自动转<br />换为该会话的字符集（NLS_LANG参数）；对于多字节字符集<br />（例如ZHS16CGB231280），恢复时，应尽量使字符集相同<br />（避免转换），如果要转换，目标数据库的字符集应是输出数<br />据库字符集的超集。<br />恢复方法<br />业务数据库采用表恢复方案。在用IMP进行恢复前，先在SYS<br />用户下运行CATEXP.SQL文件（如果以前已运行该文件，则<br />不要执行这个脚本），然后执行下列命令：<br />IMP ICDMAIN/ICD FILE=文件名 LOG=LOG文件名 ROWS=Y<br />COMMIT=Y BUFFER=Y IGNORE=Y TABLES=表名<br />注：要恢复的表名参照备份的表名<br />　 。恢复是在原表基础上累加数据<br />　 。没有特殊说明，不允许在客户端执行恢复命令<br /><br />将一个数据库的某用户的所有表导到另外数据库的一个用户下面的例子　　<br />exp userid=system/manager owner=username1 file=expfile.dmp<br />imp userid=system/manager fromuser=username1 touser=username2 ignore=y file=expfile.dmp
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/214000#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Jul 2008 17:02:56 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/214000</link>
        <guid>http://garydo.javaeye.com/blog/214000</guid>
      </item>
      <item>
        <title>Oracle 函数大全(字符串函数，数学函数，日期函数，逻辑运算函数，其他函数)</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/212776" style="color:red;">http://garydo.javaeye.com/blog/212776</a>&nbsp;
          发表时间: 2008年07月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          SQL中的单记录函数<br />1.ASCII<br />返回与指定的字符对应的十进制数;<br />SQL> select ascii(’A’) A,ascii(’a’) a,ascii(’0’) zero,ascii(’ ’) space from dual;<br />A A ZERO SPACE<br />--------- --------- --------- ---------<br />65 97 48 32<br /><br />2.CHR<br />给出整数,返回对应的字符;<br />SQL> select chr(54740) zhao,chr(65) chr65 from dual;<br />ZH C<br />-- -<br />赵 A<br />3.CONCAT<br />连接两个字符串;<br />SQL> select concat(’010-’,’88888888’)||’转23’ 高乾竞电话 from dual;<br />高乾竞电话<br />----------------<br />010-88888888转23<br />4.INITCAP<br />返回字符串并将字符串的第一个字母变为大写;<br />SQL> select initcap(’smith’) upp from dual;<br />UPP<br />-----<br />Smith<br /><br />5.INSTR(C1,C2,I,J)<br />在一个字符串中搜索指定的字符,返回发现指定的字符的位置;<br />C1 被搜索的字符串<br />C2 希望搜索的字符串<br />I 搜索的开始位置,默认为1<br />J 出现的位置,默认为1<br />SQL> select instr(’oracle traning’,’ra’,1,2) instring from dual;<br />INSTRING<br />---------<br />9<br /><br />6.LENGTH<br />返回字符串的长度;<br />SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst;<br />NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL))<br />------ ------------ ---------------- ------------ --------- --------------------<br />高乾竞 3 北京市海锭区 6 9999.99 7<br /><br />7.LOWER<br />返回字符串,并将所有的字符小写<br />SQL> select lower(’AaBbCcDd’)AaBbCcDd from dual;<br />AABBCCDD<br />--------<br />aabbccdd<br /><br />8.UPPER<br />返回字符串,并将所有的字符大写<br />SQL> select upper(’AaBbCcDd’) upper from dual;<br />UPPER<br />--------<br />AABBCCDD<br /><br />9.RPAD和LPAD(粘贴字符)<br />RPAD 在列的右边粘贴字符<br />LPAD 在列的左边粘贴字符<br />SQL> select lpad(rpad(’gao’,10,’*’),17,’*’)from dual;<br />LPAD(RPAD(’GAO’,1<br />-----------------<br />*******gao*******<br />不够字符则用*来填满<br /><br />10.LTRIM和RTRIM<br />LTRIM 删除左边出现的字符串<br />RTRIM 删除右边出现的字符串<br />SQL> select ltrim(rtrim(’ gao qian jing ’,’ ’),’ ’) from dual;<br />LTRIM(RTRIM(’<br />-------------<br />gao qian jing<br /><br />11.SUBSTR(string,start,count)<br />取子字符串,从start开始,取count个<br />SQL> select substr(’13088888888’,3,8) from dual;<br />SUBSTR(’<br />--------<br />08888888<br /><br />12.REPLACE(’string’,’s1’,’s2’)<br />string 希望被替换的字符或变量<br />s1 被替换的字符串<br />s2 要替换的字符串<br />SQL> select replace(’he love you’,’he’,’i’) from dual;<br />REPLACE(’H<br />----------<br />i love you<br /><br />13.SOUNDEX<br />返回一个与给定的字符串读音相同的字符串<br />SQL> create table table1(xm varchar(8));<br />SQL> insert into table1 values(’weather’);<br />SQL> insert into table1 values(’wether’);<br />SQL> insert into table1 values(’gao’);<br />SQL> select xm from table1 where soundex(xm)=soundex(’weather’);<br />XM<br />--------<br />weather<br />wether<br /><br />14.TRIM(’s’ from ’string’)<br />LEADING 剪掉前面的字符<br />TRAILING 剪掉后面的字符<br />如果不指定,默认为空格符<br />15.ABS<br />返回指定值的绝对值<br />SQL> select abs(100),abs(-100) from dual;<br />ABS(100) ABS(-100)<br />--------- ---------<br />100 100<br /><br />16.ACOS<br />给出反余弦的值<br />SQL> select acos(-1) from dual;<br />ACOS(-1)<br />---------<br />3.1415927<br /><br />17.ASIN<br />给出反正弦的值<br />SQL> select asin(0.5) from dual;<br />ASIN(0.5)<br />---------<br />.52359878<br /><br />18.ATAN<br />返回一个数字的反正切值<br />SQL> select atan(1) from dual;<br />ATAN(1)<br />---------<br />.78539816<br /><br />19.CEIL<br />返回大于或等于给出数字的最小整数<br />SQL> select ceil(3.1415927) from dual;<br />CEIL(3.1415927)<br />---------------<br />4<br /><br />20.COS<br />返回一个给定数字的余弦<br />SQL> select cos(-3.1415927) from dual;<br />COS(-3.1415927)<br />---------------<br />-1<br />21.COSH<br />返回一个数字反余弦值<br />SQL> select cosh(20) from dual;<br />COSH(20)<br />---------<br />242582598<br /><br />22.EXP<br />返回一个数字e的n次方根<br />SQL> select exp(2),exp(1) from dual;<br />EXP(2) EXP(1)<br />--------- ---------<br />7.3890561 2.7182818<br /><br />23.FLOOR<br />对给定的数字取整数<br />SQL> select floor(2345.67) from dual;<br />FLOOR(2345.67)<br />--------------<br />2345<br /><br />24.LN<br />返回一个数字的对数值<br />SQL> select ln(1),ln(2),ln(2.7182818) from dual;<br />LN(1) LN(2) LN(2.7182818)<br />--------- --------- -------------<br />0 .69314718 .99999999<br /><br />25.LOG(n1,n2)<br />返回一个以n1为底n2的对数<br />SQL> select log(2,1),log(2,4) from dual;<br />LOG(2,1) LOG(2,4)<br />--------- ---------<br />0 2<br /><br />26.MOD(n1,n2)<br />返回一个n1除以n2的余数<br />SQL> select mod(10,3),mod(3,3),mod(2,3) from dual;<br />MOD(10,3) MOD(3,3) MOD(2,3)<br />--------- --------- ---------<br />1 0 2<br /><br />27.POWER<br />返回n1的n2次方根<br />SQL> select power(2,10),power(3,3) from dual;<br />POWER(2,10) POWER(3,3)<br />----------- ----------<br />1024 27<br /><br />28.ROUND和TRUNC<br />按照指定的精度进行舍入<br />SQL> select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual;<br />ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)<br />----------- ------------ ----------- ------------<br />56 -55 55 -55<br /><br />29.SIGN<br />取数字n的符号,大于0返回1,小于0返回-1,等于0返回0<br />SQL> select sign(123),sign(-100),sign(0) from dual;<br />SIGN(123) SIGN(-100) SIGN(0)<br />--------- ---------- ---------<br />1 -1 0<br /><br />30.SIN<br />返回一个数字的正弦值<br />SQL> select sin(1.57079) from dual;<br />SIN(1.57079)<br />------------<br />1<br /><br />31.SIGH<br />返回双曲正弦的值<br />SQL> select sin(20),sinh(20) from dual;<br />SIN(20) SINH(20)<br />--------- ---------<br />.91294525 242582598<br /><br />32.SQRT<br />返回数字n的根<br />SQL> select sqrt(64),sqrt(10) from dual;<br />SQRT(64) SQRT(10)<br />--------- ---------<br />8 3.1622777<br /><br />33.TAN<br />返回数字的正切值<br />SQL> select tan(20),tan(10) from dual;<br />TAN(20) TAN(10)<br />--------- ---------<br />2.2371609 .64836083<br /><br />34.TANH<br />返回数字n的双曲正切值<br />SQL> select tanh(20),tan(20) from dual;<br />TANH(20) TAN(20)<br />--------- ---------<br />1 2.2371609<br /><br />35.TRUNC<br />按照指定的精度截取一个数<br />SQL> select trunc(124.1666,-2) trunc1,trunc(124.16666,2) from dual;<br />TRUNC1 TRUNC(124.16666,2)<br />--------- ------------------<br />100 124.16<br /><br />36.ADD_MONTHS<br />增加或减去月份<br />SQL> select to_char(add_months(to_date(’199912’,’yyyymm’),2),’yyyymm’) from dual;<br />TO_CHA<br />------<br />200002<br />SQL> select to_char(add_months(to_date(’199912’,’yyyymm’),-2),’yyyymm’) from dual;<br />TO_CHA<br />------<br />199910<br /><br />37.LAST_DAY<br />返回日期的最后一天<br />SQL> select to_char(sysdate,’yyyy.mm.dd’),to_char((sysdate)+1,’yyyy.mm.dd’) from dual;<br />TO_CHAR(SY TO_CHAR((S<br />---------- ----------<br />2004.05.09 2004.05.10<br />SQL> select last_day(sysdate) from dual;<br />LAST_DAY(S<br />----------<br />31-5月 -04<br /><br />38.MONTHS_BETWEEN(date2,date1)<br />给出date2-date1的月份<br />SQL> select months_between(’19-12月-1999’,’19-3月-1999’) mon_between from dual;<br />MON_BETWEEN<br />-----------<br />9<br />SQL>selectmonths_between(to_date(’2000.05.20’,’yyyy.mm.dd’),to_date(’2005.05.20’,’yyyy.mm.dd’)) mon_betw from dual;<br />MON_BETW<br />---------<br />-60<br /><br />39.NEW_TIME(date,’this’,’that’)<br />给出在this时区=other时区的日期和时间<br />SQL> select to_char(sysdate,’yyyy.mm.dd hh24:mi:ss’) bj_time,to_char(new_time<br />2 (sysdate,’PDT’,’GMT’),’yyyy.mm.dd hh24:mi:ss’) los_angles from dual;<br />BJ_TIME LOS_ANGLES<br />------------------- -------------------<br />2004.05.09 11:05:32 2004.05.09 18:05:32<br /><br />40.NEXT_DAY(date,’day’)<br />给出日期date和星期x之后计算下一个星期的日期<br />SQL> select next_day(’18-5月-2001’,’星期五’) next_day from dual;<br />NEXT_DAY<br />----------<br />25-5月 -01<br />41.SYSDATE<br />用来得到系统的当前日期<br />SQL> select to_char(sysdate,’dd-mm-yyyy day’) from dual;<br />TO_CHAR(SYSDATE,’<br />-----------------<br />09-05-2004 星期日<br />trunc(date,fmt)按照给出的要求将日期截断,如果fmt=’mi’表示保留分,截断秒<br />SQL> select to_char(trunc(sysdate,’hh’),’yyyy.mm.dd hh24:mi:ss’) hh,<br />2 to_char(trunc(sysdate,’mi’),’yyyy.mm.dd hh24:mi:ss’) hhmm from dual;<br />HH HHMM<br />------------------- -------------------<br />2004.05.09 11:00:00 2004.05.09 11:17:00<br /><br />42.CHARTOROWID<br />将字符数据类型转换为ROWID类型<br />SQL> select rowid,rowidtochar(rowid),ename from scott.emp;<br />ROWID ROWIDTOCHAR(ROWID) ENAME<br />------------------ ------------------ ----------<br />AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH<br />AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN<br />AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD<br />AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES<br /><br />43.CONVERT(c,dset,sset)<br />将源字符串 sset从一个语言字符集转换到另一个目的dset字符集<br />SQL> select convert(’strutz’,’we8hp’,’f7dec’) "conversion" from dual;<br />conver<br />------<br />strutz<br /><br />44.HEXTORAW<br />将一个十六进制构成的字符串转换为二进制<br /><br />45.RAWTOHEXT<br />将一个二进制构成的字符串转换为十六进制<br /><br />46.ROWIDTOCHAR<br />将ROWID数据类型转换为字符类型<br /><br />47.TO_CHAR(date,’format’)<br />SQL> select to_char(sysdate,’yyyy/mm/dd hh24:mi:ss’) from dual;<br />TO_CHAR(SYSDATE,’YY<br />-------------------<br />2004/05/09 21:14:41<br /><br />48.TO_DATE(string,’format’)<br />将字符串转化为ORACLE中的一个日期<br /><br />49.TO_MULTI_BYTE<br />将字符串中的单字节字符转化为多字节字符<br />SQL> select to_multi_byte(’高’) from dual;<br />TO<br />-- <br />高<br /><br />50.TO_NUMBER<br />将给出的字符转换为数字<br />SQL> select to_number(’1999’) year from dual;<br />YEAR<br />---------<br />1999<br /><br />51.BFILENAME(dir,file)<br />指定一个外部二进制文件<br />SQL>insert into file_tb1 values(bfilename(’lob_dir1’,’image1.gif’));<br /><br />52.CONVERT(’x’,’desc’,’source’)<br />将x字段或变量的源source转换为desc<br />SQL> select sid,serial#,username,decode(command,<br />2 0,’none’,<br />3 2,’insert’,<br />4 3,<br />5 ’select’,<br />6 6,’update’,<br />7 7,’delete’,<br />8 8,’drop’,<br />9 ’other’) cmd from v$session where type!=’background’;<br />SID SERIAL# USERNAME CMD<br />--------- --------- ------------------------------ ------<br />1 1 none<br />2 1 none<br />3 1 none<br />4 1 none<br />5 1 none<br />6 1 none<br />7 1275 none<br />8 1275 none<br />9 20 GAO select<br />10 40 GAO none<br /><br />53.DUMP(s,fmt,start,length)<br />DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值<br />SQL> col global_name for a30<br />SQL> col dump_string for a50<br />SQL> set lin 200<br />SQL> select global_name,dump(global_name,1017,8,5) dump_string from global_name;<br />GLOBAL_NAME DUMP_STRING<br />------------------------------ --------------------------------------------------<br />ORACLE.WORLD Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D<br /><br />54.EMPTY_BLOB()和EMPTY_CLOB()<br />这两个函数都是用来对大数据类型字段进行初始化操作的函数<br /><br />55.GREATEST<br />返回一组表达式中的最大值,即比较字符的编码大小.<br />SQL> select greatest(’AA’,’AB’,’AC’) from dual;<br />GR<br />-- <br />AC<br />SQL> select greatest(’啊’,’安’,’天’) from dual;<br />GR<br />-- <br />天<br /><br />56.LEAST<br />返回一组表达式中的最小值<br />SQL> select least(’啊’,’安’,’天’) from dual;<br />LE<br />-- <br />啊<br /><br />57.UID<br />返回标识当前用户的唯一整数<br />SQL> show user<br />USER 为"GAO"<br />SQL> select username,user_id from dba_users where user_id=uid;<br />USERNAME USER_ID<br />------------------------------ ---------<br />GAO 25<br /><br />58.USER<br />返回当前用户的名字<br />SQL> select user from dual;<br />USER<br />------------------------------<br />GAO<br /><br />59.USEREVN<br />返回当前用户环境的信息,opt可以是:<br />ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE<br />ISDBA 查看当前用户是否是DBA如果是则返回true<br />SQL> select userenv(’isdba’) from dual;<br />USEREN<br />------<br />FALSE<br />SQL> select userenv(’isdba’) from dual;<br />USEREN<br />------<br />TRUE<br />SESSION<br />返回会话标志<br />SQL> select userenv(’sessionid’) from dual;<br />USERENV(’SESSIONID’)<br />--------------------<br />152<br />ENTRYID<br />返回会话人口标志<br />SQL> select userenv(’entryid’) from dual;<br />USERENV(’ENTRYID’)<br />------------------<br />0<br />INSTANCE<br />返回当前INSTANCE的标志<br />SQL> select userenv(’instance’) from dual;<br />USERENV(’INSTANCE’)<br />-------------------<br />1<br />LANGUAGE<br />返回当前环境变量<br />SQL> select userenv(’language’) from dual;<br />USERENV(’LANGUAGE’)<br />----------------------------------------------------<br />SIMPLIFIED CHINESE_CHINA.ZHS16GBK<br />LANG<br />返回当前环境的语言的缩写<br />SQL> select userenv(’lang’) from dual;<br />USERENV(’LANG’)<br />----------------------------------------------------<br />ZHS<br />TERMINAL<br />返回用户的终端或机器的标志<br />SQL> select userenv(’terminal’) from dual;<br />USERENV(’TERMINA<br />----------------<br />GAO<br />VSIZE(X)<br />返回X的大小(字节)数<br />SQL> select vsize(user),user from dual;<br />VSIZE(USER) USER<br />----------- ------------------------------<br />6 SYSTEM<br /><br /><br />60.AVG(DISTINCT|ALL)<br />all表示对所有的值求平均值,distinct只对不同的值求平均值<br />SQLWKS> create table table3(xm varchar(8),sal number(7,2));<br />语句已处理。<br />SQLWKS> insert into table3 values(’gao’,1111.11);<br />SQLWKS> insert into table3 values(’gao’,1111.11);<br />SQLWKS> insert into table3 values(’zhu’,5555.55);<br />SQLWKS> commit;<br />SQL> select avg(distinct sal) from gao.table3;<br />AVG(DISTINCTSAL)<br />----------------<br />3333.33<br />SQL> select avg(all sal) from gao.table3;<br />AVG(ALLSAL)<br />-----------<br />2592.59<br /><br />61.MAX(DISTINCT|ALL)<br />求最大值,ALL表示对所有的值求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次<br />SQL> select max(distinct sal) from scott.emp;<br />MAX(DISTINCTSAL)<br />----------------<br />5000<br /><br />62.MIN(DISTINCT|ALL)<br />求最小值,ALL表示对所有的值求最小值,DISTINCT表示对不同的值求最小值,相同的只取一次<br />SQL> select min(all sal) from gao.table3;<br />MIN(ALLSAL)<br />-----------<br />1111.11<br /><br />63.STDDEV(distinct|all)<br />求标准差,ALL表示对所有的值求标准差,DISTINCT表示只对不同的值求标准差<br />SQL> select stddev(sal) from scott.emp;<br />STDDEV(SAL)<br />-----------<br />1182.5032<br />SQL> select stddev(distinct sal) from scott.emp;<br />STDDEV(DISTINCTSAL)<br />-------------------<br />1229.951<br /><br />64.VARIANCE(DISTINCT|ALL)<br />求协方差<br />SQL> select variance(sal) from scott.emp;<br />VARIANCE(SAL)<br />-------------<br />1398313.9<br /><br />65.GROUP BY<br />主要用来对一组数进行统计<br />SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno;<br />DEPTNO COUNT(*) SUM(SAL)<br />--------- --------- ---------<br />10 3 8750<br />20 5 10875<br />30 6 9400<br /><br />66.HAVING<br />对分组统计再加限制条件<br />SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno having count(*)>=5;<br />DEPTNO COUNT(*) SUM(SAL)<br />--------- --------- ---------<br />20 5 10875<br />30 6 9400<br />SQL> select deptno,count(*),sum(sal) from scott.emp having count(*)>=5 group by deptno ;<br />DEPTNO COUNT(*) SUM(SAL)<br />--------- --------- ---------<br />20 5 10875<br />30 6 9400<br /><br />67.ORDER BY<br />用于对查询到的结果进行排序输出<br />SQL> select deptno,ename,sal from scott.emp order by deptno,sal desc;<br />DEPTNO ENAME SAL
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/212776#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Jul 2008 16:26:29 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/212776</link>
        <guid>http://garydo.javaeye.com/blog/212776</guid>
      </item>
      <item>
        <title>基于反相代理的Web缓存加速——可缓存的CMS系统设计</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/210378" style="color:red;">http://garydo.javaeye.com/blog/210378</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          作者：车东 发表于：2003-06-06 17:06 最后更新于：2007-04-12 11:04<br />版权声明：可以任意转载，转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。<br />http://www.chedong.com/tech/cache.html <br />--------------------------------------------------------------------------------<br />内容摘要：<br />对于一个日访问量达到百万级的网站来说，速度很快就成为一个瓶颈。除了优化内容发布系统的应用本身外，如果能把不需要实时更新的动态页面的输出结果转化成静态网页来发布，速度上的提升效果将是显著的，因为一个动态页面的速度往往会比静态页面慢2－10倍，而静态网页的内容如果能被缓存在内存里，访问速度甚至会比原有动态网页有2－3个数量级的提高。<br /><br /><br />动态缓存和静态缓存的比较 <br />基于反向代理加速的站点规划<br /><br />基于apache mod_proxy的反向代理加速实现 <br />基于squid的反向代理加速实现 <br />面向缓存的页面设计 <br />应用的缓存兼容性设计：<br />HTTP_HOST/SERVER_NAME和REMOTE_ADDR/REMOTE_HOST需要用 HTTP_X_FORWARDED_HOST/HTTP_X_FORWARDED_SERVER代替 <br />后台的内容管理系统的页面输出遵守可缓存的设计，这样就可以把性能问题交给前台的缓存服务器来解决了，从而大大简化CMS系统本身的复杂程度。<br /><br />静态缓存和动态缓存的比较 <br />静态页面的缓存可能有2种形式：其实主要区别就是CMS是否自己负责关联内容的缓存更新管理。<br /><br />静态缓存：是在新内容发布的同时就立刻生成相应内容的静态页面，比如：2003年3月22日，管理员通过后台内容管理界面录入一篇文章后，就立刻生成http://www.chedong.com/tech/2003/03/22/001.html这个静态页面，并同步更新相关索引页上的链接。<br /><br /><br />动态缓存：是在新内容发布以后，并不预先生成相应的静态页面，直到对相应内容发出请求时，如果前台缓存服务器找不到相应缓存，就向后台内容管理服务器发出请求，后台系统会生成相应内容的静态页面，用户第一次访问页面时可能会慢一点，但是以后就是直接访问缓存了。<br /><br />如果去ZDNet等国外网站会发现他们使用的基于Vignette内容管理系统都有这样的页面名称：0,22342566,300458.html。其实这里的0,22342566,300458就是用逗号分割开的多个参数：<br />第一次访问找不到页面后，相当于会在服务器端产生一个doc_type= 0&doc_id=22342566&doc_template=300458的查询，<br />而查询结果会生成的缓存的静态页面： 0,22342566,300458.html<br /><br />静态缓存的缺点：<br /><br />复杂的触发更新机制：这两种机制在内容管理系统比较简单的时候都是非常适用的。但对于一个关系比较复杂的网站来说，页面之间的逻辑引用关系就成为一个非常非常复杂的问题。最典型的例子就是一条新闻要同时出现在新闻首页和相关的3个新闻专题中，在静态缓存模式中，每发一篇新文章，除了这篇新闻内容本身的页面外，还需要系统通过触发器生成多个新的相关静态页面，这些相关逻辑的触发也往往就会成为内容管理系统中最复杂的部分之一。 <br />旧内容的批量更新： 通过静态缓存发布的内容，对于以前生成的静态页面的内容很难修改，这样用户访问旧页面时，新的模板根本无法生效。 <br />在动态缓存模式中，每个动态页面只需要关心，而相关的其他页面能自动更新，从而大大减少了设计相关页面更新触发器的需要。<br /><br /><br />以前做小型应用的时候也用过类似方式：应用首次访问以后将数据库的查询结果在本地存成一个文件，下次请求时先检查本地缓存目录中是否有缓存文件，从而减少对后台数据库的访问。虽然这样做也能承载比较大的负载，但这样的内容管理和缓存管理一体的系统是很难分离的，而且数据完整性也不是很好保存，内容更新时，应用需要把相应内容的的缓存文件删除。但是这样的设计在缓存文件很多的时候往往还需要将缓存目录做一定的分布，否则一个目录下的文件节点超过3000，rm *都会出错。<br /><br /><br />这时候，系统需要再次分工，把复杂的内容管理系统分解成：内容输入和缓存这2个相对简单的系统实现。<br /><br /><br />后台：内容管理系统，专心的将内容发布做好，比如：复杂的工作流管理，复杂的模板规则等…… <br />前台：页面的缓存管理则可以使用缓存系统实现<br /><br />______________________             ___________________|Squid Software cache|             |F5 Hardware cache|----------------------             -------------------            \                    /             \ ________________ /               |ASP |JSP |PHP |             Content Manage System               ----------------所以分工后：内容管理和缓存管理2者，无论哪一方面可选的余地都是非常大的：软件（比如前台80端口使用SQUID对后台8080的内容发布管理系统进行缓存），缓存硬件，甚至交给akamai这样的专业服务商。<br /><br /><br />面向缓存的站点规划<br />一个利用SQUID对多个站点进行做WEB加速http acceleration方案：<br />原先一个站点的规划可能是这样的：<br />200.200.200.207 www.chedong.com <br />200.200.200.208 news.chedong.com <br />200.200.200.209 bbs.chedong.com <br />200.200.200.205 images.chedong.com<br />面向缓存服务器的设计中：所有站点都通过外部DNS指向到同一个IP：200.200.200.200/201这2台缓存服务器上（使用2台是为了冗余备份） <br />                          _____________________   ________www.chedong.com  请求  \ |       cache box     | |        |  / 192.168.0.4   www.chedong.com news.chedong.com 请求   -| 200.200.200.200/201 |-|firewall| -  192.168.0.4   news.chedong.com bbs.chedong.com  请求  / |   /etc/hosts        | |   box  |  \ 192.168.0.3   bbs.chedong.com                          ---------------------   --------工作原理：<br />外部请求过来时，设置缓存根据配置文件进行转向解析。这样，服务器请求就可以转发到我们指定的内部地址上。<br />在处理多虚拟主机转向方面：mod_proxy比squid要简单一些：可以把不同服务转向后后台多个IP的不同端口上。<br />而squid只能通过禁用DNS解析，然后根据本地的/etc/hosts文件根据请求的域名进行地址转发，后台多个服务器必须使用相同的端口。<br />使用反向代理加速，我们不仅可以得到性能上的提升，而且还能获得额外的安全性和配置的灵活度：<br /><br />配置灵活性提高：可以自己在内部服务器上控制后台服务器的DNS解析，当需要在服务器之间做迁移调整时，就不用大量修改外部DNS配置了，只需要修改内部DNS实现服务的调整。 <br />数据安全性增加：所有后台服务器可以很方便的被保护在防火墙内。 <br />后台应用设计复杂程度降低：原先为了效率常常需要建立专门的图片服务器images.chedong.com和负载比较高的应用服务器 bbs.chedong.com分离，在反向代理加速模式中，所有前台请求都通过缓存服务器：实际上就都是静态页面，这样，应用设计时就不用考虑图片和应用本身分离了，也大大降低了后台内容发布系统设计的复杂程度，由于数据和应用都存放在一起，也方便了文件系统的维护和管理。<br /><br />基于Apache mod_proxy的反向代理缓存加速实现<br />Apache包含了mod_proxy模块，可以用来实现代理服务器，针对后台服务器的反向加速<br />安装apache 1.3.x 编译时：<br />--enable-shared=max --enable-module=most<br />注：Apache 2.x中mod_proxy已经被分离成mod_proxy和mod_cache：同时mod_cache有基于文件和基于内存的不同实现<br />创建/var/www/proxy，设置apache服务所用户可写<br />mod_proxy配置样例：反相代理缓存＋缓存<br />架设前台的www.example.com反向代理后台的www.backend.com的8080端口服务。<br />修改：httpd.conf<br />&lt;VirtualHost *><br />ServerName www.example.com<br />ServerAdmin admin@example.com<br /># reverse proxy setting<br />ProxyPass / http://www.backend.com:8080/<br />ProxyPassReverse / http://www.backend.com:8080/<br /># cache dir root<br />CacheRoot "/var/www/proxy"<br /># max cache storage<br />CacheSize 50000000<br /># hour: every 4 hour <br />CacheGcInterval 4<br /># max page expire time: hour<br />CacheMaxExpire 240<br /># Expire time = (now - last_modified) * CacheLastModifiedFactor <br />CacheLastModifiedFactor 0.1<br /># defalt expire tag: hour<br />CacheDefaultExpire 1<br /># force complete after precent of content retrived: 60-90%<br />CacheForceCompletion 80<br />CustomLog /usr/local/apache/logs/dev_access_log combined<br />&lt;/VirtualHost><br /><br />基于Squid的反向代理加速实现<br />Squid是一个更专用的代理服务器，性能和效率会比Apache的mod_proxy高很多。<br />如果需要combined格式日志补丁：<br />http://www.squid-cache.org/mail-archive/squid-dev/200301/0164.html<br />squid的编译：<br />./configure --enable-useragent-log  --enable-referer-log --enable-default-err-language=Simplify_Chinese \ --enable-err-languages="Simplify_Chinese English" --disable-internal-dns  <br />make<br />#make install<br />#cd /usr/local/squid<br />make dir cache<br />chown squid.squid *<br />vi /usr/local/squid/etc/squid.conf<br />在/etc/hosts中：加入内部的DNS解析，比如：<br />192.168.0.4 www.chedong.com <br />192.168.0.4 news.chedong.com<br />192.168.0.3 bbs.chedong.com<br />---------------------cut here----------------------------------<br /># visible name<br />visible_hostname cache.example.com<br /># cache config: space use 1G and memory use 256M<br />cache_dir ufs /usr/local/squid/cache 1024 16 256 <br />cache_mem 256 MB<br />cache_effective_user squid<br />cache_effective_group squid<br /><br />http_port 80<br />httpd_accel_host virtual<br />httpd_accel_single_host off<br />httpd_accel_port 80<br />httpd_accel_uses_host_header on<br />httpd_accel_with_proxy on<br /># accelerater my domain only<br />acl acceleratedHostA dstdomain .example1.com<br />acl acceleratedHostB dstdomain .example2.com<br />acl acceleratedHostC dstdomain .example3.com<br /># accelerater http protocol on port 80<br />acl acceleratedProtocol protocol HTTP<br />acl acceleratedPort port 80<br /># access arc<br />acl all src 0.0.0.0/0.0.0.0<br /># Allow requests when they are to the accelerated machine AND to the<br /># right port with right protocol<br />http_access allow acceleratedProtocol acceleratedPort acceleratedHostA<br />http_access allow acceleratedProtocol acceleratedPort acceleratedHostB<br />http_access allow acceleratedProtocol acceleratedPort acceleratedHostC<br /># logging<br />emulate_httpd_log on<br />cache_store_log none<br /># manager<br />acl manager proto cache_object<br />http_access allow manager all<br />cachemgr_passwd pass all<br /><br />----------------------cut here---------------------------------<br />创建缓存目录：<br />/usr/local/squid/sbin/squid -z<br />启动squid<br />/usr/local/squid/sbin/squid<br />停止squid：<br />/usr/local/squid/sbin/squid -k shutdown<br />启用新配置：<br />/usr/local/squid/sbin/squid -k reconfig<br />通过crontab每天0点截断/轮循日志：<br />0 0 * * * (/usr/local/squid/sbin/squid -k rotate) <br /><br />可缓存的动态页面设计<br />什么样的页面能够比较好的被缓存服务器缓存呢？如果返回内容的HTTP HEADER中有"Last-Modified"和"Expires"相关声明，比如：<br />Last-Modified: Wed, 14 May 2003 13:06:17 GMT<br />Expires: Fri, 16 Jun 2003 13:06:17 GMT<br />前端缓存服务器在期间会将生成的页面缓存在本地：硬盘或者内存中，直至上述页面过期。<br />因此，一个可缓存的页面： <br />页面必须包含Last-Modified: 标记<br />一般纯静态页面本身都会有Last-Modified信息，动态页面需要通过函数强制加上，比如在PHP中：<br />// always modified now<br />header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");<br /><br /><br />必须有Expires或Cache-Control: max-age标记设置页面的过期时间：<br />对于静态页面，通过apache的mod_expires根据页面的MIME类型设置缓存周期：比如图片缺省是1个月，HTML页面缺省是2天等。<br />&lt;IfModule mod_expires.c> <br />    ExpiresActive on<br />    ExpiresByType image/gif "access plus 1 month"<br />    ExpiresByType text/css "now plus 2 day"<br />    ExpiresDefault "now plus 1 day"<br />&lt;/IfModule><br /><br />对于动态页面，则可以直接通过写入HTTP返回的头信息，比如对于新闻首页index.php可以是20分钟，而对于具体的一条新闻页面可能是1天后过期。比如：在php中加入了1个月后过期：<br />// Expires one month later<br />header("Expires: " .gmdate ("D, d M Y H:i:s", time() + 3600 * 24 * 30). " GMT");<br /><br /><br />如果服务器端有基于HTTP的认证，必须有Cache-Control: public标记，允许前台 <br />ASP应用的缓存改造 首先在公用的包含文件中(比如include.asp)加入以下公用函数：<br />&lt;%<br />' Set Expires Header in minutes<br />Function SetExpiresHeader(ByVal minutes) <br />    ' set Page Last-Modified Header:<br />    ' Converts date (19991022 11:08:38) to http form (Fri, 22 Oct 1999 12:08:38 GMT)<br />    Response.AddHeader "Last-Modified", DateToHTTPDate(Now())<br />    <br />    ' The Page Expires in Minutes<br />    Response.Expires = minutes<br />    <br />    ' Set cache control to externel applications<br />    Response.CacheControl = "public"<br />End Function <br />' Converts date (19991022 11:08:38) to http form (Fri, 22 Oct 1999 12:08:38 GMT)<br />Function DateToHTTPDate(ByVal OleDATE)<br />  Const GMTdiff = #08:00:00#<br />  OleDATE = OleDATE - GMTdiff<br />  DateToHTTPDate = engWeekDayName(OleDATE) & _<br />    ", " & Right("0" & Day(OleDATE),2) & " " & engMonthName(OleDATE) & _<br />    " " & Year(OleDATE) & " " & Right("0" & Hour(OleDATE),2) & _<br />    ":" & Right("0" & Minute(OleDATE),2) & ":" & Right("0" & Second(OleDATE),2) & " GMT"<br />End Function <br />Function engWeekDayName(dt)<br />    Dim Out<br />    Select Case WeekDay(dt,1)<br />        Case 1:Out="Sun"<br />        Case 2:Out="Mon"<br />        Case 3:Out="Tue"<br />        Case 4:Out="Wed"<br />        Case 5:Out="Thu"<br />        Case 6:Out="Fri"<br />        Case 7:Out="Sat"<br />    End Select<br />    engWeekDayName = Out<br />End Function<br />Function engMonthName(dt)<br />    Dim Out<br />    Select Case Month(dt)<br />        Case 1:Out="Jan"<br />        Case 2:Out="Feb"<br />        Case 3:Out="Mar"<br />        Case 4:Out="Apr"<br />        Case 5:Out="May"<br />        Case 6:Out="Jun"<br />        Case 7:Out="Jul"<br />        Case 8:Out="Aug"<br />        Case 9:Out="Sep"<br />        Case 10:Out="Oct"<br />        Case 11:Out="Nov"<br />        Case 12:Out="Dec"<br />    End Select<br />    engMonthName = Out<br />End Function<br />%><br />然后在具体的页面中，比如index.asp和news.asp的“最上面”加入以下代码：HTTP Header<br />&lt;!--#include file="../include.asp"--><br />&lt;%<br />'页面将被设置20分钟后过期<br />SetExpiresHeader(20)<br />%><br /><br />应用的缓存兼容性设计<br /><br />经过代理以后，由于在客户端和服务之间增加了中间层，因此服务器无法直接拿到客户端的IP，服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTD头信息中，增加了HTTP_X_FORWARDED_????信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址：<br />下面是2个例子，用于说明缓存兼容性应用的设计原则：<br /><br />    '对于一个需要服务器名的地址的ASP应用：不要直接引用HTTP_HOST/SERVER_NAME，判断一下是否有HTTP_X_FORWARDED_SERVER    function getHostName ()        dim hostName as String = ""        hostName = Request.ServerVariables("HTTP_HOST")        if not isDBNull(Request.ServerVariables("HTTP_X_FORWARDED_HOST")) then            if len(trim(Request.ServerVariables("HTTP_X_FORWARDED_HOST"))) > 0 then                hostName = Request.ServerVariables("HTTP_X_FORWARDED_HOST")            end if        end if        return hostNmae    end function    //对于一个需要记录客户端IP的PHP应用：不要直接引用REMOTE_ADDR，而是要使用HTTP_X_FORWARDED_FOR，    function getUserIP (){        $user_ip = $_SERVER["REMOTE_ADDR"];        if ($_SERVER["HTTP_X_FORWARDED_FOR"]) {            $user_ip = $_SERVER["HTTP_X_FORWARDED_FOR"];        }    } <br />注意：HTTP_X_FORWARDED_FOR如果经过了多个中间代理服务器，有何能是逗号分割的多个地址，<br />比如：200.28.7.155,200.10.225.77 unknown,219.101.137.3<br />因此在很多旧的数据库设计中（比如BBS）往往用来记录客户端地址的字段被设置成20个字节就显得过小了。<br />经常见到类似以下的错误信息：<br /><br />Microsoft JET Database Engine 错误 '80040e57' <br /><br />字段太小而不能接受所要添加的数据的数量。试着插入或粘贴较少的数据。 <br /><br />/inc/char.asp，行236 <br /><br />原因就是在设计客户端访问地址时，相关用户IP字段大小最好要设计到50个字节以上，当然经过3层以上代理的几率也非常小。<br />如何检查目前站点页面的可缓存性（Cacheablility）呢？可以参考以下2个站点上的工具：<br />http://www.ircache.net/cgi-bin/cacheability.py<br /><br />附：SQUID性能测试试验<br /><br />phpMan.php是一个基于php的man page server，每个man<br />page需要调用后台的man命令和很多页面格式化工具，系统负载比较高，提供了Cache<br />Friendly的URL，以下是针对同样的页面的性能测试资料：<br />测试环境：Redhat 8 on Cyrix 266 / 192M Mem <br />测试程序：使用apache的ab(apache benchmark)：<br />测试条件：请求50次，并发50个连接<br />测试项目：直接通过apache 1.3 (80端口) vs squid 2.5(8000端口：加速80端口) <br /><br />测试1：无CACHE的80端口动态输出：<br />ab -n 100 -c 10 http://www.chedong.com:81/phpMan.php/man/kill/1<br />This is ApacheBench, Version 1.3d &lt;$Revision: 1.2 $> apache-1.3<br />Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd,<br />http://www.zeustech.net/<br />Copyright (c) 1998-2001 The Apache Group, http://www.apache.org/<br /><br />Benchmarking localhost (be patient).....done<br />Server Software:       <br />Apache/1.3.23                                     <br />Server Hostname:        localhost<br />Server<br />Port:           <br />80<br /><br />Document Path:         <br />/phpMan.php/man/kill/1<br />Document Length:        4655 bytes<br /><br />Concurrency Level:      5<br />Time taken for tests:   63.164 seconds<br />Complete requests:      50<br />Failed requests:        0<br />Broken pipe errors:     0<br />Total transferred:      245900 bytes<br />HTML transferred:       232750 bytes<br />Requests per second:    0.79 [#/sec] (mean)<br />Time per request:       6316.40 [ms]<br />(mean)<br />Time per request:       1263.28 [ms]<br />(mean, across all concurrent requests)<br />Transfer rate:         <br />3.89 [Kbytes/sec] received<br /><br />Connnection Times (ms)<br />             <br />min  mean[+/-sd] median   max<br />Connect:        0   <br />29  106.1      0   553<br />Processing:  2942  6016<br />1845.4   6227 10796<br /><br />Waiting:    <br />2941  5999 1850.7   6226 10795<br /><br />Total:      <br />2942  6045 1825.9   6227 10796<br /><br />Percentage of the requests served within a certain time (ms)<br />  50%   6227<br />  66%   7069<br />  75%   7190<br />  80%   7474<br />  90%   8195<br />  95%   8898<br />  98%   9721<br />  99%  10796<br /> 100%  10796 (last request)<br /><br />测试2：SQUID缓存输出<br />/home/apache/bin/ab -n50 -c5<br />"http://localhost:8000/phpMan.php/man/kill/1"<br />This is ApacheBench, Version 1.3d &lt;$Revision: 1.2 $> apache-1.3<br />Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd,<br />http://www.zeustech.net/<br />Copyright (c) 1998-2001 The Apache Group, http://www.apache.org/<br /><br />Benchmarking localhost (be patient).....done<br />Server Software:       <br />Apache/1.3.23                                     <br />Server Hostname:        localhost<br />Server<br />Port:           <br />8000<br /><br />Document Path:         <br />/phpMan.php/man/kill/1<br />Document Length:        4655 bytes<br /><br />Concurrency Level:      5<br />Time taken for tests:   4.265 seconds<br />Complete requests:      50<br />Failed requests:        0<br />Broken pipe errors:     0<br />Total transferred:      248043 bytes<br />HTML transferred:       232750 bytes<br />Requests per second:    11.72 [#/sec] (mean)<br />Time per request:       426.50 [ms] (mean)<br />Time per request:       85.30 [ms] (mean,<br />across all concurrent requests)<br />Transfer rate:         <br />58.16 [Kbytes/sec] received<br /><br />Connnection Times (ms)<br />             <br />min  mean[+/-sd] median   max<br />Connect:       <br />0     1   <br />9.5      0    68<br />Processing:    <br />7    83  537.4     <br />7  3808<br /><br />Waiting:       <br />5    81  529.1     <br />6  3748<br /><br />Total:         <br />7    84  547.0     <br />7  3876<br /><br />Percentage of the requests served within a certain time (ms)<br />  50%      7<br />  66%      7<br />  75%      7<br />  80%      7<br />  90%      7<br />  95%      7<br />  98%      8<br />  99%   3876<br /> 100%   3876 (last request)<br /><br />结论：No Cache / Cache = 6045 / 84 = 70<br />结论：对于可能被缓存请求的页面，服务器速度可以有2个数量级的提高，因为SQUID是把缓存页面放在内存里的（因此几乎没有硬盘I/O操作）。<br /><br />小节：<br /><br /><br /><br />大访问量的网站应尽可能将动态网页生成静态页面作为缓存发布，甚至对于搜索引擎这样的动态应用来说，缓存机制也是非常非常重要的。 <br /><br />在动态页面中利用HTTP Header定义缓存更新策略。 <br /><br />利用缓存服务器获得额外的配置和安全性 <br /><br />日志非常重要：SQUID日志缺省不支持COMBINED日志，但对于需要REFERER日志的这个补丁非常重要：http://www.squid-cache.org/mail-archive/squid-dev/200301/0164.html<br /><br /><br /><br /><br />参考资料：<br />HTTP代理缓存 <br />http://vancouver-webpages.com/proxy.html<br /><br /><br />可缓存的页面设计<br />http://linux.oreillynet.com/pub/a/linux/2002/02/28/cachefriendly.html<br />运用ASP.NET的输出缓冲来存储动态页面 -  开发者 - ZDNet China<br />http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39110239-2,00.htm<br />相关RFC文档：<br /><br /><br /><br />RFC<br />2616:<br /><br /><br /><br />section<br />13 (Caching) <br /><br />section<br />14.9 (Cache-Control header) <br /><br />section<br />14.21 (Expires header) <br /><br />section<br />14.32 (Pragma: no-cache) is important if you are interacting with<br />HTTP/1.0 caches <br /><br />section<br />14.29 (Last-Modified) is the most common validation method <br /><br />section<br />3.11 (Entity Tags) covers the extra validation method <br /><br /><br /><br /><br /><br />可缓存性检查<br />http://www.web-caching.com/cacheability.html<br />缓存设计要素<br />http://vancouver-webpages.com/CacheNow/detail.html<br /><br />ZOPE上的几篇使用APACHE MOD_PROXY MOD_GZIP加速的文档
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/210378#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jul 2008 09:14:21 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/210378</link>
        <guid>http://garydo.javaeye.com/blog/210378</guid>
      </item>
      <item>
        <title>Apache反向代理设置 </title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/210376" style="color:red;">http://garydo.javaeye.com/blog/210376</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1>修改 httpd.conf 文件中：<br />LoadModule proxy_module modules/mod_proxy.so<br />LoadModule proxy_connect_module modules/mod_proxy_connect.so<br />LoadModule proxy_http_module modules/mod_proxy_http.so<br />LoadModule proxy_ftp_module modules/mod_proxy_ftp.so<br />模块功能设置为启用。<br /><br />2>在 httpd.conf 文件中，添加：<br />ProxyPass /Test http://127.0.0.1:8080/<br />ProxyPassReverse /Test http://127.0.0.1:8080<br />&lt;proxy  http://127.0.0.1:8080><br />    AllowOverride None<br />    Order Deny,Allow<br />    Allow from all<br />&lt;/proxy><br /><br />步骤2的功能：访问 http://127.0.0.1/Test/ 时，会重新反向代理访至 http://127.0.0.1:8080<br /><br />3>重新启动Apache.
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/210376#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jul 2008 09:09:27 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/210376</link>
        <guid>http://garydo.javaeye.com/blog/210376</guid>
      </item>
      <item>
        <title>【转贴】CSS样式在Firefox与IE中的差异</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/210160" style="color:red;">http://garydo.javaeye.com/blog/210160</a>&nbsp;
          发表时间: 2008年07月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1、对css缩写的支持问题：<br />　　不论是ie 还是ff对css的缩写都有一小点问题，比如:border: 0xp solid #fff;两个浏览器支持都没有问题，但如果四个边的magin不同情况下，就不能用这种缩写了，无论是ie还是ff又会出现边界解释错误，而导致页面变形。<br />正确缩写：<br />border-width:0px 1px 2px 3px;<br />border-style:solid;<br />border-color:#fff;<br /><br />2、magin padding 等默认值<br />　　ie对于css的magin padding 等默认值为0px，但ff却不一样，为了保持外观的统一性，即使padding为0你也要写上，以免ff在浏览中的错位。<br /><br />3、居中<br />　　在IE里用body {text-align: center;}就可以居中对齐.到了firefox里总是在左边。但是如果加了float: right;还能到右边就是不能到中间，FF下面设置容器的左右外补丁为auto就可以了。<br />margin-right:auto;<br />margin-left:auto;<br />比如: margin:0 auto;<br /><br />与臭虫为友——浏览器补救办法，臭虫以及解决方案（第一部分）<br />http://realazy.org/blog/2006/07/29/working-with-buggy-browsers-1<br /><br />====未整理=============================================================<br />Firefox与IE在CSS样式中的差异<br />1 针对firefox ie6 ie7的css样式<br />现在大部分都是用!important来hack，对于ie6和firefox测试可以正常显示，<br />但是ie7对!important可以正确解释，会导致页面没按要求显示！找到一个针<br />对IE7不错的hack方式就是使用“*+html”，现在用IE7浏览一下，应该没有问题了。<br />现在写一个CSS可以这样：<br /><br />#1 { color: #333; } /* Moz */<br />* html #1 { color: #666; } /* IE6 */<br />*+html #1 { color: #999; } /* IE7 */<br />那么在firefox下字体颜色显示为#333，IE6下字体颜色显示为#666，IE7下字体颜色显示为#999。<br /><br />2 css布局中的居中问题<br />主要的样式定义如下：<br /><br />body {TEXT-ALIGN: center;}<br />#center { MARGIN-RIGHT: auto; MARGIN-LEFT: auto; }<br />说明：<br />首先在父级元素定义TEXT-ALIGN: center;这个的意思就是在父级元素内的内容居中；对于IE这样设定就已经可以了。<br />但在mozilla中不能居中。解决办法就是在子元素定义时候设定时再加上“MARGIN-RIGHT: auto;MARGIN-LEFT: auto; ”<br />需要说明的是，如果你想用这个方法使整个页面要居中，建议不要套在一个DIV里，你可以依次拆出多个div，<br />只要在每个拆出的div里定义MARGIN-RIGHT: auto;MARGIN-LEFT: auto; 就可以了。<br /><br />3    盒模型不同解释.<br /><br />#box{     width:600px;          //for     ie6.0-     w\idth:500px;         //for    ff+ie6.0}<br />#box{      width:600px!important              //for ff      width:600px;          //for    ff+ie6.0      width /**/:500px;         //for     ie6.0-}<br /><br />4 浮动ie产生的双倍距离<br /><br />#box{     float:left;     width:100px;     margin:0 0 0 100px;    //这种情况之下IE会产生200px的距离     display:inline;     //使浮动忽略}<br />这里细说一下block,inline两个元素,Block元素的特点是:总是在新行上开始,高度,宽度,行高,边距都可以控制(块元素);Inline元素的特点是:和其他元素在同一行上,...不可控制(内嵌元素);<br /><br />#box{     display:block; //可以为内嵌元素模拟为块元素     display:inline; //实现同一行排列的的效果     diplay:table;<br /><br />5 IE与宽度和高度的问题<br /><br />IE不认得min-这个定义，但实际上它把正常的width和height当作有min的情况来使。这样问题就大了，如果只用宽度和高度，<br />正常的浏览器里这两个值就不会变，如果只用min-width和min-height的话，IE下面根本等于没有设置宽度和高度。<br />比如要设置背景图片，这个宽度是比较重要的。要解决这个问题，可以这样：<br />#box{      width: 80px;      height: 35px;}html>body #box{      width: auto;      height: auto;      min-width: 80px;      min-height: 35px;}<br /><br />6 页面的最小宽度<br /><br />min-width是个非常方便的CSS命令，它可以指定元素最小也不能小于某个宽度，这样就能保证排版一直正确。但IE不认得这个，<br />而它实际上把width当做最小宽度来使。为了让这一命令在IE上也能用，可以把一个&lt;div> 放到 &lt;body> 标签下，然后为div指定一个类：<br />然后CSS这样设计：<br />#container{    min-width: 600px;    width:expression(document.body.clientWidth &lt; 600? "600px": "auto" );}<br />第一个min-width是正常的；但第2行的width使用了Javascript，这只有IE才认得，这也会让你的HTML文档不太正规。它实际上通过Javascript的判断来实现最小宽度。<br /><br />7 清除浮动<br /><br />.hackbox{         display:table; //将对象作为块元素级的表格显示}或者.hackbox{          clear:both;}<br />或者加入:after（伪对象）,设置在对象后发生的内容，通常和content配合使用，IE不支持此伪对象，非Ie 浏览器支持，<br />所以并不影响到IE/WIN浏览器。这种的最麻烦的......#box:after{      content: ".";       display: block;      height: 0;       clear: both;       visibility: hidden;}<br /><br />8 DIV浮动IE文本产生3象素的bug<br /><br />左边对象浮动，右边采用外补丁的左边距来定位，右边对象内的文本会离左边有3px的间距.<br /><br />#box{      float:left;      width:800px;}#left{      float:left;      width:50%;}#right{      width:50%;}*html #left{      margin-right:-3px;     //这句是关键}<br />     HTML代码&lt;div id="box">      &lt;div id="left">&lt;/div>     &lt;div id="right">&lt;/div>&lt;/div><br /><br />9 属性选择器(这个不能算是兼容,是隐藏css的一个bug<br /><br />p[id]{}div[id]{}<br />这个对于IE6.0和IE6.0以下的版本都隐藏,FF和OPera作用<br />属性选择器和子选择器还是有区别的,子选择器的范围从形式来说缩小了,属性选择器的范围比较大,如p[id]中,所有p标签中有id的都是同样式的.<br /><br />10 IE捉迷藏的问题<br />    <br />     当div应用复杂的时候每个栏中又有一些链接，DIV等这个时候容易发生捉迷藏的问题。<br />有些内容显示不出来，当鼠标选择这个区域是发现内容确实在页面。<br />解决办法：对#layout使用line-height属性 或者给#layout使用固定高和宽。页面结构尽量简单。<br /><br />11 高度不适应<br />     <br />      高度不适应是当内层对象的高度发生变化时外层高度不能自动进行调节，特别是当内层对象使用<br />margin 或paddign 时。<br />例：<br />     &lt;div id="box"><br />       &lt;p>p对象中的内容&lt;/p><br />     &lt;/div><br />CSS：#box {background-color:#eee; }       <br />#box p {margin-top: 20px;margin-bottom: 20px; text-align:center; }<br />解决方法：在P对象上下各加2个空的div对象CSS代码：.1{height:0px;overflow:hidden;}或者为DIV加上border属性。
          <br/>
          <span style="color:red;">
            <a href="http://garydo.javaeye.com/blog/210160#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Jul 2008 14:56:48 +0800</pubDate>
        <link>http://garydo.javaeye.com/blog/210160</link>
        <guid>http://garydo.javaeye.com/blog/210160</guid>
      </item>
      <item>
        <title>免费的图标生成器</title>
        <author>garydo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://garydo.javaeye.com">garydo</a>&nbsp;
          链接：<a href="http://garydo.javaeye.com/blog/210123" style="color:red;">http://garydo.javaeye.com/blog/210123</a>&nbsp;
          发表时间: 2008年07月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          站点一<br />http://www.nhacks.com/email/<br /><br />　　 支持多种域名的Email图标的生成。<br /><br />　　● 只能设置"@"之前的文本，支持的Mail类型的包括GMail、Hotmail、Yahoo、MSN、AOL、ATT、Bigfoot、 RocketMail、QQ、Comcast、Netscape、Blueyonder、SBCGlobal、Earthlink、Lycos、 Sympatico、Rogers等。<br /><br />　　● 每种Email只能生成系统制定的样式图标。<br /><br />站点二<br />　　http://sagittarius.dip.jp/~toshi/cgi-bin/designmail/designmail.html<br />　　http://sagittarius.dip.jp/~toshi/cgi-bin/catmark/catmark.html<br /><br />　　两个地址支持两种风格任意文本的Email图标的生成。<br /><br />　　● 支持整个Email文本，用户可以自由定制Email文本。<br /><br />　　● 支持多种参数的设置，包括图标的风格、颜色、字体、生成图标文件类型等支持任何文本。<br /><br />站点三<br />http://pic.xabar.net/generator/email.asp<br /><br />　支持多种域名的Email图标的生成。<br /><br />站点四<br />http://www.eoool.com/<br /><br />　　支持多种域名的头像、签名、题图、广告、邮件、聊天、博客、书签、朋友圈、按钮等工具图标的生成。<br /><br />站点五<br />http://phorum.com.tw/Generator.aspx<br /><br />　　支持域名图标的生成。<br /><br />站点六<br />http://gizmo967.mgs3.org/Gmail/<br /><br />　　支持Gmail图标的生成。<br /><br />　　<br />　　站点七<br /><br />http://www.feedforall.com/public/rss-graphic-tool.htm<br /><br />　　支持RSS图标的生成。<br /><br />　<br />　　站点八  http://email.playtime.uni.cc/<br /><br />　　支持Gmail、Yahoo、Hotmail、MSN等类型的邮箱图标生成。<br /><br /><br />　　站点九  http://www.html-kit.com/e/favicon.cgi<br /><br />　　支持收藏夹图标生成。<br />站点十  http://www.lucazappa.com/brilliantMaker/buttonImage.php<br /><br />　　支持各种按钮类型的图标生成。<br /><br />　　站点十一  http://www.abi-station.com/tchinese/<br /><br />　　支持各种类型图片的生成，可以选择设置的条件非常灵活。<br /><br />站点十二  http://www.myelogo.com/<br /><br />　　支持客户信息显示、自定义文字及图片，详情请参考本站的《介绍一个免费生成动态签名图标的站点》。<br />站点十三  http://www.kalsey.com/tools/buttonmaker/<br /><br />　 支持按钮类型的图标生成。<br /><br />　　站点十四  http://www.danasoft.com/<br /><br />　　支持多种语言，客户信息显示（无需注册）、自定义文字（需注册登录才可以设置）。<br /><br />站点十五  http://www.youmade.com/font/<br /><br />　 支持大量中文字体签名图标生成。<br /><br />站点十六  http://