<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Out of date</title>
    <description></description>
    <link>http://library.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>关闭gnome最小化动画</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/189082" style="color:red;">http://library.javaeye.com/blog/189082</a>&nbsp;
          发表时间: 2008年05月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          输入<br />gconf-editor<br />进入gnome控制台程序<br /><br />app/metacity/general/reduced_resources 选上<br />返回最上一层<br /><br />desktop/genome/interface/accessibility 选上 （如果不选这个 移动窗口的时候会出现一些黑方格）<br /><br />这样就没有最小化时候的讨厌的黑框了 而且速度加快很多 比那种打开metacity的混合效果要快多了
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/189082#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>Sat, 03 May 2008 17:53:19 +0800</pubDate>
        <link>http://library.javaeye.com/blog/189082</link>
        <guid>http://library.javaeye.com/blog/189082</guid>
      </item>
      <item>
        <title>Resin配置文件中文说明</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/188872" style="color:red;">http://library.javaeye.com/blog/188872</a>&nbsp;
          发表时间: 2008年05月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          see:http://bbs.163jsp.com/posts/list/415.html
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/188872#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, 02 May 2008 17:18:12 +0800</pubDate>
        <link>http://library.javaeye.com/blog/188872</link>
        <guid>http://library.javaeye.com/blog/188872</guid>
      </item>
      <item>
        <title>Apache通过Rewrite实现绑定多个域名以及二级域名的方法</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/187563" style="color:red;">http://library.javaeye.com/blog/187563</a>&nbsp;
          发表时间: 2008年04月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          首先，你要有一个泛解析的顶级域名 yourDomain.com<br />新网为例，在后台添加一条A记录*.yourDomain.com<br /><br />打开http.conf<br />在文件尾部添加NameVirtualHost *<br />简单的添加：<br />&lt;VirtualHost *><br />  DocumentRoot /usr/local/www<br />  ServerName yourDomain.com<br />  ServerAlias *.yourDomain.com<br />  RewriteEngine on<br />  RewriteMap lowercase int:tolower<br />  RewriteMap vhost txt:/usr/local/apache2/conf/vhost.map<br />  RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$<br />  RewriteCond ${vhost:%1} ^(/.*)$<br />  RewriteRule ^/(.*)$ %1/$1<br />&lt;/VirtualHost><br /><br /><span style="font-size: xx-large">注：</span><span style="color: red">其中/usr/local/apache2/conf/为你的apache的配置文件夹根据实际情况修改</span><br /><br />进入配置文件目录新建vhost.map文件，添加内容如下：<br />www.yourDomain.com /usr/local/www<br />bbs.yourDomain.com /usr/local/www/bbs<br />blog.yourDomain.com /usr/local/www/blog<br /><br />启动或重启一次apache<br /><br />打开浏览器<br />输入www.yourDomain.com将访问到/usr/local/www下的内容<br />输入bbs.yourDomain.com将访问到/usr/local/www/bbs下的内容<br />依次类推。。。<br />理论上可以设无限个二级域名，而且不用重启服务器
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/187563#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, 28 Apr 2008 15:19:00 +0800</pubDate>
        <link>http://library.javaeye.com/blog/187563</link>
        <guid>http://library.javaeye.com/blog/187563</guid>
      </item>
      <item>
        <title>mysql 性能优化</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/184883" style="color:red;">http://library.javaeye.com/blog/184883</a>&nbsp;
          发表时间: 2008年04月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          DirectAdmin 官方的一个：<br /><div class="quote_title">引用</div><div class="quote_div">[mysqld]<br />skip-locking<br />skip-innodb<br />query_cache_limit=1M<br />query_cache_size=32M<br />query_cache_type=1<br />max_connections=500<br />interactive_timeout=100<br />wait_timeout=100<br />connect_timeout=10<br />thread_cache_size=128<br />key_buffer=16M<br />join_buffer=1M<br />max_allowed_packet=16M<br />table_cache=1024<br />record_buffer=1M<br />sort_buffer_size=2M<br />read_buffer_size=2M<br />max_connect_errors=10<br /># Try number of CPU's*2 for thread_concurrency<br />thread_concurrency=2<br />myisam_sort_buffer_size=64M<br />log-bin<br />server-id=1<br /><br />[safe_mysqld]<br />err-log=/var/log/mysqld.log<br />open_files_limit=8192<br /><br />[mysqldump]<br />quick<br />max_allowed_packet=16M<br /><br />[mysql]<br />no-auto-rehash<br />#safe-updates<br /><br />[isamchk]<br />key_buffer=64M<br />sort_buffer=64M<br />read_buffer=16M<br />write_buffer=16M<br /><br />[myisamchk]<br />key_buffer=64M<br />sort_buffer=64M<br />read_buffer=16M<br />write_buffer=16M<br /><br />[mysqlhotcopy]<br />interactive-timeout</div><br />国外热心人<br /><div class="quote_title">引用</div><div class="quote_div">[mysqld]<br />datadir=/var/lib/mysql<br />socket=/var/lib/mysql/mysql.sock<br />skip-locking<br />#skip-networking<br />safe-show-database<br />query_cache_limit=1M<br />query_cache_size=64M ## 32MB for every 1GB of RAM<br />query_cache_type=1<br />max_user_connections=200<br />max_connections=500<br />interactive_timeout=10<br />wait_timeout=20<br />connect_timeout=20<br />thread_cache_size=128<br />key_buffer=128M ## 64MB for every 1GB of RAM<br />join_buffer=1M<br />max_connect_errors=20<br />max_allowed_packet=16M<br />table_cache=1024<br />record_buffer=1M<br />sort_buffer_size=2M ## 1MB for every 1GB of RAM<br />read_buffer_size=2M ## 1MB for every 1GB of RAM<br />read_rnd_buffer_size=2M  ## 1MB for every 1GB of RAM<br />thread_concurrency=2 ## Number of CPUs x 2<br />myisam_sort_buffer_size=64M<br />server-id=1<br />log_slow_queries=/var/log/mysql-slow-queries.log<br />long_query_time=2<br />collation-server=latin1_general_ci<br />old-passwords<br /><br />[mysql.server]<br />user=mysql<br />basedir=/var/lib<br /><br />[safe_mysqld]<br />err-log=/var/log/mysqld.log<br />pid-file=/var/lib/mysql/mysql.pid<br />open_files_limit=8192<br /><br />[mysqldump]<br />quick<br />max_allowed_packet=16M<br /><br />[mysql]<br />no-auto-rehash<br />#safe-updates<br /><br />[isamchk]<br />key_buffer=32M<br />sort_buffer=32M<br />read_buffer=16M<br />write_buffer=16M<br /><br />[myisamchk]<br />key_buffer=32M<br />sort_buffer=32M<br />read_buffer=16M<br />write_buffer=16M<br /><br />[mysqlhotcopy]<br />interactive-timeout</div>
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/184883#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 Apr 2008 13:11:17 +0800</pubDate>
        <link>http://library.javaeye.com/blog/184883</link>
        <guid>http://library.javaeye.com/blog/184883</guid>
      </item>
      <item>
        <title>RedHat上VSFTP＋MySQL虚拟用户配置过程讲解</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/184263" style="color:red;">http://library.javaeye.com/blog/184263</a>&nbsp;
          发表时间: 2008年04月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          VSFTPD是一种在UNIX/Linux中非常安全且快速的FTP服务器，目前已经被许多大型站点所采用。VSFTPD支持将用户名和口令保存在数据库文件或数据库服务器中。VSFTPD称这种形式的用户为虚拟用户。相对于FTP的本地（系统）用户来说，虚拟用户只是FTP服务器的专有用户，虚拟用户只能访问FTP服务器所提供的资源，这大大增强系统本身的安全性。相对于匿名用户而言，虚拟用户需要用户名和密码才能获取FTP服务器中的文件，增加了对用户和下载的可管理性。对于需要提供下载服务，但又不希望所有人都可以匿名下载；既需要对下载用户进行管理，又考虑到主机安全和管理方便的FTP站点来说，虚拟用户是一种极好的解决方案。本文介绍在RedHat Linux 9上如何将VSFTPD的虚拟用户名和密码保存在MySQL数据库服务器中。<br /><br />　　一、VSFTPD的安装<br />　　目前，VSFTPD的最新版本是1.2.0版。官方下载地址为ftp://vsftpd.beasts.org/users/cevans/vsftpd-1.2.0.tar.gz。在安装前，需要先做以下准备工作：<br /><br />　　VSFTPD默认配置中需要“nobody”用户。在系统中添加此用户，如果用户已经存在，useradd命令有相应提示。<br />　　[root@hpe45 root]# useradd nobody<br />　　useradd: user nobody exists<br /><br />　　VSFTPD默认配置中需要“/usr/share/empty”目录。在系统中此目录，如果目录已经存在，mkdir命令有相应提示。<br />　　[root@hpe45 root]# mkdir /usr/share/empty/<br />　　mkdir: cannot create directory '/usr/share/empty': File exists<br /><br />　　VSFTPD提供匿名FTP服务时，需要“ftp”用户和一个有效的匿名目录。<br />　　[root@hpe45 root]# mkdir /var/ftp/<br />　　[root@hpe45 root]# useradd -d /var/ftp ftp<br />　　接下来的操作对于ftp用户是否已经存在都是有用的。<br />　　[root@hpe45 root]# chown root.root /var/ftp<br />　　[root@hpe45 root]# chmod og-w /var/ftp<br /><br />　　以上准备工作完成后，我们就可以开始编译源代码了。假定我们下载的vsftpd-1.2.0.tar.gz在/root目录，执行以下命令：<br />　　[root@hpe45 root]# tar zxvf vsftpd-1.2.0.tar.gz<br />　　[root@hpe45 root]# cd vsftpd-1.2.0<br />　　[root@hpe45 vsftpd-1.2.0]# make<br />　　[root@hpe45 vsftpd-1.2.0]# make install<br /><br />　　上面的“make install”命令将编译好的二进制文件、手册等复制到相应目录。在RHL9上，可能需要手动执行以下复制：<br />　　[root@hpe45 vsftpd-1.2.0]# cp vsftpd /usr/local/sbin/vsftpd<br />　　[root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf.5 /usr/local/share/man/man5<br />　　[root@hpe45 vsftpd-1.2.0]# cp vsftpd.8 /usr/local/share/man/man8<br /><br />　　接下来，我们复制一个简单的配置文件作为基础供后面修改。<br />　　[root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf /etc<br />　　[root@hpe45 vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/ftp<br />　　复制PAM验证文件，以允许本地用户登录VSFTPD。<br />　　[root@hpe45 vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/ftp<br /><br />　　二、创建guest用户<br />　　VSFTPD采用PAM方式验证虚拟用户。由于虚拟用户的用户名/口令被单独保存，因此在验证时，VSFTPD需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证，这就是VSFTPD的guest用户。这正如同匿名用户也需要有一个系统用户ftp一样。当然，我们也可以把guest用户看成是虚拟用户在系统中的代表。下面在系统中添加vsftpdguest用户，作为VSFTPD的guest。<br />　　[root@hpe45 vsftpd-1.2.0]# useradd vsftpdguest<br />　　当虚拟用户登录后，所在的位置为vsftpdguest的自家目录/home/vsftpdguest。如果要让虚拟用户登录到/var/ftp等其他目录，修改vsftpdguest的自家目录即可。<br /><br />　　三、设置VSFTPD配置文件<br />　　在/etc/vsftpd.conf文件中，加入以下选项：<br />　　guest_enable=YES<br />　　guest_username=vsftpdguest<br /><br />　　然后执行以下命令，让VSFTPD在后台运行：<br />　　[root@hpe45 vsftpd-1.2.0]# /usr/local/sbin/vsftpd &<br /><br />　　四、将虚拟用户保存在MySQL数据库服务器中<br />　　我们建立数据库vsftpdvu，表users，字段name和passwd用于保存虚拟用户的用户名和口令,同时增加两个虚拟用户xiaotong和xiaowang。<br /><br />　　[root@hpe45 vsftpd-1.2.0]# mysql -p<br />　　mysql>create database vsftpdvu;<br />　　mysql>use vsftpdvu;<br />　　mysql>create table users(name char(16) binary,passwd char(16) binary);<br />　　mysql>insert into users (name,passwd) values ('xiaotong',password('qqmywife'));<br />　　mysql>insert into users (name,passwd) values ('xiaowang',password('ttmywife'));<br />　　mysql>quit<br /><br />　　然后，授权vsftpdguest可以读vsftpdvu数据库的users表。执行以下命令：<br />　　[root@hpe45 vsftpd-1.2.0]# mysql -u root mysql -p<br />　　mysql>grant select on vsftpdvu.users to vsftpdguest@localhost identified by 'i52serial0';<br />　　mysql>quit<br /><br />　　如果要验证刚才的操作是否成功可以执行下面命令：<br />　　[root@hpe45 vsftpd]#mysql -u vsftpdguest -pi52serial0 vsftpdvu<br />　　mysql>select * from users;<br />　　如果成功，将会列出xiaotong、xiaowang和加密后的密码<br /><br />　　五、设置MySQL的PAM验证<br />　　这里我们要用到一个利用mysql进行pam验证的开源项目（http://sourceforge.net/projects/pam-mysql/）。首先从网站下载它的程序包pam_myql-0.5.tar.gz，复制到/root目录中。在编译安装之前，要确保mysql-devel的RPM包已经安装在你的机器上，如果没有请从RHL安装光盘中安装该包。然后，执行以下命令：<br />　　[root@hpe45 root]#tar xvzf pam_mysql-0.5.tar.gz<br />　　[root@hpe45 root]#cd pam_mysql<br />　　[root@hpe45 pam_mysql]#make<br />　　[root@hpe45 pam_mysql]#make install<br />　　make install这一步可能会出现错误，那只好手动将该目录下生成的pam_mysql.o复制到/lib/security目录下。<br />　　接下来，我们要设置vsftpd的PAM验证文件。打开/etc/pam.d/ftp文件，加入以下内容：<br />　　auth required pam_mysql.o user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2<br />　　account required pam_mysql.o user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2<br />　　上面涉及到的参数，只要对应前面数据库的设置就可以明白它们的含义。这里需要说明的是crypt参数。crypt表示口令字段中口令的加密方式：crypt=0，口令以明文方式（不加密）保存在数据库中；crypt=1，口令使用UNIX系统的DES加密方式加密后保存在数据库中；crypt=2，口令经过MySQL的 password()函数加密后保存。<br /><br />　　六、进一步的虚拟用户设置<br />　　经过以上的步骤，虚拟用户就可以正常使用了。这里介绍进一步的虚拟用户设置。首先，介绍虚拟用户的权限设置。<br /><br />　　VSFTPD-1.2.0新添了virtual_use_local_privs参数，当该参数激活（YES）时，虚拟用户使用与本地用户相同的权限。当此参数关闭（NO）时，虚拟用户使用与匿名用户相同的权限，这也就是VSFTPD-1.2.0之前版本对虚拟用户权限的处理方法。这两者种做法相比，后者更加严格一些，特别是在有写访问的情形下。默认情况下此参数是关闭的（NO）。<br />　　当virtual_use_local_privs=YES时，只需设置write_enable=YES，虚拟用户就可以就拥有写权限。而virtual_use_local_privs=NO时，对虚拟用户权限的设置就更多一些更严格一些。<br />　　控制虚拟用户浏览目录：如果让用户不能浏览目录，但仍可以对文件操作，那么需要执行以下二个步骤：一，配置文件中，anon_world_readable_only=YES。二，虚拟用户目录的权限改为只能由vsftpdguest操作：<br />　　[root@hpe45 root]# chown vsftpdguest.vsftpdguest /home/vsftpdguest<br />　　[root@hpe45 root]# chmod 700 /home/vsftpdguest<br />　　允许虚拟用户上传文件：<br />　　write_enable=YES<br />　　anon_upload_enable=YES<br />　　允许虚拟用户修改文件名和删除文件：<br />　　anon_other_write_enable=YES<br />　　由于以上选项的设置同样会对匿名用户生效。如果不想匿名用户趁机拥有同样的权限，最好是禁止匿名用户登录。<br /><br />　　其次，由于虚拟用户在系统中是vsftpdguest身份，所以可以访问到系统的其他目录。为了更加安全，我们可以将虚拟用户限制在自家目录下。有两种做法：<br />一，在配置文件中增加以下选项<br />　　chroot_local_user=NO<br />　　chroot_list_enable=YES<br />　　chroot_list_file=/etc/vsftpd.chroot_list<br />　　然后，在/etc/vsftpd.chroot_list文件中加入虚拟用户名xiaotong和xiaowang。<br />　　第二种做法，在配置文件中修改chroot_local_user=YES。<br />　　经过修改后，虚拟用户登录后其根目录就限制在/home/vsftpdguest下，无法访问其他目录。<br /><br />　　七、虚拟用户的个人目录<br />　　大家可以发现，无论是哪个虚拟用户，登录后所在的目录都是/home/vsftpdguest，即都是guest_username用户的自家目录。下面，介绍如何为每个虚拟用户建立自家目录。首先，在主配置文件中加入以下选项：<br />　　user_config_dir=/etc/vsftpd/vsftpd_user_conf<br />　　然后，生成/etc/vsftpd/vsftpd_user_conf目录，并在该目录下建立与特定虚拟用户同名的文件：<br />　　[root@hpe45 root]# mkdir /etc/vsftpd/vsftpd_user_conf<br />　　[root@hpe45 root]# cd /etc/vsftpd/vsftpd_user_conf<br />　　[root@hpe45 vsftpd_user_conf]# touch xiaowang<br />　　以上的操作为虚拟用户xiaowang建立了个人配置文件/etc/vsftpd/vsftpd_user_conf/xiaowang。接下来，在xiaowang的个人配置文件中将xiaowang的自家目录修改为/home/xiaowang，配置选项为：<br />　　local_root=/home/xiaowang<br />　　然后，新建xiaowang目录，并将权限设为vsftpdguest：<br />　　[root@hpe45 vsftpd_user_conf]# mkdir /home/xiaowang<br />　　[root@hpe45 vsftpd_user_conf]# chown vsftpdguest.vsftpdguest ./xiaowang<br />　　[root@hpe45 vsftpd_user_conf]# chmod 600 /home/xiaowang<br />　　经过以上设置，xiaowang登录VSFTPD后，用“pwd”指令就可以发现被自己被定位到自己的“/home/xiaowang”目录。<br /><br />　　从文件系统层次来看，由于“/home/xiaowang”目录的权限是属于vsftpdguest的，所以其他的虚拟用户同样也可以访问 xiaowang的自家目录。解决这个问题也很简单，我们只需要让VSFTPD负责将虚拟用户限制在其自家目录，就可以避免虚拟用户的互相访问。具体做法参照前面第六步中所述，这里不再赘述。经过以上设置后，虚拟用户就可以拥有属于自己的目录了。
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/184263#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>Sat, 19 Apr 2008 09:33:43 +0800</pubDate>
        <link>http://library.javaeye.com/blog/184263</link>
        <guid>http://library.javaeye.com/blog/184263</guid>
      </item>
      <item>
        <title>spring mvc的异常处理</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/179518" style="color:red;">http://library.javaeye.com/blog/179518</a>&nbsp;
          发表时间: 2008年04月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          SPRING的MVC里，处理异常时，原来是这样去解决的。下面举个例子来说明，比如<br />在用spring的MVC里上传文件时,会遇到上传文件大小超过规定的问题，因此可以定义异常<br />来解决<br /><br />首先定义如下<br />&lt;bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><br />    &lt;property name="exceptionMappings"><br />   &lt;props><br />    &lt;prop key="java.sql.SQLException">showDBError&lt;/prop><br />    &lt;prop key="java.lang.RuntimeException">showError&lt;/prop><br />     &lt;prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">maxUploadExceeded&lt;/prop><br />   &lt;/props><br />  &lt;/property><br /> &lt;/bean><br />比如其中的showDBError则用来定义当出现异常时处理该异常的页面，<br />这里捕捉org.springframework.web.multipart.MaxUploadSizeExceededException异常来处理上传<br />文件超过限制的异常，处理的页面是maxUploadExceeded.jsp<br />  其中定义上传文件大小在这里定义<br />&lt;bean id="multipartResolver"<br />          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">   <br />        &lt;property name="maxUploadSize"><br />            &lt;value>300000&lt;/value><br />        &lt;/property><br />    &lt;/bean><br /><br />这样就可以统一分别处理不同Exception了。注意jsp页面在request中attribute等于“exception”,<br /><br />而不是“Exception”注意大小写。页面如下：<br /><br />错误显示页面 &lt;c:set value="${exception}" var="ee"/><br />&lt;jsp:useBean id="ee" type="java.lang.Exception" /><br />&lt;%=ee.getMessage()%>&lt;br><br />&lt;%ee.printStackTrace( new java.io.PrintWriter(out));%>
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/179518#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, 04 Apr 2008 17:14:34 +0800</pubDate>
        <link>http://library.javaeye.com/blog/179518</link>
        <guid>http://library.javaeye.com/blog/179518</guid>
      </item>
      <item>
        <title>Spring MVC 配置</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/178392" style="color:red;">http://library.javaeye.com/blog/178392</a>&nbsp;
          发表时间: 2008年04月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一，配置分发器<br />DispatcherServlet 是Spring MVC 的入口<br />所有进入Spring Web 的 Request 都经过 DispatcherServlet<br />需要在 web.xml 中注册 DispatcherServlet<br />&lt;servlet><br /> &lt;servlet-name>dispatherContext&lt;/servlet-name><br /> &lt;servlet-class><br />  org.springframework.web.servlet.DispatcherServlet<br /> &lt;/servlet-class><br /> &lt;load-on-startup>1&lt;/load-on-startup><br />&lt;/servlet><br /><br />加载 DispatcherServlet 时 Spring 会尝试读取配置文件<br />默认的配置文件位于 web.xml 相同的路径下 文件名与注册的 Servlet<br />名有关 Servlet注册名跟上 -servlet.xml<br />例如：上面的 Servlet 注册名为 dispatcherContext 那么 默认的<br />配置文件名位：dispatcherContext-servlet.xml<br /><br />当然 也可以明确配置文件 需要在注册 servlet 时 设定初始化参数<br />&lt;init-param><br /> &lt;param-name>contextConfigLocation&lt;/param-name><br /> &lt;param-value><br />  &lt;!-- 配置文件名 --><br /> &lt;/param-value><br />&lt;/init-param><br /><br />注册 DispatcherServlet 后 还应指定有 Spring 处理的 url 模板<br />&lt;servlet-mapping><br /> &lt;servlet-name>dispatherContextServlet&lt;/servlet-name><br /> &lt;url-pattern>*.do&lt;/url-pattern><br />&lt;/servlet-mapping><br /><br />这样 请求 .do 的处理 就全部交由 Spring 处理了<br /><br />当程序越来越大 配置文件中的 &lt;bean> 越来越多 而且变得关系错综复杂<br />难于维护 此时应该考虑 将配置文件拆分成多个<br />为了让 Spring 能够读到这些配置文件 并察觉到他们的变化<br />需要注册配置文件读取器<br />对于 Servlet 2.3 以上标准 且 web 容器支持监听器<br />可以 在 web.xml 中注册监听<br />&lt;listener><br /> &lt;listener-class><br />  org.springframework.web.context.ContextLoaderListener<br /> &lt;/listener-class><br />&lt;/listener><br /> <br />对于 Servlet 2.3 以下版本 由于不支持监听器 所以需要注册 Servlet<br />&lt;servlet><br /> &lt;servlet-name>contextLoader&lt;/servlet-name><br /> &lt;servlet-class><br />  org.springframework.web.context.ContextLoaderServlet<br /> &lt;/servlet-class><br /> &lt;load-on-startup>1&lt;/load-on-startup><br />&lt;/servlet><br /> <br />配置文件读取器 注册成功后 需要设定配置文件列表<br />设置全局参数　contextConfigLocation　<br />置为　配置文件列表　以逗号分隔　注意路径<br />&lt;context-param><br /> &lt;param-name>contextConfigLocation&lt;/param-name><br /> &lt;param-value><br />  /WEB-INF/dispatcherContext-servlet.xml,<br />  &lt;!-- classpath*: 指定编译后的class目录 在ide中 与src根目录相同 --><br />  classpath*:hibernateContext.xml<br /> &lt;/param-value><br />&lt;/context-param><br /> <br />二，配置映射响应器（HandlerMapping）<br />当 DispatcherServlet 接到请求后 会向 HandlerMapping 询问<br />请求所对应的控制器<br />BeanNameUrlHandlerMapping Spring 默认的映射响应器 根据 &lt;bean> 的 name 属性查找控制器处理请求<br />&lt;bean id="urlMapping"<br /> class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /><br /><br />SimpleUrlHandlerMapping Spring 中最常用的映射响应器 通过对其 mappings 进行设置 从而获得更为灵活的<br />控制器查找机制<br />&lt;bean id="urlMapping"<br /> class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><br /> &lt;property name="mappings"><br />  &lt;props><br />   &lt;prop key="/&lt;!-- url 模板 -->.do">&lt;!-- 控制器 &lt;bean> 的 id -->&lt;/prop><br />  &lt;/props><br /> &lt;/property><br />&lt;/bean><br /><br />CommonsPathMapHandlerMapping 应用了 jdk1.5 后的新特性 通过 Controller 中的注释 进行映射<br />在类的主是中加入 @@org.springframework.web.servlet.handler.commonsattributes.PathMap("/path.do")<br />&lt;bean id="urlMapping"<br /> class="org.springframework.web.servlet.handler.metadata.CommonsPathMapHandlerMapping" /><br /> <br />三，配置控制器（Controller）<br />当 DispatcherServlet 接到请求后 通过 HandlerMapping 询问请求所对应的处理控制器后<br />在 dispatcherContext-servlet.xml 中　查找相对应得 &lt;bean> 处理请求<br /> <br />当选用了 BeanNameUrlHandlerMapping 映射响应器时 各个处理控制器应保证 &lt;bean> 的 name<br />属性即为请求的 url 模板　例如：<br />&lt;bean name="/home.do" class="&lt;!-- 包名 -->.HomeController" /><br /> <br />当选用了 SimpleUrlHandlerMapping 映射响应器时 各个处理控制器应保证 &lt;bean> 的 id<br />属性与 SimpleUrlHandlerMapping 中的 mappings 对应　例如：<br />&lt;bean id="homeAction" class="&lt;!-- 包名 -->.HomeController" /><br /><br />&lt;bean id="urlMapping"<br /> class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><br /> &lt;property name="mappings"><br />  &lt;props><br />   &lt;prop key="/hello.do">homeAction&lt;/prop><br />  &lt;/props><br /> &lt;/property><br />&lt;/bean><br /><br />当选用了 CommonsPathMapHandlerMapping 映射响应器时<br />/**<br /> * @@org.springframework.web.servlet.handler.<br />     commonsattributes.PathMap("/hello.do")<br /> */<br />public class HelloController<br />    extends AbstractCommandController {<br />...<br />}<br /><br /><br />四，配置试图解析器（ViewResolver）<br />&lt;bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><br />   &lt;property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/><br />   &lt;property name="prefix" value="/WEB-INF/jsp/"/><br />   &lt;property name="suffix" value=".jsp"/><br />&lt;/bean>
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/178392#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, 01 Apr 2008 14:13:48 +0800</pubDate>
        <link>http://library.javaeye.com/blog/178392</link>
        <guid>http://library.javaeye.com/blog/178392</guid>
      </item>
      <item>
        <title>JSTL初级教程</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/178377" style="color:red;">http://library.javaeye.com/blog/178377</a>&nbsp;
          发表时间: 2008年04月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          简介<br />JSP标准模板库（JSTL）是SUN公司发布的一个针对JSP开发的新组件。JSTL允许你使用标签（tags）来进行 JSP页面开发，而不是使用多数 JSP程序员已经习惯了的scriptlet代码方式开发。JSTL几乎能够做到传统JSP scriptlet代码能做的任何事情。你可能会疑惑，为什么我们需要另一种这样的HTML生成语言呢？<br /><br />STL允许JSP程序员使用 tags而不是JAVA代码来编程。为了展示为什么这个是更优越的，下面将给出示例。我们会检查一个非常简单的从1数到10的 JSP页面。我们将通过两种方法来检查，一种是基于JSP的scriptlet，一种是JSTL。当这个计数器页面的例子是用JSP scriptlet来编写时，JSP页面如下所示：<br /><br />&lt;html><br />&lt;head><br />&lt;title>Count to 10 in JSP scriptlet&lt;/title><br />&lt;/head><br />&lt;body><br />&lt;%<br />for(int i=1;i&lt;=10;i++)<br />{%><br />&lt;%=i%>&lt;br/><br />&lt;%<br />}<br />%><br />&lt;/body><br />&lt;/html><br /><br />正如你在上例中看到的看到的那样，使用scriptlet代码产生的页面源代码会包含混合的HTML标签和JAVA语句。这种混合型的编程方式不是最佳的方式，其主要原因有以下几点。<br /><br />主要的原因是它的可读性。这个可读性主要依赖于人类和计算机。JSTL可以允许程序员查看一个只包含完整HTML和类似HTML的标签的页面。<br /><br />SP scriptlet代码的可读性不适合人类。这种混合的scriptlet和HTML代码对于计算机来说也很难读。尤其是针对那些HTML官方工具如 Dreamweaver和Microsoft FrontPage，所表现出来的不直观性更突出。目前，大多数HTML官方工具会以不可编辑块（non-editable blocks）的形式来隔离JSP scriptlet代码。这种HTML官方工具通常是不能直接修改JSP scriptlet代码的。<br /><br />下面这段代码展示这个计数器范例如何使用JSTL方式来编写。正如你所看到的，这个代码列表有不变性，仅仅一个标签被使用。HTML和JSTL标签混合起来产生了这个程序。<br /><br />&lt;%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %><br />&lt;html><br />&lt;head><br />&lt;title>Count to 10 Example (using JSTL)&lt;/title><br />&lt;/head><br /><br />&lt;body><br />&lt;c:forEach var="i" begin="1" end="10" step="1"><br />&lt;c:out value="${i}" /><br /><br />&lt;br /><br />&lt;/c:forEach><br />&lt;/body><br />&lt;/html><br /><br />当你检查上面这个例子的代码时，你会看到，JSP页面只包含标签。上面的代码使用诸如&lt;head>和&lt;br>这样的HTML标签。这种标签用法不限制于HTML标签。这段代码也可以使用诸如&lt;c:forEach>和&lt;c:out>这样的JSTL标签。在本文中，将会介绍一些JSTL的基础。<br /><br />安装JSTL<br />要使用JSTL，你必须安装有一个JSP1.2（或者更高版本）的容器。最普通的JSP容器是Apache Tomcat。你能够从tomcat/">http://jakarta.apache.org/tomcat/这里下载到。独立的Tomcat允许你使用常规的JSP scriptlet代码。要使用JSTL，你必须在Tomcat中安装JSTL。JSTL的主要URL是 http://java.sun.com/products/jsp/jstl/。要使用JSTL，必须解压这个文件，然后将它安装到Tomcat的正确位置。<br /><br />要在Tomcat中安装JSTL，有下面三个步骤：<br /><br />拷贝JSTL JAR文件到Tomcat的lib目录中.<br /><br />如果你使用的是Windows, 那么lib目录最可能的位置是C:\Program Files\Apache Tomcat 4.0\webapps\ROOT\WEB-INF\lib。你应该拷贝这些JAR包到你的Tomcat JAR目录。<br /><br />拷贝JSTL TLD文件到Tomcat的web-inf目录中<br /><br />你检查JSTL发布文件时，你应该会注意到有8个文件是以TLD扩展名结尾的。所有这8个文件都应该复制到你的web-inf目录中。<br /><br />修改web.xml文件包含这些TLD文件。<br /><br />最后，你必须修改你的web.xml，添加8个标签库的表项（entry）。需要添加的表项如下所示：<br /><br />补充：（2007.10.22）<br /><br />1.(注意我自己用的myeclipse+jstl1.1 并没有修改web.xml但是照样能用,其原因是对servlet2.3及其以上的版本，如果使用的URI为全路径方式(比如：http://java.sun.com/jstl/fmt)无需配置web.xml,无需拷贝tld文件，只需要把jar文件拷贝到lib目录中；而servlet2.2及其以下版本必须配置web.xml,拷贝tld文件)<br /><br />2.(另外强烈建议，在引入标签库时，要对照你所用的标签库的文档，确保URI正确，因为由于jstl的版本变化会导致URI发生变化，以下所述并不能保证符合最新情况)<br /><br /><br />&lt;taglib><br />&lt;taglib-uri>http://java.sun.com/jstl/fmt&lt;/taglib-uri><br />&lt;taglib-location>/WEB-INF/fmt.tld&lt;/taglib-location><br />&lt;/taglib><br /><br />&lt;taglib><br />&lt;taglib-uri>http://java.sun.com/jstl/fmt-rt&lt;/taglib-uri><br />&lt;taglib-location>/WEB-INF/fmt-rt.tld&lt;/taglib-location><br />&lt;/taglib><br /><br />&lt;taglib><br />&lt;taglib-uri>http://java.sun.com/jstl/core&lt;/taglib-uri><br />&lt;taglib-location>/WEB-INF/c.tld&lt;/taglib-location><br />&lt;/taglib><br /><br />&lt;taglib><br />&lt;taglib-uri>http://java.sun.com/jstl/core-rt&lt;/taglib-uri><br />&lt;taglib-location>/WEB-INF/c-rt.tld&lt;/taglib-location><br />&lt;/taglib><br /><br />&lt;taglib><br />&lt;taglib-uri>http://java.sun.com/jstl/sql&lt;/taglib-uri><br />&lt;taglib-location>/WEB-INF/sql.tld&lt;/taglib-location><br />&lt;/taglib><br /><br />&lt;taglib><br />&lt;taglib-uri>http://java.sun.com/jstl/sql-rt&lt;/taglib-uri><br />&lt;taglib-location>/WEB-INF/sql-rt.tld&lt;/taglib-location><br />&lt;/taglib><br /><br />&lt;taglib><br />&lt;taglib-uri>http://java.sun.com/jstl/x&lt;/taglib-uri><br />&lt;taglib-location>/WEB-INF/x.tld&lt;/taglib-location><br />&lt;/taglib><br /><br />&lt;taglib><br />&lt;taglib-uri>http://java.sun.com/jstl/x-rt&lt;/taglib-uri><br />&lt;taglib-location>/WEB-INF/x-rt.tld&lt;/taglib-location><br />&lt;/taglib><br /><br />完成上面这三步后，你现在可以准备测试你的JSTL安装了。可以通过创建一个包含JSTL的JSP页面来验证。一个最简单的范例程序就是上面的那个计数器程序。你应该将它放置在你的Webroot目录中（C:\Program Files\Apache Tomcat 5.0\webapps\ROOT）。一旦Tomcat启动后，你应该能够通过浏览 http://127.0.0.1:8080/count.jsp来查看这个页面。<br /><br />如果你没有正确安装JSTL，那么可能不会出现错误信息。如果JSTL不能解释你的标签含义，那么它在Web浏览器上会直接跳过。然后Web浏览器将解释这些未知的HTML标签。多数浏览器仅仅只是忽略这些未知的HTML标签。<br /><br /><br />JSTL标签库<br />JSTL通常被认为是一种单标签库。但JSTL实际上有4个标签库。这些标签库被概括为如下：<br /><br />核心标签库—包含一些Web应用的必要的标签。核心标签库的实例包括循环，表达式赋值和基本输入输出。.<br /><br /><br />格式化/国际化标签库—包括被用来解析数据的标签库。这种标签会解析数据，比如日期，不同的场所区域等。<br /><br /><br />数据库标签库—包含被用来访问SQL数据库的标签。这些标签通常仅仅只创建原形（prototype）程序。这个是因为大多数程序不会直接从JSP页面中来处理数据库访问。数据库访问应该被嵌入到能够被JSP页面所访问的EJB中。<br /><br /><br />XML标签库—包含被用来访问XML元素的标签。因为XML广泛使用于Web开发，XML的处理是JSTL的一个重要的特征。<br />在本文中，我们将仅仅只对核心标签做一个简单介绍。我们将考察一个简单的范例，来说明如何处理用户在表单中输入的数据。在我们开始检查程序之前，我们必须先看看JSTL是如何处理表达式的，JSTL的表达式处理是通过使用EL表达式语言来完成的，仅仅只能在JSP2.0被使用。下一节，我们会考察EL表达式语言。<br /><br />EL表达式语言<br />JSP2.0的一个主要的组件就是这个新的叫做EL的表达式语言。EL被广泛用在JSTL中。然而，重要的是记住，EL是JSP的功能而不是JSTL的。被用在JSP2.0中JSP scriptlet代码能够包含EL表达式。下面这行代码演示了JSP scriptlet代码中的EL：<br /><br />&lt;p><br />Your total, including shipping is ${total+shipping}<br />&lt;/p><br /><br />正如你看到的，total和shipping相加后会产生HTML并且在浏览器中显示它们的值。这些表达式也可以在JSTL标签中使用。JSTL1.0的一个重要问题是，JSTL不能用在JSP1.2的版本上。因为JSP1.2不支持EL，所以有必要提供一些额外的JSTL标签来帮助EL的使用。例如，如果你想使用JSTL来显示上面的表达式，你可以使用下面的代码。<br /><br />&lt;p><br />Your total, including shipping is &lt;c:out var="${total+shipping"/><br />&lt;/p><br /><br />值得注意的是，JSTL不需要JSP2.0来运行。通过提供一个能够显示EL表达式的标签，就可以达到这样的需求。<br /><br />JSTL范例<br />我们将考察一个简单的使用JSTL的范例。在这个例子里，我们将考察Web应用中的一个常见过程。我们会看到如何提交（POST）一个表单，并处理POST的结果。程序代码如下：<br /><br />&lt;%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %><br />&lt;html><br />&lt;head><br />&lt;title>If with Body&lt;/title><br />&lt;/head><br /><br />&lt;body><br />&lt;c:if test="${pageContext.request.method=='POST'}"><br />&lt;c:if test="${param.guess=='Java'}">You guessed it!<br />&lt;br /><br /><br />&lt;br /><br /><br />&lt;br /><br />&lt;/c:if><br /><br />&lt;c:if test="${param.guess!='Java'}">You are wrong<br />&lt;br /><br /><br />&lt;br /><br /><br />&lt;br /><br />&lt;/c:if><br />&lt;/c:if><br /><br />&lt;form method="post">Guess what computer language<br />I am thinking of?<br />&lt;input type="text" name="guess" /><br /><br />&lt;input type="submit" value="Try!" /><br /><br />&lt;br/><br />&lt;/form><br />&lt;/body><br />&lt;/html><br /><br />这个简单的Web页面显示一个表单，要求用户猜测程序所想的计算机语言。当然，计算机想的是“Java”。这个页面通过检查“是否已提交”来开始。这使得表单和处理表单的代码可以放在同一个页面中。是通过下面的JSTL if语句实现的。<br /><br />&lt;c:if test="${pageContext.request.method=='POST'}"><br /><br />现在你看到了，&lt;c:if>标签使用EL表达式来决定是否请求的方式是POST的。如果数据被post到页面，那么用户输入的他们的猜想值就会存储在名为“guest”的参数中。这是因为“guest”是表单输入项的名字。我们现在必须检查是否这个参数等于“Java”。这个是通过下面的 &lt;c:if>标签来完成：<br /><br />&lt;c:if test="${param.guess=='Java'}"><br />You guessed it!<br />&lt;/c:if><br /><br /><br />正如你所看到的，如果表达式为true，&lt;c:if>标签的标签体就被执行。在本文中，我们开始考察了JSTL如何被安装，以及它是如何运转的，也提供了一些JSTL小范例帮助大家理解。<br /><br />JSTL的核心标签也包含循环，叠代器和变量处理。通过使用标签，你能在collections里进行iterate，访问用户的会话数据（session data），执行其他的核心任务等。除了核心标签库，XML，数据库和格式化标签库也提供了更多高级的用处。<br /><br />补充：（2007.10.22） <br /><br />下面是jstl1.1引入时所用的URI<br /><br />&lt;%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><br />&lt;%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><br />&lt;%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><br />&lt;%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %><br />&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><br />&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%><br />&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%><br />&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%><br />&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/178377#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, 01 Apr 2008 13:30:30 +0800</pubDate>
        <link>http://library.javaeye.com/blog/178377</link>
        <guid>http://library.javaeye.com/blog/178377</guid>
      </item>
      <item>
        <title>ubuntu-nvidia显卡驱动</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/177040" style="color:red;">http://library.javaeye.com/blog/177040</a>&nbsp;
          发表时间: 2008年03月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          sudo apt-get install nvidia-glx <br />sudo apt-get install nvidia-settings <br />sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf_backup <br />sudo nvidia-glx-config enable
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/177040#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>Thu, 27 Mar 2008 21:08:14 +0800</pubDate>
        <link>http://library.javaeye.com/blog/177040</link>
        <guid>http://library.javaeye.com/blog/177040</guid>
      </item>
      <item>
        <title>Linux 下各种查找替换字符串的办法</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/173908" style="color:red;">http://library.javaeye.com/blog/173908</a>&nbsp;
          发表时间: 2008年03月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1、在vi中使用的查找替换方法<br />利用 :s 命令可以实现字符串的替换。具体的用法包括：<br />:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1<br />:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1<br />:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1<br />:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1<br />:g/str1/s//str2/g 功能同上从上述替换命令可以看到：g 放在命令末尾，表示对搜索字符串的每次出现进行替换；不加 g，表示只对搜索字符串的首次出现进行替换；g 放在命令开头，表示对正文中所有包含搜索字符串的行进行替换操作。 <br /><br />2、在shell中使用find结合grep进行文件的替换<br /># find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;<br />上面命令可以在当前目录下（包括子目录）查找包含str1的文件，自动替换成str2，并且生成源文件的bak文件
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/173908#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, 19 Mar 2008 22:05:35 +0800</pubDate>
        <link>http://library.javaeye.com/blog/173908</link>
        <guid>http://library.javaeye.com/blog/173908</guid>
      </item>
      <item>
        <title>Apache under SELinux - 让Apache跑得顺起来!</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/173576" style="color:red;">http://library.javaeye.com/blog/173576</a>&nbsp;
          发表时间: 2008年03月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          对于刚使用Redhat Enterprise Linux4 或Fedora Core 2以上/CentOS 4的用户，一定会为Apache经常无法正常运转，报以"Permission denied"等错误而大为不解，甚至大为恼火。<br />其实这是因为这些系统里激活了SELinux，而用户的apache配置与SELinux的配置策略有抵触产生的，只有通过适当调整，使apache的配置和访问符合策略才能正常使用。<br />现在下面来分析一下SELinux中有关httpd（apache）的context定义（略有删节）<br />/home/[^/]+/((www)|(web)|(public_html))(/.+)? system_u:object_r:httpd_user_content_t<br />/var/www(/.*)? system_u:object_r:httpd_sys_content_t<br />/var/www/cgi-bin(/.*)? system_u:object_r:httpd_sys_script_exec_t<br />/usr/lib/cgi-bin(/.*)? system_u:object_r:httpd_sys_script_exec_t<br />/var/www/perl(/.*)? system_u:object_r:httpd_sys_script_exec_t<br />/var/www/icons(/.*)? system_u:object_r:httpd_sys_content_t<br />/var/cache/httpd(/.*)? system_u:object_r:httpd_cache_t<br />/etc/vhosts -- system_u:object_r:httpd_config_t<br />/usr/sbin/httpd -- system_u:object_r:httpd_exec_t<br />/usr/sbin/apache(2)? -- system_u:object_r:httpd_exec_t<br />/usr/sbin/suexec -- system_u:object_r:httpd_suexec_exec_t<br />/var/log/httpd(/.*)? system_u:object_r:httpd_log_t<br />/var/log/apache(2)?(/.*)? system_u:object_r:httpd_log_t<br />/var/log/cgiwrap\.log.* -- system_u:object_r:httpd_log_t<br />/var/cache/ssl.*\.sem -- system_u:object_r:httpd_cache_t<br />/var/cache/mod_ssl(/.*)? system_u:object_r:httpd_cache_t<br />/var/run/apache(2)?\.pid.* -- system_u:object_r:httpd_var_run_t<br />/var/lib/httpd(/.*)? system_u:object_r:httpd_var_lib_t<br />/var/lib/php/session(/.*)? system_u:object_r:httpd_var_run_t<br />/etc/apache-ssl(2)?(/.*)? system_u:object_r:httpd_config_t<br />/usr/lib/apache-ssl(/.*)? -- system_u:object_r:httpd_exec_t<br />/usr/sbin/apache-ssl(2)? -- system_u:object_r:httpd_exec_t<br />/var/log/apache-ssl(2)?(/.*)? system_u:object_r:httpd_log_t<br />/var/run/apache-ssl(2)?\.pid.* -- system_u:object_r:httpd_var_run_t<br />/var/run/gcache_port -s system_u:object_r:httpd_var_run_t<br />/var/lib/squirrelmail/prefs(/.*)? system_u:object_r:httpd_squirrelmail_t<br />/usr/bin/htsslpass -- system_u:object_r:httpd_helper_exec_t<br />/usr/share/htdig(/.*)? system_u:object_r:httpd_sys_content_t<br />/var/lib/htdig(/.*)? system_u:object_r:httpd_sys_content_t<br />针对上述的内容，可以对如下的几个常见问题进行简单处理：<br />1.phpmyadmin在非默认/var/www/html目录下无法运转<br />通常类似的情况都是在配置了虚拟主机时，访问/phpmyadmin等提示403访问拒绝，日志里也提示Permission denied，这是因为phpmyadmin防止的目录及文件本身属性不符合context要求。<br />假设phpmyadmin放在/web目录下，那么执行:<br />chcon -R -t httpd_user_content_t /web<br />则会令/web及其下所有子目录/文件，包括phpmyadmin文件都获得了httpd_user_content_t的属性，如果其传统的Unix属性对httpd来说是可读的话，再重新访问一下就应该可以了。<br />2./home目录下的虚拟主机无法运转<br />与问题1也是类似的，不过根据上文中context的定义，/home目录下必须是用户的$HOME/www或public_html或web目录才是httpd_user_content_t类型，因此建议将要作为web页面的内容放置在用户的$HOME/www或web或public_html里，并确保其属性是httpd_user_content_t，使用如下命令查看：<br />ls -Z /home/abc/<br />drwxr-xr-x abc abc user_u:object_r:user_home_dir_t tmp<br />drwxrwxr-x abc abc user_u:object_r:httpd_user_content www<br />如不是，则可通过chcon来逐级目录及文件更改，直至最后能访问：<br />chcon -R -t httpd_user_content_t /home/abc/web<br />chcon -t user_home_dir_t /home/abc<br />3.CGI程序无法运行<br />如果cgi程序放在/var/www/cgi-bin/里也无法执行，遇到403或500错误的话，可以检查cgi程序的属性，按SELinux contexts文件里定义的，/var/www/cgi-bin/里必须是httpd_sys_script_exec_t 属性。通过ls -Z查看，如果不是则通过如下命令更改：<br />chcon -t httpd_sys_script_exec_t /var/www/cgi-bin/*.cgi<br />如果是虚拟主机里的cgi，则参考问题2使之能正常使用普通的功能后，再通过chcon设置cgi文件的context为httpd_sys_script_exec_t即可。<br />4.Setuid/gid 程序无法运行<br />例如早期的SqWebMail及qmailadmin等，需要setuid/gid的支持，但在SELinux下这将受到严格限制。第一种方法是比较彻底的办法，能保留系统的安全性，通过：<br />audit2allow -l -i /var/log/messages<br />将SELinux拒绝的信息转换为相应的policy allow指令，将这些指令添加到SELinux policy 的src里相应的配置文件，重新生成policy并加载。但这样做相对比较麻烦。<br />另一个方法最简单，但将使apache得不到保护。首先确定SELinux 类型是targeted的：<br />cat /etc/selinux/config|grep SELINUXTYPE<br />然后，使apache脱离SELinux保护：<br />setsebool -P httpd_disable_trans 1<br />然后重启动apache：<br />/etc/init.d/httpd restart<br />这样所有apache强制的检查都失效，需要setuid/gid的程序可以正常使用。但这样带来了增加漏洞的危险，对于迫切需要运行而又很急的情况，本方法是一个最大限度减少系统安全缺失的最后办法。对于取消SELinux 未必是一个好方法。<br />(转)http://www.hzqbbc.com/blog/arch/2005/07/apache_under_se.html
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/173576#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, 19 Mar 2008 02:21:10 +0800</pubDate>
        <link>http://library.javaeye.com/blog/173576</link>
        <guid>http://library.javaeye.com/blog/173576</guid>
      </item>
      <item>
        <title>apache . tomcat整合</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/173575" style="color:red;">http://library.javaeye.com/blog/173575</a>&nbsp;
          发表时间: 2008年03月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          安装jdk<br />#chmod 744 jdk-1_5_0_02-linux-i586.bin<br /># ./ jdk-1_5_0_02-linux-i586.bin<br />生成目录：jdk1.5.0_02<br />将该文件移动到/usr/local/java 目录下<br />mv jdk1.5.0_02 /usr/local/java<br />测试java环境是否建立：<br />#cd  /usr/local/java<br /># ls<br />bin    demo     jre  LICENSE  README.html  src.zip<br />COPYRIGHT  include  lib  man   sample       THIRDPARTYLICENSEREADME.txt<br /># bin/java –version<br />java version "1.5.0_02"<br />Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_02-b09)<br />Java HotSpot(TM) Client VM (build 1.5.0_02-b09, mixed mode, sharing) <br />显示版本，说明java环境建立成功！<br />（注意：tomcat5.5的必须有jdk1.5这个版本支持）<br />安装tomcat<br />[root@leo src]# tar zxvf apache-tomcat-5.5.12.tar.gz<br />[root@leo src]# mv apache-tomcat-5.5.12 /usr/local/tomcat<br />启动关闭服务文件放在  /usr/local/tomcat/bin<br />  配置文件              /usr/local/tomcat/conf<br />  web文件              /usr/local/tomcat/webapps<br />  默认访问目录         /usr/local/tomcat/webapps/ROOT<br />                <br />设置环境变量，<br />在/etc/profile中末尾加入：<br />export JAVA_HOME=/usr/local/java<br />export TOMCAT_HOME=/usr/local/tomcat<br />export PATH=$PATH:$JAVA_HOME/bin<br />export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar<br />source /etc/profile（使之生效就可以了）<br />3.启动与关闭服务：<br />#cd /usr/local/tomcat/bin<br />#./startup.sh   （关闭服务：#./shutdown.sh）<br />测试：http://192.168.1.155:8080/<br />（注：/usr/local/tomcat/webapps/ROOT目录下面必须有WEB-INF这个目录，否则将无法访问该页面。<br /> <br />安装apache<br />首先从http://www.apache.org的网站上下载apache-2.2.0的源代码。apache-2.2.0的版本做了些改动大家需要注意一下。首先apr和apr-util需要单独的安装，还有配置文件由原来的一个变为现在的多个不过这样也好，可以清楚的知道那部分配置在那个配置文件里方便修改。安装步骤如下： <br />解压apache的源代码<br /># tar xvjf httpd-2.2.0.tar.bz2<br /># cd httpd-2.2.0<br />安装apr<br /># cd srclib/apr<br /># ./configure --prefix=/usr/local/apr<br /># make<br /># make install<br /> <br />安装apr-util<br /># cd ../apr-util/<br /># ./configure --prefix=/usr/local/apr-util \<br />> --with-apr=/usr/local/apr<br /># make<br /># make install<br /># cd ../../<br />安装apache<br /># ./configure --prefix=/usr/local/apache \<br />> --enable-so \<br />> --enable-rewrite=share \<br />> --enable-proxy=share \<br />> --enable-proxy-ajp=share \<br />> --with-apr=/usr/local/apr \<br />> --with-apr-util=/usr/local/apr-util <br /># make<br /># make install<br />#/usr/local/apache/bin/httpd -l //看看是否有proxy-ajp这个模块<br />如果有这个模块证明proxy-ajp模块安装成功，可以进行与tomcat的结合了。<br /> <br /># vi /usr/local/apache/conf/httpd.conf<br />把"#Include conf/extra/httpd-vhosts.conf" 前面的"#"去掉然后编辑<br />Vi  /usr/local/apache/conf/extra/httpd-vhosts.conf<br />编辑为如下的代码<br />&lt;VirtualHost *:80><br />    ServerAdmin lzqboy12@21cn.com<br />    ProxyPass / ajp://localhost:8009/<br />    ProxyPassReverse / ajp://localhost:8009/<br />    ServerName localhost<br />    ServerAlias www.leo.com<br />    ErrorLog logs/leo.com-error_log<br />    CustomLog logs/leo.com-access_log common<br />&lt;/VirtualHost><br />然后先启动tomcat，再启动apache<br /># /usr/local/tomcat/bin/startup.sh<br /># /usr/local/apache/bin/apachctl start<br />http://192.168.1.155或http://www.leo.com<br />打开浏览器看看是否看到了tomcat的欢迎页面，如果是说明apache和tomcat的结合成功 <br />注意：由于/的设置把所有80端口的访问都forward到了tomcat，所以这可能不是我们所希望的，这种情况下apache只是个转发代理。一般情况下，我们希望apache同时能提供mod_perl、php功能。因此需要单独为jsp的应用配置URI映射。配置同样很简单ProxyPass /myapp ajp://localhost:8009/，ProxyPassReverse /myapp ajp://localhost:8009/即可。<br />方法二:<br />下面介绍一下加载mod_jk.so模块来解释JSP:<br />安装jakarta-tomcat-connectors-1.2.15-src，生成mod_jk.so文件。<br />安装jakarta-tomcat-connectors-1.2.15-src.tar.gz<br />具体过程如下：<br />#tar zxvf jakarta-tomcat-connectors-1.2.15-src.tar.gz<br /># cd jakarta-tomcat-connectors-1.2.15-src<br /># cd jk<br /># cd native<br />#./configure --with-apxs=/usr/local/apache/bin/apxs<br />#make<br />#make  install<br /># ls /usr/local/apache/modules/<br />mod_jk.so<br />（mod_jk.so会自动被复制到 /usr/local/apache/modules目录下）<br />整合apache与tomcat（具体参考apache的官方网站） <br />编辑apache的配置文件/usr/local/apache/conf/httpd.conf，在文件末尾添加如下内容：<br />#ad mod_jk module<br />LoadModule jk_module modules/mod_jk.so<br /># Update this path to match your modules location<br /># Where to find workers.propertie<br /># Update this path to match your conf directory location (put workers.properties next to httpd.conf)<br />JkWorkersFile /usr/local/apache/conf/workers.properties<br /># Where to put jk logs<br /># Update this path to match your logs directory location (put mod_jk.log next to access_log)<br />  JkLogFile     /usr/local/apache/mod_jk.log<br /># Set the jk log level [debug/error/info]<br />  JkLogLevel    info<br /># Select the log format<br />  JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "<br /># JkOptions indicate to send SSL KEY SIZE,<br />  JkOptions     +ForwardKeySize +ForwardURICompat -ForwardDirectories<br /># JkRequestLogFormat set the request format<br />  JkRequestLogFormat     "%w %V %T"<br /># Send everything for context /examples to worker named worker1 (ajp13)<br />  JkMount  /*.jsp worker1<br />新建此文件/usr/local/apache/conf/workers.properties 添加如下内容：<br /># Define 1 real worker using ajp13<br />  worker.list=worker1<br />  # Set properties for worker1 (ajp13)<br />  worker.worker1.type=ajp13<br />  worker.worker1.host=localhost<br />  worker.worker1.port=8009<br />  worker.worker1.lbfactor=50<br />  worker.worker1.cachesize=10<br />  worker.worker1.cache_timeout=600<br />  worker.worker1.socket_keepalive=1<br />  worker.worker1.reclycle_timeout=300<br />重启apache即可生效.
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/173575#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, 19 Mar 2008 01:57:18 +0800</pubDate>
        <link>http://library.javaeye.com/blog/173575</link>
        <guid>http://library.javaeye.com/blog/173575</guid>
      </item>
      <item>
        <title>RHEL AS5 通过yum update自动升级</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/173357" style="color:red;">http://library.javaeye.com/blog/173357</a>&nbsp;
          发表时间: 2008年03月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          通过 http://mirror-status.centos.org 网站查找离自己最近的镜像站点，替换下面文件中的相应地址：<br /><br />1.修改 /etc/yum.repos.d/rhel-debuginfo.repo 为如下内容：<br /><br />[base]<br />name=Red Hat Enterprise Linux $releasever -Base<br />baseurl=http://mirror.be10.com/centos/5.0/os/$basearch/<br />gpgcheck=1<br />[update]<br />name=Red Hat Enterprise Linux $releasever -Updates<br />baseurl=http://mirror.be10.com/centos/5.0/updates/$basearch/<br />gpgcheck=1<br />[extras]<br />name=Red Hat Enterprise Linux $releasever -Extras<br />baseurl=http://mirror.be10.com/centos/5.0/extras/$basearch/<br />gpgcheck=1<br />[addons]<br />name=Red Hat Enterprise Linux $releasever -Addons<br />baseurl=http://mirror.be10.com/centos/5.0/addons/$basearch/<br />gpgcheck=1<br /><br />2.下载并导入KEY<br /><br />cd /etc/pki/rpm-gpg<br />wget http://mirror.be10.com/centos/RPM-GPG-KEY-CentOS-5<br />rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*<br /><br />3. yum指令<br />注:当第一次使用yum或yum资源库有更新时,yum会自动下载所有所需的headers放置于/var/cache/yum目录下,所需时间可能较长.<br />rpm包的更新<br />* 检查可更新的rpm包<br />#yum check-update<br />* 更新所有的rpm包<br />#yum update<br />* 更新指定的rpm包,如更新kernel和kernel source<br />#yum update kernel kernel-source<br />* 大规模的版本升级,与yum update不同的是,连旧的淘汰的包也升级<br />#yum upgrade<br />rpm包的安装和删除<br />* 安装rpm包,如xmms-mp3<br />#yum install xmms-mp3<br />* 删除rpm包,包括与该包有倚赖性的包<br />#yum remove licq<br />* 注:同时会提示删除licq-gnome,licq-qt,licq-text<br />yum暂存(/var/cache/yum/)的相关参数<br />* 清除暂存中rpm包文件<br />#yum clean packages<br />* 清除暂存中rpm头文件<br />#yum clearn headers<br />* 清除暂存中旧的rpm头文件<br />#yum clean oldheaders<br />* 清除暂存中旧的rpm头文件和包文件<br />#yum clearn 或#yum clearn all<br />* 注:相当于yum clean packages + yum clean oldheaders<br />包列表<br />* 列出资源库中所有可以安装或更新的rpm包<br />#yum list<br />* 列出资源库中特定的可以安装或更新以及已经安装的rpm包<br />#yum list mozilla<br />#yum list mozilla*<br />* 注:可以在rpm包名中使用匹配符,如列出所有以mozilla开头的rpm包<br />* 列出资源库中所有可以更新的rpm包<br />#yum list updates<br />* 列出已经安装的所有的rpm包<br />#yum list installed<br />* 列出已经安装的但是不包含在资源库中的rpm包<br />#yum list extras<br />* 注:通过其它网站下载安装的rpm包<br />rpm包信息显示(info参数同list)<br />* 列出资源库中所有可以安装或更新的rpm包的信息<br />#yum info<br />* 列出资源库中特定的可以安装或更新以及已经安装的rpm包的信息<br />#yum info mozilla<br />#yum info mozilla*<br />* 注:可以在rpm包名中使用匹配符,如列出所有以mozilla开头的rpm包的信息<br />* 列出资源库中所有可以更新的rpm包的信息<br />#yum info updates<br />* 列出已经安装的所有的rpm包的信息<br />#yum info installed<br />* 列出已经安装的但是不包含在资源库中的rpm包的信息<br />#yum info extras<br />* 注:通过其它网站下载安装的rpm包的信息<br />搜索rpm包<br />* 搜索匹配特定字符的rpm包<br />#yum search mozilla<br />* 注:在rpm包名,包描述等中搜索<br />* 搜索有包含特定文件名的rpm包<br />#yum provides realplay<br />五. 增加资源库<br />* 例如:增加rpm.livna.org作为资源库<br />* 安装Livna.org rpms GPG key<br />#rpm –import http://rpm.livna.org/RPM-LIVNA-GPG-KEY<br />* 检查GPG Key<br /># rpm -qa gpg-pubkey*<br />* 显示Key信息<br />#rpm -qi gpg-pubkey-a109b1ec-3f6e28d5<br />* (注:如果要删除Key,使用#rpm -e gpg-pubkey-a109b1ec-3f6e28d5)
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/173357#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, 18 Mar 2008 12:42:24 +0800</pubDate>
        <link>http://library.javaeye.com/blog/173357</link>
        <guid>http://library.javaeye.com/blog/173357</guid>
      </item>
      <item>
        <title>apache域名绑定实例conf/http.conf文件</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/171482" style="color:red;">http://library.javaeye.com/blog/171482</a>&nbsp;
          发表时间: 2008年03月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ServerRoot "/usr/local/apache"<br /><br />#<br /># The accept serialization lock file MUST BE STORED ON A LOCAL DISK.<br />#<br />&lt;IfModule !mpm_winnt.c><br />&lt;IfModule !mpm_netware.c><br />#LockFile logs/accept.lock<br />&lt;/IfModule><br />&lt;/IfModule><br /><br />#<br /><br />#<br />&lt;IfModule !mpm_netware.c><br />&lt;IfModule !perchild.c><br />#ScoreBoardFile logs/apache_runtime_status<br />&lt;/IfModule><br />&lt;/IfModule><br /><br /><br />&lt;IfModule !mpm_netware.c><br />PidFile logs/httpd.pid<br />&lt;/IfModule><br /><br /><br />Timeout 300<br /><br />#<br /><br />#<br />KeepAlive On<br /><br />#<br /><br />#<br />MaxKeepAliveRequests 100<br /><br />#<br /><br />KeepAliveTimeout 15<br /><br /><br /><br />&lt;IfModule prefork.c><br />StartServers     5<br />MinSpareServers   5<br />MaxSpareServers   10<br />MaxClients     150<br />MaxRequestsPerChild 0<br />&lt;/IfModule><br /><br /><br />&lt;IfModule worker.c><br />StartServers     2<br />MaxClients     150<br />MinSpareThreads   25<br />MaxSpareThreads   75<br />ThreadsPerChild   25<br />MaxRequestsPerChild 0<br />&lt;/IfModule><br /><br /><br />&lt;IfModule perchild.c><br />NumServers     5<br />StartThreads     5<br />MinSpareThreads   5<br />MaxSpareThreads   10<br />MaxThreadsPerChild 20<br />MaxRequestsPerChild 0<br />&lt;/IfModule><br /><br /># WinNT MPM<br /><br />&lt;IfModule mpm_winnt.c><br />ThreadsPerChild 250<br />MaxRequestsPerChild 0<br />&lt;/IfModule><br /><br /># BeOS MPM<br /><br />&lt;IfModule beos.c><br />StartThreads       10<br />MaxClients       50<br />MaxRequestsPerThread   10000<br />&lt;/IfModule>  <br /><br />         <br />&lt;IfModule mpm_netware.c><br />ThreadStackSize   65536<br />StartThreads     250<br />MinSpareThreads     25<br />MaxSpareThreads   250<br />MaxThreads       1000<br />MaxRequestsPerChild   0<br />MaxMemFree       100<br />&lt;/IfModule><br /><br /># OS/2 MPM<br /><br />&lt;IfModule mpmt_os2.c><br />StartServers     2<br />MinSpareThreads   5<br />MaxSpareThreads   10<br />MaxRequestsPerChild   0<br />&lt;/IfModule><br /><br />#<br /><br />#<br />#Listen 12.34.56.78:80<br /><br />Listen 80<br /><br />#<br /># Dynamic Shared Object (DSO) Support<br /><br /># LoadModule foo_module modules/mod_foo.so<br />LoadModule php4_module   modules/libphp4.so<br />#<br /><br /><br />#<br /><br />&lt;IfModule !mpm_winnt.c><br />&lt;IfModule !mpm_netware.c><br />#<br /><br />#<br />User nobody<br />Group #-1<br />&lt;/IfModule><br />&lt;/IfModule><br /><br />#<br /><br />#<br />ServerAdmin you@example.com<br /><br />#<br />#<br />UseCanonicalName Off<br /><br />#<br /><br />#<br />DocumentRoot "/usr/local/apache/htdocs"<br /><br />#<br /><br />#<br />&lt;Directory /><br />Options FollowSymLinks<br />AllowOverride None<br />&lt;/Directory><br /><br />#<br />#<br /><br />#<br /># This should be changed to whatever you set DocumentRoot to.<br />#<br />&lt;Directory "/usr/local/apache/htdocs"><br /><br />#<br /><br />#<br />Options FollowSymLinks<br />#   Options Indexes FollowSymLinks<br /><br />#<br /><br />#<br />AllowOverride None<br /><br />#<br /># Controls who can get stuff from this server.<br />#<br />Order allow,deny<br />Allow from all<br /><br />&lt;/Directory><br /><br />#<br />#<br />UserDir public_html<br /><br />#<br /><br />#<br />DirectoryIndex index.html index.php index.html.var<br /><br />#<br /><br />#<br />AccessFileName .htaccess<br /><br />#<br /># The following lines prevent .htaccess and .htpasswd files from being<br /># viewed by Web clients.<br />#<br />&lt;Files ~ "^.ht"><br />Order allow,deny<br />Deny from all<br />&lt;/Files><br /><br />#<br /># TypesConfig describes where the mime.types file (or equivalent) is<br /># to be found.<br />#<br />TypesConfig conf/mime.types<br /><br />#<br /><br />#<br />DefaultType text/plain<br /><br />#<br />#<br />&lt;IfModule mod_mime_magic.c><br />MIMEMagicFile conf/magic<br />&lt;/IfModule><br /><br />#<br /><br />#<br />HostnameLookups Off<br /><br />#<br /><br />#<br />#EnableMMAP off<br /><br />#<br /><br />#<br />#EnableSendfile off<br /><br />#<br /><br />ErrorLog logs/error_log<br /><br />#<br />#<br />LogLevel warn<br /><br />#<br />#<br />LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined<br />LogFormat "%h %l %u %t "%r" %>s %b" common<br />LogFormat "%{Referer}i -> %U" referer<br />LogFormat "%{User-agent}i" agent<br /><br /># You need to enable mod_logio.c to use %I and %O<br />#LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio<br /><br />#<br /><br />#<br />CustomLog logs/access_log combined<br />#<br />#<br />ServerTokens Full<br /><br /><br />#<br />ServerSignature On<br /><br />#<br />#<br />Alias /icons/ "/usr/local/apache/icons/"<br /><br />&lt;Directory "/usr/local/apache/icons"><br />Options Indexes MultiViews<br />AllowOverride None<br />Order allow,deny<br />Allow from all<br />&lt;/Directory><br /><br /><br />#<br />AliasMatch ^/manual(?:/(?:de|en|es|fr|ja|ko|ru))?(/.*)?$ "/usr/local/apache/manual$1"<br /><br />&lt;Directory "/usr/local/apache/manual"><br />Options Indexes<br />AllowOverride None<br />Order allow,deny<br />Allow from all<br /><br />&lt;Files *.html><br />  SetHandler type-map<br />&lt;/Files><br /><br />SetEnvIf Request_URI ^/manual/(de|en|es|fr|ja|ko|ru)/ prefer-language=$1<br />RedirectMatch 301 ^/manual(?:/(de|en|es|fr|ja|ko|ru)){2,}(/.*)?$ /manual/$1$2<br />&lt;/Directory><br /><br />#<br />#<br />ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"<br /><br />&lt;IfModule mod_cgid.c><br /><br />&lt;/IfModule><br /><br />#<br />&lt;Directory "/usr/local/apache/cgi-bin"><br />AllowOverride None<br />Options None<br />Order allow,deny<br />Allow from all<br />&lt;/Directory><br /><br />#<br />#<br />IndexOptions FancyIndexing VersionSort<br /><br /><br />AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip<br /><br />AddIconByType (TXT,/icons/text.gif) text/*<br />AddIconByType (IMG,/icons/image2.gif) image/*<br />AddIconByType (SND,/icons/sound2.gif) audio/*<br />AddIconByType (VID,/icons/movie.gif) video/*<br /><br />AddIcon /icons/binary.gif .bin .exe<br />AddIcon /icons/binhex.gif .hqx<br />AddIcon /icons/tar.gif .tar<br />AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv<br />AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip<br />AddIcon /icons/a.gif .ps .ai .eps<br />AddIcon /icons/layout.gif .html .shtml .htm .pdf<br />AddIcon /icons/text.gif .txt<br />AddIcon /icons/c.gif .c<br />AddIcon /icons/p.gif .pl .py<br />AddIcon /icons/f.gif .for<br />AddIcon /icons/dvi.gif .dvi<br />AddIcon /icons/uuencoded.gif .uu<br />AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl<br />AddIcon /icons/tex.gif .tex<br />AddIcon /icons/bomb.gif core<br /><br />AddIcon /icons/back.gif ..<br />AddIcon /icons/hand.right.gif README<br />AddIcon /icons/folder.gif ^^DIRECTORY^^<br />AddIcon /icons/blank.gif ^^BLANKICON^^<br /><br />#<br /><br />#<br />DefaultIcon /icons/unknown.gif<br /><br /><br />ReadmeName README.html<br />HeaderName HEADER.html<br /><br />#<br /><br />IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t<br /><br />#<br />##<br /># DefaultLanguage nl<br />#<br />##<br />AddLanguage ca .ca<br />AddLanguage cs .cz .cs<br />AddLanguage da .dk<br />AddLanguage de .de<br />AddLanguage el .el<br />AddLanguage en .en<br />AddLanguage eo .eo<br />AddLanguage es .es<br />AddLanguage et .et<br />AddLanguage fr .fr<br />AddLanguage he .he<br />AddLanguage hr .hr<br />AddLanguage it .it<br />AddLanguage ja .ja<br />AddLanguage ko .ko<br />AddLanguage ltz .ltz<br />AddLanguage nl .nl<br />AddLanguage nn .nn<br />AddLanguage no .no<br />AddLanguage pl .po<br />AddLanguage pt .pt<br />AddLanguage pt-BR .pt-br<br />AddLanguage ru .ru<br />AddLanguage sv .sv<br />AddLanguage zh-CN .zh-cn<br />AddLanguage zh-TW .zh-tw<br /><br />#<br /># #<br />LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW<br /><br />#<br />##<br />ForceLanguagePriority Prefer Fallback<br /><br />#<br /><br />#<br />AddCharset ISO-8859-1 .iso8859-1 .latin1<br />AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen<br />AddCharset ISO-8859-3 .iso8859-3 .latin3<br />AddCharset ISO-8859-4 .iso8859-4 .latin4<br />AddCharset ISO-8859-5 .iso8859-5 .latin5 .cyr .iso-ru<br />AddCharset ISO-8859-6 .iso8859-6 .latin6 .arb<br />AddCharset ISO-8859-7 .iso8859-7 .latin7 .grk<br />AddCharset ISO-8859-8 .iso8859-8 .latin8 .heb<br />AddCharset ISO-8859-9 .iso8859-9 .latin9 .trk<br />AddCharset ISO-2022-JP .iso2022-jp .jis<br />AddCharset ISO-2022-KR .iso2022-kr .kis<br />AddCharset ISO-2022-CN .iso2022-cn .cis<br />AddCharset Big5   .Big5   .big5<br /># For russian, more than one charset is used (depends on client, mostly):<br />AddCharset WINDOWS-1251 .cp-1251   .win-1251<br />AddCharset CP866   .cp866<br />AddCharset KOI8-r   .koi8-r .koi8-ru<br />AddCharset KOI8-ru   .koi8-uk .ua<br />AddCharset ISO-10646-UCS-2 .ucs2<br />AddCharset ISO-10646-UCS-4 .ucs4<br />AddCharset UTF-8   .utf8<br />#<br />AddCharset GB2312   .gb2312 .gb<br />AddCharset utf-7   .utf7<br />AddCharset utf-8   .utf8<br />AddCharset big5   .big5 .b5<br />AddCharset EUC-TW   .euc-tw<br />AddCharset EUC-JP   .euc-jp<br />AddCharset EUC-KR   .euc-kr<br />AddCharset shift_jis   .sjis<br /><br />#<br />AddType application/x-httpd-php .php<br />AddType image/x-icon .ico<br />DirectoryIndex index.php index.html index.html.var<br /><br />AddType application/x-compress .Z<br />AddType application/x-gzip .gz .tgz<br /><br /><br /><br /><br />AddHandler type-map var<br /><br />BrowserMatch "Mozilla/2" nokeepalive<br />BrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0 force-response-1.0<br />BrowserMatch "RealPlayer 4.0" force-response-1.0<br />BrowserMatch "Java/1.0" force-response-1.0<br />BrowserMatch "JDK/1.0" force-response-1.0<br /><br />BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully<br />BrowserMatch "^WebDrive" redirect-carefully<br />BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully<br />BrowserMatch "^gnome-vfs" redirect-carefully<br /><br />&lt;IfModule mod_ssl.c><br />Include conf/ssl.conf<br />&lt;/IfModule><br /><br /><br /><br />&lt;Directory "/usr/local/apache/htdocs/xiaoshou"><br />AuthType Basic<br />AuthName "chinabidding"<br />AuthUserFile /usr/local/awstats/wwwroot/passwords/passwords<br />Require user awstt<br />Options None<br />AllowOverride None<br />Order allow,deny<br />Allow from all<br />&lt;/Directory><br /><br /><br />Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"<br />Alias /awstatscss "/usr/local/awstats/wwwroot/css/"<br />Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"<br />ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"<br /><br /><br />&lt;VirtualHost 219.143.69.6:80><br />  DocumentRoot /usr/local/apache/cgi-bin<br />  Options None<br />  ServerName 219.143.69.6<br />  DirectoryIndex index.html<br />&lt;/VirtualHost><br /><br />&lt;VirtualHost 219.143.69.6:80><br />  DocumentRoot /usr/local/apache/htdocs<br />  Options None<br />  ServerName bbs.chinabidding.com<br />    DirectoryIndex index.html index.php<br />&lt;/VirtualHost><br /><br />&lt;VirtualHost 219.143.69.6:80><br />  DocumentRoot /usr/local/apache/htdocs<br />  Options None<br />  ServerName www.worldsuppliers.cn<br />  DirectoryIndex access.html<br />&lt;/VirtualHost><br /><br />&lt;VirtualHost 219.143.69.6:80><br />  DocumentRoot /usr/local/apache/htdocs<br />  Options None<br />  ServerName statistics.wacom.com.cn<br />  DirectoryIndex access.html<br />&lt;/VirtualHost><br /><br />&lt;Directory "/usr/local/awstats/wwwroot"><br />AuthType Basic<br />AuthName "chinabidding"<br />AuthUserFile /usr/local/awstats/wwwroot/passwords/password<br />Require user awstats<br />Options None<br />AllowOverride None<br />Order allow,deny<br />Allow from all<br />&lt;/Directory>
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/171482#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, 14 Mar 2008 17:47:08 +0800</pubDate>
        <link>http://library.javaeye.com/blog/171482</link>
        <guid>http://library.javaeye.com/blog/171482</guid>
      </item>
      <item>
        <title>apache 配置详解</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/171481" style="color:red;">http://library.javaeye.com/blog/171481</a>&nbsp;
          发表时间: 2008年03月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          #<br /># 基于 NCSA 服务的配置文件。<br />#<br />#这是Apache服务器主要配置文件。<br />#它包含服务器的影响服务器运行的配置指令。<br />#参见&lt;URL:http://httpd.ache.org/doc-2.0/>以取得关于这些指令的详细信息<br />#<br />#不要只是简单的阅读这些指令信息而不去理解它。<br />#这里只是做了简单的说明，如果你没有参考在线文件，你就会被警告。<br />#<br />#这些配置指令被分为下面三个部分：<br />#1. 控制整个Apache服务器行为的部分（即全局环境变量）<br />#2. 定义主要或者默认服务参数的指令，也为所有虚拟主机提供默认的设置参数<br />#3. 虚拟主机的设置参数<br />#<br />#配置和日志文件名：如果你指定的文件名以“/”开始（win32下以“dirver:/”），<br />#服务器将使用绝对路径，如果文件名不是以“/”开始的，那么它将把ServerRoot<br />#的值附加在文件名的前面，例如，对“logs/foo.log"，如果ServerRoot的值<br />#为“/usr/local/apache2”，则该文件应为“/usr/local/apache2/logs/foo.log”<br />#<br />##第一区：全局环境参数<br />#<br />#这里设置的参数将影响整个Apache服务器的行为；<br />#例如Apache能够处理的并发请求的数量等。<br />#<br />#ServerRoot:指出服务器保存其配置、出错和日志文件等的根目录。<br />#<br />#注意！如果你想要将它指定为NFS或其它网络上的位置，<br />#请一定要去阅读与LockFile有关的文档（可能在<br />#&lt;URL:http://httpd.apache.org/docs-2.0/mod/mpm_common.html#lockfile>)。<br />#这将会使你自己也能解决很多问题。<br />#<br />#路径的结尾不要添加斜线。<br />#<br />ServerRoot "/usr/loacl/apache2"<br />#<br />#串行访问的锁文件必须保存在本地磁盘上<br />#<br />&lt;IfModule !mpm_winnt.c><br />&lt;IfModule !mpm_neware.c><br />#LockFile logs/accept.lock<br />&lt;/IfModule><br />&lt;/IfModule><br /><br />#ScoreBoardFile:用来保存内部服务进程信息的文件。<br />#如果未指明（默认），记分板（scoreboard）将被保存在一个匿名的共享内存段中，<br />#并且它不能被第三方软件所使用。<br />#如果指定了，要确保不能使用两个Apache使用同一个记分板文件，<br />#这个记分板文件必须保存在本地磁盘上。<br />#<br />&lt;IfModule !mpm_netware.c><br />&lt;IfModule !perchild.c><br />#ScoreBoardFile logs/apache_runtime_status<br />&lt;IfModule><br />&lt;IfModule><br /><br />#<br />#PidFile:记录服务器启动进程号的文件。<br />#<br />&lt;IfModule !mpm_neware.c><br />PidFile logs/httpd.pid<br />&lt;/IfModule><br /><br />#<br />#Timeout:接收和发送前超时秒数<br />#<br />Timeout 300<br /><br />#<br />#KeepAlive:是否允许稳固的连接（每个连接有多个请求），<br />#设为"Off"则停用。<br />#<br />KeepAlive On<br /><br />#<br />#MaxKeepAliveRequests:在稳固连接期间允许的最大请求数，<br />#设为0表示无限制接入。<br />#我们推荐你将其设为一个较大的值，以便提高性能<br />MaxKeepAliveRequests 100<br /><br />#<br />#KeepAliveTimeout:在同一个连接上从同一台客户上接收请求的秒数<br />#<br />KeepAliveTimeout 15<br /><br />##<br />##Server-Pool大小设定（针对MPM的）<br />##<br /><br /># prefork MPM<br /># StartServers:启动时服务器启动的进程数<br /># MinSpareServers:保有的备用进程的最小数目<br /># MaxSpareServers:保有的备用进程的最大数目<br /># MaxClients:服务器允许启动的最大进程数<br /># MaxRequestsPerChild:一个服务进程允许的最大请求数<br />&lt;IfModule prefork.c><br />StartServers 5<br />MinSpareServers 5<br />MaxSpareServers 10<br />MaxClients 150<br />MaxRequestPerChild 0<br />&lt;/IfModule><br /><br /># worker MPM<br /># StartServers:服务器启动时的服务进程数目<br /># MaxClients:允许同时连接的最大用户数目<br /># MinSpareThreads:保有的最小工作线程数目<br /># MaxSpareThreads:允许保有的最大工作线程数目<br /># ThreadsPerChild:每个服务进程中的工作线程常数<br /># MaxRequestsPerChild:服务进程中允许的最大请求数目<br />&lt;IfModule worker.c><br />StartServers 2<br />MaxClients 150<br />MinSpareThreads 25<br />MaxSpareThreads 75<br />ThreadsPerChild 25<br />MaxRequestsPerChild 0<br />&lt;/IfModule><br /><br /># perchild MPM<br /># NumServers:服务进程数量<br /># StartThreads:每个服务进程中的起始线程数量<br /># MinSpareThreads:保有的最小线程数量<br /># MaxSpareThreads:保有的最大线程数量<br /># MaxThreadsPerChild:每个服务进程允许的最大线程数<br /># MaxRequestsPerChild:每个服务进程允许连接的最大数量<br />&lt;IfModule perchild.c><br />NumServers 5<br />StartThreads 5<br />MinSpareThreads 5<br />MaxSpareThreads 10<br />MaxThreadsPerChild 20<br />MaxRequestsPerChild 0<br />&lt;/IfModule><br /><br /># WinNT MPM<br /># ThreadsPerChild:服务进程中工作线程常数<br /># MaxRequestsPerChild:服务进程允许的最大请求数<br />&lt;IfModule mpm_winnt.c><br />ThreadsPerChild 250<br />MaxRequestsPerChild 0<br />&lt;/IfModule><br /><br /># BeOS MPM<br /># StartThreads:服务器启动时启动的线程数<br /># MaxClients:可以启动的最大线程数（一个线程等于一个用户）<br /># MaxRequestsPerThread:每个线程允许的最大请求数<br />&lt;IfModule beos.c><br />StartThreads 10<br />MaxClients 50<br />MaxRequestsPerThread 10000<br />&lt;/IfModule><br /><br /># NetWare MPM<br /># ThreadStachSize:为每个工作线程分配的堆栈尺寸<br /># StartThreads:服务器启动时启动的线程数<br /># MinSpareThreads:用于处理实发请求的空闲线程数<br /># MaxSpareThreads:空闲线程的最大数量<br /># MaxThreads:在同一时间活动的最大线程数<br /># MaxRequestPerChild:一个线程服务请求的最大数量，<br /># 推荐将其设置为0，以实现无限制的接入<br />&lt;IfModule mpm_netware.c><br />ThreadStackSize 65536<br />StartThreads 250<br />MinSpareThreads 25<br />MaxSpareThreads 250<br />MaxThreads 1000<br />MaxRequestPerChild 0<br />&lt;/IfModule><br /><br /># OS/2 MPM<br /># StartServers:启动的服务进程数量<br /># MinSpareThreads:每个进程允许的最小空闲线程<br /># MaxSpareThreads:每个进程允许的最大空闲线程<br /># MaxRequestsPerChild:每个服务进程允许的最大连接数<br />&lt;IfModule mpmt_os2.c><br />StartServers 2<br />MinSpareThreads 5<br />MaxSpareThreads 10<br />MaxRequestsPerChild 0<br />&lt;/IfModule><br /><br />#<br /># Listen:允许你绑定Apache服务到指定的IP地址和端口上，以取代默认值<br /># 参见&lt;VirtualHost>指令<br /># 使用如下命令使Apache只在指定的IP地址上监听，<br /># 以防止它在IP地址0.0.0.0上监听<br />#<br /># Listen 12.34.56.78:80<br /><br />Listen 80<br /><br />#<br /># 动态共享支持（DSO）<br />#<br /># 为了能够使用那些以DSO模式编译的模块中的函数，你必须有相应的“LoadModule”行，<br /># 因此，在这里包含了这些指令，以便能在使用它之前激活。<br /># 那些静态编译的模块不需要在这里列出 (即以“httpd -l”列出的模块)<br />#<br /># 示例：<br /># LoadModule foo_module modules/mod_foo.so<br />#<br /><br />#<br /># ExtendedStatus：当调用“server-status”时，控制Apache是产生“全”状态<br /># 信息（ExtendedStatus On），还是产生基本信息（ExtendedStatus Off）。<br /># 默认为off<br />#<br /># ExtendedStatus On<br /><br />### 第二区：“主”服务配置<br />#<br /># 这一区建立被 “主” 服务器用的指令值,以回应那些不被 &lt;VirtualHost><br /># 定义处理的任何请求。<br /># 这些数值也提供默认值给后面定义的&lt;VirtualHost>容器。<br /># 如果&lt;VirtualHost>中有定义，那么这里定义的指令值将被<br /># &lt;VirtualHost>中的定义所覆盖。<br />#<br /><br />&lt;IfModule !mpm_winnt.c><br />&lt;IfModule !mpm_neware.c><br />#<br /># 如果你想使httpd以另外的用户或组来运行，你必须在开始时以root方式启动<br /># 然后再将它切换为你想要使用的用户或组。<br />#<br /># User/Group:运行httpd的用户和组<br /># 在SCO (ODT3)上使用“User nouser”和“Group nogroup”<br /># 在HPUX上，你可能不能以nobody身份使用共享内存，建议创建一个www用户。<br /># 注意一些核心（kernel）在组ID大于60000时拒绝setgid(Group)或semctl(IPC_SET)，<br />#节在这些系统上不要使用“Group #-1”。<br />#<br />User nobody<br />Group #-1<br />&lt;/IfModule><br />&lt;/IfModule><br /><br />#<br /># ServerAdmin:你的邮件地址，当发生问题时Apache将向你发出邮件。<br /># 作为一个出错文档，这个地址显示在server-generated页上，<br /># 例如：admin@your-domain.com<br />#<br />ServerAdmin kreny@sina.com<br /><br />#<br /># ServerName指定Apache用于识别自身的名字和端口号。<br /># 通常这个值是自动指定的，但是我们推荐你显式的指定它以防止启动时出错<br />#<br /># 如果你为你的主机指定了一个无效的DNS名，server-generated重定向将不能工作。<br /># 参见UseCanonicalName指令<br />#<br /># 如果你的主机没有注册DNS名，在这里键入它的IP地址<br /># 无论如何，你必须使用它的IP地址来提供服务，<br /># 这里使用一种容易理解的方式重定向服务<br />ServerName www.dalouis.com:80<br /><br />#<br /># UseCanonicalName:决定Apache如何构造URLS和 SERVER_NAME 和 SERVER_PORT 的指令。<br /># 当设置为 “Off”时,Apache会使用用户端提供的主机名和端口号。<br /># 当设置为“On”,Apache会使用ServerName指令的值。<br />#<br />UseCanonicalName Off<br /><br />#<br /># DocumentRoot:你的文档的根目录。默认情况下，所有的请求从这个目录进行应答。<br /># 但是可以使用符号链接和别名来指向到其他的位置。<br />#<br />DocumentRoot "/home/redhat/public_html"<br /><br />#<br /># Apache可以存取的每个目录都可以配置存取权限（包括它的子目录）。<br />#<br /># 首先，我们配置一个高限制的特征。<br /><br /># 这将禁止访问文件系统所在的目录，并添加你希望允许访问的目录块。<br /># 如下所示<br />&lt;Directory /><br />Order Deny,Allow<br />Deny from all<br />&lt;/Directory>
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/171481#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, 14 Mar 2008 17:45:36 +0800</pubDate>
        <link>http://library.javaeye.com/blog/171481</link>
        <guid>http://library.javaeye.com/blog/171481</guid>
      </item>
      <item>
        <title>在Spring 2中整合DWR 2</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/169779" style="color:red;">http://library.javaeye.com/blog/169779</a>&nbsp;
          发表时间: 2008年03月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前些日子看了一篇关于在Spring 2中整合DWR 2的文章《AJAX, DWR and Spring》。最近，想动手试一下，就下载其源代码回来看看，依葫芦画瓢做了一遍。在运行时，得到XML验证错误。经过一翻折腾，终于把问题解决。<br />Spring 2基于XML Schema的配置<br /><br />众所周知，Spring 2通过XML Schema配置方式极大地简化的其配置，而且使得第三方扩展变为可能。配置如下代码所示：<br /><pre name="code" class="xml">&lt;? xml version="1.0" encoding="UTF-8" ?>
&lt; beans xmlns ="http://www.springframework.org/schema/beans"
    xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" >    
    
    &lt;!-- &lt;bean /> definitions here -->
    
&lt;/ beans ></pre><br />清单1 applicationContext.xml<br /><br />不知大家有没有想过spring-beans-2.0.xsd位置在那里？其实，大家可以用Eclipse打开Spring的jar包，展开META-INF，并双击打开其中的spring.schemas文件，内容如下：<br /><pre name="code" class="xml">http\://www.springframework.org/schema/beans/spring-beans- 2.0 .xsd = org/springframework/beans/factory/xml/spring-beans- 2.0 .xsd
http\://www.springframework.org/schema/tool/spring-tool- 2.0 .xsd = org/springframework/beans/factory/xml/spring-tool- 2.0 .xsd
http\://www.springframework.org/schema/util/spring-util- 2.0 .xsd = org/springframework/beans/factory/xml/spring-util- 2.0 .xsd
http\://www.springframework.org/schema/aop/spring-aop- 2.0 .xsd = org/springframework/aop/config/spring-aop- 2.0 .xsd
http\://www.springframework.org/schema/lang/spring-lang- 2.0 .xsd = org/springframework/scripting/config/spring-lang- 2.0 .xsd
http\://www.springframework.org/schema/tx/spring-tx- 2.0 .xsd = org/springframework/transaction/config/spring-tx- 2.0 .xsd
http\://www.springframework.org/schema/jee/spring-jee- 2.0 .xsd = org/springframework/ejb/config/spring-jee- 2.0 .xsd

http\://www.springframework.org/schema/beans/spring-beans.xsd = org/springframework/beans/factory/xml/spring-beans- 2.0 .xsd
http\://www.springframework.org/schema/tool/spring-tool.xsd = org/springframework/beans/factory/xml/spring-tool- 2.0 .xsd
http\://www.springframework.org/schema/util/spring-util.xsd = org/springframework/beans/factory/xml/spring-util- 2.0 .xsd
http\://www.springframework.org/schema/aop/spring-aop.xsd = org/springframework/aop/config/spring-aop- 2.0 .xsd
http\://www.springframework.org/schema/lang/spring-lang.xsd = org/springframework/scripting/config/spring-lang- 2.0 .xsd
http\://www.springframework.org/schema/tx/spring-tx.xsd = org/springframework/transaction/config/spring-tx- 2.0 .xsd
http\://www.springframework.org/schema/jee/spring-jee.xsd = org/springframework/ejb/config/spring-jee- 2.0 .xsd</pre><br />清单2 spring.schemas<br /><br />从以上的文件中，可以看出XML Sechema文件在类包中位置。<br />DWR 2.0 RC 2中的XML Schema文件<br /><br />根据上面的描述，我打开DWR的jar包中spring.schemas文件，内容如下：<br /><pre name="code" class="xml">http\://www.directwebremoting.org/schema/spring-dwr- 2.0 .xsd = org/directwebremoting/spring/spring-dwr- 2.0 .xsd</pre><br /><br />然后，按照上面的路径打开spring-dwr-2.0.xsd文件，内容如下：<br /><pre name="code" class="xml">&lt;? xml version="1.0" encoding="UTF-8" standalone="no" ?>

&lt;!-- 省略了版权信息 -->

&lt; xsd:schema xmlns ="http://www.directwebremoting.org/schema/spring-dwr"
            xmlns:xsd ="http://www.w3.org/2001/XMLSchema"
            targetNamespace ="http://www.directwebremoting.org/schema/spring-dwr"
            elementFormDefault ="qualified"
            attributeFormDefault ="unqualified" >

&lt;!-- 省略了具体的定义 -->
&lt;/ xsd:schema ></pre><br />清单3 spring-dwr-2.0.xsd<br /><br />文件spring-dwr-2.0.xsd告诉我们，其名称空间应为“http://www.directwebremoting.org/schema/spring-dwr”，所以我们在配置Spring 2时，应使用以上的名称空间，如下面的代码片段所示：<br /><pre name="code" class="xml">&lt;? xml version="1.0" encoding="UTF-8" ?>

&lt; beans xmlns ="http://www.springframework.org/schema/beans"
    xmlns:dwr ="http://www.directwebremoting.org/schema/spring-dwr"
    xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-2.0.xsd" >

    &lt; dwr:configuration >
        &lt; dwr:convert class ="net.blogjava.max.pws.domain.Album" type ="bean" >
            &lt; dwr:exclude method ="photos" />
        &lt;/ dwr:convert >
        &lt; dwr:convert class ="net.blogjava.max.pws.domain.Photo" type ="bean" >
            &lt; dwr:exclude method ="original, poster, thumb, full, album" />
        &lt;/ dwr:convert >
    &lt;/ dwr:configuration >

    &lt; bean id ="ajaxFacade"
        class ="net.blogjava.max.pws.web.ajax.AjaxFacade" >
        &lt; dwr:remote javascript ="AjaxFacade" />
        &lt; property name ="personalWebSite" ref ="personalWebSite" />
    &lt;/ bean >

&lt;/ beans ></pre><br />清单3 ajaxContext.xml<br />WEB-INF/web.xml配置<br /><br />通过上面的配置，我们可以省去dwr.xml配置，不过在web.xml配置dwr的Servlet时，要使用新的Servlet类。配置代码片段如下：<br /><pre name="code" class="xml">&lt; servlet >
    &lt; servlet-name > dwr &lt;/ servlet-name >
    &lt; servlet-class > org.directwebremoting.spring.DwrSpringServlet &lt;/ servlet-class >
    &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-mapping >
    &lt; servlet-name > dwr &lt;/ servlet-name >
    &lt; url-pattern > /dwr/* &lt;/ url-pattern >
&lt;/ servlet-mapping ></pre><br />清单4 web.xml<br />总结<br /><br />通过在Spring 2整合DWR 2配置，可以集中管理应用程序的配置，从一定程度上解决JavaEE开发中的配置文件泛滥的问题。
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/169779#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, 10 Mar 2008 12:52:08 +0800</pubDate>
        <link>http://library.javaeye.com/blog/169779</link>
        <guid>http://library.javaeye.com/blog/169779</guid>
      </item>
      <item>
        <title>ubuntu下远程控制Linux&amp;Window桌面</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/169385" style="color:red;">http://library.javaeye.com/blog/169385</a>&nbsp;
          发表时间: 2008年03月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          远程控制windows服务器，控制windows的桌面是很简单的，利用ubuntu自带的终端服务客户端 (tsclient)，使用RDP/RDPv5就可以连接windows了，前提当然是对方允许远程连接，终端服务客户端(tsclient)的使用和 windows自带的远程控制软件外观基本一样，设置都差不多。<br /><br />远程控制Linux服务器(SSH/VNC/XDMCP)<br /><br />远程连接Linux方法比较多，一般可以分为两类：一种是字符界面(SSH)。一种是图形化界面(VNC/XDMCP)。<br />1.连接字符界面比较简单，这里就不多说了，现在的Linux发行版基本上都带有SSH，直接使用命令就可以远程连接linux了。<br />$ ssh user@IP<br /><br />2.下面着重讲讲图形化界面的远程连接，图形化界面现在日常比较常用的是VNC/XDMCP这两种方式。两种使用方法都需要服务器的支持。<br />首先说说VNC的使用方法，以Redhat AS4服务器做例子：<br />（1）Redhat AS4默认情况下，都是安装了VNCServer的。<br />（2）需要通过哪个用户登录服务器，就在哪个用户下执行命令vncserver，如需要用root用户登录服务器，就先需要在服务器上用root用户执行 vncserver，如果是第一次执行时，系统要求指定通过VNC登录时使用的密码，而且密码必须至少6个字符。以后如果想修改VNC登录时的密码，使用 vncpasswd命令来修改密码，此密码只用作VNC登录时的密码，与系统登录密码无关。执行vncserver命令之后，会生成一个/etc/机器名:序号.log的文件。记住这里产生的这个序号，这是你以后在客户端登录时候所需要的。<br />（3）如果这个时候用客户端登录，已经可以登录上去，可是你登录上去之后会发信显示的是twm桌面系统，而非默认的gnome系统，我们还需要做一定的修改，让它符合我们的要求。<br />（4）修改主目录下隐藏的.vnc目录中的xstartup文件。把文件最后两行文字的注释取消掉，然后在最后面加上gnome-session &：<br /><br />#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &<br />#twm &<br />gnome-session &<br /><br />（5）这个时候，我们回到ubuntu上，使用ubuntu自带的终端服务客户端(tsclient)，选择协议为VNC，填入连接的服务器地址为：IP:序号，点击连接，会弹出一个密码输入框，输入我们刚在服务器上设置的密码，你就会看到显示器上出现了远端服务器的图形化界面。<br /><br />下面说说XDMCP的使用方法，同样以Radhat AS4服务器为例子：<br />（1）Redhat AS4在默认情况下，XDMCP同样也是安装完整了，只是默认没有启动，需要手工修改来启动xdmcp。<br />（2）首先修改文件/etc/X11/gdm/gdm.conf，查找到[xdmcp]模块，将它下面的设置Enable=false修改为Enable=true，同时查找#Port=177这一行，把行首的#号去掉。<br />（3）然后再修改文件/etc/X11/xdm/Xaccess文件，查找到下面一行，把前面的#号去掉。<br /># *         #any host can get a login window<br /><br />（4）修改/etc/X11/xdm/xdm-config文件，找到下面这一行，把它注释掉。[注意该地方注释使用!,而不是我们常用的#号]<br />Display Manager .Requestport 0<br /><br />（5）修改/etc/inittab文件，将id:3:initdefault:修改为：id:5:initdefault:并且在最后一行添加x:5:respawn:/usr/bin/gdm<br />（6）修改/etc/X11/xdm/Xsetup_0的属性为755。<br />（7）重新启动服务器。<br />（8）因为默认安装的ubuntu没有安装xdmcp的连接工具，所以终端服务客户端(tsclient)中的协议xdmcp是呈灰色，我们必须安装一个软件包来激活这个协议。<br />引用<br />sudo apt-get install xnest<br /><br />（9）安装好之后，在连接服务器中填入服务器IP，选择协议xdmcp，就可以直接登录远程的图形化界面了。
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/169385#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>Sat, 08 Mar 2008 18:37:02 +0800</pubDate>
        <link>http://library.javaeye.com/blog/169385</link>
        <guid>http://library.javaeye.com/blog/169385</guid>
      </item>
      <item>
        <title>ubuntu 下eclipse集成cvs</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/164407" style="color:red;">http://library.javaeye.com/blog/164407</a>&nbsp;
          发表时间: 2008年02月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Eclipse的内置版本支持<br /><br />Eclipse 本身内置了一定程度的版本支持，也就是所谓的Local History。在Eclipse中编辑的文件每次存盘都会留下记录，可以随时与历史记录比较，恢复到某一个时刻的状态。在资源视图（Resource Perspective）或者Java视图（Java Perspective）中的文件上点右键，选择Compare With，Local History，就会得到如下的画面，可以很清晰看到各个版本的区别。<br /><br /><br />图1：Eclipse中的内置版本支持：Local History。<br /><img src="http://www.ibm.com/developerworks/cn/java/l-cvs/1.jpg" /><br /><br />如果需要，则可以通过Replace With，Local History来恢复到任一个以前的版本。当然，这样版本的历史是有限制的，可以在Eclipse的Preference中设置。在 Preference�D>Workbench－>Local History中，可以设置保持最多保持几天的文件，每一文件的版本数目，历史文件的大小限制。<br /><br />但是，这样的版本系统只实现了最基本的版本功能，如果想把文件某一个状态标记为一个版本，加上注释（仅仅从Local History中的保存时间很难看出每一个版本的特点，也难以找到重要的关键版本），或者想把某个目录乃至整个项目版本化，Eclipse内置的 Local History都是无能为力的。<br /><br />好在Eclipse基于开放的思想，采用了业界标准的版本控制系统CVS，这样不仅很好地实现了版本控制的功能，对于已经熟悉CVS的开发者来说也更容易使用，更重要的是，可以为团队开发提供更加灵活和开放的选择：项目的数据可以存储在一个CVS 服务器内，不同的开发者甚至可以采用不同的开发工具，只要这些工具都支持CVS。也许这时我们可以理解为什么Eclipse放弃了Visual Age Java的业已很成功的ENVY系统，这一点很好地体现了Eclipse的开放性和对其他软件的良好互操作性。<br /><br />CVS<br /><br />CVS是Concurrent Versions System（并发版本系统）的缩写，基于Unix体系中成熟的SCCS（Source Code Control System）和RCS（Revision Control System）开发，是一个开放源码的项目，目前已是版本控制系统的主流软件。一个很常见的使用CVS的场合，就是开放源码项目。由于开放源码项目的开发者的分布性，对于版本管理的要求更加严格，而目前大部分的开放源码项目几乎都是采用CVS来管理源代码，CVS的标准性和强大可见一斑。<br /><br />CVS 采用客户机／服务器体系，代码以及各种版本存储在中心服务器内，每一个个体开发者开发时都首先从服务器上获得一份自己的拷贝，在此基础上进行开发，以避免直接影响服务器上的数据。开发者可以随时把自己的新代码提交给服务器，并通过更新获得代码的最新状态，保持与其他开发者的一致。<br /><br />CVS对于网络是透明的，开发者可以使用客户端软件（几乎所有的平台上都有相应的客户端软件）在任何时候，任何地点通过网络来获取最新的代码。<br /><br />对于Eclipse的开发者而言，Eclipse本身内置了CVS支持，不需要使用其他客户端软件，只要建立一个CVS服务器，就可以使用这一强大的版本控制系统了。<br /><br /> <br /><br />1. 安装CVS，在新立得包管理器里面选中cvs（系统-系统管理-新立得软件包管理器，在右边的软件包列表中随便选中一个，然后键盘上按cvs这三个字母，就会定位到以这三个字母开头的软件包），然后点击鼠标右键，在菜单中选中标记以便安装。然后点击上方工具栏中的应用，系统会自动下载包，然后安装。<br /><br />2. 安装CVSD，同上，选中cvsd，安装。安装cvsd后，会提示设置repository的位置，这个地方只要输入相对于RootJail的位置就可以。RootJail在/etc/cvsd/cvsd.conf中进行设置，缺省的RootJail是/var/lib/cvsd。也就是说，在这一步里面输入/myrepos就可以了。<br /><br />3. 打开一个命令行窗口，创建这个/myrepos。<br />#cd /var/lib/cvsd<br />#sudo mkdir myrepos<br /><br />4.初始化这个/myrepos。<br />#sudo cvs -d /var/lib/cvsd/myrepos init<br /><br />5.设置cvsd的用户认证方式，缺省的是系统级的，一般来说cvs的用户都是单独设置的。<br />#sudo gedit /var/lib/cvsd/myrepos/CVSROOT/config<br />添加以下几行：<br />SystemAuth=no<br />PamAuth=no<br />LockDir=/tmp/myrepos<br />然后保存退出。注意此处的/tmp/myrepos是指相对于RootJail的路径。<br /><br />6.创建LockDir<br />#sudo mkdir /var/lib/cvsd/tmp/myrepos<br /><br />7.添加用户<br />#sudo cvsd-passwd /var/lib/cvsd/myrepos cvsuser<br /><br />8.编辑cvsd的配置文件，配置那个该死的RootJail。<br />#sudo gedit /etc/cvsd/cvsd.conf<br />缺省的应该是：<br />RootJail /var/lib/cvsd<br />Repos /myrepos<br />注意此处的Repos的路径也是相对于RootJail的。<br />另外，如果有些变态的网管喜欢封端口的话，这里可以设置cvsd的监听端口，比如可以改缺省的2401端口为8080。<br />Listen * 8080<br /><br />10.设置目录权限。<br />#sudo chown cvsd:cvsd /var/lib/cvsd -R<br /><br />11. 重新启动cvsd。<br />#sudo /etc/init.d/cvsd restart<br /><br />12. 在eclipse或者其他的cvs客户端中配置使用此cvs服务器。<br />connection type:pserver<br />host:your ip<br />port:8080<br />repository path:/myrepos<br />user:cvsuser<br /><br />其实这个cvsd的安装，主要是参照它的README，只不过它是一个压缩文件，一开始没想解开看看而已。/usr/share/doc/cvsd/README.gz。<br /> <br /><br /> <br /><br /> <br /><br />在Eclipse中使用CVS系统<br /><br />前面已经提到，CVS的数据存放在服务器的数据库中。为了支持Concurrent这一并发特点，CVS使用了一个分枝（Branch）模型，以保证不同开发者的相对独立，但是又高度集成。分枝可以看成一个开发团队共享的工作区（Workspace），在CVS数据库中，有一个特殊的分枝称为HEAD，代表主要工作流。<br /><br />开发者可以提交（Commit）自己的工作，并通过更新（Update）与其他人的最新修改保持同步。提交是把自己的修改提交给数据库，称为输出（Outgoing），更新则是得到其他人的修改，称为输入（Incoming）。每次提交之前，都应该先更新，以保持与最新状态同步。<br /><br />因此，在Eclipse中使用CVS进行团队开发，理想的开发流程应该是这样的（具体操作方法随后介绍）：<br /><br /><br />图2：团队开发流程<br /><img src="http://www.ibm.com/developerworks/cn/java/l-cvs/2.jpg" />流程<br /><br />   1. 从最新状态开始。开始工作前，要保证所有资源与最新的分枝状态一致。对于从头开始的新项目，首先要连接服务器，设定存储那些资源文件。对于在服务器数据库中已经有记录的项目，首先要通过更新来保证资源状态最新。如果本地的工作没有需要特别保存的，可以直接把数据库中的最新版本Check Out As Project，或者Replace With，Latest from Repository。<br />   2. 进行本地工作，保存修改。<br />   3. 同步。当做好提交工作的准备后，要和服务器数据库同步。<br />         1. 首先应该更新（Update），检查所有的Incoming改变，输入到本地，看是否会影响自己的工作，是否会造成冲突，破坏完整性等等。<br />         2. 检查完更新后，可以确认自己的工作和最新的Branch内容是一致的，就可以提交（Commit）自己的修改了，标上适当的注释。<br /><br />下面介绍这一开发流程所用到的主要操作。<br /><br />对于一个新的项目而言，首先需要做的就是设置Eclipse来连接CVS服务器。首次连接将与服务器同步（Synchronize）。<br /><br />首先在Eclipse的资源视图（Resource Perspective）或者Java视图（Java Perspective）中的项目上点右键，选择Team，Share Project，将出现提示窗口，选择是使用已知的CVS数据库位置还是新建数据库位置。对于第一次连接CVS服务器的情况，将需要首先定义连接所需的服务器参数和路径，用户名，密码等等。这些参数将得到保存，以后如果需要重新连接，就可以直接使用已知的CVS数据库设置。<br /><br />这里我们选择新建一个数据库位置，进入下一个输入画面。<br /><br />这里的主机名（Host）可以输入localhost（在Windows NT 4下不可以这样输入），因为我们的CVS服务器就在本机上。<br /><br />接下来输入/work，设定我们的项目数据存放在这一数据库根路径下。<br /><br />然后输入用户名和密码。<br /><br />连接类型选择pserver，端口是缺省的不用改动。当然，如果你修改过CVS服务器使用的端口，这里就要保持一致。<br /><br /><br />图3：在Eclipse中设置使用CVS系统<br /><img src="http://www.ibm.com/developerworks/cn/java/l-cvs/3.jpg" /><br /><br />接下来可以直接点击Finish完成设置。如果点击下一步，可以继续定义在CVS中是否使用与项目名不同的名字作为模块名，缺省是使用相同的名字。<br /><br />现在我们完成了项目与CVS服务器的连接，项目已经和CVS服务器同步了。<br /><br />但是这并不意味着CVS已经开始记录版本信息。因为在一个项目中可能有相当一部分资源文件不适合存储到数据库中记录版本信息，比如编辑器生成的临时文件，编译生成的.class文件，或者某些编译过程生成的二进制文件等等。因此，Eclipse并不自动把所有文件存储到数据库中，需要开发者手工指定把那些文件存储到数据库中，也就是加入版本控制add to version control。对于单个文件的指定，可以随时在资源视图（Resource Perspective）或者Java视图（Java Perspective）中的文件上使用右键，选择Team，Add to Version Control。如果需要存储整个项目或者同时指定多个文件，则要使用同步（Synchronize）视图。<br /><br />注意项目与CVS服务器连接完成并同步后，在Eclipse右下角的Tasks和Console的位置新出现了一个Synchronize窗口，下方状态栏也显示了这次同步的状态信息。双击Synchronize窗口的标题栏使之最大化，我们可以看到窗口上半部分列出了所有尚未指定加入数据库的资源和文件。在这里我们可以同时选择多个文件，甚至选择整个项目，使用右键，选择Team，Add to Version Control，就可以把多个文件或者整个项目加入到数据库中，开始记录其版本信息。<br /><br />我们可以看到，这时的同步视图上标明了处于 Outgoing模式。同步（Synchronize）视图有Incoming模式和Outgoing模式，对应于提交（Commit）和更新（Update）操作，表示目前修改是来自本地还是来自服务器。当然，视图也可以同时显示Incoming和Outgoing方向的变化。当有变化时，在下半部分的比较窗口可以显示不同版本之间的差异和变化。进一步地，可以通过工具条上的合并（Merge）操作来消除对同一文件不同修改所带来的冲突。<br /><br />在此之后，当完成对文件或者项目的修改，需要确认修改，把最新的状态存储到数据库中去，就需要执行提交（commit）操作。类似的，我们可以在资源视图（Resource Perspective）或者Java视图（Java Perspective）中的文件上使用右键，选择Team，Commit；或者在同步（Synchronize）视图中同时提交多个文件乃至整个项目。注意，每次提交时都会提示输入注释，这是很重要的，作为每一个状态的说明和提示。<br /><br />当我们需要把文件或者项目的不同版本进行比较或者替换时，可以在资源视图（Resource Perspective）或者Java视图（Java Perspective）中的文件上使用右键，选择Team，Compare With或者Team，Replace With来完成。进行比较时将打开一个比较编辑器，很好地表示不同版本之间的差异，和Local History类似。<br /><br />如果要了解CVS数据库的内容情况，可以使用CVS数据库浏览视图（CVS Repository Exploring Perspective）。我们可以点击Eclipse左上角的开启视图（Open Perspective）按钮，增加这一视图到左边的视图浏览栏里。前面已经提到，HEAD代表CVS数据库里的主流内容。展开Versions，可以看到以往的版本。另外，在右下角有数据库的历史记录标明每次修改的相关信息。<br /><br />如果需要导出某一版本，就要用到Check Out操作。在某一版本上右键选择Check Out As Project，这将把这一版本导出为同名的项目，从而可以覆盖已有的状态，或者选择Check Out对话框来导出为其他项目。<br /><br /><br />图4：CVS数据库浏览视图<br /><img src="http://www.ibm.com/developerworks/cn/java/l-cvs/4.jpg" /><br /><br />关于更详细的CVS使用方法和技巧，可以参考Eclipse的帮助中相关内容。
          <br/>
          <span style="color:red;">
            <a href="http://library.javaeye.com/blog/164407#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>Sat, 23 Feb 2008 10:42:00 +0800</pubDate>
        <link>http://library.javaeye.com/blog/164407</link>
        <guid>http://library.javaeye.com/blog/164407</guid>
      </item>
      <item>
        <title>java取出汉字字符串的拼音首字母</title>
        <author>soardragon</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://library.javaeye.com">soardragon</a>&nbsp;
          链接：<a href="http://library.javaeye.com/blog/163653" style="color:red;">http://library.javaeye.com/blog/163653</a>&nbsp;
          发表时间: 2008年02月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">/**
 * Created by IntelliJ IDEA.
 * Date: 2004-5-17
 * Time: 10:59:59
 * ClassDescription:取出汉字字符串的拼音首字母
 */

 

import java.lang.*;

public class GB2Alpha {

    //字母Z使用了两个标签，这里有２７个值
    //i, u, v都不做声母, 跟随前面的字母
    private char[] chartable =
            {
                '啊', '芭', '擦', '搭', '蛾', '发', '噶', '哈', '哈',
                '击', '喀', '垃', '妈', '拿', '哦', '啪', '期', '然',
                '撒', '塌', '塌', '塌', '挖', '昔', '压', '匝', '座'
            };

    private char[] alphatable =
            {
                'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',

                'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
            };


    private int[] table = new int[27];

    //初始化
    {
        for (int i = 0; i &lt; 27; ++i) {
            table[i] = gbValue(chartable[i]);
        }
    }

    public GB2Alpha() {

    }
