﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-RomKK-随笔分类-开源软件</title><link>http://www.blogjava.net/RomKK/category/24358.html</link><description>关注java技术!</description><language>zh-cn</language><lastBuildDate>Wed, 25 Jul 2007 09:29:22 GMT</lastBuildDate><pubDate>Wed, 25 Jul 2007 09:29:22 GMT</pubDate><ttl>60</ttl><item><title>Linux下Tomcat与Apache Web服务器的整合</title><link>http://www.blogjava.net/RomKK/archive/2007/07/24/132157.html</link><dc:creator>RomKK</dc:creator><author>RomKK</author><pubDate>Tue, 24 Jul 2007 14:35:00 GMT</pubDate><guid>http://www.blogjava.net/RomKK/archive/2007/07/24/132157.html</guid><wfw:comment>http://www.blogjava.net/RomKK/comments/132157.html</wfw:comment><comments>http://www.blogjava.net/RomKK/archive/2007/07/24/132157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomKK/comments/commentRss/132157.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomKK/services/trackbacks/132157.html</trackback:ping><description><![CDATA[<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</br>1、引言<br>基于Web技术的Internet/Intranet近年来已经得到了广泛的应用，Intranet是以TCP/IP协议为基础、以Web为核心的企业内部网，用户通过低成本、简单易用的客户浏览器就能随时随地到企业的Web站点上查阅自己所需的数据。浏览器客户端操作界面的一致性避免了C/S模式客户端程序的多样性，而服务器端的开放和基于标准的连接方案使企业很方便地通过Internet同外界联系；同时，Web信息动态的、交互式的发布方式从根本上改变了企业的服务质量，增加了企业的商业机会。<br>在许多用户看来，一个Web网站的成败主要在于它所提供的内容和功能，而支持这些内容和功能的Web服务器起着非常重要的作用。<br>2、Tomcat容器<br>Tomcat是一个免费的开源的Serlvet容器，它是Apache基金会的Jakarta项目中的一个核心项目，由Apache，Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持，最新的Servlet和Jsp规范总能在Tomcat中得到体现。<br>Tomcat是稳固的独立的Web服务器与Servlet Container，不过，其Web服务器的功能则不如许多更健全的Web服务器完整，如Apache Web服务器（举例来说，Tomcat没有大量的选择性模块）。不过，Tomcat是自由的开源软件，而且有许多高手致力于其发展。<br>2.1 Linux下安装Tomcat<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在安装Tomcat之前需要安装j2sdk（Java 2 Software Development Kit），安装j2sdk的步骤如下：<br>1）到<a href="http://www.java.sun.com/">http://www.java.sun.com</a>下载j2sdk ，如j2sdk-1_4_2_04-linux-i586-rpm.bin。<br>2）在终端中转到j2sdk-1_4_2_04-linux-i586-rpm.bin所在的目录，输入命令chmod +x j2sdk-1_4_2_04-linux-i586-rpm.bin,添加执行的权限。<br>3）执行命令./j2sdk-1_4_2_04-linux-i586-rpm.bin，生成j2sdk-1_4_2_04-linux-i586.rpm的文件。<br>4）执行命令chmod +x j2sdk-1_4_2_04-linux-i586.rpm，给j2sdk-1_4_2_04-linux-i586.rpm添加执行的权限。<br>5）执行命令 rpm &#8211;ivh j2sdk-1_4_2_04-linux-i586.rpm ,安装j2sdk。<br>6）安装界面会出现授权协议，按Enter键接受，把j2sd安装在/usr/java/j2sdk1.4.2_04。<br>7）设置环境变量，在 /etc/profile.d/目录下建立文件java.sh，文件的内容如下：<br>#set java environment<br>export JAVA_HOME=/usr/java/j2sdk1.4.2_04<br>export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:/usr/java/jdbc<br>export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH<br>8）执行命令chmod 755 /etc/profile.d/java.sh，给java.sh分配权限。<br>9）在终端中分别执行命令javac &#8211;help和java &#8211;version，如果看到有关的信息，则表示j2sdk已成功安装。<br>&nbsp;&nbsp;&nbsp; 接下来安装tomcat，安装tomcat的步骤如下：<br>1）访问<a href="http://jakarta.apache.org/tomcat/index.html">http://jakarta.apache.org/tomcat/index.html</a>，下载二进制版的tomcat，如jakarta-tomcat-5.5.10.tar.gz，解压到/usr/local目录：<br>cd /usr/local<br>gzip &#8211;zxvf jakarta-tomcat-5.5.10.tar.gz<br>2）修改$tomcat/bin/startup.sh和shutdown.sh文件,<br>export JAVA_HOME=/usr/java/j2sdk1.4.2_04<br>export CATALINA_HOME=/usr/local/tomcat-5.5.10<br>export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:/usr/java/jdbc<br>export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH<br>3）执行startup.sh即可在<a href="http://localhost:8080/">http://localhost:8080/</a> 访问到tomcat的缺省面页.<br>2.2单独运行Tomcat的优点<br>1）容易架设。下载Tomcat，设定一些配置，就完成了。不需要花费时间将Web服务器的连接器整合至其它的Web服务器中。<br>2）不需要担心连接器。永远不需要排除在其它Web服务器与Tomcat之间的任何性能或联机方面的问题。<br>3）有较佳的安全防护。相对于其它以C、C＋＋所编写的Web服务器，Tomcat比较能忍受远程缓冲区溢位的攻击。因为Tomcat的Java虚拟机是位于网络及操作系统之间，它可以防止几乎所有类型的缓冲区溢位攻击。使用Tomcat的安全防护领域，可以指定对各个资源的访问。<br>4）容易移植。可以将Tomcat服务器（以及应用程序）移植到不同的服务器、操作系统甚至架构上。因为Tomcat是以Java编写的，因此可以将其整个目录结构的内容复制到其它计算机上运行，而完全不需要任何改变，甚至于新的计算机的架构与原来的不同也一样。<br>2.3单独运行Tomcat的缺点<br>1）Tomcat的支持软件比较少。Tomcat内建Web服务器的支持软件比Apache httpd Web服务器少。<br>2）Tomcat的Web服务器功能少。相对于Tomcat Web服务器，Apache httpd服务器有更完整的功能。<br>3）虽然Tomcat运行速度快，但还没有Apache httpd快。Tomcat服务器比Apache httpd慢，不过，它还在改进中，而且仍然非常快，快到足以运行今日大多数的企业网站，只是在提供静态页面内容上没有Apache快。<br>3、Apache Web服务器<br>Apache是根据NCSA的服务器发展而来的，NCSA是最早出现的Web服务器程序之一，由伊利诺斯大学Urbana-Champaign分校的美国国家超级计算应用中心开发。在发展初期，Apache主要是一个基于UNIX系统的服务器，它的宗旨就是建成一个基于UNIX系统的、功能更强、效率更高并且速度更快的WWW服务器，这就决定了它是从其他的服务器演变而来的，并且添加了大量补丁来增强它在某一方面的性能，所以它就被命名为&#8220;APA＋CHy Server（一个补丁组成的服务器）&#8221;。发展到今天，Apache已经被移植到很多平台上了。<br>Apache的开发遵循GPL协议，由全球的志愿者一起开发和维护。在保持强大的功能及不断更新的同时，它仍然是免费的，并且公开源代码。<br>3.1 安装Apache服务器<br>可以通过以下三种方法安装Apache服务器。 <br>1）如果安装的Linux版本中带用Apache的话，就在选择所要安装的服务器的时候，将httpd这个服务选上，Linux安装程序将自动完成Apache的安装工作，并做好基本的配置。 <br>2）使用可执行文件软件包，这比较适合那些对编译工作不是太熟悉的初级用户，因为它相对比较简单。下载软件包apache_1.2.4.e.tar.gz ，执行命令tar xvzf apache_1.2.4.e.tar.gz 完成安装工作。如果使用的是RedHat Linux的话，也可以下载apache_1.2.4.rpm软件安装包，然后使用rpm &#8211;ivh apache_1.2.4.rpm命令安装。 <br>3）如果想把Apache服务器充分利用起来的话，就一定要自己编译Apache 定制其功能。 下载包含Apache源代码的软件包apache_1.2.4.tar.gz；然后用tar命令将它解开；将当前目录改变为Apache源代码发行版的src目录；将配置样本文件（Configuration.tmpl）复制为Configuration文件；编辑Configuration文件中的配置选项： <br>Makefile配置选项：一些编译选项：<br>. &#8220;CC=&#8221;一行指定用什么编译软件编译，一般为&#8220;CC=gcc&#8221;；如果需要将额外的标志（参数）指定给C编译软件，可以使用： <br>EXTRA_CFLAGS= <br>EXTRA_LFLAGS= <br>如果系统需要特殊的库和包含文件，可以在这里指定它们： <br>EXTRA_LIBS= <br>EXTRA_INCLUDES= <br>如果要改变代码优化设置的话，须将下面一句去掉注释，然后改成所需要的值： <br>#OPTIM=-O2 <br>Rule配置选项：用来决定需要什么功能，一般情况下无需改变。 <br>模块配置：模块是Apache的组成部分，它为Apache内核增加新功能。通过使用模块配置，可以自定义在Apache服务器中需要什么功能，这个部分也是Apache灵活性的表现。模块配置行如下所示： <br>AddModule modules/standard/mod_env.o <br>如果需要Apache服务器具备什么功能，就将那个模块用AddModule语句加到配置文件Configuration中去。 <br>下面列出了Apache的模块功能： <br>模块名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 功能&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缺省 <br>mod_access&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供基于主机的访问控制命令&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_actions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 能够运行基于MIME类型的CGI脚本或HTTP请求方法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 能执行URL重定向服务&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_asis&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使文档能在没有HTTP头标的情况下被发送到客户端&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_auth&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持使用存储在文本文件中的用户名、口令实现认证&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_auth_dbm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持使用DBM文件存储基本HTTP认证&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n <br>mod_auth_mysql&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持使用MySQL数据库实现基本HTTP认证&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n <br>mod_auth_anon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 允许以匿名方式访问需要认证的区域&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_auth_external&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持使用第三方认证&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n <br>mod_autoindex&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当缺少索引文件时，自动生成动态目录列表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_cern_meta&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供对元信息的支持&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n <br>mod_cgi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持CGI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_dir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 能够重定向任何对不包括尾部斜杠字符命令的请求&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_env&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使你能够将环境变量传递给CGI或SSI脚本&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n <br>mod_expires&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 让你确定Apache在服务器响应请求时如何处理Expires&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y<br>mod_headers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 能够操作HTTP应答头标&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_imap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供图形映射支持&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n <br>mod_include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使支持SSI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n <br>mod_info&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对服务器配置提供了全面的描述&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_log_agent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 允许在单独的日志文件中存储用户代理的信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n <br>mod_log_config&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持记录日志&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_log_referer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供了将请求中的Referer头标写入日志的功能&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n <br>mod_mime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用来向客户端提供有关文档的元信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_negotiation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供了对内容协商的支持&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_setenvif&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使你能够创建定制环境变量&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_speling&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使你能够处理含有拼写错误或大小写错误的URL请求&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n <br>mod_status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 允许管理员通过WEB管理Apache&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y <br>mod_unique_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为每个请求提供在非常特殊的条件下保证是唯一的标识&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n <br>在src目录下执行：&#8220;. /configure&#8221;； <br>编译Apache：执行命令&#8220;make&#8221;； <br>将编译好的可执行文件httpd复制到/etc/httpd/bin目录下；将Apache发行版的配置文件：access.conf、httpd.conf、mime.types、srm.conf文件复制到/etc/httpd/conf目录下。到此为止，安装完成。 <br>3.1单独运行Apache httpd的优点<br>&nbsp;&nbsp; 1）Apache httpd比Tomcat内建的Web服务器快。<br>&nbsp;&nbsp; 2）较多的软件支持。Apache httpd有庞大的支持软件链接库。<br>3）启动与停止快。一般来说，Apache httpd的启动与停止时间都比Tomcat短。<br>3.2单独运行Apache httpd的缺点<br>&nbsp;&nbsp; 1）架设比较困难。比起单独运行Tomcat，安装Apache Web服务器并让它与Tomcat协同运行要复杂很多。<br>&nbsp;&nbsp; 2）会拖慢动态网页内容的服务。<br>&nbsp;&nbsp; 3）安全漏洞。Apache httpd比较容易受到缓冲区溢位的攻击。<br>&nbsp;&nbsp; 4）升级比较复杂。<br>4、Tomcat与Apache的整合<br>有几种将Tomcat整合到Apache httpd Web服务器的方法：<br>1）架使用不同的端口号分担负载。<br>该方法是最容易实现的，只需要在现成的网页目录中假如URL以连接到在同一台Web服务器机器上的Tomcat Web服务器端口（如8080）。实际上还是执行两个完整的Web服务器程序，彼此之间并没有真正的整合。<br>2）从Apache将请求发送至Tomcat的代理服务器。<br>该方法会在主服务器中使用HTTP的代理机制。代理机制常会用来将来自网关上运行的Web服务器的Web信息流重新路由至外部因特网上的网站。不过，也可以用来将网站区域或目录的信息流重导至Tomcat Web服务器。<br>3）使用mod_jk2连接器。<br>该方法使用运行于现有的Apache httpd Web服务器之内的连接器模块（如mod_jk），并经由特定的协议快速地将请求转送至Tomcat。这是将Tomcat连接至Apache httpd的标准方式。<br>4）单一进程中执行两个程序。<br>该方法通过让JVM在Apache httpd的进程空间中运行的方式，可以提供&#8220;完全整合&#8221;的功能。这是最有效的办法，但也是最依赖于服务器的实现。</br>
<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "image";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
google_color_border = "F7F7F7";
google_color_bg = "F7F7F7";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "008000";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

 <img src ="http://www.blogjava.net/RomKK/aggbug/132157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomKK/" target="_blank">RomKK</a> 2007-07-24 22:35 <a href="http://www.blogjava.net/RomKK/archive/2007/07/24/132157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lucene 基础指南</title><link>http://www.blogjava.net/RomKK/archive/2007/07/24/132074.html</link><dc:creator>RomKK</dc:creator><author>RomKK</author><pubDate>Tue, 24 Jul 2007 07:59:00 GMT</pubDate><guid>http://www.blogjava.net/RomKK/archive/2007/07/24/132074.html</guid><wfw:comment>http://www.blogjava.net/RomKK/comments/132074.html</wfw:comment><comments>http://www.blogjava.net/RomKK/archive/2007/07/24/132074.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomKK/comments/commentRss/132074.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomKK/services/trackbacks/132074.html</trackback:ping><description><![CDATA[<!-- Begin #sidebar -->
<div id="sidebar"><div id="sidebar2">
<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div></div>Lucene是apache组织的一个用java实现全文搜索引擎的开源项目。其功能非常的强大，但api其实很简单的，它最主要就是做两件事:建立索引和进行搜索。<br>1. 建立索引时最重要的几个术语<br><br>* Document：一个要进行索引的单元，相当于数据库的一行纪录，任何想要被索引的数据，都必须转化为Document对象存放。<br>* Field：Document中的一个字段，相当于数据库中的Column ，Field是lucene比较多概念一个术语，详细见后。<br>* IndexWriter：负责将Document写入索引文件。通常情况下,IndexWriter的构造函数包括了以下3个参数:索引存放的路径,分析 器和是否重新创建索引。特别注意的一点，当IndexWriter执行完addDocument方法后，一定要记得调用自身的close方法来关闭它。只 有在调用了close方法后，索引器才会将存放在内在中的所有内容写入磁盘并关闭输出流。<br>* Analyzer:分析器，主要用于文本分词。常用的有StandardAnalyzer分析器，StopAnalyzer分析器，WhitespaceAnalyzer分析器等。<br>* Directory:索引存放的位置。lucene提供了两种索引存放的位置，一种是磁盘，一种是内存。一般情况将索引放在磁盘上；相应地lucene提供了FSDirectory和RAMDirectory两个类。<br>* 段：Segment,是Lucene索引文件的最基本的一个单位。Lucene说到底就是不断加入新的Segment，然后按一定的规则算法合并不同的Segment以合成新的Segment。<br><br>lucene建立索引的过程就是将待索引的对象转化为Lucene的Document对象，使用IndexWriter将其写入lucene 自定义格式的索引文件中。
<div class=entry-more id=more>
<p>待索引的对象可以来自文件、数据库等任意途径，用户自行编码遍历目录读取文件或者查询数据库表取得ResultSet，Lucene的API只负责和字符串打交道。<br>1.1 Field 的解释<br><br>从源代码中，可以看出Field 构造函数如下：<br><br>Field(String name, byte[] value, Field.Store store)<br>Field(String name, Reader reader)<br>Field(String name, Reader reader, Field.TermVector termVector)<br>Field(String name, String value, Field.Store store, Field.Index index)<br>Field(String name, String value, Field.Store store, Field.Index index, Field.TermVector termVector)<br><br>在Field当中有三个内部类：Field.Index,Field.Store,Field.termVector。其中<br><br>* Field.Index有四个属性，分别是：<br>Field.Index.TOKENIZED：分词索引<br>Field.Index.UN_TOKENIZED：分词进行索引，如作者名，日期等，Rod Johnson本身为一单词，不再需要分词。<br>Field.Index：不进行索引，存放不能被搜索的内容如文档的一些附加属性如文档类型, URL等。<br>Field.Index.NO_NORMS：；<br>* Field.Store也有三个属性，分别是：<br>Field.Store.YES：索引文件本来只存储索引数据, 此设计将原文内容直接也存储在索引文件中，如文档的标题。<br>Field.Store.NO：原文不存储在索引文件中，搜索结果命中后，再根据其他附加属性如文件的Path，数据库的主键等，重新连接打开原文，适合原文内容较大的情况。<br>Field.Store.COMPRESS 压缩存储；<br>* termVector是Lucene 1.4.3新增的它提供一种向量机制来进行模糊查询,很少用。<br><br>上面所说的Field属性与lucene1.4.3版本的有比较大的不同，在旧版的1.4.3里lucene是通过Field.Keyword (...),FieldUnIndexed(...),FieldUnstored(...)和Field.Text(...)来设置不同字段的类型以达 到不同的用途，而当前版本由Field.Index和Field.Store两个字段的不同组合来达到上述效果。<br>还有一点说明,其中的两个构造函数其默认的值为Field.Store.NO和Field.Index.TOKENIZED。：<br><br>Field(String name, Reader reader)<br>Field(String name, Reader reader, Field.TermVector termVector)<br><br>* 限制Field的长度:<br>IndexWriter类提供了一个setMaxFieldLength的方法来对Field的长度进行限制，看一下源代码就知道其默认值为10000； 我们可以在使用时重新设置此参数。如果使用默认值，那么Lucene就仅仅对文档的前面的10000个term进行索引，超过这一个数的文档就不会被建立 索引。<br><br>1.2 索引的合并、删除、优化<br><br>* IndexWriter中的addIndexes方法将索引进行合并;当在不同的地方创建了索引后，如果需要将索引合并，这时候使用addIndexes方法就显得很有意义。<br>* 可以通过IndexReader类从索引中进行文档的删除。IndexReader是很特别的一个类，看源代码就知道它主要是通过自身的静态方法来完成构造的。示例：<br><br>IndexReader reader = IndexReader.open("C:\\springside");<br>reader.deleteDocument(X); //这里的X是一个int的常数；不推荐这一种删除方法<br>reader.deleteDocument(new Term("name","springside"));//这是另一种删除索引的方法，按字段来删除，推荐使用这一种做法<br>reader.close();<br><br>* 优化索引:可以使用IndexWriter类的optimize方法来进行优先，它会将多个Segment进行合并，组成一个新的Segment,可以加 快建立索引后搜索的速度。另外需要注意的一点，optimize方法会降低建立索引的速度，而且要求的磁盘空间会增加。<br><br>2. 进行搜索时最常用的几个术语<br><br>* IndexSearcher:是lucene中最基本的检索工具，所有的检索都会用到IndexSearcher工具。初始化IndexSearcher需要设置索引存放的路径，让查询器能定位索引而进行搜索。<br>* Query:查询，lucene中支持模糊查询，语义查询，短语查询，组合查询等等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些类。<br>* QueryParser: 是一个解析用户输入的工具，可以通过扫描用户输入的字符串，生成Query对象。<br>* Hits:在搜索完成之后，需要把搜索结果返回并显示给用户，只有这样才算是完成搜索的目的。在lucene中，搜索的结果的集合是用Hits类的实例来表示的。Hits对象中主要方法有：<br><br>length(): 返回搜索结果的总数,下面简单的用法中有用到Hit的这一个方法<br>doc(int n): 返回第n个文档<br>iterator(): 返回一个迭代器<br><br>这里再提一下Hits，这也是Lucene比较精彩的地方，熟悉hibernate的朋友都知道hibernate有一个延迟加载的属性，同样, Lucene也有。Hits对象也是采用延迟加载的方式返回结果的，当要访问某个文档时，Hits对象就在内部对Lucene的索引又进行一次检索，最后 才将结果返回到页面显示。<br><br>3. 一个简单的实例：<br><br>首先把lucene的包放在classpath路径中去，写下面一个简单的类：<br><br>public class FSDirectoryTest {<br>//建立索引的路径<br>public static final String path = "c:\\index2";<br><br>public static void main(String[] args) throws Exception {<br>Document doc1 = new Document();<br>doc1.add( new Field("name", "lighter springside com",Field.Store.YES,Field.Index.TOKENIZED));<br><br>Document doc2 = new Document();<br>doc2.add(new Field("name", "lighter blog",Field.Store.YES,Field.Index.TOKENIZED));<br><br>IndexWriter writer = new IndexWriter(FSDirectory.getDirectory(path, true), new StandardAnalyzer(), true);<br>writer.addDocument(doc1);<br>writer.addDocument(doc2);<br>writer.close();<br><br>IndexSearcher searcher = new IndexSearcher(path);<br>Hits hits = null;<br>Query query = null;<br>QueryParser qp = new QueryParser("name",new StandardAnalyzer());<br><br>query = qp.parse("lighter");<br>hits = searcher.search(query);<br>System.out.println("查找\"lighter\" 共" + hits.length() + "个结果");<br><br>query = qp.parse("springside");<br>hits = searcher.search(query);<br>System.out.println("查找\"springside\" 共" + hits.length() + "个结果");<br><br>}<br>}<br><br>执行的结果：<br><br>查找"lighter" 共2个结果<br>查找"springside" 共1个结果<br><br>4. 一个复杂一点的实例<br><br>* 在windows系统下的的C盘，建一个名叫s的文件夹,在该文件夹里面随便建三个txt文件，随便起名啦，就叫"1.txt","2.txt"和"3.txt"啦<br>其中1.txt的内容如下：<br><br>springside社区<br>更大进步，吸引更多用户,更多贡献 <br>2007年<br><br>而"2.txt"和"3.txt"的内容也可以随便写几写，这里懒写，就复制一个和1.txt文件的内容一样吧<br><br>* 下载lucene包，放在classpath路径中，然后建立索引:<br><br>/**<br>* author lighter date 2006-8-7<br>*/<br>public class LuceneExample {<br>public static void main(String[] args) throws Exception {<br><br>File fileDir = new File("c:\\s"); // 指明要索引文件夹的位置,这里是C盘的S文件夹下 <br>File indexDir = new File("c:\\index"); // 这里放索引文件的位置<br>File[] textFiles = fileDir.listFiles();<br><br>Analyzer luceneAnalyzer = new StandardAnalyzer();<br>IndexWriter indexWriter = new IndexWriter(indexDir,luceneAnalyzer,true);<br>indexFile(luceneAnalyzer,indexWriter, textFiles); <br>indexWriter.optimize();//optimize()方法是对索引进行优化<br>indexWriter.close(); <br>}<br><br>public static void indexFile(Analyzer luceneAnalyzer,IndexWriter indexWriter,File[] textFiles) throws Exception<br>{<br>//增加document到索引去<br>for (int i = 0; i &lt; textFiles.length; i++) {<br>if (textFiles[i].isFile() &amp;&amp; textFiles[i].getName().endsWith(".txt")) {<br>String temp = FileReaderAll(textFiles[i].getCanonicalPath(),"GBK");<br>Document document = new Document();<br>Field FieldBody = new Field("body", temp, Field.Store.YES,Field.Index.TOKENIZED);<br>document.add(FieldBody);<br>indexWriter.addDocument(document);<br>}<br>}<br>}<br>public static String FileReaderAll(String FileName, String charset)throws IOException {<br>BufferedReader reader = new BufferedReader(new InputStreamReader(<br>new FileInputStream(FileName), charset));<br>String line = "";<br>String temp = "";<br>while ((line = reader.readLine()) != null) {<br>temp += line;<br>}<br>reader.close();<br>return temp;<br>}<br>}<br><br>* 执行查询：<br><br>public class TestQuery { <br>public static void main(String[] args) throws IOException, ParseException { <br>Hits hits = null; <br>String queryString = "社区"; <br>Query query = null; <br>IndexSearcher searcher = new IndexSearcher("c:\\index"); <br><br>Analyzer analyzer = new StandardAnalyzer(); <br>try { <br>QueryParser qp = new QueryParser("body", analyzer); <br>query = qp.parse(queryString); <br>} catch (ParseException e) { <br>} <br>if (searcher != null) { <br>hits = searcher.search(query); <br>if (hits.length() &gt; 0) { <br>System.out.println("找到:" + hits.length() + " 个结果!"); <br>} <br>} <br>} <br>}<br><br>* 执行结果：<br>找到:3 个结果!<br></p>
</div><!-- Begin #sidebar -->
<div id="sidebar"><div id="sidebar2">
<script type="text/javascript"><!--
google_ad_client = "pub-4399204441904216";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "image";
//2007-07-24: http://romkk.j5com.cn/blog
google_ad_channel = "8013984535";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div></div>  <img src ="http://www.blogjava.net/RomKK/aggbug/132074.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomKK/" target="_blank">RomKK</a> 2007-07-24 15:59 <a href="http://www.blogjava.net/RomKK/archive/2007/07/24/132074.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>