相关疑难解决方法(0)

远程servlet之间的通信

我有两个Web应用程序说App1和App2.我想从App1中的servlet调用App2中的servlet.我正在使用URLConnection.我也能够将参数传递给App2中的servlet,我也能够从servlet接收响应作为字符串.但我想从App2中的servlet发送java对象,并在App1的servlet中接收它们.怎么做到这一点?

java servlets

7
推荐指数
1
解决办法
2510
查看次数

HttpURLConnection不会读取整个响应

我使用HttpURLConnection来做HTTP POST,但我总是得不到完整的响应.我想调试这个问题,但是当我逐步完成它的工作时.我认为这一定是一个时间问题,所以我添加了Thread.sleep,它确实使我的代码工作,但这只是一个临时的解决方法.我想知道为什么会发生这种情况以及如何解决.这是我的代码:

public static InputStream doPOST(String input, String inputMimeType, String url, Map<String, String> httpHeaders, String expectedMimeType) throws MalformedURLException, IOException {

    URL u = new URL(url);
    URLConnection c = u.openConnection();
    InputStream in = null;
    String mediaType = null;
    if (c instanceof HttpURLConnection) {

        //c.setConnectTimeout(1000000);
        //c.setReadTimeout(1000000);

        HttpURLConnection h = (HttpURLConnection)c;
        h.setRequestMethod("POST");
        //h.setChunkedStreamingMode(-1);
        setAccept(h, expectedMimeType);
        h.setRequestProperty("Content-Type", inputMimeType);

        for(String key: httpHeaders.keySet()) {
            h.setRequestProperty(key, httpHeaders.get(key));

            if (logger.isDebugEnabled()) {
                logger.debug("Request property key : " + key + " / value : " + httpHeaders.get(key));
            }

        } …
Run Code Online (Sandbox Code Playgroud)

java httpurlconnection

7
推荐指数
1
解决办法
1万
查看次数

大数据的HttpsURLConnection POST请求在几分钟后抛出IOException

我已经在这个bug上工作了好几天了,无法解决它.

我写了一个HttpsURLConnection客户端来使用POST请求上传大文件(> 1GB).我还使用com.sun.net.httpserver.HttpServer实现了服务器端.由于文件很大,我必须在我的连接上使用:setFixedLengthStreamingMode/setChunkedStreamingMode设置(使用其中的任何一个来复制bug).请注意我也使用HTTPS连接进行上传.

我正在将文件同时上传到多个服务器(每个http客户端的单独线程,连接到不同的服务器).我已经设置了并发上传的限制,所以每次只有X个线程有一个打开的UrlConnection(错误是用X = [1..4]重现的).(其他线程在信号量上等待)

我的问题是这样的:当上传时间不到5分钟(准确度不到4:50分钟)时,一切正常.如果第一批线程需要超过5分钟才能完成,则会为每个活动线程抛出异常:

java.io.IOException:在sun.net.www.protocol.http.HttpURLConnection $ StreamingOutputStream.checkError(未知来源)sun.net.www.protocol.http.HttpURLConnection $ StreamingOutputStream.write(未知)将请求正文写入服务器时出错资源)

尝试写入HttpURLConnection输出流时抛出异常.[outputStream.write(缓冲液,0,LEN);]

下一批线程可以正常工作(即使它们需要超过5分钟).请注意,服务器完全相同,现在该过程不会失败,从而导致我认为问题不在服务器端.(如果是那么第二批也是假设在5分钟后失败......)

我在连接上有/没有连接/读取超时重现了这个问题.此外,在服务器端,我看到文件正在创建和增长,直到异常发生.客户端抛出异常大约20-40秒后,服务器将抛出IOException"读取超时".

我使用wireshark收集了一个TCP/IP示例,并且看到服务器在大约客户端异常时发送了一个FIN数据包,我不明白为什么.(所有连接似乎都在此之前运行)

我已经阅读了许多关于类似问题的线程,但找不到任何合适的解决方案.(包括使用java.net.URLConnection来触发和处理HTTP请求)

关于为什么会发生这种情况的任何想法?我怎样才能找到它的原因?我该如何解决?

非常感谢.

PS我没有发布代码,因为它很长......但如果它能帮助理解我的问题,我会很高兴这样做.

https post tcp httpurlconnection ioexception

7
推荐指数
0
解决办法
1284
查看次数

如何使用java将文件上传到http远程服务器?

我需要使用java将应用程序中的图像和txt文件上传到远程服务器(Just http no ftp).我的应用程序在jsf框架中.我搜索但找不到合适的东西.任何人都可以指导我吗?实际上我应该将文件上传到特殊文件夹到远程服务器.我有两个应用程序使用共享路径上传文件,所以为了访问这些文件,我决定将共享文件(如图像和文本)上传到第三台服务器.第一个应用程序应将文件上载到此远程服务器,第二个应用程序应从中读取它们.所以我的解决方案的难点在于使用http将文件上传到第三台服务器(实际上是远程服务器).

java jsf file-upload http remote-server

7
推荐指数
2
解决办法
5万
查看次数

HttpURLConnection:setFixedLengthStreamingMode()想要的大小是多少?

我正在尝试上传从相机中取回的jpeg图像缓冲区.我知道长度,但是如果我将这个长度传递给setFixedLengthStreamingMode()例程,我会在logcat中得到错误,告诉我它预计会有不同的大小.我不知道这是一个android bug(我在这个设备上运行2.3.3),或者我应该添加除了POST数据之外的标题大小或者什么.我可以使用setChunkedStreamingMode(0)并且工作正常,但我认为避免复制数据的开销会很好.我似乎总是关闭155字节,除非我随意添加155字节,然后它告诉我我2字节关闭:-).

android http image-uploading

7
推荐指数
1
解决办法
8097
查看次数

ServletFileUpload #parseRequest(request)返回一个空列表

我在Android中有一个客户端应用程序,HttpURLConnection用于将文件发送到服务器.服务器使用Apache Commons FileUpload API来解析表单数据值.

HttpURLConnection发送该请求:

-----------------------------4912995119421
Content-Disposition: form-data; name="deviceid"

9428103
-----------------------------4912995119421
Content-Disposition: form-data; name="countryid"

598
-----------------------------4912995119421
Content-Disposition: form-data; name="number"

98621360
-----------------------------4912995119421
Content-Disposition: form-data; name="file"; filename="2012-12-08 17.42.18.jpg"
Content-Type: image/jpeg

ÿØÿá1 Exif  II*    
      @      °      ª    
   ²              ¼       Ä   (       1    Ì   2    Ø          i‡    ì   %ˆ    \  n  SAMSUNG GT-S5360L H      H      S5360LUHLB1 2012:12:08 17:42:18  š‚    î  ?‚    ö  "ˆ       'ˆ    È    ?    0220?    þ  ?      ‘     ’    &  ’       
’    .        0100             @       °       >  £ …
Run Code Online (Sandbox Code Playgroud)

java servlets file-upload http multipartform-data

7
推荐指数
2
解决办法
2万
查看次数

在HttpURLConnection中设置setChunkedStreamingMode无法将数据传递到服务器

我的dev服务器上的服务器版本如下:

Apache/2.2.21(Win32)mod_fcgid/2.3.6

我一直在测试,HttpURLConnection因为我的项目需要简单的流媒体功能.我已经阅读了@BalusC关于如何使用该类的精彩概要.

使用java.net.URLConnection来触发和处理HTTP请求

我目前遇到的麻烦是设置时setChunkedStreamingMode.无论我将它设置为我的流,当我的服务器api方法/连接被调用/制作时,它似乎没有进入服务器,数据流是空的.但是,如果我删除它,它工作正常.

我见过另一个有类似问题的人:

Java/Android HttpURLConnection setChunkedStreamingMode不适用于所有PHP服务器

但没有真正的解决方案.我无法将其设置为setFixedLengthStreamingMode仅因为内容(json)的长度可变.

这不行.我可能会传输非常大量的数据,因此不能将数据存储在内存中.

我的问题是,我怎样才能让setChunkedStreamingMode发挥得更好?它是服务器设置问题还是可以在代码中修复?

编辑 我现在已经在我的生产服务器上测试了我的代码,它没有问题.但是,我仍然想知道为什么我本地计算机上的Apache服务器出现故障.任何帮助仍然非常感谢.

java apache android httpurlconnection

7
推荐指数
1
解决办法
1万
查看次数

如何使用Java 11 HTTP Client为POST请求定义多个参数

我有一个对特定端点发出POST请求的代码。这段代码是使用Apache的HttpClient,我想开始使用HttpClientJava(JDK11)的本机代码。但是我不明白如何指定请求的参数。

这是我使用Apache Httpclient的代码:

var path = Path.of("file.txt");
var entity = MultipartEntityBuilder.create()
            .addPart("file", new FileBody(path.toFile()))
            .addTextBody("token", "<any-token>")
            .build();
Run Code Online (Sandbox Code Playgroud)

和代码使用HttpClient

var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
                         .uri(URI.create("https://myendpoint.com/"))
                         .POST( /* How can I set the parameters here? */ );
Run Code Online (Sandbox Code Playgroud)

如何设置filetoken参数?

java multipart java-http-client java-11

7
推荐指数
1
解决办法
602
查看次数

从另一个Servlet调用Servlet Post

我需要从另一个servlet调用servlet POST方法并在servlets参数中传递一个blob.这是可能的,如果是这样的话怎么办呢.PS:我不能使用Apache HttpClient

html java post servlets

6
推荐指数
2
解决办法
2万
查看次数

捕获异常时如何优雅地清理HTTPURLConnection?

我有一个Java applet,它使用HTTPURLConnection该类将非常大的文件上传到IIS-7 Web服务器.applet将文件分块,然后使用固定长度的流将这些片段POST到PHP脚本.

有时,在上传文件块时,客户端和服务器之间的网络连接会神秘地丢失.当发生这种情况时,我对writeBytes()方法的调用抛出了IOException我捕获的内容.在捕获到这个异常之后,我会进入我的finally区域,在那里我尝试清理它.由于没有足够的数据写入连接(请记住,这是固定长度的流式传输),关闭输出流的尝试也会失败.结果,连接似乎"粘住"(即底层插座保持打开).这似乎是通过查看StreamingOutputStream类的方法的源代码来验证的close()(注意注释表明套接字无法关闭).

题:

有一种优雅的方式,我可以IOException在写了一段时间后关闭HTTPURLConnection吗?告诉HTTPURLConnection对象disconnect()似乎不够好.

附加信息:

这是我通过调用类的writeBytes()方法调用网络时看到的第一个异常HTTPURLConnection:

java.io.IOException: Error writing request body to server
    at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.checkError(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.write(Unknown Source)
    at java.io.DataOutputStream.write(Unknown Source)
    at MultiPartPostThread.run(MultiPartPostThread.java:321)
Run Code Online (Sandbox Code Playgroud)

我捕获此异常,然后尝试关闭DataOutputStream我用来写入连接的对象.当我这样做时,我得到这个例外:

java.io.IOException: insufficient data written
    at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.close(Unknown Source)
    at java.io.FilterOutputStream.close(Unknown Source)
    at MultiPartPostThread.run(MultiPartPostThread.java:370)
Run Code Online (Sandbox Code Playgroud)

我可以通过注意在IIS日志中显示失败条目需要10分钟来验证套接字是否保持打开状态.延迟(10分钟)恰好是我的连接超时值.IIS日志中的示例行(为简洁而修剪):

2012-01-31 20:20:07 POST /upload_handler.php 200 0 0 356 26215490 3666
2012-01-31 20:20:10 …
Run Code Online (Sandbox Code Playgroud)

java applet exception-handling httpurlconnection

6
推荐指数
1
解决办法
7273
查看次数