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表示.101IP地址的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)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

最常用和实用的CSS技巧

最新随笔

搜索

最新评论

  • 1. re: SESSION
  • 啊!!原来是这样啊 终于明白了 谢了!!
  • --ndj

阅读排行榜

评论排行榜