Java:如何在显示页面时发送POST请求


Java: how to send POST request while displaying the page?

下面是我的代码:

try
        {
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            ImageIO.write(image, "png", os);
            byte[] bytes = os.toByteArray();
            os.flush();
            os.close();
            String code = encode(bytes);
            URL base = applet.getCodeBase();
            URL url = new URL(base.getProtocol(),
                base.getHost(),
                base.getPort(),
                "/image.php?code=" + code);

            HttpURLConnection c = (HttpURLConnection) url.openConnection();
            c.setRequestMethod("POST");
            c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            c.setDoOutput(true);
            DataOutputStream s = new DataOutputStream(c.getOutputStream());
            s.writeBytes("code=" + code);
            applet.getAppletContext().showDocument(url, "_blank");
        }
        catch (Exception e)
        {
            e.printStackTrace();
            JOptionPane.showMessageDialog(
                this,
                e.toString(),
                "Error",
                JOptionPane.ERROR_MESSAGE);
        }
当我使用showDocument时,POST请求已经完成,所以我真正要做的是显示一个空白页面(相反,我想显示图像)。image.php的源代码如下:
<?php
$code = base64_decode($_GET["code"]);
header('Content-Type: image/png');
echo $code;
?>

您在Java上使用POST,在PHP上使用GET…

您的showDocument和applet的POST请求是完全独立的。POST请求是由applet完成的,结果只能在applet内部使用(但您根本没有读取它-我甚至不确定它是否被发送)。

showDocument,相反,总是做一个GET请求-没有办法指示浏览器在这里使用POST。但是,您可以使用applet中的JavaScript桥接为新的HTML页面创建POST请求。

理论上,它应该工作,因为你发送图像数据作为URL的一部分,太,但可能有长度限制的URL数据在Web服务器,或在从Java-Plugin到浏览器的链接。

你可以在data: URL中编码你的图像,并将其用于showDocument

URL url = new URL("data:image/png;base64," + code);

(我没有测试Java的URL类是否实际接受这个。请试着报告。我想它受到相同的浏览器URL长度限制。)


另一种方法是让服务器存储图像(至少一段短时间)。然后,您将使用applet中的POST来上传数据,获取(短)一些唯一标识符,然后将其传递给showDocument URL。