0

次のようなJavaのWebサーバーがあります。

public static void main(String[] args) throws Exception {
   HttpServer server = HttpServer.create(new InetSocketAddress(80), 0);
   server.createContext("/", new HomeHandler());
   server.setExecutor(null); // creates a default executor
   server.start();
}

そして、ここにありますHomeHandler

class HomeHandler implements HttpHandler {
    public void handle(HttpExchange t) throws IOException {
    String filepath = "C:\\Public\\home.html";
        String response = getPage(filepath);
        t.sendResponseHeaders(200, response.length());
        OutputStream os = t.getResponseBody();
        os.write(response.getBytes());
        os.close();
    }
}

最後に、関数は次のgetPage()とおりです。

private static String getPage(String page){
    String toret = "";
    BufferedReader br = null;
    try {
        String sCurrentLine;
        br = new BufferedReader(new FileReader(page));
        while ((sCurrentLine = br.readLine()) != null) {
            toret += sCurrentLine;
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (br != null) br.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    return toret;
}

しかし、ホームページがロードされると、そこに画像が含まれているため、ブラウザはサーバーに画像を要求する別のリクエストを作成します。同じことを行う画像用の同様のハンドラーを作成しました。引数 画像のファイルパス...

しかし、実際にブラウザで実行すると、画像は表示されません。しかし、新しいタブで画像だけを開くと、画像のサイズが正しくわかります(Google Chromeは私のブラウザで、今日の最新のものです)。

4

2 に答える 2

1

UI に画像を返すハンドラーを実装する方法は次のとおりです。

private void forwardImage(HttpExchange exchange, String imagefilename) throws IOException {

    byte[] result = readSmallBinaryFile(imagefilename);

    if (result == null) {       
        // resource_not_found_error
    }


    exchange.getResponseHeaders().set("Content-Type", CONTENT_TYPE_IMG);
    OutputStream os = null;
    try {
        exchange.sendResponseHeaders(200, message.length);
        os = exchange.getResponseBody();
        os.write(message);
    } finally {
        os.close();
    }

    return os;
}  
于 2013-12-17T15:34:57.467 に答える