1.下载网址
http://tomcat.apache.org/download-70.cgi
2.文件目录层次结构
解压下载的tomcat zip文件目录层次结构
3.各目录的用途
目 录 | 用 途 |
/bin | 存放启动和关闭Tomcat的脚本文件 |
/common/lib | 存放Tomcat服务器及所有Web应用程序都可以访问的JAR文件 |
/conf | 存放Tomcat服务器的各种配置文件,其中包括server.xml(Tomcat的主要配置文件)、tomcat-users.xml和web.xml等配置文件 |
/logs | 存放Tomcat的日志文件 |
/server/lib | 存放Tomcat服务器运行所需的各种JAR文件 |
/server/webapps | 存放Tomcat的两个Web应用程序:admin应用程序和manager应用程序 |
/shared/lib | 存放所有Web应用程序都可以访问的JAR文件 |
/temp | 存放Tomcat运行时产生的临时文件 |
/webapps | 当发布Web应用程序时,通常把Web应用程序的目录及文件放到这个目录下 |
/work | Tomcat将JSP生成的Servlet源文件和字节码文件放到这个目录下 |
/common/lib目录、/server/lib和/shared/lib目录下都可以存放JAR文件,它们的区别在于:
— 在/server/lib
目录下的JAR文件只能被Tomcat服务器访问;
— 在/shared/lib
目录下的JAR文件可以被所有的Web应用程序访问,但不能被Tomcat服务器访问;
— 在/common/lib
目录下的JAR文件可以被Tomcat服务器和所有的Web应用程序访问。
此外,对于后面将要介绍的JavaWeb应用程序,在它的WEB-INF目录下,也可以建立lib子目录,在lib子目录下可以存放各种JAR文件,这些JAR文件只能被当前Web应用程序所访问。
4.运行Tomcat
在Tomcat安装目录下的bin子目录中,有一些批处理文件(以.bat作为后缀名的文件),其中的startup.bat就是启动Tomcat的脚本文件,用鼠标双击这个文件
注:JAVA_HOME环境变量一定要配置好,如果没有配置将会报错:
如果环境变量已经配置好,再次双击将会提示:
打开浏览器,在地址栏中输入http://localhost:8080/(localhost表示本地机器,8080是Tomcat默认监听的端口号)
1、单击Tomcat Documentation将进入Tomcat的文档页面,有关Tomcat的帮助信息可以在文档页面中找到;
2、童鞋也可以直接访问Tomcat的文档,文档首页的位置是Tomcat安装目录下的webapps\tomcat-docs\index.html。
3、如果要关闭Tomcat服务器,可以用鼠标双击\bin目录下的shutdown.bat文件。
4、如果你机器上的Tomcat启动失败,有可能是因为TCP的8080端口被其他应用程序所占用,如果你知道是哪一个应用程序占用了8080端口,那么先关闭此程序。
5、如果你不知道或者不想关闭占用8080端口的应用程序,你可以修改Tomcat默认监听的端口号。前面介绍了,Tomcat安装目录下的conf子目录用于存放Tomcat服务器的各种配置文件,其中的server.xml是Tomcat的主要配置文件,这是一个格式良好的XML文档,在这个文件中可以修改Tomcat默认监听的端口号。用UltraEdit(你可以用记事本程序或其他的文本编辑工具)打开server.xml,找到修改8080端口的地方。童鞋也许要问了,“这个配置文件,我都不熟悉,怎么知道在哪里修改端口号呢?”对于初次接触server.xml的童鞋,确实不了解这个文件的结构,但是我们应该有一种开放的思路,既然Tomcat的监听端口号是在server.xml中配置,那么只要我们在这个文件中查找“8080”这些数字字符序列,不就能找到修改端口号的地方了吗!在UltraEdit中,同时按下键盘上的“Ctrl”和“F”键,出现如图5-10所示的查找对话框。
server.xml中配置端口号的位置
如果不能定处处就是改端口的地方可以修改后打开Localhost试试是否修改正确,记住,学习要不断探索。
5.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这个环境变量,如果在当前目录下调用startup.bat,Tomcat会自动设置CATALINA_HOME;
二是执行startup.bat命令,实际上执行的是“catalina.bat start”命令。
如果我们不是在bin目录作为当前目录时调用startup.bat,就会出现如图5-12所示的错误信息(在bin目录的父目录下调用除外)。
要在其他目录下也能启动Tomcat,就需要设置CATALINA_HOME环境变量,你可以将CATALINA_HOME添加到Windows 2000系统的环境变量中,其值就是Tomcat的安装目录
提示:在Windows系统下环境变量的名字是与大小写无关的,也就是说JAVA_HOME和java_home是相同的。
catalina.bat文件
了解了startup.bat文件以后,我们再来看看真正负责启动Tomcat服务器的catalina.bat文件。
通过分析catalina.bat文件,我们发现它还调用了一个文件setclasspath.bat。在setclasspath.bat文件中,它检查JAVA_HOME环境变量是否存在,并通过设置的环境变量JAVA_HOME,找到java.exe,用于启动Tomcat。
在这个文件中,还设置了其他的一些变量,分别表示JDK中的一些工具,有兴趣的童鞋可以自行分析一下这个文件。在执行完setclasspath.bat之后,catalina.bat剩下的部分就开始了Tomcat服务器的启动进程。
直接执行catalina.bat时,需要带上命令行的参数。你可以在命令提示符窗口下,执行catalina.bat,就会打印出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服务器异常终止,但是在当前的命令提示符窗口下仍然保留了启动时的出错信息,这样我们就可以查找启动失败的原因了。
6.Tomcat的体系结构
Tomcat服务器是由一系列可配置的组件构成的,其中核心组件是Catalina Servlet容器,它是所有其他Tomcat组件的顶层容器。Tomcat各组件之间的层次关系如图所示。
我们下面简单介绍一下各组件在Tomcat服务器中的作用。
(1)Server
Server表示整个的CatalinaServlet容器。Tomcat提供了Server接口的一个默认实现,这通常不需要用户自己去实现。在Server容器中,可以包含一个或多个Service组件。
(2)Service
Service是存活在Server中的内部组件,它将一个或多个连接器(Connector)组件绑定到一个单独的引擎(Engine)上。在Server中,可以包含一个或多个Service组件。Service也很少由用户定制,Tomcat提供了Service接口的默认实现,而这种实现既简单又能满足应用。
(3)Connector
连接器(Connector)处理与客户端的通信,它负责接收客户请求,以及向客户返回响应结果。在Tomcat中,有多个连接器可以使用。
(4)Engine
在Tomcat中,每个Service只能包含一个Servlet引擎(Engine)。引擎表示一个特定的Service的请求处理流水线。作为一个Service可以有多个连接器,引擎从连接器接收和处理所有的请求,将响应返回给适合的连接器,通过连接器传输给用户。用户可以通过实现Engine接口提供自定义的引擎,但通常不需要这么做。
(5)Host
Host表示一个虚拟主机,一个引擎可以包含多个Host。用户通常不需要创建自定义的Host,因为Tomcat给出的Host接口的实现(类StandardHost)提供了重要的附加功能。
(6)Context
一个Contex表示了一个Web应用程序,运行在特定的虚拟主机中。什么是Web应用程序呢?在Sun公司发布的Java Servlet规范中,对Web应用程序做出了如下的定义:“一个Web应用程序是由一组Servlet、HTML页面、类,以及其他的资源组成的运行在Web服务器上的完整的应用程序。它可以在多个供应商提供的实现了Servlet规范的Web容器中运行”。一个Host可以包含多个Context(代表Web应用程序),每一个Context都有一个惟一的路径。用户通常不需要创建自定义的Context,因为Tomcat给出的Context接口的实现(类StandardContext)提供了重要的附加功能。
通过图5来帮助我们更好地理解Tomcat服务器中各组件的工作流程。
要了解这些组件的其他信息,可以看下面的页面:
%CATALINA_HOME%\webapps\tomcat-docs\architecture\index.html
我们可以在conf目录下的server.xml文件中对这些组件进行配置,读者打开server.xml文件,就可以看到元素名和元素之间的嵌套关系,与Tomcat服务器的组件是一一对应的,server.xml文件的根元素就是server。关于server.xml配置文件中的各元素及其属性的含义,请参见附录C。
在Tomcat中,提供了各组件的接口及其实现类,如果你要替代Tomcat中的某个组件,只需要根据该组件的接口或类的说明,重写该组件,并进行配置即可。图5-16是Tomcat各组件的类图。
在类图的接口名或类名下面是该接口或该类所在的包,这些接口和类都在%CATALINA_HOME%\ server\lib\catalina.jar文件中。对Tomcat服务器的实现感兴趣的童鞋,可以从http://tomcat.apache.org/上下载Tomcat的源代码。
Struts下载地址
http://struts.apache.org/download.cgi