【Tomcat】web应用的部署以及发布

一、web项目文件的目录结构

在tomcat中所有的应用都是放置在CATALINA_HOME/webapps下。由于Servlet2.2之后的版本规范规定,tomcat中应用的目录结构需要满足固定的格式,这样便于规范一致性。

放置在webapps下的文件通常是两种格式:一种压缩好的项目文件,比如war包!一种是正常的文件夹。如果是war包项目文件,tomcat会在启动后自动的把它解压缩到当前目录,变成可访问的文件夹。

项目文件的目录结构如下:

/apps
    |------/WEB-INF
            |------/classes 编译的字节码文件
            |------/lib 需要的类库,jar包
            ------web.xml
    |------/META-INF
            ------context.xml
    ------普通前端页面,jsp等等

1. web.xml 文件:

这个文件比较重要,也叫做部署描述符,用于配置web应用的相关信息。比较常用的是监听器,过滤器,servlet,session管理,初始化参数等。

需要注意的是:注意相同项的配置顺序,tomcat会按照配置顺序进行执行或者加载。需要注意的地方比如过滤器,还有一些页面的加载。 

2. classes文件夹:

放置编译出的.class文件,比如你定义的某个包:com.test.hello.java 经过tomcat的启动发布后,就会在响应的应用下的classes文件夹下找到com/test/hello.class文件。类似的servlet, bean, 普通的java类都会编译到此处。

3. lib 文件夹:

放置项目应用的jar包。比如使用了SSH,在项目引用了jar包,最后都会放在这里。这个文件夹下的jar文件是不会编译到classes文件夹下的。详细信息参考tomcat的类加载机制。

这个文件夹下的jar包是属于应用自己使用的。tomcat根目录下还有一个lib文件夹,这里面存放着基本的servlet和jsp需要的jar包。

有时在IDE里面开发时,会莫名其妙的报一些错误。但是这些错误并不影响最后的发布。这是因为在开发时,IDE没有找到对应的jar包,这些jar包存放在tomcat中。当应用发布时,会自动的寻找该文件夹,也就不会报错了。解决办法就是在开发时,把tomcat的lib文件夹加入到IDE的编译环境中。

4. context.xml:

常用于配置一些运行时改变的参数,这样tomcat可以定期扫描该文件,进行相应的操作。

为什么要有这个文件呢?因为其他的配置文件如server.xml都是tomcat在启动时读取的信息,运行时是不能改变的。因此把一些动态的信息在这里设定就可以运行时期动态加载了。常用的就是配置数据源JNDI,其中详细的内容会在后文介绍配置文件的时候讲解。

二、web应用的部署、发布和测试

1、部署:其实就是把开发完的代码放在tomcat中。

  • 记事本开发,就直接把文件拷贝到webapps下。

  • IDE开发,则需要把tomcat集成到IDE中,并配置代码的映射路径。在IDE中直接右键tomcat--->Add and Remove...,如下图:

如果发现不能把左边的项目添加到右边,并提示错误。则检查servelt的版本。通常是由于servlet与tomcat版本不一致导致,如tomcat6 仅支持2.5之前的servlet版本,以及1.5之后的JDK版本。

2、发布:就是把应用中的代码进行编译和组织,使用户可以直接访问。tomcat负责把代码进行编译组织,最后直接把一个可访问的应用摆在用户面前。发布方法有下面两种:

  • 直接在tomcat中运行:运行startup.bat或者startup.sh文件。运行方法参考:tomcat启动

  • 在IDE中启动:在server视图中右键tomcat选择start或者直接点击右上角的DEBUG或者START图标

3、测试:执行发布后,就可以登录浏览器,输入:http://localhost:8080/[webapp名字] 访问应用了。

其中的端口8080,可以通过server.xml或者IDE中配置界面修改,server.xml文档中也给出了线程池和SSL的配置方式。也可以在IDE中直接双击server视图中的tomcat选项,在弹出的配置界面,修改端口号,记得保存。

三、Tomcat部署详解

部署就是把web应用开发时的文件拷贝到tomcat容器中,并对其进行编译等操作,使用户可以访问到该应用。

1. 热部署和冷部署

冷部署:把WEB部署到Tomcat下,一般是把war包放到Tomcat的webapp目录下,然后启动Tomcat,这样就完成了项目的部署。但在这种方式下,Tomcat需要关闭。当一个Tomcat下部署了多个项目时,如果有其他项目正在运行,显然不能通过冷部署的方式。

热部署是指在你修改项目BUG的时候对JSP或JAVA类进行了修改在不重启WEB服务器前提下能让修改生效。不包括对配置文件的修改。

部署项目的三种方式:

1、直接把项目web文件夹放在webapps目录下。

/helle:项目的访问路径>虚拟目录

简化部署:将项目打成一个war包,再将war包拷贝到webapps目录,tomcat会自动解压war包。

2、配置tomcat\conf\server.xml文件

<host>标签体中配置Context标签,如<Context docBase="D:\hello" path="hehe" />,或者如下:

<Context debug="0" docBase="D:\demo1\web" path="/demo1" privileged="true" reloadable="true"/>
  • debug属性与这个Engine关联的Logger记录的调试信息的详细程度。数字越大,输出越详细。如果没有指定,缺省为0。 也就是程序异常时写入日志文件里的详细程度。

  • docBase:项目路径,可以使用绝对路径或相对路径,相对路径是相对于webapps

  • path:访问项目的路径,如:http://127.0.0.1:8080/demo1

  • reloadable:是否自动加载新增或改变的class文件。为true时,这类文件不需要重启tomcat,其他配置文件的修改需要重启tomcat。

3、第三种方式和第二种差不多,但是不是在Server.xml文件中添加Context标签,而是在 %tomcat_home%\conf\Catalina\localhost中添加一个XML文件,

如:demo1.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?> 
<Context docBase="D:\demo1\web" reloadable="true" /> 

这种方式服务器会使用xml文件的名字作为path属性的名字,访问地址为:http://localhost:8080/demo1。如果你硬写个path="demo2"的话,是没有用的,tomcat会告诉你:“我不认得”。

2. 热部署和热加载

Tomcat 各容器组件实现的功能主要有:热部署热加载、类加载机制以及 Servlet 规范的实现。

要在运行的过程中升级 Web 应用,如果你不想重启系统,实现的方式有两种,都跟类加载机制有关:

  • 热加载:实现方式是 Web 容器启动一个后台线程,定期检测类文件的变化,如果有变化,就重新加载类。在这个过程中不会清空 Session ,一般用在开发环境。

  • 热部署:原理类似,也是由后台线程定时检测 Web 应用的变化,但它会重新加载整个 Web 应用。这种方式会清空 Session,比热加载更加干净、彻底,一般用在生产环境。

3. 静态部署和动态部署

参考博客:https://www.cnblogs.com/xing901022/p/4463896.html

在tomcat中有多种部署方式:

  • 静态部署:直接拷贝相应的web展开目录、或者war包。(展开目录:就是tomcat可以直接访问的应用目录,是未经过压缩的。相反的就是war包,是一种经过压缩的web应用文件)。

  • 动态部署:通过tomcat管理器或者其他工具(如TCD,tomcat client deployer)执行部署。

如果是使用静态部署,或者使用tomcat管理器进行部署是不需要安装任何东西的。

但是如果要使用TCD进行部署,那么就需要预先安装JDK和Ant,因为TCD中内置的是Ant的任务构建脚本;然后再下载TCD的部署包。

另外,还需要了解一个概念——上下文,Context。在tomcat中,上下文就是一个web应用。在之前的tomcat版本中,上下文信息是配置在server.xml中的,现在仍然可以,但是官方并不推荐这种做法。

上下文路径主要在:1 CATALINA_HOME/conf/容器名字/主机名字/应用名字.xml2 CATALINA_HOME/webapps/应用名字/META-INF/context.xml

其中路径1中:容器名字(enginename)通常为Catalina、主机名字为localhost。相关内容可以查看server.xml中:<Engine defaultHost="localhost name="Catalina">  

posted @ 2021-04-16 17:40  --D  阅读(731)  评论(0编辑  收藏  举报