1、Tomcat 详细说明Tomcat 详细说明 .11. Tomcat 背景 .12. Tomcat 的目录结构 .13. tomcat 类加载 24. Server.Xml 配置简介 25. Web.xml 配置管理 .56. 管理 67. Web 应用部署的原理及其方式: 78. 常见错误 91. Tomcat 背景自从 JSP 发布之后,推出了各式各样的 JSP 引擎。Apache Group 在完成 GNUJSP1.0 的开发以后,开始考虑在 SUN 的 JSWDK 基础上开发一个可以直接提供 Web 服务的 JSP 服务器,当然同时也支持 Servlet, 这样 Tomcat 就诞生了
2、。Tomcat 是 jakarta 项目中的一个重要的子项目, ,同时它又是 sun 公司官方推荐的 servlet 和 jsp 容器。servlet 和 jsp 的最新规范都可以在 tomcat 的新版本中得到实现。其次, Tomcat 是完全免费的软件,任何人都可以从互联网上自由地下载。Tomcat 与 Apache 的组合相当完美。2. Tomcat 的目录结构tomcat |-bin Tomcat:存放启动和关闭 tomcat 脚本; |-conf Tomcat:存放不同的配置文件( server.xml 和 web.xml) ; |-doc:存放 Tomcat 文档; |-lib/j
3、apser/common:存放 Tomcat 运行需要的库文件( JARS) ; |-logs:存放 Tomcat 执行时的 LOG 文件; |-src:存放 Tomcat 的源代码; |-webapps:Tomcat 的主要 Web 发布目录(包括应用程序示例) ; |-work:存放 jsp 编译后产生的 class 文件;3. tomcat 类加载Bootstrap($JAVA_HOME/jre/lib/ext/*.jar) System($CLASSPATH/*.class 和指定的 jar) Common($CATALINA_HOME/common 下的 classes,lib,en
4、dores 三个子目录) Catalina ($CATALINA_HOME/server/下的 classes 和 lib 目录仅对 Tomcat 可见) if(this.height600)this.height=600;“ border=03.1.2 下面这个错误是因为 CATALINA_HOME 环境变量设置不正确,从而造成 Tomcat 不能正常启动。 C:carlstartup CATALINA_HOME C: The CATALINA_HOME environment variable is not defined correctly This environment variab
5、le is needed to run this program 3.1.3 下面这个错误是由于错误地设置了 Java 启动参数 xms256M,正确的写法应该是-Xms256M,请注意大小写。大家知道,在 Java 命令行中,-Xms 表示 JVM 开始启动时所分配的内存大小,而-Xmx 表示 JVM 运行时最大所能占用的的内存大小,如果您的应用程序所需的内存超过 Xmx 的值,JVM 就会抛出 Out of Memeory(内存不足 )的异常而停止。当然,Xmx 的最大值不应超过物理内存的70%。 D:backblogstart_tomcat_debug.bat D:backblogset
6、 JAVA_OPTS=-xms256M D:backblogrem 请将 JAVA_HOME 环境变量修改到您的 JDK 安装目录 D:backblogset JAVA_HOME=C:Program FilesJavajdk1.5.0_09 D:backblogrem 请将 CATALINA_HOME 环境变量修改到您的 Tomcat 安装目录 D:backblogset CATALINA_HOME=C:carlittomcat_researchjakarta-tomcat-5.0.28 D:backblogrem 开始调用 catalina.bat 文件 D:backblogcall C:c
7、arlittomcat_researchjakarta-tomcat-5.0.28bincatalina.bat debug Using CATALINA_BASE: C:carlittomcat_researchjakarta-tomcat-5.0.28 Using CATALINA_HOME: C:carlittomcat_researchjakarta-tomcat-5.0.28 Using CATALINA_TMPDIR: C:carlittomcat_researchjakarta-tomcat-5.0.28temp Using JAVA_HOME: C:Program FilesJ
8、avajdk1.5.0_09 debug 无效的选项: -xms256M 用法:jdb . 如果遇到类似问题,可以用下面的方法重新设置一下 JVM 启动时的内存参数,在 startup.bat 脚本中加上下面这一行: set JAVA_OPTS=-Xms256m -Xmx512m 上面这行表示 Tomcat 初始启动内存至少需要 256M,而最大可能占用内存为为 512M。有兴趣的读者可以在 startup.bat 里加上这行参数,启动 Tomcat,您会从 Windows 任务管理器中看到您使用的内存迅速飙升。 3.2 Tomcat 应用服务器的配置问题及其中部署的某个 Web 应用问题 3
9、.2.1 Tomcat 端口冲突,具体错误如下窗口所示。这表明缺省的 8080 端口已经被占有,所以Tomcat 不能启动,我们可以通过修改 Tomcat 的配置文件 server.xml 来重新定义端口号即可启动,或者停止已经使用 8080 端口的程序。有时我们并没有启动 Tomcat,也没有其它应用程序占用 8080 端口,但是 Tomcat 还抛出这个错误。这可能是因为上次我们关闭 Tomcat 时,并没有真正关闭 Tomcat。在这种情况下,请从 Windows 任务管理器中检查一下有无一个 java.exe 的程序正在运行,如果发现,强行 kill java.exe,然后重启试试。
10、800)this.width=800;if(this.height600)this.height=600;“ border=03.2.2 Tomcat 配置文件有错误,产生异常。有时我们在修改 server.xml 文件时,不小心多加或者多删了一个标签,可能造成 Tomcat 不能正常启动。下面的窗口说明了这个问题。 800)this.width=800;if(this.height600)this.height=600;“ border=03.2.3 Tomcat 中部署的某个 Web 应用发生异常。这时 Tomcat 能正常启动,但在 Tomcat 启动窗口里发现一大堆异常,如 data
11、source 没有正确定义,程序抛出异常等等都有关系。下面的这个例子是Tomcat 自带的 balancer web 应用程序启动时产生错误。该问题是因为我们错误的修改了 balancer.xml文件造成的。 800)this.width=800;if(this.height600)this.height=600;“ border=03.2.4 Web 应用程序的 jar 文件丢失,如 JDBC 数据库连接文件 class12.jar, mysql.jar 没有拷贝到Webapp 的 WEB-INFlib 目录下就会产生异常。尤其要注意的是在 Tomcat5 以前的版本中,公共 jar 文件包
12、通常放在 Tomcat 安装目录下的 commonlib 子目录中,但在 Tomcat6.0 中,这个公共目录改为 lib 子目录。 3.3 未知错误 3.3.1 有时 Tomcat 的启动窗口一闪而过,根本就看不出启动过程中发生了什么错误。这中间的原因有好多种,最常见的解决办法就是使用 run 命令,打开 startup.bat 文件,找到下面这行: call “%EXECUTABLE%“ start %CMD_LINE_ARGS% 并将它修改为: call “%EXECUTABLE%“ run %CMD_LINE_ARGS% 这样,Tomcat 启动时就不会弹出新窗口,我们就可以从容不迫地
13、观察 Tomcat 的启动错误,并解决问题,请参考上面关于 run 命令的解释。 3.3.2 另外,阅读 Tomcat 的启动日志文件也是我们解决问题的重要办法,缺省的 Tomcat 日志是放在 Tomcat 安装目录的 logs 子目录下。例如下面这段日志说明 JspServletViewer 这个 Web 应用缺少Map Object 的相关 jar 文件包,从而找不到 com/esri/mo2/map/core/Layout 这个 Java 类。 2008-02-23 11:19:30 StandardContext/JspServletViewerException sending c
14、ontext initialized event to listener instance of class com.esri.svr.cmn.FileRewriterContextListener java.lang.NoClassDefFoundError: com/esri/mo2/map/core/Layout at com.esri.svr.cat.ServiceXMLHandler.startElement ServiceXMLHandler.java:47) at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)