Servlet 对 Javascript 的响应以纯文本显示在浏览器上

Servlet Response to Javascript in plain text shown on browser

我让我的 servlet 向 JS ajax 调用发送以下响应:

            response.setContentType("text/plain");
            PrintWriter out = response.getWriter();
            out.print("start");
            out.close();

网页调用的代码如下:

function update() {
    var xmlhttp = new XMLHttpRequest();
    var id = '${user.id}';
    var height = (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);
    height = height-40;
    var params = "action=update&id=" + id + "&height=" + height;
    xmlhttp.open("POST", "/Anabasis/UserControl", true);
    xmlhttp.setRequestHeader("Content-type",
            "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length", params.length);
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            var answer = xmlhttp.responseText;
            if(answer=="start"){
                window.location.href = "/project/page1.jsp";
            } else {
                window.location.href = "/project/page2.jsp";
            }
        }
    };
    xmlhttp.send(params);
}
setTimeout(update, 10000);

如果 start 由 Servlet 发回,浏览器应该被重定向到另一个页面。这可以在用户不做任何事情的情况下完成,因为 JS 请求每 10 秒发送一次。

现在的结果是我没有得到页面的答案,只有一个黑色的页面,上面有文字:"start"

谁能告诉我要添加什么以确保答案返回给 JS 函数?

我已经找到解决办法了,抱歉这个问题。代码实际上工作正常,只是在某些情况下,Servlet 没有被这个更新函数调用,而是被同一页面的另一个表单调用。所以答案当然不会发送到函数,解释不当行为。

是否有关于 Servlet 与网页通信的最佳实践指南?我想我非常需要它。

最好根据您的要求forward您的要求,例如:

RequestDispatcher rd=request.getRequestDispatcher("./project/page1.jsp");
rd.forward(request, response);