1、Tomcat详细说明 Tomcat详细说明 1 1. Tomcat背景 1 2. Tomcat的目录结构 1 3. tomcat类加载 2 4. Server.Xml配置简介 2 5. Web.xml配置管理 5 6. 管理 6 7. Web应用部署的原理及其方式: 7 8. 常见错误 9 1. Tomcat背景 自从JSP发布之后,推出了各式各样的JSP引擎。Apache Group在完成GNUJSP1.0的开发以后,开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器,当然同时也支持Servlet, 这样Tomcat就诞生了。Tomcat
2、是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/japser/common
3、存放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,endores三
4、个子目录) Catalina ($CATALINA_HOME/server/下的classes和lib目录仅对Tomcat可见) &Shared($CATALINA_HOME/shared/下的classes和lib目录以及$CATALINA_HOME/lib目录)仅对Web应用程序可见,对Tomcat不可见WebApp($WEBAPP/Web-INF/*仅对该WEB应用可见classes/*.class lib/*.jar) 加载类和资源的顺序为: 1、/Web-INF/classes 2、/Web-INF/lib/*.jar 3、Bootstrap 4、
5、System 5、$CATALINA_HOME/common/classes 6、$CATALINA_HOME/common/endores/*.jar 7、$CATALINA_HOME/common/lib/*.jar 8、$CATALINA_HOME/shared/classes 9、$CATALINA_HOME/shared/lib/*.jar 4. Server.Xml配置简介 Server A Server element represents the entire Catalina servlet container. (Singleton)
6、 1、port 指定一个端口,这个端口负责监听关闭tomcat的请求 2、shutdown 指定向端口发送的命令字符串 service: A Service element represents the combination of one or more Connector components that share a single Engine Service是这样一个集合:它由一个或者多个Connector组成,以及一个Engine,负责处理所有Connector所获得的客户请求 name 指定service的名字
7、 Connector: (表示客户端和service之间的连接) 一个Connector将在某个指定端口上侦听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回客户 TOMCAT有两个典型的Connector,一个直接侦听来自browser的http请求,一个侦听来自其它WebServer的请求 Coyote Http/1.1 Connector 在端口8080处侦听来自客户browser的http请求 (你可能辉修改的地方) Coyote JK2 Connector 在端口8009处侦听来自其它WebServer(Apache)的servlet/j
8、sp代理请求 ○ port 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求 ○ minProcessors 服务器启动时创建的处理请求的线程数 ○ maxProcessors 最大可以创建的处理请求的线程数 ○ enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址 ○ redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号 ○ acceptCount 指定当所
9、有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理 ○ connectionTimeout 指定超时的时间数(以毫秒为单位) Engine The Engine element represents the entire request processing machinery associated with a particular Service It receives and processes all requests from one or more Connectors and returns the comple
10、ted response to the Connector for ultimate transmission back to the client ○ defaultHost 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的 Engine下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名 当Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理 Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理 Host 代表一个Virtual Host
11、虚拟主机,每个虚拟主机和某个网络域名Domain Name相匹配 每个虚拟主机下都可以部署(deploy)一个或者多个Web App,每个Web App对应于一个Context,有一个Context path 当Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理 匹配的方法是“最长匹配”,所以一个path==""的Context将成为该Host的默认Context 所有无法和其它Context的路径名匹配的请求都将最终和该默认Context匹配 1、name 指定主机名 2、app
12、Base 应用程序基本目录,即存放应用程序的目录 3、unpackWARs 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接 从WAR文件中运行应用程序 Logger (表示日志,调试和错误信息): 1、className 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口 2、prefix 指定log文件的前缀 3、suffix 指定log文件的后缀 4、timestamp 如果为true
13、则log文件名中要加入时间,如下 例:localhost_log.2001-10-04.txt Realm (表示存放用户名,密码及role的数据库): 1、className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口 Valve (功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样): 1、className 指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve 类可以
14、记录应用程序的访问信息 directory(指定log文件存放的位置): 1、pattern 有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行 请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记 录的值更多 Context 一个Context对应于一个Web Application,一个Web Application由一个或者多个Servlet组成 Context在创建的时候将根据配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/
15、web.xml载入Servlet类 当Context获得请求时,将在自己的映射表(mapping table)中寻找相匹配的Servlet类 如果找到,则执行该类,获得请求的回应,并返回 1、docBase 应用程序的路径或者是WAR文件存放的路径 2、path 表示此web应用程序的url的前缀,这样请求的url为 http://localhost:8080/path/**** 3、reloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的 /WEB-INF/lib 和/WE
16、B-INF/classes目录的变化,自动装载新的应用程序,我们可
以在不重起tomcat的情况下改变应用程序
5. Web.xml配置管理
1、默认(欢迎)文件的设置
在tomcat4\conf\web.xml中,
17、jsp
2、报错文件的设置
18、
如果某文件资源没有找到,服务器要报404错误,按上述配置则会调用\webapps\ROOT\notFileFound.jsp。
如果执行的某个JSP文件产生NullPointException ,则会调用\webapps\ROOT\null.jsp
3、会话超时的设置
设置session 的过期时间,单位是分钟;
19、>
20、滤: 1) 身份验证的过滤Authentication Filters 2) 日志和审核的过滤Logging and Auditing Filters 3) 图片转化的过滤Image conversion Filters 4) 数据压缩的过滤Data compression Filters 5) 加密过滤Encryption Filters 6) Tokenizing Filters 7) 资源访问事件触发的过滤Filters that trigger resource access events XSL/T 过滤XSL/T filter
21、s
9) 内容类型的过滤Mime-type chain Filter 注意监听器的顺序,如:先安全过滤,然后资源,
然后内容类型等,这个顺序可以自己定。
6. 管理
1、用户配置
在进行具体Tomcat管理之前,先给tomcat添加一个用户,使这个用户有权限来进行管理。
打开conf目录下的tomcat-users.xml文件,在相应的位置添加下面一行:
22、t,在浏览器中输入http://localhost:8080/manager/,会弹出对话框,输入上面的用户 名和密码即可。 2、应用程序列表 在浏览器中输入http://localhost:8080/manager/list,浏览器将会显示如下的信息: OK - Listed applications for virtual host localhost /ex:running:1 /examples:running:1 /webdav:running:0 /tomcat-docs:running
23、0 /manager:running:0 /:running:0 上面显示的信息分别为:应用程序的路径、当前状态、连接这个程序的session数 3、重新装载应用程序 在浏览器中输入 http://localhost:8080/manager/reload?path=/examples,浏览器显示如下: OK - Reloaded application at context path /examples 这表示example应用程序装载成功,如果我们将server.xml的Context元素的relo
24、adable属性设为true,则没必要利用这种方式重新装载应用程序,因为tomcat会自动装载。 4、显示session信息 在浏览器中输入http://localhost:8080/manager/sessions?path=/examples,浏览器显示如下: OK - Session information for application at context path /examples Default maximum session inactive interval 30 minutes 5、启动和关闭应用程序 在浏览器中输入h
25、ttp://localhost:8080/manager/start?path=/examples和 http://localhost:8080/manager/stop?path=/examples分别启动和关闭examples应用程序。 7. Web应用部署的原理及其方式: ·原理: 1:将可部署目录拷贝到tomcat/webapps目录中,由虚拟主机自动部署(部署方式1, 3, 4) 2: 部署时,可部署目录不需要拷贝到webapps目录中,通过context上下文动态查找( 部署方式2,3 )。 ·部署方式: 1.将web应用的可部署目录,如hello.
26、jsp(内容:This is my Hello page),拷贝到tomcat/webapps/ROOT目录中,由tomcat自动完成部署(虚拟主机 autoDeployee=”true”)。,在IE地址栏输入http://localhost:8080/hello.jsp,是否显示以上的内容
2 . 法一:
通过manager进行web应用部署,目录:D:\Program Files\Apache Software Foundation\Tomcat 5.0\conf\Catalina\localhost 下的manager.xml文件,修改如下:
29、
30、0/demo/,是否出现index.jsp页面的内容: · 新建的上下文Context名demo,会在在localhost文件下有个demo.xml文件,目录:D:\Program Files\Apache Software Foundation\Tomcat 5.0\conf\Catalina\localhost,在demo.xml文里可以知道上下文demo的信息 3. 部署war(原理1、2) 4 .工具部署 8. 常见错误 3.1 环境变量设置问题 如果机器上没有安装JDK或者环境变量JAVA_HOME或CATALINA_HOME没有设置正确,T
31、omcat就不能正常启动。 3.1.1 下面这个错误对话框的意思是Windows不能发现“-Djava.endorsed.dirs=”命令,下面背景的黑窗口的错误是JAVA_HOME环境变量应该指向JDK而不是JRE的根目录(本例故意把把JAVA_HOME指向JRE的根目录,所以产生这个错误)。在这种情况下,我们在可以重新设置环境变量JAVA_HOME并指向JDK的安装目录即可。 '800')this.width='800';if(this.height>'600')this.height='600';" border=0> 3.1.2 下面这个错误是因为CATALINA_HOME环
32、境变量设置不正确,从而造成Tomcat不能正常启动。 C:\carl>startup CATALINA_HOME C:\ The CATALINA_HOME environment variable is not defined correctly This environment variable is needed to run this program 3.1.3 下面这个错误是由于错误地设置了Java启动参数xms256M,正确的写法应该是-Xms256M,请注意大小写。大家知道,在Java命令行中,-Xms表示JVM开始启动时所分配的内存大小,而-Xmx表示JVM
33、运行时最大所能占用的的内存大小,如果您的应用程序所需的内存超过Xmx的值,JVM就会抛出Out of Memeory(内存不足)的异常而停止。当然,Xmx的最大值不应超过物理内存的70%。 D:\back\blog>start_tomcat_debug.bat D:\back\blog>set JAVA_OPTS=-xms256M D:\back\blog>rem 请将JAVA_HOME环境变量修改到您的JDK安装目录 D:\back\blog>set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_09 D:\back\blog>rem
34、请将CATALINA_HOME环境变量修改到您的Tomcat安装目录 D:\back\blog>set CATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28 D:\back\blog>rem 开始调用catalina.bat文件 D:\back\blog>call C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28\bin\catalina.bat debug Using CATALINA_BASE: C:\carl\it\tomcat_research\j
35、akarta-tomcat-5.0.28 Using CATALINA_HOME: C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28 Using CATALINA_TMPDIR: C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28\temp Using JAVA_HOME: C:\Program Files\Java\jdk1.5.0_09 debug 无效的选项: -xms256M 用法:jdb <选项> <类> <参数> ... 如果遇到类似问题,可以用下面的方
36、法重新设置一下JVM启动时的内存参数,在startup.bat脚本中加上下面这一行: set JAVA_OPTS=-Xms256m -Xmx512m 上面这行表示Tomcat初始启动内存至少需要256M,而最大可能占用内存为为512M。有兴趣的读者可以在startup.bat里加上这行参数,启动Tomcat,您会从Windows任务管理器中看到您使用的内存迅速飙升。 3.2 Tomcat应用服务器的配置问题及其中部署的某个Web应用问题 3.2.1 Tomcat端口冲突,具体错误如下窗口所示。这表明缺省的8080端口已经被占有,所以Tomcat不能启动,我们可以通过修改To
37、mcat的配置文件server.xml来重新定义端口号即可启动,或者停止已经使用8080端口的程序。有时我们并没有启动Tomcat,也没有其它应用程序占用8080端口,但是Tomcat还抛出这个错误。这可能是因为上次我们关闭Tomcat时,并没有真正关闭Tomcat。在这种情况下,请从Windows任务管理器中检查一下有无一个java.exe的程序正在运行,如果发现,强行kill java.exe,然后重启试试。 '800')this.width='800';if(this.height>'600')this.height='600';" border=0> 3.2.2 Tomcat
38、配置文件有错误,产生异常。有时我们在修改server.xml文件时,不小心多加或者多删了一个>标签,可能造成Tomcat不能正常启动。下面的窗口说明了这个问题。 '800')this.width='800';if(this.height>'600')this.height='600';" border=0> 3.2.3 Tomcat中部署的某个Web应用发生异常。这时Tomcat能正常启动,但在Tomcat启动窗口里发现一大堆异常,如data source没有正确定义,程序抛出异常等等都有关系。下面的这个例子是Tomcat自带的balancer web应用程序启动时产生错误。该问
39、题是因为我们错误的修改了balancer.xml文件造成的。 '800')this.width='800';if(this.height>'600')this.height='600';" border=0> 3.2.4 Web应用程序的jar文件丢失,如JDBC数据库连接文件class12.jar, mysql.jar没有拷贝到Webapp的WEB-INF\lib目录下就会产生异常。尤其要注意的是在Tomcat5以前的版本中,公共jar文件包通常放在Tomcat安装目录下的common\lib子目录中,但在Tomcat6.0中,这个公共目录改为lib子目录。 3.3 未知错误
40、 3.3.1 有时Tomcat的启动窗口一闪而过,根本就看不出启动过程中发生了什么错误。这中间的原因有好多种,最常见的解决办法就是使用run命令,打开startup.bat文件,找到下面这行: call "%EXECUTABLE%" start %CMD_LINE_ARGS% 并将它修改为: call "%EXECUTABLE%" run %CMD_LINE_ARGS% 这样,Tomcat启动时就不会弹出新窗口,我们就可以从容不迫地观察Tomcat的启动错误,并解决问题,请参考上面关于run命令的解释。 3.3.2 另外,阅读Tomcat的启动日志文件也是我们解决问题的重
41、要办法,缺省的Tomcat日志是放在Tomcat安装目录的logs子目录下。例如下面这段日志说明JspServletViewer这个Web应用缺少Map Object的相关jar文件包,从而找不到com/esri/mo2/map/core/Layout这个Java类。 2008-02-23 11:19:30 StandardContext[/JspServletViewer]Exception sending context initialized event to listener instance of class com.esri.svr.cmn.FileRewriterContex
42、tListener 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)






