最接近于java中的网页重新加载

时间:2013-01-12 14:34:28

标签: java web-services http servlets

我通过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

的java程序

这是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,并且浏览器中的重新加载没有被复制..

知道怎么做吗?

1 个答案:

答案 0 :(得分:3)

您基本上只连接(请求)一次并尝试多次读取响应,而它只能读取一次。您基本上每次都需要创建一个新连接(请求)。您需要将url.openConnection()的连接创建移动到循环内部。第http.connect()行是多余的。你可以安全地省略它。 http.getInputStream()已隐含地执行此操作。

另见: