我正在尝试将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但我也收到错误。
可能是什么原因?还有另外一种方法吗?谢谢。
答案 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();
}