我有以下Spring Boot Web应用程序,并使用Tomcat作为服务器,使用Thymeleaf作为我的html模板。关于我的第一个Spring Boot项目,我有两个问题。
这是我的代码到目前为止的样子:
@RequestMapping(value = "/myIpAdress")
private String displayMyIpAdress(HttpServletRequest request, Model model) throws Exception
{
model.addAttribute("myIpAdress", getMyIpAdress());
return "myIpAdress";
}
private String getMyIpAdress()
{
// here is a simple HTTP Request returning my IP Adress from a server
}
这是myIpAdress.html
<div th:text="${myIpAdress}"></div>
它只是在我的视图中显示我的IP地址,效果很好。到目前为止没什么好看的。
第一个问题: 如何设置计时器,以便在我的html文件上每秒显示一次IP?一旦我的IP发生变化,我希望在我的视图中立即进行更改。在Java中,我只需执行一个预定的计时器或使用Thread.sleep(1000L)进行一段时间(真实)循环:
public static void main(String[] args) throws Exception
{
while(true){
System.out.println("My IP is: "+getMyIpAdress());
Thread.sleep(1000L);
}
}
这个Java代码非常快速地运行。控制台几乎每秒都会显示我的IP地址。这正是我最初想要的。但现在我想用它制作一个Spring Boot Web App,速度非常慢,请求需要15秒才能生成请求并呈现视图。
所以我的第二个问题是,为什么这么慢?我怎样才能提高速度?我没有在HTML文件上运行任何CSS或JavaScript,它实际上只显示我的IP地址。
我想要的只是从服务器获取IP并将其显示在我的视图中。每一秒。我该怎么做?
答案 0 :(得分:0)
在纯Thymeleaf中,每次在后端发生更改时,您都无法更新静态视图,而无需从客户端发送新请求。它仅以一种方式工作 - 请求是从客户端到服务器,而不是相反。
实现您想要做的最简单的方法是向模板添加一个简单的javascript,每秒获取一次IP地址(例如,来自特殊的专用端点)并更新视图。
或者您可以在模板中添加一些websocket support,但我认为您的情况并不需要(似乎是过度工程)...