1

サーブレットとdbハンドラーのJavaクラスを介してデータベースからデータを取得し、URLでホストしています。データベースが変更されているため、データベースデータ全体ではなく、変更をホストすることだけに注意を払っています。

ブラウザで必要な機能を取得しています。つまり、(手動で)リロードするたびに、必要に応じてデータを取得しています。

1. at the first page load, entire data gets displayed.
2. at subsequent reloads, I get either null data if there is no change in the database, or the appended rows if the database extends. (the database can only extend).

しかし、Javaプログラムでは、同じ機能が得られません。を使用するJavaプログラムHttpUrlConnection

これはサーブレット用のJavaクライアントのコードです...

public class HTTPClient implements Runnable {

private CallbackInterface callbackinterface;
private URL url;
private HttpURLConnection http;
private InputStream response;
private String previousMessage = "";

public HTTPClient() {
    try {
        url = new URL("http://localhost:8080/RESTful-Server/index.jsp");
        http = (HttpURLConnection) url.openConnection();
        http.connect();
    } catch (IOException e) {
    }
}

@Override
public void run() {
    while (true) {
        try {
            String currentmessage = "";

            response = http.getInputStream();
            if (http.getResponseCode() == HttpURLConnection.HTTP_OK) {
                BufferedReader buffread = new BufferedReader(new InputStreamReader(response));
                String line;

                for (; (line = buffread.readLine()) != null;) {
                    currentmessage += line;
                }
                if ((!currentmessage.equals(previousMessage)
                        || !previousMessage.equals(""))
                        && !currentmessage.equals("")) {
                    //this.callbackinterface.event(currentmessage);\
                    System.out.println(currentmessage + "\t" + previousMessage);
                }
                previousMessage = currentmessage;

                Thread.sleep(2500);
            } else {
                throw new IOException();
            }
        } catch (IOException | InterruptedException e) {
            System.err.println("Exception" + e);
        }

    }
}

示されているクラスは、2.5秒ごとに接続を読み取るスレッドです。で何か重要なことがgetline()発生すると、workerメソッドへのコールバックが発行され、残りの処理が行われます。

問題はクラス変数connが原因であり、ブラウザのようにリロードが複製されていないと思います。

これを行う方法はありますか?

4

1 に答える 1

3

基本的に、接続(要求)は1回だけで、応答を複数回読み取ろうとしていますが、読み取りは1回だけです。基本的に、毎回新しい接続(リクエスト)を作成する必要があります。url.openConnection()接続の作成をループ内に移動する必要があります。http.connect()ちなみにラインは不要です。安全に省略できます。はhttp.getInputStream()すでに暗黙的にそれを行います。

参照:

于 2013-01-12T14:38:32.407 に答える