• 【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、配置tomcatconfserver.xml文件

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

    <Context debug="0" docBase="D:demo1web" 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%confCatalinalocalhost中添加一个XML文件,

    如:demo1.xml,内容如下:

    <?xml version="1.0" encoding="UTF-8"?> 
    <Context docBase="D:demo1web" 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">  

  • 相关阅读:
    Struts2学习笔记《三》
    《Shiro框架》shiro学习中报错解决方法
    android
    MAC 设置环境变量path的几种方法
    利用ant脚本 自动构建svn增量/全量 系统程序升级包
    Jenkins2 插件 Pipeline+BlueOcean 实现持续交付的初次演练
    Jenkins2 实现持续交付初次演练(MultiJob,Pipeline,Blue Ocean)
    jenkins2 -pipeline 常用groovy脚本
    jenkins2 pipeline介绍
    scala学习(1)----map和flatMap的区别
  • 原文地址:https://www.cnblogs.com/mind18/p/14668109.html
Copyright © 2020-2023  润新知