• 开发中如何克服tomcat热部署弱的缺陷?看这篇文章就够了


    一. 前言

    很多学员在开发Java Web项目时,所选择的Web应用服务器多是tomcat,这主要是因为tomcat开源、易于学习。但在引入Maven进行管理项目后,很多学员在开发时依然会延用原有的开发习惯,也就是会继续给Web项目安装使用本地的tomcat,并配置发布环境。

    但在实际地开发过程中,使用独立的Tomcat服务器,往往会比较浪费时间,因为tomcat的热部署能力较差。学员在服务端修改了代码发布运行后,却依然还是执行原有的内容,开发效率较为低下。

    基于此,杨哥推荐大家在使用Maven开发Web项目时,直接使用Tomcat插件即可,而不用再使用独立的Tomcat软件了。这样做有以下好处:

    配置简单(相对配置tomcat服务器环境而言);每次都是新发布,确保后端的修改能及时在应用中体现;远程热部署能力强(克服tomcat热部署弱的缺陷)。

    二. tomcat-maven插件介绍

    2.1 类似插件及版本区别

    Maven Tomcat插件现在主要有两个版本,tomcat-maven-plugin和tomcat7-maven-plugin,两者使用方式基本相同。

    tomcat-maven-plugin 插件官网:http://mojo.codehaus.org/tomcat-maven-plugin/plugin-info.html。

    tomcat7-maven-plugin 插件官网:http://tomcat.apache.org/maven-plugin.html。

    tomcat-maven-plugin插件是老版本,现在已停用,命令是mvn tomcat:run,且该插件应该不支持tomcat7

    在Apache内部,这个插件现在也有两个版本,分别是tomcat6和tomcat7。

    本文会围绕tomcat7插件展开讨论。

    2.2 tomcat7-maven-plugs插件下载

    如果初次使用maven的tomcat插件做JavaWeb开发,那么maven本地仓库中应该是没有tomcat插件依赖包的,所以此时需要到maven中央仓库中先下载tomcat插件的依赖。

    我们可以访问:https://mvnrepository.com

    去下载,直接搜索tomcat7-maven-plugs。具体步骤如下图所示:

    点击进入,选择最高版本2.2。

    选择并复制依赖包文本,加入pom.xml依赖区域,更新项目的maven依赖,会下载tomcat7-maven-plugs依赖到本地仓库。

    三. tomcat插件本地运行

    在pom.xml配置文件的plugins节点添加如下配置

    1. <plugin>   
    2.    <groupId>org.apache.tomcat.maven</groupId>   
    3.    <artifactId>tomcat7-maven-plugin</artifactId>   
    4.    <version>2.2</version>   
    5.    <configuration>      
    6.   
    7.     
    8.    <port>8080</port>      
    9.     
    10.                  
    11.    <path>/</path>  
    12.     
    13.    
    14.    <uriEncoding>UTF-8</uriEncoding>     
    15.   </configuration>
    16. </plugin>

    这里需要注意:在使用maven开发时,由于使用tomcat插件,在编译期是没有Servlet容器环境的,因此,需要加载Servlet包依赖。

    更新maven依赖后,在plugins\tomcat7\双击tomcat7:run 指令运行项目会如下面的图片所示。在pom.xml配置文件的dependencies节点添加servlet包依赖,如下:

    1. <dependency>
    2.     <groupId>javax.servlet</groupId>
    3.     <artifactId>javax.servlet-api</artifactId>
    4.     <version>3.1.0</version>
    5.     <scope>provided</scope>
    6. </dependency>

    这个依赖包必须添加scope为provided。意思是这个servlet-api的依赖包只在编译和测试时使用,而不在运行时使用。这是因为Web容器本身就自带servlet容器,如果不设置scope选项,会在tomcat启动时起冲突,会抛出如下异常。

    Idea运行调试:

    内嵌tomcat的方式启动项目,直接命令操作即可;

    但是如果想要调试,就必须使用编辑器的maven插件。比如在idea中,我们直接在Run/Debug Configuration->Maven->Commandline中输入 clean tomcat7:run 即可。

    上述方式调试,页面修改可以直接显示,后台代码可以使用Jrebel热部署。

    四. 远程部署

    4.1 修改Tomcat中的/conf/tomcat-users.xml配置

    可以追加如下内容,目的是开启tomcat7远程命令操作模式。

    1.  <role rolename="manager-gui"/>
    2.  <role rolename="manager-script"/>
    3.  <user username="admin" password="1234" roles="manager-gui,manager-script"/>

    注意tomcat一定要重启才会生效。

    4.2 项目中的pom.xml配置:

    1. <plugin>
    2.     <groupId>org.apache.tomcat.maven</groupId>
    3.     <artifactId>tomcat7-maven-plugin</artifactId>
    4.     <version>2.2</version>
    5.     
    6.     <configuration>
    7.         
    8.         <url>http://127.0.0.1:8080/manager/text</url>
    9.         
    10.         <username>admin</username>
    11.         
    12.         <password>1234</password>
    13.         
    14.         <path>/${project.artifactId}</path>
    15.         <uriEncoding>UTF-8</uriEncoding>
    16.     </configuration>
    17. </plugin>
    url:打包好的包通过这个url上传到tomcat处。
    path:这里如果设置/,默认就是ROOT,最好设置为项目名称,这样可以在一个端口下部署多个项目使用tomcat7-deploy发布web项目,使用tomcat7-undeploy撤销发布实现热部署。

    五. Tomcat插件命令说明

    这里杨哥把开发中常见的指令给大家解释说明一下:

    tomcat7:deploy--部署web war包;
    tomcat7:redeploy--重新部署web war包;
    tomcat7:undeploy--停止该项目运行,并删除部署的war包;
    tomcat7:run--启动嵌入式tomcat ,并运行当前项目;
    tomcat7:exec-war--创建一个可执行的jar文件,允许使用java -jar mywebapp.jar 运行web项目;
    tomcat7:help--在tomcat7-maven-plugin显示帮助信息。

    六. 后记

    最后,杨哥要再强调一点:

    在实际的项目开发中,特别是分布式项目,往往有N多个子项目需要同时启动测试。这一切都靠本地安装的tomcat是远远不够的,而且繁琐,这就需要用到tomca插件。这样多个项目引用tomcat插件,配置不同的端口,就可以同时启动N个项目了。

    我们熟悉tomcat插件的开发模式后,对后期使用SpringBoot开发,进行分布式、微服务项目开发时将会更加熟练,之后的重点不再是开发环境,而是应用架构。

    扫码开启学习

     大量Java资源免费获取

     

  • 相关阅读:
    DOM对象和jquery对象
    C++入门刷题练习(附代码、思路以及相关拓展)
    设计模式学习(十):门面模式
    系统架构师
    一维数组和二维数组的使用(char类型)
    基于协同滤波的个性化推荐算法matlab仿真
    [TQLCTF 2022]simple_bypass
    Centos7 安装 Mysql
    25种ACM模式输入输出模板,支持C++、Java、Python、Go、JS版本
    Mac OS 搭建C++开发环境【已解决】
  • 原文地址:https://blog.csdn.net/finally_vince/article/details/127630052