如何在不刷新页面的情况下更新JSP文件中的输出?

时间:2019-05-05 11:35:29

标签: javascript java jsp servlets

我正在尝试使用MVC模型在我的JSP文件中使用Servlet,以便在doGet和doSet的输出发生更改时能够在不刷新页面的情况下连续更新UI。

我试图在Servlet中使用一个计时器(没有用),并且我试图在JSP文件中使用一个计时器,但是它也不起作用。我认为这将有助于每2秒调用一次“ doGet”以更新运行该程序时在屏幕上看到的输出。但是输出更改的唯一时间是当我手动刷新网站时。我希望这个简单的程序能够在字符串“ blue”和“ red”之间进行更改并查看运行该程序的时间。

Servlet:

public class Servlet2 extends HttpServlet implements Servlet {

     String msg = "blue";

   protected void processRequest(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       response.setContentType("text/html");
       request.setAttribute("state", changeColor()); 
       request.getRequestDispatcher("/test.jsp").forward(request, response);

   }

   public String changeColor(){
       if(msg.equals("red"))
           msg = "blue";
       else msg = "red";
       return msg;
   }

   @Override
   protected void doGet(
           HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {

       processRequest(request, response);
   }

   @Override
   protected void doPost(
           HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {

       processRequest(request, response);
   }

}

还有JSP文件:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html> 
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
            ID:  <%=(String)request.getAttribute("state")%><br>

    </body>
</html>

1 个答案:

答案 0 :(得分:1)

您已经发现,这是不可能的。

  1. 要知道为什么这不可能,您必须知道发生了什么, 当您访问servlet时:输入后首先 “ http://host/yourServlet”将打开浏览器的连接 host,并要求提供yourServlet部分。
  2. 然后,Web服务器(Tomcat?)将执行Servlet的代码 (doGet),并返回从servlet代码或jsp输出的任何内容。
  3. 您的浏览器接收到输出并呈现页面。
  4. 在那之后,连接被关闭,什么也没有发生。

要实现将“红色”更改为“蓝色”,您可以使用html标头(meta http-equiv="refresh")/ javascript(How to reload a page using JavaScript)自动重新加载页面,也可以使用javascript询问您的页面当前值为statejQuery Ajax POST example with PHP)的servlet。