pasha
tomcat部署
准备java运行环境
Tomcat6运行需要Java环境,需要先下载并安装J2SE5.0以上的版本。
下载地址:http://java.sun.com/javase/downloads/index.jsp
注意:tomcat6.0已经不再需要jdk,而只要jre就可以了,因为它采用了自带的Eclipse JDT来编译jsp,而不是jdk。
如果JDK是zip解压,而不是install安装的,请设置系统环境JAVA_HOME:
在桌面上右键点击【我的电脑】,选择【属性】命令,在出现的对话框中选择【高级】选项卡,然后单击【环境变量】按钮,添加一个环境变量:JAVA_HOME,它的值为JDK所在根目录(比如:c:\jdk,而不是c:\jdk\bin)
tomcat下载安装
tomcat下载地址:http://tomcat.apache.org/
右侧有从3.3到6.x各个版本的下载链接。
windows下tomcat的安装很简单,可以采用exe安装包的方式进行安装。基本上一路确定就可以了,安装用到了java环境,从jdk的安装注册表或者JAVA_HOME这个系统变量里面获得jdk所在位置(这就是为什么非安装的jdk需要配置JAVA_HOME的原因,当然在后面tomcat运行时也是需要的)。
安装后的目录如下:
c:\tomcat6.0
|---bin
|---conf
|---lib
|---logs
|---temp
|---webapps
|---work
相比之前的版本,在bin和lib这两个目录改动比较大,bin目录不再有一堆的bat文件,精简为4个文件。而jar文件统一放到新增的lib目录下,先前版本中下面的3个目录被删除合并(参考tomcat5.0.28的结构):
common(含lib,classes,endorsed三个目录)
share(含lib和classes两个目录)
server(含lib,classes,webapps三个目录)
此外,examples增加了
启动运行tomcat
安装的最后一个步骤,可以选择立即启动;
默认情况下,是通过系统的服务进行启动的,可以把启动方式设置为“自动”
命令行启动:
tomcat/bin/tomcat6 或者tomcat/bin/tomcat6 //TS//tomcat6(注意大写!下同) 二者是等价的。
其他的参数还有:
tomcat/bin/tomcat6 //RS//tomcat6 ---启动tomcat6服务
tomcat/bin/tomcat6 //US//tomcat6 ---更新tomcat6服务参数
tomcat/bin/tomcat6 //IS//tomcat6 ---安装tomcat6服务
tomcat/bin/tomcat6 //DS//tomcat6 ---删除tomcat6服务
安装后的bin目录共有一下几个文件:
bootstrap.jar
tomcat-juli.jar
tomcat6.exe
tomcat6w.exe
其中tomcat6w.exe是监控tomcat运行的,可以直接运行,或者缩小到屏幕右下角成为一个小图标。
直接运行tomcat6w.exe或者“tomcat6w //ES//” 都可以进入监控配置窗口;
或者运行“tomcat6w //MS//”把它缩小到右下角。
web访问测试
启动后,可以通过浏览器进行访问,测试运行是否正常。
用IE或者Firefox等浏览器,输入地址:
http://localhost:8080/ --如果安装时修改了端口,请把8080用修改后的值替换。
如果能够正常浏览到tomcat欢迎信息,就是正确了,否则就要检查安装是否正确、防火墙的设置等。
经常遇到的一个问题是端口冲突,最常见的就是80端口被占用,导致服务无法正常启动。如果通过tomcat6 //TS//tomcat6来启动,马上就能够发现提示信息。修改一下tomcat6\conf\server.xml中的端口就能够解决。
通常使用80端口的有:
1. IIS
服务器
,因为在windows
服务器
上,很多都安装了IIS,而IIS默认的端口就是80.
2. skype即时聊天工具,skype的可以穿透防火墙的本领,也是通过占用80端口实现的。
查看端口占用的命令:
进入windows命令行,输入:
netstat -an
这个命令返回有4列:protocol协议、local address本机地址、foreign address来访者地址、status状态
浏览本机地址一列,可以看到当前主机对外服务的IP地址、端口都有哪些。
如果一台机器有192.168.1.100和192.168.1.101两个地址,那么:
0.0.0.0:80表示这台机器上所有80端口都被使用
127.0.0.1:80表示127.0.0.1的80被使用,但.100和.101IP地址的80还未使用。
192.168.1.100:80表示.100IP地址的80端口被使用
192.168.1.101:80表示.101
IP地址的80端口被使用
想知道哪个程序使用了某个端口,可以通过天网防火墙或者是卡巴斯基获得。
Tomcat.5.5.16
安装
web
项目时执行的代码主要是
HostConfig
类,其中
deployApps()
执行部署
web
应用的功能;
protected void deployApps() {
File appBase = appBase();
File configBase = configBase();
// Deploy XML descriptors from configBase
deployDescriptors(configBase, configBase.list());
// Deploy WARs, and loop if additional descriptors are found
deployWARs(appBase, appBase.list());
// Deploy expanded folders
deployDirectories(appBase, appBase.list());
}
从上面这段代码,我们可以知道
tomcat
在部署
web
项目是按如下顺序依次部署的;
1.
首先部署
$CATALINA_HOME/conf/Catalina/localhost
目录下面的
.xml
文件;
deployDescriptors(configBase, configBase.list());
(1)
configBase
的值是通过调用
configBase()
获取的,
File file = new File(System.getProperty("catalina.base"), "conf");
Container parent = host.getParent();
if ((parent != null) && (parent instanceof Engine)) {
file = new File(file, parent.getName());
}
file = new File(file, host.getName());
可以看出
configBase
是由四部分内容组成
;
System.getProperty("catalina.base") + “conf” + parent.getName()+host.getName()
parent.getName()
和
host.getName()
是分别取
server.xml
中
<Engine name="Catalina" defaultHost="localhost">
和
<Host name="localhost" appBase="webapps" …
对应的
name
属性值;
由此可以得出
configBase
的值为
$CATALINA_HOME/conf/Catalina/localhost
(2)
按文件名顺序依次读取
configBase
目录下面的
xml
文件部署
web
应用;
第一步,首先获取文件名(不包含
.xml
)作为上下文路径
String nameTmp = files[i].substring(0, files[i].length() - 4);
String contextPath = "/" + nameTmp.replace('#', '/');
第二步,解析
xml
文件,分析
docBase
的值;
注意这里的
docBase
的判断很重要,采用和以前版本完全不同的做法;
if (!docBase.isAbsolute()) {
docBase = new File(appBase(), context.getDocBase());
}
首先判断
docBase
是否为绝对路径,如果不是绝对路径,在改为
$CATALINA_HOME/webapps+docBase
// If external docBase, register .xml as redeploy first
if(!docBase.getCanonicalPath().startsWith(appBase().getAbsolutePath()))
{
//
这个判断很重要,这里是判断如果
docBase
路径是以
$ CATALINA_HOME/webapps+docBase
开头的字符串,则忽略掉了
isExternal = true;
...
if (docBase.getAbsolutePath().toLowerCase().endsWith(".war")) {
isWar = true;
}
}
else{
// Ignore specified docBase
context.setDocBase(null);
}
从上面可以看出,
<Context path="/xxxx" docBase="xxxx" .
中
docBase
只有为绝对路径并且该路径不是以
$CATALINA_HOME/webapps
开头,才会生效;否则就忽略掉了;
2.
接下来部署
$CATALINA_HOME/webapps/
目录下以。
War
结尾的文件
deployWARs(appBase, appBase.list());
(1)
首先仍是把文件名
(
不用
.war)
作为其应用的上下文路径
;
if (files[i].toLowerCase().endsWith(".war")) {
// Calculate the context path and make sure it is unique
String contextPath = "/" + files[i];
int period = contextPath.lastIndexOf(".");
(2)
接下来判断以该上下文路径
contextPath
是否已经装载过了,如果是则直接退出;
if (deploymentExists(contextPath))
return;
(
3
)
继续判断以该上下文命名的部署文件是否存在,如
war
文件为
AAA.war,
则判断在
$CATALINA_HOME/conf/Catalina/localhost/AAA.xml
文件是否存在,如果不存在继续执行以下操作;
File xml = new File
(configBase, file.substring(0, file.lastIndexOf(".")) + ".xml");
if (deployXML && !xml.exists()) {
entry = jar.getJarEntry(Constants.ApplicationContextXml);
configBase.mkdirs();
。。。
先从
wart
文件中读取
META-INF/context.xml
文件,然后把它
copy
到
$CATALINA_HOME/conf/Catalina/localhost/AAA.xml,
注意
war
文件部署文件必须为
context.xml
,且在
META-INF
目录下;
(
4
)接下来操作和上面类似,部署该
web
应用;
3.
最后是以
$CATALINA_HOME/webapps
目录下的文件夹为目标按文件夹名顺序进行部署;
deployDirectories(appBase, appBase.list());
(1)
同样先把该文件夹名作为上下文路径进行部署;
File dir = new File(appBase, files[i]);
if (dir.isDirectory()) {
// Calculate the context path and make sure it is unique
String contextPath = "/" + files[i];
(2)
接下来的步骤就基本上是一样了,首先判断该上下文路径是否已经部署过,如果是则直接退出,否则和上面一样,读取
META-INF/context.xml
文件进行部署;
注意这里和上面的
war
文件部署稍微有点不同,就是它不会
copy
部署文件
context.xml
文件到
$CATALINA_HOME/conf/Catalina/localhost
中去;
TOMCAT部署项目有3种方法:1、直接把项目web文件夹放在webapps里2、修改conf里server.xml文件,添加一个Context,
<Context path="/projectName" reloadable="true" docBase="工程所在路径\web" workdir="工程所在路径\work"></Context>3、在Catalina/localhost目录里,新增一个xml文件,添加一个Context内容,指向项目的目录。<Context path="/目录名" docBase="e:\example" debug="0" reloadable="true" />
优先级别为:3>2>1
第3个方法有个优点,可以定义别名。服务器端运行的项目名称为path,外部访问的URL则使用XML的文件名。这个方法很方便的隐藏了项目的名称,对一些项目名称被固定不能更换,但外部访问时又想换个路径,非常有效。
第2、3还有优点,可以定义一些个性配置,如数据源的配置等
posted on 2008-06-23 11:13
pasha
阅读(1902)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
导航
BlogJava
首页
新随笔
联系
聚合
管理
统计
随笔 - 7
文章 - 10
评论 - 1
引用 - 0
常用链接
我的随笔
我的文章
我的评论
我的参与
最新评论
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔分类
ajax
(rss)
database
(rss)
struts2(1)
(rss)
tomcat(2)
(rss)
其他(2)
(rss)
随笔档案
2008年10月 (2)
2008年9月 (3)
2008年6月 (1)
2008年4月 (1)
文章分类
其它
(rss)
文章档案
2008年9月 (4)
2008年8月 (2)
2008年7月 (1)
2008年6月 (2)
最常用和实用的CSS技巧
最新随笔
1. Ubuntu Linux与Windows系统多启动的配置(Webmaster )
2. Bcdedit命令详解
3. JQuery Ajax 方法说明
4. EditPlus技巧(Liangjhrn)
5. 转载:《关于JSP页面中的pageEncoding和contentType两种属性的区别》
6. tomcat中的context.xml元素详解
7. Tomcat6数据源配置(转)
8. tomcat 6.18 设置
9. struts2UI td 的问题
10. 几款MYSQL管理工具
搜索
最新评论
1. re: SESSION
啊!!原来是这样啊 终于明白了 谢了!!
--ndj
阅读排行榜
1. Bcdedit命令详解(1449)
2. tomcat 6.18 设置(1143)
3. SSO (转)(821)
4. Tomcat6数据源配置(转)(608)
5. SESSION(404)
评论排行榜
1. SESSION(1)
2. SSO (转)(0)
3. Ubuntu Linux与Windows系统多启动的配置(Webmaster )(0)
4. Bcdedit命令详解(0)
5. Tomcat6数据源配置(转)(0)
Powered by:
BlogJava
Copyright © pasha