我通过servlet和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程序中,我没有得到相同的功能。使用HttpUrlConnection
。
这是servlet的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()
中得到重要的东西,它将发出一个回调函数方法,它会处理剩余的事情。
我认为问题是因为类变量conn,并且浏览器中的重新加载没有被复制..
知道怎么做吗?
答案 0 :(得分:3)
您基本上只连接(请求)一次并尝试多次读取响应,而它只能读取一次。您基本上每次都需要创建一个新连接(请求)。您需要将url.openConnection()
的连接创建移动到循环内部。第http.connect()
行是多余的。你可以安全地省略它。 http.getInputStream()
已隐含地执行此操作。