二. 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 文件
添加的内容,与上面的一致。
输入网址: http://localhost:8027/ (老蝴蝶的端口号是8027)
会出现 Tomcat 的启动页面, 点击 Manager App 按钮
填写刚才 的用户名和密码 tomcatReploy, tomcatReploy
出现这个页面,
即说明配置 用户成功了
如果是本地热步署,就修改本地的 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 这个项目的。
1 .现在,Tomcat服务器还没有启动,
在Maven 项目, 选中 ServletMaven , 进行运行 ,输入命令 tomcat7:deploy (第一次步署,是tomcat7:deploy, 再次步署就是 tomcat7:redeploy)
控制台打印错误
具体信息是:
[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 启动是正确的。
在Tomcat 安装目录下 webapps 也出现了 ServletMaven 项目和及对应的 .war包
说明安装到 Tomcat上了。
访问路径: http://localhost:8027/ServletMaven/hello
展示了回显信息
这个时候,重新修改 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
控制台没有报错, 前台刷新页面 :
重新步署成功, 就不需要再 关闭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 时
说明是不行的。 这也就是为什么说 远程步署,而不是本地步署的原因。 如果url 是远程的话,将不会有这个问题。
如果将端口去掉, 保留 path, 那么是可以的, 这个时候,生成的名称是 servlet
输入本地的: http://localhost:8027/servlet/hello 是可以的
输入Maven 的( 命令是: tomcat7:run) http://localhost:8080/servlet/hello 是可以的
也就是说, 本地的热步署时,可以添加 path, 不要指定 port
谢谢!!!