Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Spring Boot-如何为不同的用户创建不同的资源_Spring Boot - Fatal编程技术网

Spring boot Spring Boot-如何为不同的用户创建不同的资源

Spring boot Spring Boot-如何为不同的用户创建不同的资源,spring-boot,Spring Boot,我正在编写一个spring启动应用程序,遇到了为不同用户共享资源的问题。通过示例简化,它看起来是这样的:只有一个变量。您可以通过页面上的表单为其赋值。如果第一个用户从一个浏览器分配值hello java,那么第二个用户将通过另一个浏览器看到相同的值。我不知道如何让每个用户使用他们自己的变量,并且他们的值不重叠 控制器: @Controller public class MessageController { private String message; @GetMapping

我正在编写一个spring启动应用程序,遇到了为不同用户共享资源的问题。通过示例简化,它看起来是这样的:只有一个变量。您可以通过页面上的表单为其赋值。如果第一个用户从一个浏览器分配值hello java,那么第二个用户将通过另一个浏览器看到相同的值。我不知道如何让每个用户使用他们自己的变量,并且他们的值不重叠

控制器:

@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会话是很好的。但是如果您需要可伸缩性(添加或删除应用程序实例)或故障转移(使一个实例接受另一个失败实例的中继),您可能会被卡住。。。。同样,云托管也会有一些限制。这个链接可能会有帮助()。您有几个要点,其中之一是“无状态进程”。这些都是先进的原则,但你以后一定会遇到。现在理解使用内存中服务器会话的后果并不是一件坏事。