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

3
我正在尝试使用Eclipse将一个RESTful Web服务部署到Tomcat 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相同的计算机上? - MadConan
不,它在另一台机器上。我可以使用Tomcat Manager部署Web服务,但我想使用HTTP PUT请求从Java代码中完成它。 - bloox
2个回答

2
“...它在另一台机器上。我可以使用Tomcat管理器来部署Web服务,但我想使用HTTP PUT请求从Java代码中执行它。”
为了实现这一点,部署文件夹需要从HTTP服务器或Web应用程序中访问。出于安全原因,这通常是一个坏主意。
仍然可以通过调用任何许多文件传输实用程序(例如ftp、scp、网络文件系统等)以编程方式使用Java(或其他语言)进行操作。
请注意,在将构件(例如war文件)复制到Tomcat主机后,可以通过部署管理器url远程告诉Tomcat进行部署。根据documentation
在这个例子中,位于Tomcat服务器上的目录 /path/to/foo 中的Web应用程序作为名为/footoo的Web应用程序上下文部署。
http://localhost:8080/manager/text/deploy?path=/footoo&war=file:/path/to/foo
在这个例子中,".war"文件/path/to/bar.war在Tomcat服务器上被部署为名为/bar的Web应用程序上下文。请注意,没有路径参数,因此上下文路径默认为Web应用程序归档文件的名称,不包括".war"扩展名。
http://localhost:8080/manager/text/deploy?war=jar:file:/path/to/bar.war!/
您的代码可以通过scp(或其他方式)复制工件,如果成功,则使用适当的参数调用管理器URL。一个单一的代码运行中的两个步骤过程。

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();

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接