0

私はWebページにデータを順番に送信しようとしています.HTMLがどのように機能するかを知っています.これに対する最も可能性の高い答えはajaxですが、要件はこれがJavaとhtmlのみで機能することです. 通常、ページはそのコンテナーでコンパイルされ、出力が応答としてブラウザーに送信されます。AJAX を使用せずに、次のようなことをしたいと思います。

これは、日付を送信し、5 つの日付すべてをロードせずにブラウザーに出力する必要があります。

何か案は?

        for (int i = 1; i <= 5; i++) {
        out.println("<p>#" + i + " " + new Date() + "</p>");
        out.flush();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
        }
    }
4

1 に答える 1

0

ソリューション :

ブラウザに直接印刷していましたOutputStreamが、プロキシを使用しているため、印刷中にプロキシがデータをキャッシュしていたため、プロキシをバイパスすることでこの問題が修正されました。アウト ストリームは、ブラウザの出力に直接出力できるように、ブラウザとの間にキャッシュがありません。

この例では、データがブラウザ ウィンドウに 1 行ずつ出力されるので、データを表示する前に完全な 25 秒を待たないことがわかります。

public void doGet(HttpServletRequest リクエスト、HttpServletResponse レスポンス) throws ServletException、IOException { response.setContentType(CONTENT_TYPE); response.setHeader("CacheControl", "no-cache"); //PrintWriter out = response.getWriter();

OutputStreamWriter osr = new OutputStreamWriter(response.getOutputStream());
BufferedWriter br = new BufferedWriter(osr);

br.append("<html>");
br.append("<head><title>Load</title></head>");
br.append("<body>");
for (int i = 1; i <= 5; i++) {
    br.append("<div>#" + i + " " + new Date() + "</div>");
    br.flush();
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        System.out.println("Cannot sleep");
    }
}
br.append("</body></html>");

br.close();

}

于 2013-05-24T06:30:32.433 に答える