简体   繁体   English

以编程方式在tomcat上部署Web服务

[英]Deploy web service programmatically on tomcat

I'm trying to make a service that would deploy WAR file on tomcat server. 我正在尝试提供一项将在雄猫服务器上部署WAR文件的服务。 The class takes input as the path of WAR file and automatically deploys it to the tomcat server once this class in run following is the code. 该类将输入作为WAR文件的路径,并在运行以下代码后将其自动部署到tomcat服务器。 kindly help me with this. 请帮助我。 also I don't want to use SFTP to upload the WAR while but instead use put request to deploy the WAR file on tomcat. 我也不想使用SFTP上传WAR,而是使用put请求将WAR文件部署在tomcat上。 I have seen examples of using FTP or SFTP for the same but that is what I don't require. 我已经看到了使用FTP或SFTP的示例,但这不是我所需要的。 My service would already be hosted on tomcat, it would auto host the WAR file supplied to it. 我的服务已经托管在tomcat上,它将自动托管提供给它的WAR文件。

public class DeployManager {

static CredentialsProvider credsProvider = new BasicCredentialsProvider();;

public static void main(String args[]) throws ClientProtocolException, IOException {
    /*
     * warning only ever AuthScope.ANY while debugging with these settings
     * the tomcat username and pw are added to EVERY request
     */

    credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("tomcat", "s3cret"));
    deploy();
    // undeploy();
}

private static void deploy() throws ClientProtocolException, IOException {
    String url = "http://localhost:8080/manager/text/deploy?path=C:/Users/Jainesh_Trivedi/Desktop/WAR/AutohostDemo1_1145.war";
    File file = new File("C:\\Users\\Jainesh_Trivedi\\Desktop\\WAR\\AutohostDemo1_1145.war");

    HttpPut req = new HttpPut(url);
    MultipartEntityBuilder meb = MultipartEntityBuilder.create();
    meb.addTextBody("Sample", "C:\\Users\\Jainesh_Trivedi\\Desktop\\WAR\\AutohostDemo1_1145.war");

    // "application/octect-stream"
    meb.addBinaryBody("attachment", file, ContentType.APPLICATION_OCTET_STREAM, file.getName());

    req.setEntity(meb.build());
    String response = executeRequest(req, credsProvider);

    System.out.println("Response : " + response);
}

public static void undeploy() throws ClientProtocolException, IOException {
    String url = "http://localhost:8080/manager/text/undeploy?path=/deployMe";
    HttpGet req = new HttpGet(url);
    String response = executeRequest(req, credsProvider);
    System.out.println("Response : " + response);
}

private static String executeRequest(HttpRequestBase requestBase, CredentialsProvider credsProvider)
        throws ClientProtocolException, IOException {
    CloseableHttpClient client = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
    InputStream responseStream = null;
    String res = null;
    HttpResponse response = client.execute(requestBase);
    HttpEntity responseEntity = response.getEntity();
    responseStream = responseEntity.getContent();

    BufferedReader br = new BufferedReader(new InputStreamReader(responseStream));
    StringBuilder sb = new StringBuilder();
    String line;
    while ((line = br.readLine()) != null) {
        sb.append(line);
        sb.append(System.getProperty("line.separator"));
    }
    br.close();
    res = sb.toString();

    return res;
}
}

Error is : 错误是:

    INFO: I/O exception (java.net.SocketException) caught when processing request: Connection reset by peer: socket write error
Nov 24, 2015 10:39:23 AM org.apache.http.impl.execchain.RetryExec execute
INFO: Retrying request
Exception in thread "main" java.net.SocketException: Connection reset by peer: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
    at java.net.SocketOutputStream.write(Unknown Source)
    at org.apache.http.impl.io.SessionOutputBufferImpl.streamWrite(SessionOutputBufferImpl.java:117)
    at org.apache.http.impl.io.SessionOutputBufferImpl.flushBuffer(SessionOutputBufferImpl.java:129)
    at org.apache.http.impl.io.SessionOutputBufferImpl.write(SessionOutputBufferImpl.java:158)
    at org.apache.http.impl.io.ContentLengthOutputStream.write(ContentLengthOutputStream.java:114)
    at org.apache.http.entity.mime.content.FileBody.writeTo(FileBody.java:120)
    at org.apache.http.entity.mime.AbstractMultipartForm.doWriteTo(AbstractMultipartForm.java:150)
    at org.apache.http.entity.mime.AbstractMultipartForm.writeTo(AbstractMultipartForm.java:173)
    at org.apache.http.entity.mime.MultipartFormEntity.writeTo(MultipartFormEntity.java:97)
    at org.apache.http.impl.DefaultBHttpClientConnection.sendRequestEntity(DefaultBHttpClientConnection.java:156)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.http.impl.conn.CPoolProxy.invoke(CPoolProxy.java:138)
    at com.sun.proxy.$Proxy0.sendRequestEntity(Unknown Source)
    at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:237)
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:122)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:254)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:177)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:77)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:95)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
    at com.autohost.java.DeployManager.executeRequest(DeployManager.java:68)
    at com.autohost.java.DeployManager.deploy(DeployManager.java:51)
    at com.autohost.java.DeployManager.main(DeployManager.java:35)

如果我正确理解了您的问题,则您正在尝试重塑tomcat管理器

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM