有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我需要更改web页面的内容,而不刷新服务器端发生更改的位置

我有一个带有java的web应用程序,它从客户端接收请求,处理请求,然后将结果发送回客户端。我想添加一个图形界面,在每个请求到达后显示有关请求、过程和结果的信息。我希望在不重新加载页面的情况下执行此操作,服务器可以在短时间内接收大量请求,因此重新加载页面不是一个好的解决方案。我已经尝试过用AJAX来实现这一点,但是更改是在客户端触发事件之后进行的,例如单击按钮。我希望事件在服务器端我的事件需要是新请求的到达。尝试使用setInterval,但结果并不是我所期望的,好像10个请求中只有一个被显示出来 这是设置间隔代码:

setInterval(function() { 
    $.get("log", function(responseText) {
        $("#container").append(responseText + "<br>");
    });
}, 10);

log是提供请求信息的servlet的URL 日志servlet的doGet方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/plain");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(requestInfo);
}

每次请求到达时,我开始将信息放入requestInfo中


共 (1) 个答案

  1. # 1 楼答案

    如果你想经常检查状态,你必须调用你的ajax函数。如果你想通过推送获得信息,你必须使用WebSocket

    function checkLog(){
    $.get("log", function(responseText) {
            var $notFinished = true;
            console.log('fetch from server')
            $("#container").append(responseText + "<br>");
    
    
            // do some checks to determine server has finished, set notFinished to false if it is your last ajax request
            ...
    
            if($notFinished){
              // recall the function in 10 seconds for status check
              setInterval(function() { 
                checkLog();
              }, 10000);
            }
        });
    }
    
    // call the function the first time
    checkLog();