Maven的pom.xml文件配置,热步署(九)下

二. Maven的热步署


我们在用 Tomcat步署工程的时候,需要先将Tomcat 关闭,然后将打包好的 .war工程放置到 Tomcat的webapp下, 再重新启动 Tomcat, 在将war项目放置到tomcat的这段时间内,是无法访问该项目的,会报404的错误。


而 Maven的热步署, 可以很方便的解决这一点, 它可以在 Tomcat的运行期间,不需要将Tomcat关闭,重新启动,就可以直接更新项目,这就是 Maven的热步署。 Maven的步署,可以远程步署,也可以本地步署,两者是一样的。 Maven在步署的时候,需要获取Tomcat的权限,经过Tomcat同意之后,才可以进行步署,而让Tomcat同意,就像Mysql数据库一样,给其正确的用户名和密码就可以了。 (当然,用户还需要具有某些角色)


二.一 在Tomcat 目录下 conf/tomcat-users.xml 下添加角色


如果不是采用Eclipse开发, 需要在Tomcat的安装目录下的conf/tomcat-users.xml 文件里面, 添加角色用户


<!--Maven热步署的权限-->
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="tomcatReploy" password="tomcatReploy" roles="manager-gui, manager-script"/>


tomcat默认添加的那些权限,可以给其放开,也可以不管。 最好是不管。 (密码已经改成tomcat了)


<role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>


如果采用的是Eclipse 开发, 需要改变 Servers 项目下面的 tomcat-users.xml 文件


Maven的pom.xml文件配置,热步署(九)下


添加的内容,与上面的一致。


输入网址: http://localhost:8027/    (老蝴蝶的端口号是8027)


会出现 Tomcat 的启动页面, 点击 Manager App 按钮


Maven的pom.xml文件配置,热步署(九)下


填写刚才 的用户名和密码 tomcatReploy, tomcatReploy

出现这个页面,


Maven的pom.xml文件配置,热步署(九)下


即说明配置 用户成功了


如果是本地热步署,就修改本地的 tomcat配置文件, 如果是远程步署,就修改远程服务器上的tomcat的配置文件。


二.二 Maven项目的 pom.xml 文件中 tomcat插件配置


我们仍然采用以前的 ServletMaven 项目,即 Maven创建一个Servlet项目(五) 的项目。


在 pom.xml 的tomcat插件中,进行配置


<plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <!--tomcat的插件名, tomcat7-maven-plugin, 用的是tomcat7版本 -->
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
            <!--  <port>8026</port>-->  <!--tomcat的端口号 -->
            <!--<path>/servlet</path>--> <!--tomcat的项目名 -->
            <uriEncoding>UTF-8</uriEncoding> <!-- 防止get 提交时乱码 -->
            <username>tomcatReploy</username>
            <password>tomcatReploy</password>
            <url>http://localhost:8027/manager/text</url>
        </configuration>
</plugin>


多添加一个 username,password,和url 的节点编号, 其中 url 前面部分是 网址, 本地的话就是http://localhost:8027/


如果是远程的话, 就是 远程服务器的ip+端口号, /manager/text 是不能改变 的。


我们将原先的 port 和path 先注释掉。


二.三 测试运行


在本地的 Tomcat 目录下,目前是没有 ServletMaven 这个项目的。


Maven的pom.xml文件配置,热步署(九)下


1 .现在,Tomcat服务器还没有启动,


在Maven 项目, 选中 ServletMaven , 进行运行 ,输入命令 tomcat7:deploy (第一次步署,是tomcat7:deploy, 再次步署就是 tomcat7:redeploy)


Maven的pom.xml文件配置,热步署(九)下


控制台打印错误


Maven的pom.xml文件配置,热步署(九)下


具体信息是:


[ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:deploy (default-cli) on project ServletMaven: Cannot invoke Tomcat manager: Connection refused: connect -> [Help 1]


说 Tomcat 未连接, 先要启动Tomcat


2 .在 Tomcat安装路径/bin/startup.bat 命令,启动服务器后,

再次执行刚才的命令: tomcat&:deploy

控制台打印输出:


Maven的pom.xml文件配置,热步署(九)下


Maven 启动是正确的。


在Tomcat 安装目录下 webapps 也出现了 ServletMaven 项目和及对应的 .war包


Maven的pom.xml文件配置,热步署(九)下


说明安装到 Tomcat上了。


访问路径: http://localhost:8027/ServletMaven/hello

展示了回显信息


Maven的pom.xml文件配置,热步署(九)下


这个时候,重新修改 HelloServlet.java 的内容

将回显信息改成


@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String message="你好啊,两个蝴蝶飞";
        req.setAttribute("message",message);
        req.getRequestDispatcher("/index.jsp").forward(req,resp);
    }


这个时候,重新运行 ServletMaven 项目,选择 Maven build … 输入命令: clean tomcat7:redeploy


Maven的pom.xml文件配置,热步署(九)下


控制台没有报错, 前台刷新页面 :


Maven的pom.xml文件配置,热步署(九)下

重新步署成功, 就不需要再 关闭Tomcat, 重新放置到Tomcat, 再运行Tomcat了。


二.四 将以前的 port和 path 重新添加


<plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <!--tomcat的插件名, tomcat7-maven-plugin, 用的是tomcat7版本 -->
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8026</port>  <!--tomcat的端口号 -->
                    <path>/servlet</path> <!--tomcat的项目名 -->
                    <uriEncoding>UTF-8</uriEncoding> <!-- 防止get 提交时乱码 -->
                    <username>tomcatReploy</username>
                    <password>tomcatReploy</password>
                    <url>http://localhost:8027/manager/text</url>
                </configuration>
            </plugin>


这个时候,再 重新运行 clean tomcat7:redeploy 命令


控制台也没有报错


Tomcat的方式运行: http://localhost:8027/ServletMaven/hello


可以显示


Maven 方式的运行 (命令是 tomcat7:redeploy): http://localhost:8026/servlet/hello


是错误的。 说连接被重置


将输入的命令改成 clean tomcat7:run 时


Maven的pom.xml文件配置,热步署(九)下


说明是不行的。 这也就是为什么说 远程步署,而不是本地步署的原因。 如果url 是远程的话,将不会有这个问题。


如果将端口去掉, 保留 path, 那么是可以的, 这个时候,生成的名称是 servlet


Maven的pom.xml文件配置,热步署(九)下


输入本地的: http://localhost:8027/servlet/hello 是可以的


输入Maven 的( 命令是: tomcat7:run) http://localhost:8080/servlet/hello 是可以的


也就是说, 本地的热步署时,可以添加 path, 不要指定 port


谢谢!!!


上一篇:从java.lang.Runtime看单例懒汉饿汉模式的选择


下一篇:java中用enum实现单例模式(三)