2013-05-30 3 views
-1

J'ai une application Java qui rapporte l'état haut/bas de plusieurs sites Web et crée un fichier .json avec les données. J'ai une page HTML qui utilise javascript pour prendre un fichier .json et afficher une belle petite grille avec des lumières rouges ou vertes vous indiquant si un site web est en haut ou en bas. J'ai aucune idée comment faire l'application java dire à la page html exactement ce que le fichier .json est nommé (je crée un nouveau fichier timestamped .json chaque exécution de l'application). Est-il possible de transmettre un paramètre ou quelque chose à la page HTML en cours de chargement (en utilisant actuellement Desktop.getDesktop().browse(URI.create("file://blah");), ou suis-je obligé d'écraser mon fichier .json chaque fois que je lance l'application?Comment utiliser Java pour lancer une page HTML locale qui utilise Javascript pour charger un fichier json local et afficher son contenu?

+0

Il peut être plus facile que vous le pensez pour que votre application Java affiche une interface utilisateur indiquant l'état des sites Web. Avez-vous besoin que ce soit visible dans un navigateur? –

+0

Il serait préférable, oui - on m'a dit de le faire dans un navigateur, et l'assignateur de projet n'est pas actuellement au bureau. – ChickenWing

+1

Votre programme Java peut-il toujours nommer le dernier fichier comme up-down-status-latest.json et renommer les anciens fichiers en quelque chose d'autre? De cette façon, vous pouvez renommer le fichier et le conserver au lieu de l'écraser à chaque fois. – bsimic

Répondre

0

Comment utiliser un paramètre de requête? Comme file://blah.html?json=foo.json Ou un fragment: file://blah.html#foo.json.

+0

J'ai essayé cela mais l'URI ne semble pas le peupler dans le navigateur - je finis avec ma page index.html et aucun params ajouté – ChickenWing

+0

Très étrange. Les deux versions ont fonctionné pour moi quand j'ai essayé, mon navigateur par défaut est Chrome sur OS X. Java 6 sur la même plate-forme. Peut-être spécifique au navigateur? – haraldK

0

Vous pouvez créer un petit serveur local et enregistrer l'URL/JSON à tout fichier que vous souhaitez:

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(); 
     } 
    } 
} 

Maintenant, la JS peut être changé pour aller chercher/JSON

Questions connexes