为什么获取请求正在工作,但post不在java servlet中

时间:2015-09-18 11:24:03

标签: java servlets post http-post

我有一个servlet,我从get请求中调用它,它工作正常,但是当我使用此帖子请求调用它时

private static void doPostToMultiPart() throws URISyntaxException,
            ClientProtocolException, IOException {
        HttpClient client = HttpClientBuilder.create().build();
        HttpPost httpPost = new HttpPost(
                "http://localhost:8080/ServletExample1/multipart1");
        HttpResponse response = client.execute(httpPost);
        System.out.println("response code = "
                + response.getStatusLine().getStatusCode());
        String responseString = new BasicResponseHandler()
                .handleResponse(response);
        System.out.println(responseString);
    }

我在handleResponse上遇到了例外情况,即:

Exception in thread "main" org.apache.http.client.HttpResponseException: Not Found
    at org.apache.http.impl.client.AbstractResponseHandler.handleResponse(AbstractResponseHandler.java:69)
    at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:65)
    at com.clients.PostClient1.doPostToMultiPart(PostClient1.java:28)
    at com.clients.PostClient1.main(PostClient1.java:16)

,我打印的状态为404

我有什么不对的请求?

注意

我可以给你servlet代码,它很简单,但我知道因为我可以发出get请求,所以servlet工作正常,问题更可能发生来自我的帖子客户请求。

更新

当我这样做时

httpPost.addHeader("Content-Type", "multipart/related;");

它有效,但当我这样做时:

httpPost.addHeader("Content-Type", MediaType.TEXT_HTML);

我又得到了例外。如果客户端请求错误的内容类型,我想返回自定义消息。请帮忙

2 个答案:

答案 0 :(得分:0)

发布您的servlet和您的web.xml(如果您正在使用它)。 404表示找不到所请求的资源。你错过了doPost吗?

这意味着http://localhost:8080/ServletExample1/multipart1由于某种原因不是有效的POST URL。提出所要求的文件,让我们看看他们说了什么。

答案 1 :(得分:0)

(以此作为长篇评论)

我知道它很奇怪但只是尝试使用此方法发送帖子(适当时更改)

public static String sendPostV2(String data, String url) throws Exception {

    org.apache.commons.httpclient.HttpClient client = new org.apache.commons.httpclient.HttpClient();
    org.apache.commons.httpclient.methods.PostMethod method = new org.apache.commons.httpclient.methods.PostMethod(url);
    if(data!=null){
       method.addParameter("data", data);
    }
    client.executeMethod(method);
    method.releaseConnection();
    try{
        return method.getResponseBodyAsString();
    }catch (Exception e){
        return null;
    }
}

我有一个非常类似的问题,我有两个不同的发送方法,因为一个适用于某个服务器,但不是全部,另一个适用于其他方面,第一个与您的代码非常相似,第二个(上面的代码) )只是发送邮件的另一种方法。