2015-06-29 98 views
3

我试图将 web服务部署到Tomcat 8Eclipse的web服务器。使用java代码将war文件远程部署到Tomcat

我尝试使用这个职位的第二个答案的代码使用HttpClientTomcat: 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但我也收到一个错误。

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

+0

Tomcat是否安装在与Eclipse相同的机器上? – MadConan

+0

不,它在不同的机器上。我可以使用Tomcat管理器来部署Web服务,但我想从具有http PUT请求的java代码执行此操作。 – bloox

回答

2

...它是在不同的机器。我可以使用Tomcat管理器来部署Web服务,但我想从具有http PUT请求的java代码执行此操作。

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

可以通过调用任何的许多公用事业进行文件传输与Java(或其他语言)仍然这样做编程方式:FTP,SCP,网络文件系统等

注意,您必须复制的假象后(例如war文件)添加到Tomcat主机,然后您可以通过部署管理器url通知Tomcat远程部署它。从documentation

在这个例子中位于目录/路径的Web应用程序/到Tomcat服务器上/ foo的部署为名为/ footoo Web应用程序上下文。

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

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

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

你的代码可以通过scp复制的假象(或其他),如果成功的呼叫管理器URL使用相应的参数。单个代码运行中的两步过程。

1

非常感谢您的回答!有用!我用sftp上传文件夹中的webapps文件夹中的Tomcat服务器。由于在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(); 

}