各族小朋友在一起g调:Servlet/JSP深入详解:基于Tomcat的Web开发第一章01

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 20:00:21
要掌握Java Web开发,首先就要学会编写Servlet,而要运行Servlet,则需要一个Servlet容器,本书选用的是Tomcat。下面让我们来了解一下Servlet和Tomcat。
1.1   Web技术的发展
随着Internet的发展,基于HTTP协议和HTML标准的Web应用呈几何数量级的增长,人们的生活在不知不觉中已经被网络悄悄地改变了。在网络普及之前,我们购买图书要去书店,给亲人汇钱要去邮局或者银行……而现在,一切都是这么便捷,你可以在网上购买图书、汇款、缴纳电话费,你甚至可以为远在他乡的女朋友订购一束玫瑰。各种各样的网上业务丰富了我们的生活,节省了我们的时间,提高了我们的工作效率,改善了我们的生活品质。支撑这些网上业务的就是各种各样的Web应用,而这些Web应用又是用各种Web技术开发的。
早期的Web应用主要是静态页面的浏览(如新闻的浏览),这些静态页面使用HTML语言来编写,放在服务器上;用户使用浏览器通过HTTP协议请求服务器上的Web页面,服务器上的Web服务器软件接收到用户发送的请求后,读取请求URI所标识的资源,加上消息报头发送给客户端的浏览器;浏览器解析响应中的HTML数据,向用户呈现多姿多彩的HTML页面。整个过程如图1-1所示。

图1-1  浏览器请求静态页面
随着网络的发展,很多线下业务开始向网上发展,基于Internet的Web应用也变得越来越复杂,用户所访问的资源已不仅仅局限于在服务器硬盘上存放的静态网页,更多的应用需要根据用户的请求动态生成页面信息,复杂一些的还需要从数据库中提取数据,经过一定的运算,生成一个页面返回给客户。例如,笔者通过Web浏览器想要查询本公司一年的销售报表,这个销售报表是根据一年的销售数据得出的,而这一年的销售数据非常多,通常都是存储在数据库中,当Web服务器端软件接收到客户端的请求,就需要从数据库中提取一年的数据,然后按照一定的统计规则,通过计算生成报表页面,发送到请求者的Web浏览器端。类似于上述的应用还有很多,要为用户提供各种各样的增强功能,就需要我们在Web服务端通过软件来实现。可是这种实现,如何才能完成呢?
了解HTTP协议的读者,可能会想到,可以遵循HTTP协议实现一个服务器端软件,提供增强功能。想法本身没有错误,但是由于HTTP协议服务器端的实现较为复杂,需要考虑很多方面,而且由于应用的广泛性,不可能针对每一种应用都去实现这样的一个HTTP服务器,所以这种方法在现实中不太可行。还有一种方法,就是利用已经实现HTTP协议的服务器端软件,而这些软件预先为我们留出了扩展的接口,我们只需要按照一定的规则去提供相应的扩展功能。当这类Web服务器接收到客户请求后,判断请求是否是访问我们提供的扩展功能,如果是,就将请求交由我们所编写的程序去处理。当处理完成后,程序将处理结果交回Web服务器软件,Web服务器软件拿到结果信息后,再将结果作为响应信息返回给客户端。第二种方式的好处在于,我们不需要对HTTP协议有过多的了解,HTTP协议服务器端的实现已经由Web服务器软件完成了,我们只需要根据我们的应用去开发相应的功能模块,然后将这些功能模块按照你所采用的Web服务器软件的要求,部署到Web服务器中进行集成。在用户看来,Web服务器端就是一个整体,在为他/她提供服务。
早期使用的Web服务器扩展机制是CGI,它允许用户调用Web服务器上的CGI程序。CGI的全称是Common Gateway Interface,即公共网关接口。大多数的CGI程序使用Perl来编写,也有使用C、Python或PHP来编写的。用户通过单击某个链接或者直接在浏览器的地址栏中输入URL来访问CGI程序,Web服务器接收到请求后,发现这个请求是给CGI程序的,于是就启动并运行这个CGI程序,对用户请求进行处理。CGI程序解析请求中的CGI数据,处理数据,并产生一个响应(通常是HTML页面)。这个响应被返回给Web服务器,Web服务器包装这个响应(例如添加消息报头),以HTTP响应的形式发送给Web浏览器。整个过程如图1-2所示。

图1-2  用户访问CGI程序
然而CGI程序存在着一些缺点,主要是CGI程序编写困难、对用户请求的响应时间较长、以进程方式运行导致性能受限等。由于CGI程序的这些缺点,开发人员需要其他的CGI方案。1997年,SUN公司推出了Servlet技术,作为Java阵营的CGI解决方案。作为对微软ASP技术(1996年推出)的回应,SUN公司于1998年推出了JSP技术,允许在HTML页面中嵌入Java脚本代码,从而实现动态网页功能。与ASP、JSP类似的服务器端页面编写技术还有Rasmus Lerdorf于1994年发明的PHP技术。
Servlet与Servlet容器
Java Servlet(Java服务器小程序)是一个基于Java技术的Web组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容。Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类。Servlet被编译为平台独立的字节码,可以被动态地加载到支持Java技术的Web服务器中运行。目前Servlet规范最新的版本是2.5。
在上文中,出现了一个概念“Servlet容器”。那么什么是Servlet容器呢?Servlet容器有时候也叫做Servlet引擎,是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应。Servlet不能独立运行,它必须被部署到Servlet容器中,由容器来实例化和调用Servlet的方法,Servlet容器在Servlet的生命周期内包容和管理Servlet。
在JSP技术推出后,管理和运行Servlet/JSP的容器也称为Web容器。在本书中,Servlet容器、JSP容器,以及Web容器是同义的。
用户通过单击某个链接或者直接在浏览器的地址栏中输入URL来访问Servlet,Web服务器接收到该请求后,并不是将请求直接交给Servlet,而是交给Servlet容器。Servlet容器实例化Servlet,调用Servlet的一个特定方法对请求进行处理,并产生一个响应。这个响应由Servlet容器返回给Web服务器,Web服务器包装这个响应,以HTTP响应的形式发送给Web浏览器。整个过程如图1-3所示。
Web

图1-3  用户访问Servlet
与CGI程序相比,Servlet具有以下优点:
—  Servlet是单实例多线程的运行方式,每个请求在一个独立的线程中运行,而提供服务的Servlet实例只有一个。
—  Servlet具有可升级性,能响应更多的请求,因为Servlet容器使用一个线程而不是操作系统进程,而线程仅占用有限的系统资源。
—  Servlet使用标准的API,被更多的Web服务器所支持。
—  Servlet使用Java语言编写,因此拥有Java程序语言的所有优点,包括容易开发和平台独立性。
—  Servlet可以访问Java平台丰富的类库,使得各种应用的开发更为容易。
—  Servlet容器给Servlet提供额外的功能,如错误处理和安全。
Servlet容器的分类
根据Servlet容器工作模式的不同,可以将Servlet容器分为以下三类:
Ø 独立的Servlet容器
当我们使用基于Java技术的Web服务器时,Servlet容器作为构成Web服务器的一部分而存在。然而大多数的Web服务器并非基于Java,因此,就有了下面两种Servlet容器的工作模式。
Ø 进程内的Servlet容器
Servlet容器由Web服务器插件和Java容器两部分的实现组成。Web服务器插件在某个Web服务器内部地址空间中打开一个JVM(Java虚拟机),使得Java容器可以在此JVM中加载并运行Servlet。如有客户端调用Servlet的请求到来,插件取得对此请求的控制并将它传递(使用JNI技术)给Java容器,然后由Java容器将此请求交由Servlet进行处理。进程内的Servlet容器对于单进程、多线程的服务器非常适合,提供了较高的运行速度,但伸缩性有所不足。
Ø 进程外的Servlet容器
Servlet容器运行于Web服务器之外的地址空间,它也是由Web服务器插件和Java容器两部分的实现组成的。Web服务器插件和Java容器(在外部JVM中运行)使用IPC机制(通常是TCP/IP)进行通信。当一个调用Servlet的请求到达时,插件取得对此请求的控制并将其传递(使用IPC机制)给Java容器。进程外Servlet容器对客户请求的响应速度不如进程内的Servlet容器,但进程外容器具有更好的伸缩性和稳定性。
Tomcat简介
学习Servlet技术,首先需要有一个Servlet运行环境,也就是需要有一个Servlet容器,本书采用的是Tomcat。
Tomcat是一个免费的开放源代码的Servlet容器,它是Apache软件基金会(Apache Software Foundation)的一个顶级项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现,Tomcat 6支持最新的Servlet 2.5和JSP 2.1规范。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱,并得到了部分软件开发商的认可,成为目前比较流行的Web服务器。
Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache,我们可以将Apache和Tomcat集成在一起使用,Apache作为HTTP Web服务器,Tomcat作为Web容器。
下面给出Tomcat服务器接受客户请求并做出响应的图例,如图1-4所示。

图1-4  Tomcat服务器接受客户请求并做出响应的过程
① 客户端(通常都是浏览器)访问Web服务器,发送HTTP请求。
② Web服务器接收到请求后,传递给Servlet容器。
③ Servlet容器加载Servlet,产生Servlet实例后,向其传递表示请求和响应的对象。
④ Servlet实例使用请求对象得到客户端的请求信息,然后进行相应的处理。
⑤ Servlet实例将处理结果通过响应对象发送回客户端,容器负责确保响应正确送出,同时将控制返回给Web服务器。
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所示。
本书使用的Tomcat版本是6.0.16。对于Windows操作系统,Tomcat还提供了可执行的安装程序的下载,即“Windows Service Installer”链接。通过安装程序安装Tomcat,将把Tomcat安装为Windows的服务。
笔者建议读者下载zip压缩包,通过解压缩的方式来安装Tomcat,因为解压缩的方式也适用于其他的操作系统(如Linux系统),并且更容易与其他的开发环境集成。对于初学者来说,也能更好地学习Tomcat的启动过程。

图1-7  Tomcat 6.x的下载页面
单击“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的目录结构及其用途
目  录
用    途
/bin
存放启动和关闭Tomcat的脚本文件
/conf
存放Tomcat服务器的各种配置文件,其中包括server.xml(Tomcat的主要配置文件)、tomcat-users.xml和web.xml等配置文件
/lib
存放Tomcat服务器和所有Web应用程序需要访问的JAR文件
/logs
存放Tomcat的日志文件
/temp
存放Tomcat运行时产生的临时文件
/webapps
当发布Web应用程序时,通常把Web应用程序的目录及文件放到这个目录下
/work
Tomcat将JSP生成的Servlet源文件和字节码文件放到这个目录下
从表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所示的画面。
② 单击“高级”选项卡,选择“环境变量(N)”,如图1-11和图1-12所示。
③ 在“系统变量”下方单击“新建”按钮。在“变量名”中输入“JAVA_HOME”,在变量值中输入JDK所在的目录“D:\Java\jdk1.6.0_05”(读者可以根据自己机器上JDK的安装目录来修改这个值),然后单击“确定”按钮,如图1-13所示。
       
图1-10 “我的电脑”属性                                          图1-11 “高级”选项卡
④ 最后在“环境变量”对话框上单击“确定”按钮,结束JAVA_HOME环境变量的设置。
我们再一次转到Tomcat的bin目录下,用鼠标双击startup.bat文件,可以看到如图1-14所示的启动信息。
注意图1-14中圆角矩形框中的文本,可以看到启动的是Tomcat 6.0.16。
               
图1-12 “环境变量”对话框                                  图1-13  新建JAVA_HOME系统变量

图1-14  Tomcat启动信息
然后,打开浏览器,在地址栏中输入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 562770 2007-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服务器异常终止,但是在当前的命令提示符窗口下仍然保留了启动时的出错信息,这样我们就可以查找启动失败的原因了。