使用java代码将war文件远程部署到Tomcat

时间:2015-06-29 15:09:23

标签: java tomcat deployment

我正在尝试将RESTful网络服务部署到Tomcat 8来自Eclipse的网络服务器。

我尝试使用 HttpClient 使用此帖子第二个答案中的代码:Tomcat: remote programmatic deploy?但是我得到了这个例外 java.net.SocketException: Connection reset by peer: socket write error.

我还尝试使用 HttpURLConnection 使用此帖子的第一个答案中的代码:how to upload, download file from tomcat server with username,password in swing但我也收到错误。

可能是什么原因?还有另外一种方法吗?谢谢。

2 个答案:

答案 0 :(得分:2)

  

......它在不同的机器上。我可以使用Tomcat Manager来部署Web服务,但我想从带有http PUT请求的java代码中完成。

为了实现这一点,需要从HTTP服务器或Web应用程序访问部署文件夹。出于安全原因,这通常是个坏主意。

您仍然可以使用Java(或其他语言)以编程方式通过调用任何文件传输实用程序来执行此操作:ftp,scp,网络文件系统等。

请注意,在将工件(例如war文件)复制到Tomcat主机后,您可以告诉Tomcat通过Deployment Manager URL远程部署它。来自documentation

  

在此示例中,位于Tomcat服务器上的目录/ path / to / foo中的Web应用程序被部署为名为/ footoo的Web应用程序上下文。

http://localhost:8080/manager/text/deploy?path=/footoo&war=file:/path/to/foo
     

在这个例子中," .war" Tomcat服务器上的文件/path/to/bar.war被部署为名为/ bar的Web应用程序上下文。请注意,没有路径参数,因此上下文路径默认为没有" .war"的Web应用程序归档文件的名称。扩展

http://localhost:8080/manager/text/deploy?war=jar:file:/path/to/bar.war!/

您的代码可以通过scp(或其他)复制工件,如果成功,则使用适当的参数调用管理器URL。单个代码运行中的两步过程。

答案 1 :(得分:1)

非常感谢您的回答!有用!我使用 sftp 将文件上传到Tomcat服务器的 webapps 文件夹中。因为在 server.xml autodeploy = true 中,我不必执行HTTP PUT请求。这是我的代码,基于此link

String SFTPHOST = "1.2.3.4";
int SFTPPORT = 22;
String SFTPUSER = "root";
String SFTPPASS = "password";
String SFTPWORKINGDIR = "/home/username/apache-tomcat-8.0.23/webapps/";
Session session = null;
Channel channel = null;
ChannelSftp channelSftp = null;
try {
        JSch jsch = new JSch();
        session = jsch.getSession(SFTPUSER, SFTPHOST, SFTPPORT);
        session.setPassword(SFTPPASS);
        java.util.Properties config = new java.util.Properties();
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);
        session.connect();
        channel = session.openChannel("sftp");
        channel.connect();
        channelSftp = (ChannelSftp) channel;
        channelSftp.cd("..");
        channelSftp.cd(SFTPWORKINGDIR);
        File f = new File("path/to/war");
        channelSftp.put(new FileInputStream(f), f.getName());
} catch (Exception ex) {
        ex.printStackTrace();

}