Spring boot Spring Boot-如何为不同的用户创建不同的资源
我正在编写一个spring启动应用程序,遇到了为不同用户共享资源的问题。通过示例简化,它看起来是这样的:只有一个变量。您可以通过页面上的表单为其赋值。如果第一个用户从一个浏览器分配值hello java,那么第二个用户将通过另一个浏览器看到相同的值。我不知道如何让每个用户使用他们自己的变量,并且他们的值不重叠 控制器:Spring boot Spring Boot-如何为不同的用户创建不同的资源,spring-boot,Spring Boot,我正在编写一个spring启动应用程序,遇到了为不同用户共享资源的问题。通过示例简化,它看起来是这样的:只有一个变量。您可以通过页面上的表单为其赋值。如果第一个用户从一个浏览器分配值hello java,那么第二个用户将通过另一个浏览器看到相同的值。我不知道如何让每个用户使用他们自己的变量,并且他们的值不重叠 控制器: @Controller public class MessageController { private String message; @GetMapping
@Controller
public class MessageController {
private String message;
@GetMapping(value = "/show_message")
public String showMessage(Model model){
model.addAttribute("message", message);
return "message";
}
@PostMapping(value = "set_message")
public String setMessage(@RequestParam(name = "newMessage") String newMessage){
message = newMessage;
return "redirect:/show_message";
}
}
html页面:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
</head>
<body>
<p>Message value: <th:block th:utext="${message}"/></p>
<p>Enter a new message value</p>
<form method="POST" th:action="@{/set_message}">
<input type="text" name="newMessage"/>
<input type="submit" value="Send"/>
</form>
</body>
</html>
消息值:
输入新的消息值
经验法则是,控制器和服务的设计不是为了维护状态,特别是客户端状态。此外,Springbean默认为单例:它们在客户端/请求之间共享。这就解释了你注意到的行为 要解决此问题,您可以使用内存中的HttpSession(旧做法),但不再建议这样做,因为它会将客户机/用户粘附到首先满足其请求的特定服务器实例。
您最好在每次请求时重新发送数据(这可能会很麻烦),或者最好将数据存储在内存数据库(如Redis)中。
这很快,而且不会将客户端固定到spring引导应用程序的特定实例上 使用Spring时,与内存中数据库使用情况的良好关联是使用HttpSession来处理用户状态,但要备份到数据库(Redis或其他数据库)。
有关如何使用Spring MVC的会话 经验法则是,控制器和服务的设计不是为了维护状态,特别是客户端状态。
此外,Springbean默认为单例:它们在客户端/请求之间共享。这就解释了你注意到的行为 要解决此问题,您可以使用内存中的HttpSession(旧做法),但不再建议这样做,因为它会将客户机/用户粘附到首先满足其请求的特定服务器实例。
您最好在每次请求时重新发送数据(这可能会很麻烦),或者最好将数据存储在内存数据库(如Redis)中。
这很快,而且不会将客户端固定到spring引导应用程序的特定实例上 使用Spring时,与内存中数据库使用情况的良好关联是使用HttpSession来处理用户状态,但要备份到数据库(Redis或其他数据库)。
有关如何使用Spring MVC的会话 0。谢谢你的链接!真的帮了我一把。我是否正确理解SpringHttpSession已经使用了内存中的数据库,如Radis?2.如果我只是简单地向控制器添加注释@Scope(“session”),会怎么样?她一切都很顺利。不客气。不完全是。Spring使用Tomcat服务器的内存。而您可以在Spring会话备份到db时使用该注释。对于您(或您的公司)主持的测试或非常简单的应用程序,使用内存服务器http会话是很好的。但是如果您需要可伸缩性(添加或删除应用程序实例)或故障转移(使一个实例接受另一个失败实例的中继),您可能会被卡住。。。。同样,云托管也会有一些限制。这个链接可能会有帮助()。您有几个要点,其中之一是“无状态进程”。这些都是先进的原则,但你以后一定会遇到。现在理解使用内存中服务器会话的后果并不是一件坏事。0。谢谢你的链接!真的帮了我一把。我是否正确理解SpringHttpSession已经使用了内存中的数据库,如Radis?2.如果我只是简单地向控制器添加注释@Scope(“session”),会怎么样?她一切都很顺利。不客气。不完全是。Spring使用Tomcat服务器的内存。而您可以在Spring会话备份到db时使用该注释。对于您(或您的公司)主持的测试或非常简单的应用程序,使用内存服务器http会话是很好的。但是如果您需要可伸缩性(添加或删除应用程序实例)或故障转移(使一个实例接受另一个失败实例的中继),您可能会被卡住。。。。同样,云托管也会有一些限制。这个链接可能会有帮助()。您有几个要点,其中之一是“无状态进程”。这些都是先进的原则,但你以后一定会遇到。现在理解使用内存中服务器会话的后果并不是一件坏事。