Tomcat的核心组件是servlet容器。
Tomcat各个组件之间的嵌套关系
server.xml配置如下:
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context docBase="D:\\work\\alaEclipse\\workspace\\iptvsys\\webapps\\lcsmp" path="/" workDir="work\Catalina\portal\_"></Context>
</Host>
</Engine>
</Service>
</Server>
<Server>
代表整个servlet容器组件。里面可以有一个或多个Service
参数:
className:必须实现
org.apache.catalina.Server接口
address:Server等待关闭命令的TCP/IP地址,默认localhost
port:Server等待关闭命令的TCP/IP端口号
shutdown:关闭命令,必须从上面指定的TCP/IP地址和端口获取
<Service>
包含一个Engine和多个Connector。
参数:
className:必须实现
org.apache.catalina.Service接口
同一个Server里的Service的name必须唯一name:
<Connector>
代表和客户交互的组件,负责接收客户请求和返回响应结果。HTTP Connector代表一个支持HTTP协议的组件,它可以使Catalina作为一个单独的web
server起作用。参数:
port:Connector建立web socket等待外部连接的TCP端口号
protocol:设置处理传入数据的协议
URIEcoding:指定解码URI数据的编码,默认为ISO-8859-1
<Engine>
Engine用于处理同一个Service中所有Connector接收到的客户请求。
参数:
defaultHost:默认主机名,它标识将处理的所有该主机的请求。该值必须匹配它内置元素其中一个Host的name值。
<Host>
定义一个虚拟主机,可以包含一个或多个应用。
参数:
appBase:默认为webapps,表示appBase目录下的所有的子目录都将自动部署为web应用
name:通常使用已在DNS注册的虚拟主机的网络名,多个Host中必须有一个的name与Engine的defaultHost的值匹配。
<Context>
每一个该元素都代表一个Web应用。
参数:
path:虚拟路径,浏览器访问的url,比如:http://localhost:8080/path
docBase:web应用的实际物理路径,若该路径是相对路径的话,则是相对于appBase而言,若是绝对路径,则与appBase无关。
reloadable:当/WEB_INF/classes或/WEB_INF/lib发生改变,则自动重新加载应用。
<GlobalNamingResources>
常量配置
如果我们想为某个web应用配置常量,可以在WEB-INF/web.xml中配置如下:
<env-entry>
<env-entry-name>maxExemptions</env-entry-name>
<env-entry-value>10</env-entry-value>
<env-entry-type>java.lang.Integer</env-entry-type>
</env-entry>
在java程序中,读取方式如下:
Context initCtx = null;
initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
Integer n = (Integer)envCtx.lookup("maxExemptions");
如果我们想为所有web应用配置相同的常量,可以在tomcat/conf/server.xml下配置:
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN"> <GlobalNamingResources>
<Environment name="maxExemptions" value="10"
type="java.lang.Integer" override="true"/>
</GlobalNamingResources> <Service name="Catalina"> <Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> <Engine defaultHost="localhost" name="Catalina"> <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <Context docBase="project01" path="/project01" reloadable="true" source="org.eclipse.jst.jee.server:project01">
<ResourceLink name="maxExemptions" global="maxExemptions" type="java.lang.Integer"/>
</Context> </Host> </Engine> </Service> </Server>
在GlobalNamingResources下定义一个Environment,在具体应用Context下,使用ResourceLink指定该Environment资源,global名字就是该Environment的名字。在java中的读取方式和前面相同。
数据源配置
在tomcat/conf/server.xml中配置数据源如下:
<GlobalNamingResources>
<Resource
name="LCSMP116"
username="amsdevelop"
password="amsdevelop123"
maxIdle="30"
maxActive="50"
maxWait="5000"
type="javax.sql.DataSource"
driverClassName="com.sybase.jdbc3.jdbc.SybDriver"
url="jdbc:sybase:Tds:10.21.17.20:5100/LCSMP?charset=cp936" />
</GlobalNamingResources>
并在Context下引用该数据源,也可以在tomcat/conf/Context.xml,tomcat\webapps\应用名\META-INF\context.xml 或者在tomcat/conf/localhost/应用名.xml下加入ResourceLink
<Context docBase="D:\\work\\alaEclipse\\workspace\\iptvsys\\webapps\\lcsmp" path="/" workDir="work\Catalina\portal\_">
<ResourceLink global="LCSMP116" name="DBSERVER_DS" type="javax.sql.DataSource"/>
</Context>
此时便可以在Spring的applicationContext.xml配置dataSource
<beans>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:/comp/env/DBSERVER_DS</value>
</property>
</bean>
</beans>
也可以使用以下方式获取数据源
//获得对数据源的引用:
Context ctx = new InitalContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/DBSERVER_DS");
//获得数据库连接对象:
Connection con = ds.getConnection();
//返回数据库连接到连接池:
con.close();