【问题标题】:send response to local file向本地文件发送响应
【发布时间】:2014-05-19 22:07:32
【问题描述】:

我有一个简单的html 一键页面

<html>
<head>
    <script>
        function sender() {
            var oReq = new XMLHttpRequest();
            oReq.open('GET', 'http://localhost:8888?param2=value2', true);
            oReq.onreadystatechange = function() {
                if (oReq.readyState == 4) {
                    if (oReq.status == 200) {
                        alert(xmlhttp.responseText);
                    }
                    if (oReq.status == 404) {
                        alert("404040404!");
                    }
                }
            };
            oReq.send();
        }
    </script>
</head>
<body>
    <button id="click" onclick="sender();">Send</button>
</body>
</html>

我有一个简单的用 java 编写的 http 服务器,它除了读取传入的请求并显示它之外什么都不做。

但是如何从服务器向我的文件发送响应?例如我的文件位于那里

file:///C:/Users/Admin/Desktop/development/test.html

请求看起来像这样

GET /?param2=value2 HTTP/1.1
Host: localhost:8888
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:28.0) Gecko/20100101 Firefox/28.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en,ru-ru;q=0.8,ru;q=0.5,en-us;q=0.3
Accept-Encoding: gzip, deflate
Origin: null
Connection: keep-alive

Header parsing result: param2=value2

在哪里以及如何发送响应?

服务器正在读取这样的标题

BufferedReader reader = new BufferedReader(new InputStreamReader(
            sock.getInputStream()));
    StringBuilder sb = new StringBuilder();
    String line = null;
    while (true) {
        line = reader.readLine();
        if (line == null || line.isEmpty())
            break;
        sb.append(line + System.getProperty("line.separator"));
    }
    return sb.toString();

【问题讨论】:

  • 我很困惑。您想将响应写入文件吗?它只是一个 HTTP 服务器,因此使用您使用的请求在浏览器中加载服务器并保存页面。我的意思是,在浏览器中导航到 localhost:8888?param2=value2 并保存页面。
  • 如果您希望将文件从 javascript 保存到磁盘,那么这是不可能的。
  • 呃……哦!是我糊涂了!我想如果文件有 file:/// 而不是一些网址,我无法发送响应。

标签: java html xmlhttprequest


【解决方案1】:

嗯,您已经收到了响应,如果请求正常,响应将显示在 Javascript 警报中。只需执行您需要的任何操作,用 HTML 页面中的实际显示替换此警报。

oReq.onreadystatechange = function() {
                if (oReq.readyState == 4) {
                    if (oReq.status == 200) {
                        //This is where you should put the code (or function call) when everything went ok
                    }
                    if (oReq.status == 404) {
                        //this is when you got a 404 error
                    }
                }
            };

如果您希望将其保存到客户端计算机上的文件中,那么您应该从服务器端代码发回一个文件流,然后客户端可以保存该文件流(就像任何文件下载一样),但就我而言知道,你不能在完整的 AJAX 中做到这一点,你需要一个普通的 http 请求来做到这一点。另请注意,您错过了 AJAX 代码中错误处理的很大一部分......除了 404 错误之外,请求可能失败的方式有很多,实际上,由于您是设置所有这些的人,因此 404 错误可能是最不可能发生的事情。

【讨论】:

  • 嗯,它实际上是本地主机上的一些特定 http 服务器......它就像带有html 代码的应用程序只要服务器不运行就可以运行。像这样的......
猜你喜欢
  • 1970-01-01
  • 2015-07-24
  • 2015-04-14
  • 2011-09-21
  • 2012-04-24
  • 2013-11-24
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
相关资源
最近更新 更多