Tomcat 部署项目细节深入研究
2012-04-14 17:00
344 查看
我刚花了2个多小时反编译看了下代码,应该是这样的过程,好精妙的
Part 1: 在应用的META-INF/context.xml下面配置数据源的必要性
Tomcat的部署应用过程在HostConfig目录下的deployApps() 方法中
实际就是做了以下结果事情->多种部署tomcat应用的方式
(1) 部署 %CATALINA_HOME%/conf/Catalina/localhost 目录下面的 .xml
deployDescriptors(configBase, configBase.list());
(2) 部署 %CATALINA_HOME%/webapps/ 目录下以.war 结尾的文件
deployWARs(appBase, filteredAppPaths);
(3) 部署%CATALINA_HOME%/webapps 目录下的目录,也就是没有打包的那些应用
deployDirectories(appBase, filteredAppPaths);
而我们的问题就在第二种和第三种部署方式里面,
deployWARs (部署所有的war)里面是一个for循环,来依次调用deployWAR( 部署单个war)
而deployWAR中 , 贴上代码
不难发现,他会打开一个字节流从 war文件中读取 META-INF/context.xml 文件,然后把它 copy 到
%CATALINA_HOME%/conf/Catalina/localhost/下于war应用名称相对应的xml文件中,也就是这里的
也就是%CATALINA_HOME%/conf/Catalina/localhost
所以,这个目录,还是必要的。
Part 2,tcServer和Tomcat的关系:
tcServer不同于普通的tomcat,他的%CATALINA_HOME%/conf/Catalina/localhost 根本没有,其实是这样的,他很精妙的吧部署目录指向了
%TCSERVER_HOME%\spring-insight-instance,为什么这么说呢?
在%TCSERVER_HOME%\tcruntime-ctl.bat 中
也就是说INSTANCE_BASE 设为了当前目录,也就是%TCSERVER_HOME%
素所以我们可以看到,CATALINA_BASE和CATALINA_HOME都被设置为了%TCSERVER_HOME%/%1 ,而这个%1是第一个参数spring-insight-instance,所以CATALINA_BASE和CATALINA_HOME都被设置为%TCSERVER_HOME%/spring-insight-instance
下面就迎刃而解了。
Part 3:验证结论
我们在%TCSERVER_HOME% \spring-insight-instance\conf\Catalina\localhost 下果然找到了estore.xml, 符合<项目名>.xml的风格
打开看下,发现里面的内容正是从META-INF/context.xml中复制来的,并且用docBase指向了来源。于是Part 1的论点得到证明。对比下面两张图
estore.xml
META-INF/context.xml
然后tcServer就可依据estore.xml来部署estore应用
Part 1: 在应用的META-INF/context.xml下面配置数据源的必要性
Tomcat的部署应用过程在HostConfig目录下的deployApps() 方法中
实际就是做了以下结果事情->多种部署tomcat应用的方式
(1) 部署 %CATALINA_HOME%/conf/Catalina/localhost 目录下面的 .xml
deployDescriptors(configBase, configBase.list());
(2) 部署 %CATALINA_HOME%/webapps/ 目录下以.war 结尾的文件
deployWARs(appBase, filteredAppPaths);
(3) 部署%CATALINA_HOME%/webapps 目录下的目录,也就是没有打包的那些应用
deployDirectories(appBase, filteredAppPaths);
而我们的问题就在第二种和第三种部署方式里面,
deployWARs (部署所有的war)里面是一个for循环,来依次调用deployWAR( 部署单个war)
而deployWAR中 , 贴上代码
不难发现,他会打开一个字节流从 war文件中读取 META-INF/context.xml 文件,然后把它 copy 到
%CATALINA_HOME%/conf/Catalina/localhost/下于war应用名称相对应的xml文件中,也就是这里的
也就是%CATALINA_HOME%/conf/Catalina/localhost
所以,这个目录,还是必要的。
Part 2,tcServer和Tomcat的关系:
tcServer不同于普通的tomcat,他的%CATALINA_HOME%/conf/Catalina/localhost 根本没有,其实是这样的,他很精妙的吧部署目录指向了
%TCSERVER_HOME%\spring-insight-instance,为什么这么说呢?
在%TCSERVER_HOME%\tcruntime-ctl.bat 中
也就是说INSTANCE_BASE 设为了当前目录,也就是%TCSERVER_HOME%
素所以我们可以看到,CATALINA_BASE和CATALINA_HOME都被设置为了%TCSERVER_HOME%/%1 ,而这个%1是第一个参数spring-insight-instance,所以CATALINA_BASE和CATALINA_HOME都被设置为%TCSERVER_HOME%/spring-insight-instance
下面就迎刃而解了。
Part 3:验证结论
我们在%TCSERVER_HOME% \spring-insight-instance\conf\Catalina\localhost 下果然找到了estore.xml, 符合<项目名>.xml的风格
打开看下,发现里面的内容正是从META-INF/context.xml中复制来的,并且用docBase指向了来源。于是Part 1的论点得到证明。对比下面两张图
estore.xml
META-INF/context.xml
然后tcServer就可依据estore.xml来部署estore应用
相关文章推荐
- IDEA部署Web项目到Tomcat过程及注意细节
- web项目jdk mysql tomcat redis nginx memcache linux部署细节
- IDEA部署Web项目到Tomcat过程及注意细节
- 将Web项目War包部署到Tomcat服务器基本步骤
- eclipse中项目名称修改后部署到tomcat中应用名称仍然是旧的
- tomcat部署web 项目三种方式
- 项目部署到tomcat上,tomcat能正常启动,为什么却无法访问?
- tomcat中部署java项目
- Ubuntu下tomcat安装及java web项目部署
- 在tomcat中部署web项目
- 在linux下用tomcat部署java web项目的过程与注意事项
- javaEE异常总结——更换工作空间向同一个tomcat上部署同一个项目时出现问题解决
- 同一Tomcat 多个端口部署不同的项目
- TOMCAT部署项目
- weblogic11g 中 部署原来在tomcat下运行正常的项目
- tomcat中三种部署项目的方法
- 在MyEclipse 中部署项目启动Tomcat 出现 Address already in use: JVM_Bind 异常
- 在linux下用tomcat部署java web项目的过程与注意事项
- Tomcat部署项目去除项目名和端口号通过IP地址直接访问
- tomcat部署web项目