サーブレットと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が原因であり、ブラウザのようにリロードが複製されていないと思います。
これを行う方法はありますか?