﻿<?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-javaboys</title><link>http://www.blogjava.net/javaboys/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 06:06:49 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 06:06:49 GMT</pubDate><ttl>60</ttl><item><title>[转] 在Microsoft Windows中使用Apache</title><link>http://www.blogjava.net/javaboys/archive/2007/03/31/107666.html</link><dc:creator>javaboys</dc:creator><author>javaboys</author><pubDate>Sat, 31 Mar 2007 09:59:00 GMT</pubDate><guid>http://www.blogjava.net/javaboys/archive/2007/03/31/107666.html</guid><wfw:comment>http://www.blogjava.net/javaboys/comments/107666.html</wfw:comment><comments>http://www.blogjava.net/javaboys/archive/2007/03/31/107666.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/javaboys/comments/commentRss/107666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javaboys/services/trackbacks/107666.html</trackback:ping><description><![CDATA[
		<div id="page-content">
				<div id="preamble">
						<h1>在Microsoft Windows中使用Apache</h1>
						<p>来源：<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/platform/windows.html">http://lamp.linux.gov.cn/Apache/ApacheMenu/platform/windows.html</a></p>
						<p>此文档阐述了如何在Microsoft Windows平台上安装、配置和运行Apache 2.2 。 如果你发现了bug，或者希望以其他方式作出贡献，请使用我们的<a href="http://httpd.apache.org/bug_report.html">bug报告页面</a>。</p>
						<p>本文档的大多数内容假定你是从一个二进制发布版安装Apache到Windows上。 如果你想自己编译Apache(可能有助于开发和跟踪bugs)，参看<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/platform/win_compiling.html">编译Windows下的Apache</a>。</p>
						<p>
								<strong>基于当前的Windows版本状况，本文档使用到的缩写及其意义解释包括：</strong>
						</p>
						<ul>
								<li>
										<strong>Windows NT:</strong> 指所有基于NT核心的Microsoft Windows操作系统的版本，包括Windows NT, Windows 2000, Windows XP, Windows.NET Server 2003及后续版本。 
</li>
								<li>
										<strong>Windows 9x:</strong> 指所有定位于家庭使用的Microsoft Windows操作系统的版本，包括 Windows 95 , Windows 98, Windows ME 。 </li>
						</ul>
				</div>
				<div class="top">
						<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/platform/windows.html#page-header">
								<img alt="top" src="http://lamp.linux.gov.cn/Apache/ApacheMenu/images/up.gif" />
						</a>
				</div>
				<div class="section">
						<h2>
								<a id="req" name="req">对操作系统的要求</a>
						</h2>
						<p>Apache 2.2 被设计为在Windows NT上运行。它的二进制安装程序只能在x86处理器上运行，比如Intel和AMD的芯片。Apache可能也能够运行在Windows 9x上，但是并没有经过测试， 也不建议在实际工作的系统上这样使用。</p>
						<p>任何情况下都必须确保TCP/IP网络协议已经安装。如果在Windows 95上运行，必须安装"Winsock2"升级补丁。 "Winsock2" for Windows 95可以在<a href="http://www.microsoft.com/windows95/downloads/contents/WUAdminTools/S_WUNetworkingTools/W95Sockets2/Default.asp">这里</a>下载。</p>
						<p>如果在NT 4.0上运行，建议安装Service Pack 6 ，因为Service Pack 4有众所周知的TCP/IP和Winsock完整性的问题，在以后的Service Pack中解决了这些问题。</p>
				</div>
				<div class="top">
						<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/platform/windows.html#page-header">
								<img alt="top" src="http://lamp.linux.gov.cn/Apache/ApacheMenu/images/up.gif" />
						</a>
				</div>
				<div class="section">
						<h2>
								<a id="down" name="down">下载 Apache for Windows</a>
						</h2>
						<p>关于Apache最新版本的有关信息可以在<a href="http://httpd.apache.org/download.cgi">http://httpd.apache.org/download.cgi</a>上找到。那里会列出当前发行版本、 所有最近的alpha和beta测试版本以及镜像web站点和匿名ftp服务器的信息。</p>
						<p>你应该下载带有<code>.msi</code>扩展名的Apache for Windows版本。 这是一个单一的Microsoft Installer文件，包含了Apache ，可以立即安装并运行。 还有一个单独的<code>.zip</code>文件只打包了源码， 可以用Microsoft Visual C++ (Visual Studio)工具来编译。</p>
				</div>
				<div class="top">
						<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/platform/windows.html#page-header">
								<img alt="top" src="http://lamp.linux.gov.cn/Apache/ApacheMenu/images/up.gif" />
						</a>
				</div>
				<div class="section">
						<h2>
								<a id="inst" name="inst">安装 Apache for Windows</a>
						</h2>
						<p>Apache的安装需要有Microsoft Installer 1.2或更高版本。 在Windows 9x中，你可以从<a href="http://www.microsoft.com/downloads/release.asp?ReleaseID=32831">这里</a>升级Microsoft Installer到2.0 ，在Windows NT 4.0和2000中，2.0的升级版在<a href="http://www.microsoft.com/downloads/release.asp?ReleaseID=32832">这里</a>。Windows XP/2003不需要这个升级。</p>
						<p>注意，使用这个安装包不能在同一个机器上安装两套Apache 2.2。 但是，在同一个机器上，安装一个1.3系列<strong>和</strong>一个2.2系列的Apache则没有问题。 如果你需要在同一个机器上安装两套不同的2.2版本， 则必须<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/platform/win_compiling.html">用代码编译和安装Apache</a></p>
						<p>运行已下载的上述Apache <code>.msi</code>文件。安装程序会要求提供下列信息：</p>
						<ol>
								<li>
										<p>
												<strong>Network Domain</strong> 你的服务器已经或者将要注册的DNS域名。比如你的服务器的全称DNS域名是<code>server.mydomain.net</code> ，你应当在这里输入：<code>mydomain.net</code></p>
								</li>
								<li>
										<p>
												<strong>Server Name</strong> 你的服务器的全称DNS域名，如上情况你应当在这里输入：<code>server.mydomain.net</code></p>
								</li>
								<li>
										<p>
												<strong>Administrator's Email Address</strong> 服务器管理员的email地址。这个地址将会在默认的出错页面上显示给客户端。</p>
								</li>
								<li>
										<p>
												<strong>For whom to install Apache</strong> 如果你希望Apache在80端口监听，并被安装为服务(即使无人登陆，Apache仍将运行)，就选择"<code>for All Users, on Port 80, as a Service - Recommended</code>"；如果你希望将Apache安装为个人试验使用，或者已经有一个运行于80端口的WWW服务器，就选择"<code>only for the Current User, on Port 8080, when started Manually</code>"。</p>
								</li>
								<li>
										<p>
												<strong>The installation type</strong> 选择<code>Typical</code>会安装除开发模块需要使用的源码和库以外的所有内容。选择<code>Custom</code>可以自定义安装哪些项目。完整安装大约需要13MB磁盘空间，这其中并<em>不包含</em>你的网站文件所用空间。</p>
								</li>
								<li>
										<p>
												<strong>Where to install</strong> 安装Apache的文件夹，默认为<code>C:\Program Files\Apache Software Foundation</code>文件夹下的<code>Apache2.2</code>子文件夹。</p>
								</li>
						</ol>
						<p>安装期间，Apache将会配置你所选择的安装目录下的<code>conf</code>文件夹中的文件。 但是如果那个目录下已有同名文件存在，原有文件将不会被覆盖， 而相应的新文件将会被加上<code>.default</code>扩展名。 所以，举例来说，如果<code>conf\httpd.conf</code>已经存在，那么不会对它做任何改变， 而新版本<code>conf\httpd.conf</code>的内容将会被写入文件<code>conf\httpd.conf.default</code> 。 安装完成以后你应该检查<code>.default</code>文件中的内容看看有没有不同， 如果必要，更新你原有的配置文件。</p>
						<p>而且，如果你已经有一个名为<code>htdocs\index.html</code>的文件，它不会被覆盖掉 (也不会安装<code>index.html.default</code>文件)。 这意味着你在一个旧版本Apache上安装新版本是安全的 (但是你必须在安装之前首先停掉原有服务器然后在安装完成后重新启动它)。</p>
						<p>安装Apache以后，你应该编辑<code>conf</code>目录下的配置文件。这些文件已在安装期间被配置好以便Apache能够从安装目录运行，文档目录被配置为安装目录下的子目录<code>htdocs</code> 。在你开始真正使用之前还有很多选项需要设置。但是为了尽快开始，可以使用安装时自动配置的配置文件。</p>
				</div>
				<div class="top">
						<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/platform/windows.html#page-header">
								<img alt="top" src="http://lamp.linux.gov.cn/Apache/ApacheMenu/images/up.gif" />
						</a>
				</div>
				<div class="section">
						<h2>
								<a id="cust" name="cust">配置 Apache for Windows</a>
						</h2>
						<p>与Unix系统下的版本一样，Apache使用<code>conf</code>目录下的文件进行配置，但是Windows版本有几个不同的指令，参见<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/directives.html">指令索引</a>察看全部可用指令。</p>
						<p>Apache for Windows主要的不同点是：</p>
						<ul>
								<li>
										<p>因为Apache for Windows是多线程的，它并不像Unix版本那样为每个请求使用一个单独的进程。 而是通常运行两个Apache进程：一个父进程，和一个处理请求的子进程。在子进程内部由多个单独的线程来处理每个请求。</p>
										<p>因此与进程管理相关的指令是不同的：</p>
										<p>
												<code class="directive">
														<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a>
												</code>就像Unix版本中的指令一样，这条指令控制一个进程退出前将为多少个请求提供服务。 然而，与Unix不同的是，一个进程将为所有请求而不是只为一个请求服务，因此如果设置这条指令，建议将它设为一个很大的值。默认设置 <code>MaxRequestsPerChild 0</code> 使得进程从不退出。</p>
										<div class="warning">
												<strong>警告： 启动新的子进程时将会重新读入服务器配置文件。如果你修改了<code>httpd.conf</code> ，新的子进程将有可能不能启动或者可能得到预期之外的结果。</strong>
										</div>
										<p>
												<code class="directive">
														<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mpm_common.html#threadsperchild">ThreadsPerChild</a>
												</code>是一条新的指令，用来告诉服务器应该使用多少个线程，指明了服务器可以立刻处理的最大连接数；如果你的站点有大量的点击，请确认你设置了足够大的值。推荐的默认设置是 <code>ThreadsPerChild 50</code> 。</p>
								</li>
								<li>
										<p>接收文件名作为参数的指令必须使用Windows文件名而不是Unix文件名。 但是，因为Apache内部使用Unix风格的名字，你必须使用正斜杠而不是反斜杠。可以使用盘符；如果省略盘符，将假定使用Apache可执行文件所在盘符。</p>
								</li>
								<li>
										<p>Apache for Windows具有运行时装入模块的能力，不需要重新编译。如果Apach在正常情况下编译，它会在<code>\Apache2.2\modules</code>目录下安装许多可选模块。 要激活它们或其他模块，必须使用新的<code class="directive"><a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_so.html#loadmodule">LoadModule</a></code>指令。 举例来说，要激活状态模块，使用下列指令(除了<code>access.conf</code>中的状态激活指令以外)：</p>
										<div class="example">
												<p>
														<code>LoadModule status_module modules/mod_status.so </code>
												</p>
										</div>
										<p>也可使用<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_so.html#creating">创建可加载模块</a>中的信息。</p>
								</li>
								<li>
										<p>Apache也可以加载ISAPI(Internet Server Applications Programming Interface)扩展，例如被Microsoft IIS服务器和其他一些Windows服务器所使用的。<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_isapi.html">这里有更多相关信息</a>。注意Apache<strong>不能</strong>加载ISAPI 过滤器。</p>
								</li>
								<li>
										<p>当运行CGI脚本时，Apache查找脚本解释器是由<code class="directive"><a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/core.html#scriptinterpretersource">ScriptInterpreterSource</a></code>指令配置的。</p>
								</li>
								<li>
										<p>由于在Windows下管理具有像<code>.htaccess</code>这样名字的文件是很困难的，你会发现在配置文件中使用<code class="directive"><a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/core.html#accessfilename">AccessFilename</a></code>指令改变它的文件名是很有用的。</p>
								</li>
								<li>
										<p>在Windows NT上，Apache启动时发生的错误将会记入Windows事件日志(event log)。这个机制将在Apache尚不能使用<code>error.log</code>文件的时候运作。你可以通过"事件查看器"的MMC接口查看Windows事件日志。</p>
										<div class="note">
												<strong>注意，在Windows 9x上不存在事件日志机制，因此无法记录启动错误。</strong>
										</div>
								</li>
						</ul>
				</div>
				<div class="top">
						<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/platform/windows.html#page-header">
								<img alt="top" src="http://lamp.linux.gov.cn/Apache/ApacheMenu/images/up.gif" />
						</a>
				</div>
				<div class="section">
						<h2>
								<a id="winsvc" name="winsvc">以服务方式运行Apache for Windows</a>
						</h2>
						<p>Apache仅能够在Windows NT上作为服务运行。</p>
						<p>你可以选择在安装Apache时自动将其安装为一个服务。如果你选择"for all users"，那么Apache将会被安装为服务。如果你选择了"only for the Current User"，你可以在安装后手动将Apache注册为服务。注意，你必须是Administrators组的成员才能成功注册服务。</p>
						<p>使用Apache Service Monitor工具，可以查看和管理你所在网络上的所有机器上安装的Apache服务的状态。为了能够使用这个工具管理Apache服务，你必须首先自动或手动安装Apache服务。</p>
						<p>你可以在Apache安装目录的<code>bin</code>子目录下，使用如下命令将Apache安装为Windows NT服务：</p>
						<div class="example">
								<p>
										<code>httpd -k install </code>
								</p>
						</div>
						<p>如果你想指定服务的名称，可以使用下面的命令。当你在同一机器上安装多个Apache服务时，你必须为它们指定不同的名字。</p>
						<div class="example">
								<p>
										<code>httpd -k install -n "服务名" </code>
								</p>
						</div>
						<p>如果你想为不同名称的服务使用不同的配置文件，则安装时需要指定配置文件：</p>
						<div class="example">
								<p>
										<code>httpd -k install -n "服务名" -f "c:\files\my.conf" </code>
								</p>
						</div>
						<p>如果你使用的是第一个命令，也就是除 <code>-k install</code> 外没有其它命令行参数，那么被安装的服务名称将是：<code>Apache2.2</code> ，配置文件将使用<code>conf\httpd.conf</code> 。</p>
						<p>要移除一个Apache服务很简单：</p>
						<div class="example">
								<p>
										<code>httpd -k uninstall </code>
								</p>
						</div>
						<p>或者使用下述命令移除特定名称的Apache服务：</p>
						<div class="example">
								<p>
										<code>httpd -k uninstall -n "服务名" </code>
								</p>
						</div>
						<p>通常，启动、重启、关闭Apache服务的方法是使用Apache Service Monitor工具，另外也可以使用控制台命令：<code>NET START Apache2.2</code> 和 <code>NET STOP Apache2.2</code> 或者通过Windows服务控制面板。在启动Apache服务之前，你应当使用下面的命令检查一下配置文件的正确性：</p>
						<div class="example">
								<p>
										<code>httpd -n "服务名" -t </code>
								</p>
						</div>
						<p>你可以通过命令行开关来控制Apache服务。要启动一个已经安装的Apache服务，可以使用：</p>
						<div class="example">
								<p>
										<code>httpd -k start </code>
								</p>
						</div>
						<p>要停止一个已经安装的Apache服务，可以使用：</p>
						<div class="example">
								<p>
										<code>httpd -k stop </code>
								</p>
						</div>
						<p>或</p>
						<div class="example">
								<p>
										<code>httpd -k shutdown </code>
								</p>
						</div>
						<p>要重启一个运行中的Apache服务，强制它重新读取配置文件，可以使用：</p>
						<div class="example">
								<p>
										<code>httpd -k restart </code>
								</p>
						</div>
						<p>默认情况下，Apache服务将被注册为以本地系统用户(<code>LocalSystem</code>帐号)身份运行。<code>LocalSystem</code>帐号没有网络权限，不能通过任何Windows安全机制访问网络，包括文件系统、命名管道、DCOM或secure RPC ，但是它对于本地资源却拥有广泛的特权。</p>
						<div class="warning">
								<strong>永远不要把网络权限授予<code>LocalSystem</code>帐号！如果你需要Apache能够访问网络资源，最好按照下述方法为Apache另外建立一个单独的帐号。</strong>
						</div>
						<p>你应该建立一个单独的帐号来运行Apache服务。特别是在必须通过Apache访问网络资源的时候，我们更加强烈建议你这样做。</p>
						<ol>
								<li>创建一个普通域用户帐号，并牢记对应的密码。 
</li>
								<li>授予这个新建的帐号<code>作为服务登陆</code>和<code>作为操作系统一部分运行</code>权限。在Windows 2000/XP/2003上你可以使用"组策略"或通过"本地安全策略"的MMC接口来完成这个操作。 
</li>
								<li>确认新建的帐号是Users组的一个成员。 
</li>
								<li>确认新建的帐号具有读取和执行(RX)所有文档和脚本目录(例如：<code>htdocs</code>和<code>cgi-bin</code>)的权限。 
</li>
								<li>确认新建的帐号对Apache的<code>logs</code>目录具有读/写/删除(RWD)的权限。 
</li>
								<li>确认新建的帐号对<code>httpd.exe</code>二进制文件具有读取和执行(RX)的权限。 </li>
						</ol>
						<div class="note">一个很好的实践经验是赋予运行Apache服务的用户读取和执行(RX)整个Apache2.2目录的权限，并且对<code>logs</code>子目录具有读/写/删除(RWD)的权限。</div>
						<p>如果你允许使用这个帐号作为一个用户和服务登录，你就可以用这个帐号登录上去测试执行脚本、读取web页的权限，还可以通过控制台窗口启动Apache 。如果这样工作正常，你又执行了上述的操作，那么Apache就能够正常地作为服务运行了。</p>
						<div class="note">
								<strong>错误代码2186</strong>是一个很好的提示，说明你需要检查"登陆为"选项，因为服务器不能访问必要的网络资源。</div>
						<p>当启动Apache服务时你可能会遇到一个来自Windows服务管理器的错误信息。 例如，如果你想使用控制面板中的服务小程序启动Apache，可能会得到下面这条信息：</p>
						<div class="example">
								<p>
										<code>Could not start the Apache2.2 service on \\COMPUTER <br />Error 1067; The process terminated unexpectedly. </code>
								</p>
						</div>
						<p>只要启动Apache出错你就会得到这个错误信息。为了弄清是什么引起了错误， 你应该遵循<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/platform/windows.html#wincons">作为控制台程序运行Apache</a>中的建议。</p>
						<p>对于让Apache在Windows 9x下以类似Windows NT服务的方式运行有一些支持。都是<em>高度试验性</em>的，即使能够工作，Apache软件基金会将不会证实其可靠性和未来的支持。继续进行你自己的冒险吧！</p>
						<p>这两种"服务"有相当大的区别：</p>
						<p>如果你输入下列命令，Apache会尝试启动，如果成功他将在后台运行：</p>
						<div class="example">
								<p>
										<code>httpd -n "服务名" -k start </code>
								</p>
						</div>
						<p>例如，通过桌面的快捷方式运行，如果服务启动成功一个控制台窗口会快速闪过并立刻消失。如果启动时Apache检测到比如<code>httpd.conf</code>文件中有不正确的设置这样的问题，则控制台窗口会保持可见。这样将显示一个有助于追踪错误原因的错误信息。</p>
						<p>Windows 9x不支持<code>NET START</code>或者<code>NET STOP</code>命令，因此你在命令中必须使用Apache的服务控制选项。你可能希望为每个命令设置一个快捷方式以便你能够只需要从开始菜单或者桌面一点就能执行所需的操作。</p>
						<p>Apache和Windows 9x没有提供让Apache服务以特定的具有网络权限的用户身份运行的支持。实际上，Windows 9x在本地机器上根本没有提供安全性。这就是Apache软件基金会从不支持使用Windows 9x作为公用httpd服务器的原因。这个便利存在的唯一目的是协助用户开发web内容和学习Apache服务器，或者也许在一个安全的、私有的网络上充当intranet服务器。</p>
				</div>
				<div class="top">
						<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/platform/windows.html#page-header">
								<img alt="top" src="http://lamp.linux.gov.cn/Apache/ApacheMenu/images/up.gif" />
						</a>
				</div>
				<div class="section">
						<h2>
								<a id="wincons" name="wincons">作为控制台程序运行Apache</a>
						</h2>
						<p>虽然通常推荐将Apache作为服务来运行，但是在某些情况下从命令行运行反而更加容易。在Windows 9x上，从命令行运行Apache是推荐的方法，因为这些系统中缺乏可靠的服务支持。</p>
						<p>可以使用下列命令将Apache作为控制台程序从命令行运行：</p>
						<div class="example">
								<p>
										<code>httpd </code>
								</p>
						</div>
						<p>Apache将会一直保持运行，直到被Ctl+C组合键中断。</p>
						<p>你还可以在安装后通过 <code>开始按钮 --&gt; 程序 --&gt; Apache HTTP Server 2.2.xx --&gt; Control Apache Server</code> 在控制台中运行Apache 。这将会打开一个控制台窗口并在其中启动Apache 。如果你没有将Apache安装为服务，该窗口将一直保持打开，直到被Ctl+C组合键中断，并在几秒钟后退出。如果你已经将Apache安装为服务，那么那个快捷方式将会启动服务，如果Apache服务已经启动了，则什么也不做。</p>
						<p>你可以在另外一个控制台窗口中输入以下命令停止正在运行的Apache服务：</p>
						<div class="example">
								<p>
										<code>httpd -k shutdown </code>
								</p>
						</div>
						<p>这种方法比使用Ctl+C组合键更好，因为它可以让Apache完成所有当前的操作并且优雅的清理所占用的资源。</p>
						<p>Apache可以被从新启动，这将导致它重新读取配置文件，重启前所有正在进行的操作都将不被打断的完成。可以使用下面的命令重启Apache ：</p>
						<div class="example">
								<p>
										<code>httpd -k restart </code>
								</p>
						</div>
						<div class="note">请熟悉Unix版本Apache的用户注意，这些命令对应于Unix命令 <code>kill -TERM <em>pid</em></code> 和 <code>kill -USR1 <em>pid</em></code> 。命令中之所以使用 <code>-k</code> 选项，就是为了提醒用户这是源自Unix下的<code>kill</code>命令。</div>
						<p>如果Apache控制台窗口在启动后出乎意料的立即关闭，请打开一个新的控制台窗口，切换到Apache的安装目录下bin子目录中，运行<code>httpd</code>命令并读取错误信息。然后再到日志目录中查看<code>error.log</code>文件以寻找可能的配置错误。如果你的Apache采用的是默认安装，这些命令应当是：</p>
						<div class="example">
								<p>
										<code>c: <br />cd "\Program Files\Apache Software Foundation\Apache2.2\bin" <br />httpd </code>
								</p>
						</div>
						<p>等候Apache停止，或者使用Ctl+C组合键，然后输入下列内容：</p>
						<div class="example">
								<p>
										<code>cd ..\logs <br />more &lt; error.log </code>
								</p>
						</div>
						<p>可以在命令行中为Apache指定一个配置文件，有两种方法可以在命令行中指定配置文件：</p>
						<ul>
								<li>
										<p>
												<code>-f</code> 可以指定一个绝对路径或相对路径的配置文件：</p>
										<div class="example">
												<p>
														<code>httpd -f "c:\my server files\anotherconfig.conf" </code>
												</p>
										</div>
										<p>或</p>
										<div class="example">
												<p>
														<code>httpd -f files\anotherconfig.conf </code>
												</p>
										</div>
								</li>
								<li>
										<p>
												<code>-n</code> 可以指定已安装的Apache服务所使用的配置文件：</p>
										<div class="example">
												<p>
														<code>httpd -n "服务名" </code>
												</p>
										</div>
								</li>
						</ul>
						<p>在这两种情况下，必须在配置文件中设置正确的<code class="directive"><a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/core.html#serverroot">ServerRoot</a></code>值。</p>
						<p>如果你没有使用 <code>-f</code> 或 <code>-n</code> 指定配置文件的路径，Apache将会使用硬编码在服务器内的路径，比如：<code>conf\httpd.conf</code> 。这个内置的路径是相对于安装目录的，要想检查这个内置的路径，你可以通过 <code>-V</code> 开关调用Apache ，查看名为<code>SERVER_CONFIG_FILE</code>的变量值：</p>
						<div class="example">
								<p>
										<code>httpd -V </code>
								</p>
						</div>
						<p>Apache将会按照下列顺序检查<code class="directive"><a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/core.html#serverroot">ServerRoot</a></code>值：</p>
						<ol>
								<li>通过 <code>-C</code> 命令行开关指定的<code class="directive"><a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/core.html#serverroot">ServerRoot</a></code>值。 
</li>
								<li>通过 <code>-d</code> 命令行开关指定的值。 
</li>
								<li>当前工作目录。 
</li>
								<li>安装二进制文件时在注册表中登记的项目。 
</li>
								<li>编译进二进制文件的值，该值默认为：<code>/apache</code> ，你可以使用 <code>httpd -V</code> 命令查看显示出来的<code>HTTPD_ROOT</code>变量的值。 </li>
						</ol>
						<p>在安装过程中，将会在注册表中新建一个版本特定的注册表键。这个键的位置取决于安装类型。如果你选择的是"for all users"，那么将位于<code>HKEY_LOCAL_MACHINE</code>分支下，如下所示：</p>
						<div class="example">
								<p>
										<code>HKEY_LOCAL_MACHINE\SOFTWARE\Apache Group\Apache\2.2.4 </code>
								</p>
						</div>
						<p>如果你选择的是"for the current user only"，那么将位于<code>HKEY_CURRENT_USER</code>分支下，其中的内容取决于当前登陆的用户，如下所示：</p>
						<div class="example">
								<p>
										<code>HKEY_CURRENT_USER\SOFTWARE\Apache Group\Apache\2.2.4 </code>
								</p>
						</div>
						<p>这个键已经被编译进了服务器，使得你可以测试新版本而又不影响老版本。当然，你必须注意不要在同一个目录中安装两个不同的版本。</p>
						<p>如果你没有使用二进制安装，在某些情况下Apache将会抱怨注册表键丢失。如果在这种情况下服务器仍然可以找到正确的配置文件，那么就可以安全的忽略它。</p>
						<p>这个注册表键其实就是包含<code>conf</code>子目录的<code class="directive"><a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/core.html#serverroot">ServerRoot</a></code>目录。Apache将要从中读取<code>httpd.conf</code>文件。如果该配置文件中又包含了一个<code class="directive"><a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/core.html#serverroot">ServerRoot</a></code>指令，并且指向的目录与注册表中登记的不同，Apache将以配置文件中的指令为准。如果你复制了配置文件或者整个Apache目录到一个新的位置，你要千万记得修改<code>httpd.conf</code>中的<code class="directive"><a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/core.html#serverroot">ServerRoot</a></code>指令，使其指向正确的位置。</p>
				</div>
				<div class="top">
						<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/platform/windows.html#page-header">
								<img alt="top" src="http://lamp.linux.gov.cn/Apache/ApacheMenu/images/up.gif" />
						</a>
				</div>
				<div class="section">
						<h2>
								<a id="test" name="test">安装的测试</a>
						</h2>
						<p>启动Apache运行以后(不管是控制台窗口还是作为服务)， 它会在80端口上进行监听(除非你改变了配置文件中的<code class="directive"><a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mpm_common.html#listen">Listen</a></code>指令。 要连接到服务器访问默认页面，启动一个浏览器并输入下列URL ：</p>
						<div class="example">
								<p>
										<code>http://localhost/ </code>
								</p>
						</div>
						<p>应该出现一个欢迎页面，并且页面上有到Apache用户手册的链接。 如果什么都没有发生或是得到了一个错误，检查<code>logs</code>子文件夹中的 <code>error.log</code>文件。如果你的主机没有联网或者DNS配置有严重问题，你也许需要输入这样的URL ：</p>
						<div class="example">
								<p>
										<code>http://127.0.0.1/ </code>
								</p>
						</div>
						<p>如果你将Apache配置为在非80端口监听(比如：8080)，你应当使用下面的URL明确指定端口：</p>
						<div class="example">
								<p>
										<code>http://127.0.0.1:8080/ </code>
								</p>
						</div>
						<p>一旦你的基本配置可以工作了，你应该编辑<code>conf</code>目录下的文件来恰当地配置Apache 。 此外，如果你改变了作为NT服务运行的Apache的配置，你应该首先尝试从命令行启动来保证能够正确地启动Apache服务。</p>
						<p>因为Apache<strong>不能</strong>与其他TCP/IP应用程序共享同一端口，你可能需要先停止或者卸载或者重新配置某些特定的服务。这包括(但不限于)别的web服务器和BlackIce那样的防火墙。如果你只能在禁止其他服务的情况下启动Apache ，那么需要重新配置Apache或者其他程序使它们不监听同一个TCP/IP端口。</p>
				</div>
		</div>
<img src ="http://www.blogjava.net/javaboys/aggbug/107666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javaboys/" target="_blank">javaboys</a> 2007-03-31 17:59 <a href="http://www.blogjava.net/javaboys/archive/2007/03/31/107666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA 常用的API</title><link>http://www.blogjava.net/javaboys/archive/2007/03/31/107662.html</link><dc:creator>javaboys</dc:creator><author>javaboys</author><pubDate>Sat, 31 Mar 2007 09:44:00 GMT</pubDate><guid>http://www.blogjava.net/javaboys/archive/2007/03/31/107662.html</guid><wfw:comment>http://www.blogjava.net/javaboys/comments/107662.html</wfw:comment><comments>http://www.blogjava.net/javaboys/archive/2007/03/31/107662.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/javaboys/comments/commentRss/107662.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javaboys/services/trackbacks/107662.html</trackback:ping><description><![CDATA[Java API,中文API(下载)和常用英文API(在线)<br /><br />在写Java程序时，Java API文档是必不可少的。<br />中文API下载来自sun.com.cn.<br />可通下面下载地址进行下载：<br /><a href="http://gceclub.sun.com.cn/Java_Docs/html_zh_CN.zip" target="_blank">http://gceclub.sun.com.cn/Java_Docs/html_zh_CN.zip</a><br /><br />英文API,包括了以下内容的API,可通过在线浏览.<br />JDK 1.6.0_beta API: <a href="http://www.dlog.cn/javadoc/jdk1_6_0_beta2/index.html" target="_blank">http://www.dlog.cn/javadoc/jdk1_6_0_beta2/index.html</a><br />J2EE 5.0 Update 1 : <a href="http://java.sun.com/javaee/5/docs/api/" target="_blank">http://java.sun.com/javaee/5/docs/api/</a><br />Struts 1.3.5 API: <a href="http://www.dlog.cn/javadoc/struts-1.3.5/docs/apidocs/index.html" target="_blank">http://www.dlog.cn/javadoc/struts-1.3.5/docs/apidocs/index.html</a><br />Hibernate 3.2 ga : <a href="http://www.dlog.cn/javadoc/hibernate-3.2/doc/api/index.html" target="_blank">http://www.dlog.cn/javadoc/hibernate-3.2/doc/api/index.html</a><br />Lucene 2.0 API : <a href="http://www.dlog.cn/javadoc/lucene-2.0.0/index.html" target="_blank">http://www.dlog.cn/javadoc/lucene-2.0.0/index.html</a><br />Jakarta-POI : <a href="http://www.dlog.cn/javadoc/poi-2.5.1-final/index.html" target="_blank">http://www.dlog.cn/javadoc/poi-2.5.1-final/index.html</a><br />Commons-Lang 2.2 : <a href="http://www.dlog.cn/javadoc/commons-lang-2.2/docs/api/index.html" target="_blank">http://www.dlog.cn/javadoc/commons-lang-2.2/docs/api/index.html</a><br />Commons-beanutils 1.7 : <a href="http://www.dlog.cn/javadoc/commons-beanutils-1.7.0/docs/api/index.html" target="_blank">http://www.dlog.cn/javadoc/commons-beanutils-1.7.0/docs/api/index.html</a><br />Commons-Collections 3.2 : <a href="http://www.dlog.cn/javadoc/commons-collections-3.2/docs/apidocs/index.html" target="_blank">http://www.dlog.cn/javadoc/commons-collections-3.2/docs/apidocs/index.html</a><br />Commons-Digester 1.7 : <a href="http://www.dlog.cn/javadoc/commons-digester-1.7/docs/apidocs/index.html" target="_blank">http://www.dlog.cn/javadoc/commons-digester-1.7/docs/apidocs/index.html</a><br />Commons-Httpclient 3.1: <a href="http://www.dlog.cn/javadoc/commons-httpclient-3.1-beta1/docs/apidocs/index.html" target="_blank">http://www.dlog.cn/javadoc/commons-httpclient-3.1-beta1/docs/apidocs/index.html</a><br />htmlparser 1.6: <a href="http://www.dlog.cn/javadoc/htmlparser1_6/index.html" target="_blank">http://www.dlog.cn/javadoc/htmlparser1_6/index.html</a><br /><br /><br />中文帮助文档<br />Apache 相关 <a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/sitemap.html">http://lamp.linux.gov.cn/Apache/ApacheMenu/sitemap.html</a><img src ="http://www.blogjava.net/javaboys/aggbug/107662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javaboys/" target="_blank">javaboys</a> 2007-03-31 17:44 <a href="http://www.blogjava.net/javaboys/archive/2007/03/31/107662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JUnit入门 [程序开发Java] </title><link>http://www.blogjava.net/javaboys/archive/2007/03/31/107643.html</link><dc:creator>javaboys</dc:creator><author>javaboys</author><pubDate>Sat, 31 Mar 2007 07:49:00 GMT</pubDate><guid>http://www.blogjava.net/javaboys/archive/2007/03/31/107643.html</guid><wfw:comment>http://www.blogjava.net/javaboys/comments/107643.html</wfw:comment><comments>http://www.blogjava.net/javaboys/archive/2007/03/31/107643.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/javaboys/comments/commentRss/107643.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javaboys/services/trackbacks/107643.html</trackback:ping><description><![CDATA[JUnit入门 [程序开发Java] 
<hr style="BORDER-RIGHT: #eeeeee 1px solid; BORDER-TOP: #eeeeee 1px solid; BORDER-LEFT: #eeeeee 1px solid; BORDER-BOTTOM: #eeeeee 1px solid" width="94%" size="1" /><div class="posttime"><small><font size="1">2007-03-31 01:10:21</font></small></div><table id="content" style="TABLE-LAYOUT: fixed; WIDTH: 650px" cellspacing="10" cellpadding="0" width="650" border="0"><tbody><tr><td><div>　一、简介 <br /><br />　　JUnit是一个开源的java单元测试框架。在1997年，由 Erich Gamma 和 Kent Beck 开发完成。这两个牛人中 Erich Gamma 是 GOF 之一；Kent Beck 则在 XP 中有重要的贡献（你觉得眼熟一点都不奇怪）。 <br />　　正如常言道：“麻雀虽小，五脏俱全。” JUnit设计的非常小巧，但是功能却非常强大。 <br />　　下面是JUnit一些特性的总结： <br />　　1) 提供的API可以让你写出测试结果明确的可重用单元测试用例 <br />　　2) 提供了三种方式来显示你的测试结果，而且还可以扩展 <br />　　3) 提供了单元测试用例成批运行的功能 <br />　　4) 超轻量级而且使用简单，没有商业性的欺骗和无用的向导 <br />　　5) 整个框架设计良好，易扩展 <br />　　对不同性质的被测对象，如Class，Jsp，Servlet，Ejb等，Junit有不同的使用技巧。由于本文的性质，以下仅以Class测试为例。 <br /><br />　　二、<a class="blue" href="http://download.it.com.cn/" target="_blank"><font color="#000000">下载</font></a><br /><br />　　点击<a href="http://www.junit.org/" target="_blank"><font color="#000000">http://www.junit.org</font></a>可以下载到最新版本的JUnit，本文使用的为3.8.1版。至于安装或者配置之类，你只需要轻松的将下载下来的压缩包中的jar文件，放到你工程的classpath中就可以了。 <br />　　这样，你的系统中就可以使用JUnit编写单元测试代码了（是不是很简单）！ <br /><br />　　三、HelloWorld <br /><br />　　记得在几乎每本语言教学书上都能找到HelloWorld这个入门代码。今天在这里，我们也从一个简单到根本不用单元测试的例子入手。这是一个只会做两数加减的超级简单的计算器（小学一年级必备极品）。代码如下： <br /><br />　　public class SampleCalculator <br />　　{ <br />　　 public int add(int augend , int addend) <br />　　 { <br />　　 return augend + addend ; <br />　　 } <br /><br />　　 public int subtration(int minuend , int subtrahend) <br /><br />　　 { <br /><br />　　 return minuend - subtrahend ; <br /><br />　　 } <br /><br />　　} <br /><br />　　将上面的代码编译通过。下面就是我为上面程序写的一个单元测试用例： <br /><br />　　//请注意这个程序里面类名和方法名的特征 <br />　　import junit.framework.TestCase; <br />　　public class TestSample extends TestCase <br /><br />　　{ <br /><br />　　 public void testAdd() <br /><br />　　 { <br /><br />　　SampleCalculator calculator = new SampleCalculator(); <br /><br />　　 int result = calculator.add(50 , 20); <br /><br />　　 assertEquals(70 , result); <br /><br />　　 } <br /><br />　　 public void testSubtration() <br /><br />　　 { <br /><br />　　 SampleCalculator calculator = new SampleCalculator(); <br /><br />　　 int result = calculator.subtration(50 , 20); <br /><br />　　 assertEquals(30 , result); <br /><br />　　 } <br /><br />　　} <br /><br />　　好了，在DOS命令行里面输入javac TestSample.java 将测试类编译通过。然后再输入 java junit.swingui.TestRunner TestSample 运行测试类，你会看到如下的窗口。 <br /><br />　　绿色说明单元测试通过，没有错误产生；如果是红色的，则就是说测试失败了。这样一个简单的单元测试就完成了. <br /><br />　　按照框架规定：编写的所有测试类，必须继承自junit.framework.TestCase类；里面的测试方法，命名应该以Test开头，必须是public void 而且不能有参数；而且为了测试查错方便，尽量一个TestXXX方法对一个功能单一的方法进行测试；使用assertEquals等junit.framework.TestCase中的断言方法来判断测试结果正确与否。 <br /><br />　　你可以对比着上面测试类中的实现来体会下规定——很简单！而且你在这个测试类中有加入多少个测试方法，就会运行多少个测试方法。 <br /><br />　　四、向前一步 <br /><br />　　学完了HelloWorld，你已经可以编写标准的单元测试用例了。但是还有一些细节，这里还要说明一下。不要急，很快的！ <br />　　另外你是否注意到，上面弹出窗口的一个细节，在绿条下面有Errors、Failures统计。这两者有何区别呢？ <br />　　Failures作为单元测试所期望发生的错误，它预示你的代码有bug，不过也可能是你的单元测试代码有逻辑错误（注意是逻辑错误）。Errors不是你所期待的，发生了Error你可以按照下面的顺序来检查： <br /><br />　　检查测试所需的环境，如：数据库连接 <br /><br />　　检查单元测试代码 <br /><br />　　检查你的系统代码 <br /><br />　　五、成批运行test case <br /><br />　　这是前面提到的JUnit特性之一。它方便于系统单元测试的成批运行。使用起来也是非常简单，先看下使用代码： <br /><br />　　import junit.framework.Test; <br /><br />　　import junit.framework.TestSuite; <br /><br />　　public class TestAll{ <br /><br />　　 public static Test suite(){ <br /><br />　　 TestSuite suite = new TestSuite("TestSuite Test"); <br /><br />　　 suite.addTestSuite( TestSample.class); <br /><br />　　 return suite; <br /><br />　　 } <br /><br />　　} <br /><br />　　这个测试程序的编译、运行，和上面TestSample的方式是一样的。 <br /><br />　　javac TestAll.java <br /><br />　　java junit.swingui.TestRunner TestAll <br /><br />　　怎么样？这样你在suite方法里面添加几个TestCase就会运行几个，而且它也可以添加TestSuite来将小一点的集合加入大的集合中来，方便了对于不断增加的TestCase的管理和维护。 <br /><br />　　你觉得suite方法的作用是不是于java应用程序的main很类似？并且这里的suite必须严格遵守上面的写法！ <br /><br /><a class="hidden" href="http://149347.blog.51cto.com/"><font color="#000000">出自 51CTO.COM博客</font></a></div></td></tr></tbody></table><br /><br /><img src ="http://www.blogjava.net/javaboys/aggbug/107643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javaboys/" target="_blank">javaboys</a> 2007-03-31 15:49 <a href="http://www.blogjava.net/javaboys/archive/2007/03/31/107643.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>