【问题标题】:Remotely deploy war file to Tomcat using java code使用java代码远程部署war文件到Tomcat
【发布时间】:2015-09-16 03:01:36
【问题描述】:

我正在尝试将RESTful Web 服务部署到具有来自EclipseTomcat 8 的Web 服务器。

我尝试使用 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,但我也收到错误消息。

可能是什么原因?还有其他方法吗?谢谢。

【问题讨论】:

  • Tomcat 是否与 Eclipse 安装在同一台机器上?
  • 不,它在不同的机器上。我可以使用 Tomcat Manager 来部署 Web 服务,但我想通过带有 http PUT 请求的 java 代码来实现。

标签: java tomcat deployment


【解决方案1】:

...它在另一台机器上。我可以使用 Tomcat Manager 来部署 Web 服务,但我想通过带有 http PUT 请求的 java 代码来实现。

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

您仍然可以使用 Java(或其他语言)通过调用许多文件传输实用程序中的任何一个来以编程方式完成此操作:ftp、scp、网络文件系统等。

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    非常感谢您的回答!有用!我使用 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();
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      相关资源
      最近更新 更多