如何使用 Spring MVC 在会话中保存字符串?
Posted
技术标签:
【中文标题】如何使用 Spring MVC 在会话中保存字符串?【英文标题】:How do I save a string in the session with Spring MVC? 【发布时间】:2012-04-05 03:42:51 【问题描述】:我是 Spring MVC 的新手,我正在尝试找出合适的方法来做一些我认为非常简单的事情。
我有一个简单的 jQuery AJAX 调用:
var dataString = 'existingProject='+ $("#existingProject").val() + '&newProjName=' + $("#newProjName").val();
$.ajax(
type: "POST",
url: "manageProjects.html",
data: dataString
);
我想为用户的会话设置此用户设置“项目”。这个 AJAX 调用来自 JS 文件中的 javascript 并连接到我的 Spring MVC 控制器。
控制器正在获取这些变量,但我不确定如何处理它以使这些数据传入会话特定。
我已经用谷歌搜索了这个主题,并遇到了 6 个不同的选项(具有自动装配的注入 Session 范围 bean、具有 xml 配置和 cgl-nodep 库的 bean、HttpServlet 属性、@ModelAttribute、@SessionAttribute 等) .我尝试使用 Session 范围的 bean 并定义了以下内容:
@Component
@Scope("session")
public class UserSettings
...但是 bean 并没有被锁定到会话中。我在我的控制器中使用了@Autowire,发现它在会话之间仍然是同一个实例,所以我显然把它搞砸了。
我只想保存一个该死的字符串!必须有一个 101 级的简单方法来做到这一点......
【问题讨论】:
【参考方案1】:@RequestMapping(value = "/request/mapping")
public ModelAndView methodName(HttpSession session,...)
session.setAttribute("testVariable", "Test Values!!");
或
@RequestMapping("/test")
@Controller
public class TestController
@RequestMapping(method = RequestMethod.GET)
public String testMestod(HttpServletRequest request)
request.getSession().setAttribute("testVariable", "Test Values!!");
return "testJsp";
【讨论】:
好的,但是当我开始 AJAX 调用时如何设置该值?为 AJAX 调用设置会话中的属性的“处理程序”方法是否合适,然后其他所有人都将其拉回?这是标准做法吗? 没区别,只是把pass request或者session放到你的ajax处理方法中。 我接受了您的第一个建议并使用了 HttpSession。我接受了 AJAX 调用并在会话中设置了属性。然后我在其他需要它的控制器操作中查找该值。看起来该属性在会话中持续存在。我打开了一个新标签并再次访问该网站,第一个标签的设置已经在我的全新标签中设置。 你到底想做什么。如果您在会话中放置一些变量,则只有该会话能够访问它,而不是每个人。 这就是我的意图。我希望此设置对单个用户/选项卡/窗口“坚持”,只要他们留在页面上或直到他们手动更改它。我看到的是,当我从第一个选项卡设置属性时,我的第二个选项卡可以“刷新”他们的页面并查看它们的状态变化以反映第一个选项卡的作用。以上是关于如何使用 Spring MVC 在会话中保存字符串?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring MVC-Spring Security 应用程序中处理 GWT RPC 调用的会话过期异常
如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量