2015-06-29 97 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(); 

}