1.5 Tomcat的安装与配置
安装Tomcat之前要先安装JDK,本书中,笔者所用的JDK版本为1.6.0_05。
JDK的下载地址是:http://java.sun.com/javase/downloads/?intcmp=1281,下载页面如图1-5所示。
图1-5 JDK的下载页面
要下载Tomcat,首先访问Tomcat项目的网址:http://tomcat.apache.org/,如图1-6所示。
图1-6 Tomcat项目的首页
在页面左边的下载链接中选择要下载的Tomcat版本,在这里,我们选择“Tomcat 6.x”下载,单击这个链接,进入Tomcat 6.x的下载页面,如图1-7所示。
图1-7 Tomcat 6.x的下载页面
本书使用的Tomcat版本是6.0.16。对于Windows操作系统,Tomcat还提供了可执行的安装程序的下载,即“Windows Service Installer”链接。通过安装程序安装Tomcat,将把Tomcat安装为Windows的服务。
笔者建议读者下载zip压缩包,通过解压缩的方式来安装Tomcat,因为解压缩的方式也适用于其他的操作系统(如Linux系统),并且更容易与其他的开发环境集成。对于初学者来说,也能更好地学习Tomcat的启动过程。
单击“zip”链接,下载apache-tomcat-6.0.16.zip。使用WinZip或WinRAR等解压缩工具将apache-tomcat-6.0.16.zip解压缩到指定的驱动器和目录中。笔者是在D:\OpenSource目录下直接解压,产生了目录apache-tomcat-6.0.16,解压后的文件夹和文件存放于D:\OpenSource\apache-tomcat-6.0.16目录下。
Tomcat 6.x需要的J2SE版本最低为5.0。Tomcat 6.x不再需要JDK的支持,只需要安装JRE就可以了,这是因为Tomcat 6.x使用Eclipse JDT Java编译器来编译JSP页面,而不再使用JDK中的编译器。Eclipse JDT Java编译器已经绑定到Tomcat的发行版中。如果你使用Tomcat 5.0.x或者Tomcat 5.5.x,那么仍然需要安装JDK。
1.5.1 Tomcat的目录结构
Tomcat安装后的目录层次结构如图1-8所示。
图1-8 Tomcat 6.0.16目录层次结构
各目录的用途如表1-1所示。
表1-1 Tomcat的目录结构及其用途
从表1-1中可以看到,lib目录下存放的JAR文件可以被所有的Web应用程序所访问,如果多个Web应用程序需要访问相同的JAR文件,那么可以将这些JAR文件放到Tomcat的lib目录下。此外,对于后面将要介绍的Java Web应用程序,在它的WEB-INF目录下,也可以建立lib子目录,在lib子目录下可以存放各种JAR文件,这些JAR文件只能被当前Web应用程序所访问。
Tomcat 6.x修改了5.x版本的目录结构,删除了common、server和shared目录,将common/lib、server/lib和shared/lib中的JAR文件统一放到了lib目录下。
1.5.2 运行Tomcat
在Tomcat安装目录下的bin子目录中,有一些批处理文件(以.bat作为后缀名的文件),其中的startup.bat就是启动Tomcat的脚本文件,用鼠标双击这个文件,你将看到一个窗口一闪而过,之后就什么也没有了,这说明Tomcat的启动出错了。
单击Windows的【开始】菜单,选择【所有程序】→【附件】→【命令提示符】,打开“命令提示符”窗口,进入Tomcat的bin目录中,在“命令提示符”窗口中输入startup,你将看到如图1-9所示的画面。
图1-9 运行Tomcat提示出错信息
笔者以前碰到过很多学员,在初次运行Tomcat时,看到如图1-9所示的信息就不知所措了。有的学员以前还配置过Tomcat,但是再次使用的时候,由于忘记了上次是如何配置的,同样感觉无从下手。
我们在学习软件开发时,一定要养成查看错误提示信息,进而根据错误提示解决问题的良好习惯。笔者第一次配置Tomcat时,就是根据错误提示信息一步一步配置成功的。当看到错误信息时,首先不要慌张和无所适从,要仔细看清楚错误提示,弄明白错误的原因。
图1-9中的错误提示信息,已经很明确地告诉你了错误的原因。我们看图1-9中的错误信息,如下所示:
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program
这个错误信息是告诉你要配置JAVA_HOME或者JRE_HOME环境变量,以便Tomcat能够找到JDK或JRE的安装目录。从环境变量的名字,我们可以猜测到JAVA_HOME是配置JDK的安装目录,JRE_HOME是配置JRE的安装目录。
由于Tomcat 6.x不再需要JDK的支持,所以才新增了JRE_HOME环境变量,对于6.0之前的Tomcat版本,没有JRE_HOME环境变量,只能配置JAVA_HOME环境变量。
下面,我们在Windows XP Service Pack 2操作系统下设置JAVA_HOME环境变量,步骤如下。
① 右键单击“我的电脑”,选择【属性】,出现如图1-10所示的画面。
图1-10 “我的电脑”属性
② 单击“高级”选项卡,选择“环境变量(N)”,如图1-11和图1-12所示。
图1-11 “高级”选项卡
图1-12 “环境变量”对话框
③ 在“系统变量”下方单击“新建”按钮。在“变量名”中输入“JAVA_HOME”,在变量值中输入JDK所在的目录“D:\Java\jdk1.6.0_05”(读者可以根据自己机器上JDK的安装目录来修改这个值),然后单击“确定”按钮,如图1-13所示。
图1-13 新建JAVA_HOME系统变量
④ 最后在“环境变量”对话框上单击“确定”按钮,结束JAVA_HOME环境变量的设置。
我们再一次转到Tomcat的bin目录下,用鼠标双击startup.bat文件,可以看到如图1-14所示的启动信息。
图1-14 Tomcat启动信息
注意图1-14中圆角矩形框中的文本,可以看到启动的是Tomcat 6.0.16。
然后,打开浏览器,在地址栏中输入http://localhost:8080/(localhost表示本地机器,8080是Tomcat默认监听的端口号),将出现如图1-15所示的Tomcat页面。
图1-15 Tomcat的默认主页
注意图1-15中鼠标(小手形状)指向的链接——“Tomcat Documentation”,单击这个链接将进入Tomcat的文档页面,有关Tomcat的帮助信息可以在文档页面中找到;读者也可以直接访问Tomcat的文档,文档首页的位置是Tomcat安装目录下的webapps\docs\index.html。如果要关闭Tomcat服务器,可以用鼠标双击Tomcat bin目录下的shutdown.bat文件。
如果你机器上的Tomcat启动失败,有可能是因为TCP的8080端口被其他应用程序所占用,如果你知道是哪一个应用程序占用了8080端口,那么先关闭这个程序。如果你不知道或者不想关闭占用8080端口的应用程序,那么你可以修改Tomcat默认监听的端口号。
前面介绍了,Tomcat安装目录下的conf子目录用于存放Tomcat服务器的各种配置文件,其中的server.xml是Tomcat的主要配置文件,这是一个格式良好的XML文档,在这个文件中可以修改Tomcat默认监听的端口号。用UltraEdit(你可以用“记事本”程序或其他的文本编辑工具)打开server.xml,找到修改8080端口的地方。读者也许要问了,“这个配置文件,我都不熟悉,怎么知道在哪里修改端口号呢?”对于初次接触server.xml的读者,确实不了解这个文件的结构,但是我们应该有一种开放的思路,既然Tomcat的监听端口号是在server.xml中配置,那么只要我们在这个文件中查找“8080”这样的数字字符序列,不就能找到修改端口号的地方了吗!在UltraEdit中,同时按下键盘上的“Ctrl”和“F”键,出现如图1-16所示的“查找”对话框。
图1-16 UltraEdit的查找对话框
然后在“查找”文本框中输入“8080”,单击“下一个”按钮。重复这一过程,直到找到如图1-17所示的在server.xml中配置端口号位置。
图1-17 server.xml中配置端口号的位置
找到后,如果我们不能确定此处就是修改端口号的地方,也没有关系,可以先尝试着修改一下端口号,然后启动Tomcat。如果启动成功并且能够在修改后的端口号上访问到Tomcat的默认主页,那就证明了我们修改的地方是正确的。学习时,我们应该养成这种探索并不断实验的精神。在这里,我们可以修改端口号为8000(读者可以根据自己机器的配置选择一个端口号),然后保存。再次启动Tomcat,在Tomcat启动完毕后,打开浏览器,在地址栏中输入http://localhost:8000/(读者根据自己设置的端口号做相应的修改),就可以看到Tomcat的默认主页了。关闭Tomcat服务器时,执行bin目录下的shutdown.bat文件。
如果你想将Tomcat安装为Windows的服务,以便在Windows系统启动时即运行Tomcat,那么可以打开“命令提示符”窗口,进入Tomcat安装目录下的bin子目录,然后执行下面的命令:
service.bat install
这样将会在Windows系统中安装一个Tomcat6服务,要启动这个服务,可以执行下面的命令:
net start Tomcat6
要停止Tomcat6服务,可以执行下面的命令:
net stop Tomcat6
要删除Tomcat6服务,可以执行下面的命令:
service.bat remove
要提醒读者的是:net命令是Windows自带的命令,而service.bat是Tomcat提供的批处理文件。
1.5.3 Tomcat启动分析
在本节中我们将通过对Tomcat启动过程的分析,来帮助读者更好地理解和掌握Tomcat。
用文本编辑工具打开用于启动Tomcat的批处理文件startup.bat,仔细阅读。在这个文件中,首先判断CATALINA_HOME环境变量是否为空,如果为空,就将当前目录设为CATALINA_HOME的值。接着判断当前目录下是否存在bin\catalina.bat,如果文件不存在,将当前目录的父目录设为CATALINA_HOME的值。根据笔者机器上Tomcat安装目录的层次结构,最后CATALINA_HOME的值被设为Tomcat的安装目录。如果环境变量CATALINA_HOME已经存在,则通过这个环境变量调用bin目录下的“catalina.bat start”命令。通过这段分析,我们了解到两个信息,一是Tomcat启动时,需要查找CATALINA_HOME这个环境变量,如果在Tomcat的bin目录下调用startup.bat,Tomcat会自动并正确设置CATALINA_HOME;二是执行startup.bat命令,实际上执行的是“catalina.bat start”命令。
如果我们不是在Tomcat的bin目录作为当前目录时调用startup.bat,就会出现如图1-18所示的错误信息(在bin目录的父目录下调用除外)。
图1-18 在其他目录下启动Tomcat出错
如果要想在任意目录下都能启动Tomcat,就需要设置CATALINA_HOME环境变量,你可以将CATALINA_HOME添加到Windows XP系统的环境变量中,其值就是Tomcat的安装目录。在笔者的机器上,Tomcat的安装目录是D:\OpenSource\apache-tomcat-6.0.16。添加CATALINA_HOME环境变量的过程和前述添加JAVA_HOME环境变量的过程是一样的。如果你不想在系统的环境变量中添加,也可以直接在startup.bat文件中进行设置。下面是在startup.bat文件中设置CATALINA_HOME后的文件片段:
…
rem $Id: startup.bat 5627702007-08-04 22:13:58Z markt $
rem --------------------------------------------------------------------
set CATALINA_HOME=D:\OpenSource\apache-tomcat-6.0.16
rem Guess CATALINA_HOME if not defined
set CURRENT_DIR=%cd%
if not "%CATALINA_HOME%" == "" goto gotHome
set CATALINA_HOME=%CURRENT_DIR%
…
注意以粗体显示的这句代码的作用就是设置CATALINA_HOME环境变量,在它的下面是判断CATALINA_HOME是否为空的语句。如果找不准位置,干脆将设置CATALINA_HOME环境变量的这句代码放到文件的第一行。JAVA_HOME环境变量也可以采用同样的方式进行设置。不过,如果要在其他目录下利用shutdown.bat来关闭Tomcat服务器,则需要在shutdown.bat文件中设置CATALINA_HOME和JAVA_HOME这两个环境变量,设置变量的位置和startup.bat文件一样,都是在判断CATALINA_HOME是否为空之前。当然,为了一劳永逸,避免重装Tomcat后还要进行设置(需要是同一版本的Tomcat安装在同一位置),我们最好还是将CATALINA_HOME和JAVA_HOME这两个环境变量添加到Windows XP系统的环境变量中。
有的读者可能会对Tomcat安装目录的环境变量的名字是CATALINA_HOME而感到奇怪,按照其他环境变量的设置来看,JAVA_HOME表示JDK的安装目录,那么应该用TOMCAT_HOME来表示Tomcat的安装目录,可为什么要使用CATALINA_HOME呢?实际上,在Tomcat 4以前,用的就是TOMCAT_HOME来表示Tomcat的安装目录,在Tomcat 4以后,采用了新的Servlet容器Catalina,所以环境变量的名字也改为了CATALINA_HOME。
在Windows系统下环境变量的名字是与大小写无关的,也就是说,JAVA_HOME和java_home是一样的。
了解了startup.bat文件以后,我们再来看看真正负责启动Tomcat服务器的catalina.bat文件。通过分析catalina.bat文件,我们发现它还调用了一个文件setclasspath.bat。在setclasspath.bat文件中,它检查JAVA_HOME环境变量是否存在,并通过JAVA_HOME环境变量,找到java.exe,用于启动Tomcat。在这个文件中,还设置了其他的一些变量,代表调用Java的标准命令,有兴趣的读者可以自行分析一下这个文件。在执行完setclasspath.bat之后,catalina.bat剩下的部分就开始了Tomcat服务器的启动进程。
直接执行catalina.bat时,需要带上命令行的参数。读者可以在命令提示符窗口下,执行catalina.bat,就会打印出catalina.bat命令的各种参数及其含义,如图1-19所示。
图1-19 catalina.bat的各参数信息
其中常用的参数是start、run和stop。参数start表示在一个单独的窗口中启动Tomcat服务器,参数run表示在当前窗口中启动Tomcat服务器;参数stop表示关闭Tomcat服务器。我们执行startup.bat,实际上执行的就是“catalina.bat start”命令;执行shutdown.bat,实际上执行的是“catalina.bat stop”命令。“catalina.bat run”命令有时候是非常有用的,特别是当我们需要查看Tomcat的出错信息时。
在开发JSP程序时,经常会碰到自己机器上的8080端口号被别的应用程序占用,或者在配置server.xml时出现错误,当通过startup.bat(相当于执行“catalina.bat start”)启动Tomcat服务器时,如果启动过程中出现严重错误,由于是在单独的窗口中启动Tomcat服务器,所以一旦启动失败,命令提示符窗口就自动关闭了,程序运行中输出的出错信息也随之消失,而且没有任何的日志信息,这就使得我们没有办法找出错误原因。当出现错误时,我们可以换成“catalina.bat run”命令再次启动,一旦启动失败,仅仅是Tomcat服务器异常终止,但是在当前的命令提示符窗口下仍然保留了启动时的出错信息,这样我们就可以查找启动失败的原因了。