Tomcat

虚拟目录

Tomcat是流行的JSP服务器,网上下载的程序或者从别处拷贝的jsp工程,可以直接放在TOmcat主目录中Webapps目录中就可以运行,但我们不希望能放到任意的目录下都能通过浏览器进行访问吗?其实,很简单,打开Tomcat主目录中conf文件夹下Server.xml文件,在<host>标签中加入文件中加入如下代码即可:

<Context path="/myjsp" docBase="c:/myjsp" debug="0" reloadable="true" crossContext="true"></Context>
其中,path为我们要建立的虚拟目录,docBase为实际目录在硬盘上的位置。

当然,修改server.xml后需要重新启动Tomcat服务器,才能生效。


server.xml配置



Tomcat 是一款优秀的JSP/Servlet容器,最初由SUN开发,后来被贡献给了Apache社区。Tomcat现在的版本已到6。Tomcat6实现了 Servlet2.5和JSP2.1规范。针对web开发和web服务,提供了更多的新功能。本文使用的版本为Tomcat6.0.14,要求的JDK版本至少为1.5。Tomcat不同版本间的配置有差异,如果读者使用的是其他版本,请仔细阅读Tomat官方文档,或者到网上寻找相关的资料。

     Tomcat有安装版和解压缩版两种版本,安装版除了提供一个图形界面的后台和Windows服务外,其他的和解压缩版没有区别。我使用压缩版。

     第一步,我们需要下载Tomcat,下载地址是http://tomcat.apache.org。下载完成后,解压缩,我的Tomcat位于C:/Tomcat6下,以下用$TOMCAT表示这个目录。

第二步,启动和停止

     $TOMCAT/bin下面是Tomcat用到的脚本程序,扩展名为.bat是用于windows平台的批处理文件,扩展名为.sh的是用于linux或Unix平台的脚本。我们通常用到的是startup.bat、shutdown.bat脚本。我们也可以用catalina.bat start启动Tomcat,用catalina.bat stop关闭Tomcat,事实上,startup.bat正是catalina.bat start的别名,同理shutdownup.bat 是catalina.bat stop的别名。

     Catalina.bat才是操作Tomcat的核心脚本,可以通过catalina –help查看catalina可以使用的参数及其说明。启动Tomcat后,我们输入如下网址:http://localhost:8080/,如果看到Tomcat的页面,证明安装成功,如果不成功,请检查是否设置了正确的JAVA_HOME,JDK的版本是否太低。如果还是不成功,可能是端口冲突,下面将会介绍如何修改端口号。

TOMCAT配置

     $TOMCAT/conf下是Tomcat的配置文件,最重要的配置文件是Servler.xmlServer.xml可以重新指定,方式是catalina.bat –config,比如指定config.xml取代Servler.xml,命令如下:

     catalina.bat run –config conf/config.xml

     Server.xml中可以配置部署应用需要的所有信息,从Tomcat5开始,应用配置可以从Server.xml独立出来,这也是 Tomcat现在所推荐的配置方式,带来的一个好处,显而易见,更容易维护了。另一个好处,是在Servler.xml的修改,只能通过重启Tomcat 才能发生作用,分拆后,修改完成,可以不用重启Tomcat就发生作用。本文就采用这种配置方式。下面进行详细的介绍。

     (1) 端口的修改

     Server元素下可以有多个Service,端口就是在Service元素下配置的。Connector元素的配置如下:

Xml代码 复制代码
  1. <Connnector port=”8080” protocal=”HTTP/1.1” connectionTimeout=”20000” redirectPort=”8443”/>  
[xml] view plain copy
  1. <Connnector port=”8080” protocal=”HTTP/1.1” connectionTimeout=”20000” redirectPort=”8443”/>  



     其中protocal制定了该端口侦听的协议类型,HTTP/1.1表示侦听的是客户的HTTP请求,即我们通过浏览器访问需要输入的端口,当端口号是80的时候,可以不用在浏览器地址栏输入端口号,这就是我们访问很多网站不需要指定端口的原因。有时候protocal没有指定,这时候默认的是HTTP/1.1。注意这个端口必须是闲置的。

     Service下面可以配置多个端口,用于侦听不同的协议。

     (2) 虚拟主机

     Service元素下必须有一个Engine元素,Engine有一个名称,和一个默认的虚拟主机名,形式如下:

Xml代码 复制代码
  1. <Engine name="Catalina" defaultHost="localhost">  
[xml] view plain copy
  1. <Engine name="Catalina" defaultHost="localhost">  


     虚拟主机就配置在Engine元素下。形式如下:

Xml代码 复制代码
  1. <Host name="localhost"  appBase="webapps"  
  2.   
  3.             unpackWARs="true" autoDeploy="true"  
  4.   
  5.             xmlValidation="false" xmlNamespaceAware="false">  
  6.   
  7.  </Host>  
[xml] view plain copy
  1. <Host name="localhost"  appBase="webapps"  
  2.   
  3.             unpackWARs="true" autoDeploy="true"  
  4.   
  5.             xmlValidation="false" xmlNamespaceAware="false">  
  6.   
  7.  </Host>  



     name是虚拟主机的名字,appBase是虚拟主机指向的目录,Tomcat启动时,会自动加载appBase下的应用。 unpackWARs表示是否自动解压缩appBase下已打成WAR包的应用,autoDeploy表示在服务器运行的时候,将一个应用放入 appBase下,是否自动部署。

Tomcat应用部署

     应用可以配置在Server.xml中,这里介绍分拆后的配法。

     应用的独立配置文件应该配置在路径$TOMCAT/conf/engineName/hostName/下,其中engineName是应用所在的Engine的名字,对于本例而言是Catalina,hostName是应用所在的虚拟主机的名字,本例为localhost。配置文件的名字是这样约定的:如果访问路径就在虚拟主机下,那么名字为ROOT,如:ROOT.xml,其他情况下,文件名就是访问路径,不过需要用#替换路径中的/。本例中访问路径为/struts,相应的文件名是struts.xml,内容如下:

Xml代码 复制代码
  1. <Context docBase="C:/WAP/struts" reloadable="true"/>  
[xml] view plain copy
  1. <Context docBase="C:/WAP/struts" reloadable="true"/>  


     其中docBase指定应用所在的目录,如果是相对目录,对应的就是虚拟主机下appBase的目录,也可以是绝对目录,这个时候应用在什么地方都可以。reloadable表示是否支持热部署,比如class更新,如果reloadable为true,应用会重新部署。注意:在分拆后, Context的path属性将不再起作用,这是Tomcat6和之前的版本不同的地方。

     以上配置完成,我们就可以访问应用了,访问地址是http://localhost:8080/struts

     下面介绍资源的配置

    这里指的主要是数据源的配置。Tomcat6使用的是DBCP数据源,它的配置方式如下:

Xml代码 复制代码
  1. <Resource name="jdbc/test" auth="Application" type="javax.sql.DataSource" maxActive="100"  
  2.   
  3. maxIdle="30" maxWait="10000" username="sa" password="123456" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"  
  4.   
  5. url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test"/>  
[xml] view plain copy
  1. <Resource name="jdbc/test" auth="Application" type="javax.sql.DataSource" maxActive="100"  
  2.   
  3. maxIdle="30" maxWait="10000" username="sa" password="123456" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"  
  4.   
  5. url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test"/>  


     它可以直接配置在Context元素下,这时数据源就只有他所属的应用能够访问。如果需要所有的应用能够访问,可以配置在$TOMCAT/conf/context.xml中,直接配置下根元素下即可。这个文件在启动tomcat的时候,所有的应用都会加载。

     如果需要节省资源,共享同一个数据源,可以配置在Server.xml的GlobalNamingResources节点下,在应用中可以通过别名访问,提供别名的方式是在应用所在的元素下添加如下的子元素,例:

Xml代码 复制代码
  1. <ResouceLink name=”jdbc/test2” global=”jdbc/test” type=”javax.sql.DataSource”/>  
[xml] view plain copy
  1. <ResouceLink name=”jdbc/test2” global=”jdbc/test” type=”javax.sql.DataSource”/> 

 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,目前最新版本是6.x,相对5.x性能提升很多,主要优化了内存使用,增强IO能力,重新构造集群功能。

 

     近期对Tomcat6.x作深入学习,参考上述声明的Tomcat全攻略,由于笔者是2001年针对Tomcat4.x所写,故参考之并针对Tomcat6.x做了总结,形成此篇学习笔记,希望对学习的人有所帮助,本文涵盖了:Tomcat目录、Server.xml元素讲解,数据库连接池配置、线程池配置、虚拟目录配置。关于如何下载、安装、运行Tomcat略,请google,相信有详细的文章讲述。

 

 

 

server.xml配置简介

 

 

元素名

属性

解释

server

port

指定一个端口,这个端口负责监听关闭tomcat的请求

shutdown

指定向端口发送的命令字符串

GlobalNamingResources

 

服务器的全局JNDI资源,可以有子标签<Resource></Resource>

Executor(线程池,一个或多个Connector可以共享此线程池)

name

线程池名称,名称必须唯一

namePrefix

线程的名字前缀,用来标记线程名字的,这样每个线程就用这个前缀加上线程编号了,比如 catalina-exec-1 、catalina-exec-2

maxThreads

允许的最大线程池里的线程数量,默认是200,大的并发应该设置的高一些,反正只是限制而已,不占用资源

minSpareThreads

最小的保持活跃的线程数量,默认是25.这个要根据负载情况自行调整了。太小了就影响反应速度,太大了白白占用资源

maxIdleTime

最小的保持活跃的线程数量,默认是25.这个要根据负载情况自行调整了。太小了就影响反应速度,太大了白白占用资源

threadPriority

线程的等级。默认是Thread.NORM_PRIORITY

service

name

指定service的名字

Connector (表示客户端和service之间的连接)

port

指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求

minProcessors

服务器启动时创建的处理请求的线程数

maxProcessors

最大可以创建的处理请求的线程数

enableLookups

如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址

redirectPort

指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号

acceptCount

指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

connectionTimeout

指定超时的时间数(以毫秒为单位)

Engine (表示指定service中的请求处理机,接收和处理来自Connector的请求)

name

 

defaultHost

指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的

jvmRoute

 

host (表示一个虚拟主机、并且可以包含Context子节点配置虚拟目录)

name

指定主机名

appBase

应用程序基本目录,即存放应用程序的目录

unpackWARs

如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序

autoDeploy

自动部署

xmlValidation

是否验证xml

xmlNamespaceAware

 

Realm (表示存放用户名,密码及role的数据库)

className

指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口

Context(host子节点配置虚拟目录)

path

虚拟目录名称

docBase

物理路径

Debug

Debug模式

Reload

True 重新加载,修改后自动加载

 

上面我们讲述了server .xml个元素的含义,下面我们给出详细示例

 

Tomcat数据库连接池配置如下:

server.xml配置Resource

Xml代码 复制代码
  1. <Resource name="jdbc/ExampleDB" auth="Container" type="javax.sql.DataSource"  
  2.               maxActive="100" maxIdle="30" maxWait="10000"  
  3.               username="APP" password="APP" driverClassName="org.apache.derby.jdbc.ClientDriver"  
  4.               url="jdbc:derby://localhost:1527/springside-example;create=true"/>  
[xml] view plain copy
  1. <Resource name="jdbc/ExampleDB" auth="Container" type="javax.sql.DataSource"  
  2.               maxActive="100" maxIdle="30" maxWait="10000"  
  3.               username="APP" password="APP" driverClassName="org.apache.derby.jdbc.ClientDriver"  
  4.               url="jdbc:derby://localhost:1527/springside-example;create=true"/>  

 

context.xml文件增加:

 

Xml代码 复制代码
  1. <WatchedResource>WEB-INF/web.xml</WatchedResource>  
  2.        
  3.     <ResourceLink name="jdbc/ExampleDB"   global="jdbc/ExampleDB"   type="javax.sql.DataSource"/>  
  4.       
[xml] view plain copy
  1. <WatchedResource>WEB-INF/web.<span class="hilite3"><span style="background-color: #aaffaa;">xml</span></span></WatchedResource>  
  2.       
  3.     <ResourceLink name="jdbc/ExampleDB"   global="jdbc/ExampleDB"   type="javax.sql.DataSource"/>  
  4.       

 

Tomcat共享线程池配置:

取消Executor注释,修改连接数至自己合适的数值既可。

 

Xml代码 复制代码
  1. <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"    
  2.        maxThreads="200" minSpareThreads="100" maxIdleTime="60000"/>  
[xml] view plain copy
  1. <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"   
  2.        maxThreads="200" minSpareThreads="100" maxIdleTime="60000"/>  

 

 executor="tomcatThreadPool" 标明此连接使用上面配置的名称为tomcatThreadPool的连接池,无属性共享连接不会生效 protocol表示使用的是 http协议 端口号为8080

Java代码 复制代码
  1.  <Connector port="8080" protocol="HTTP/1.1" redirectPort="8443"    
  2.                connectionTimeout="20000"    
  3.                executor="tomcatThreadPool"  
  4.                acceptCount="100"  
  5.                useBodyEncodingForURI="true"  
  6.                enableLookups="false"  
  7.                 />  
[java] view plain copy
  1.  <Connector port="8080" protocol="HTTP/1.1" redirectPort="8443"   
  2.                connectionTimeout="20000"   
  3.                executor="tomcatThreadPool"  
  4.                acceptCount="100"  
  5.                useBodyEncodingForURI="true"  
  6.                enableLookups="false"  
  7.                 />  

  

虚拟目录配置:

在<host></host>之间增加如下

 

<!-- 配置虚拟目录,例如:http://localhost:8080 -->

 

Xml代码 复制代码
  1. <Context path="/" docBase="D:/workspace/code/HBJH/web"></Context>  
[xml] view plain copy
  1. <Context path="/" docBase="D:/workspace/code/HBJH/web"></Context>  

 

附件中是取自springside3中,Tomcat production config配置示例,即生产环境下Tomcat配置

 

tomcat的目录结构如下:

 

目录名

简介

bin

存放启动和关闭tomcat脚本

conf

包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml

work

存放jsp编译后产生的class文件

webapp

存放应用程序示例,以后你要部署的应用程序也要放到此目录

logs

存放日志文件

lib

这三个目录主要存放tomcat所需的jar文件

 

 转自:http://blog.csdn.net/xxfigo/article/details/5065027



你可能感兴趣的:(Tomcat)