我有一个 java 应用程序,它报告几个网站的 up/down 状态并创建一个包含数据的 .json 文件。我有一个 HTML 页面,它使用 javascript 获取一个 .json 文件并显示一个漂亮的小网格,用红灯或绿灯告诉您网站是启动还是关闭。我不知道如何让 java 应用程序准确地告诉 html 页面 .json 文件的名称(我在每个应用程序运行时创建一个新的带时间戳的 .json 文件)。有没有办法在加载时将参数或其他内容传递给 HTML 页面(当前正在使用Desktop.getDesktop().browse(URI.create("file://blah");
),或者我是否坚持在每次运行应用程序时覆盖我的 .json 文件?
问问题
504 次
2 回答
0
使用查询参数怎么样?喜欢file://blah.html?json=foo.json
或片段:file://blah.html#foo.json
。
于 2013-05-30T15:36:39.120 回答
0
您可以创建一个小型本地服务器并将 url /json 注册到您想要的任何文件:
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
public class main {
static String readFile(String path, Charset encoding) throws IOException {
byte[] encoded = Files.readAllBytes(Paths.get(path));
return new String(encoded, encoding);
}
public static void main(String[] args) throws IOException {
HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
server.createContext("/", new IndexHandler());
server.createContext("/json", new JsonHandler());
server.start();
}
static class IndexHandler implements HttpHandler {
@Override
public void handle(HttpExchange httpExchange) throws IOException {
String response = readFile("index.html", StandardCharsets.UTF_8);
httpExchange.sendResponseHeaders(200, response.length());
OutputStream os = httpExchange.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
static class JsonHandler implements HttpHandler {
@Override
public void handle(HttpExchange httpExchange) throws IOException {
String response = readFile("whatEverJsonYouWant.json", StandardCharsets.UTF_8);
httpExchange.sendResponseHeaders(200, response.length());
OutputStream os = httpExchange.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
}
现在可以将 JS 更改为 fetch /json
于 2017-06-27T20:22:21.037 回答