2011-05-01 148 views
4

我是新来的Tomcat,小服务程序和Spring Web里面的会话cookie。我来自PHP背景,所以我有点迷失方向,至少可以说。我想要一个控制器为我创建一个会话cookie。创建控制器

我已经告诉我可以在一个标准的servlet像这样的会议:

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
    // Somewhere inside the method... 
    HttpSession session = request.getSession(true); 

    // Set a cookie 
     session.setAttribute("hello", "world"); 

    // More stuff... 
} 

这是如何转化为做事的Spring Web MVC框架的方式?我可以在控制器内创建会话cookie吗?

回答

4

在Java Servlet的(和Spring MVC尤其是)你不会话cookie直接交互,真正正确编写基于Servlet的应用程序应该没有启用cookie,自动回落到基于URL的会话ID。

您提供的方式是正确的,虽然春天是给你更好的(高层)方法,如session-scoped豆。这种方式你永远不会与会话本身进行交互。

+0

您链接到2.5.X文档。你的意思是http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-factory-scopes-other? – Pieter 2011-05-01 10:33:26

+0

应该不重要(我在Google上找到的第一个),但我将链接固定为3.0,谢谢。 – 2011-05-01 11:21:38

2

您可以通过它在你的控制器的方法,(S)的参数可以访问HttpSession对象:

public String get(Long id, HttpSession session) { 

} 

Spring会注入当前HttpSession对象的你,并从那里你可以设置属性(就像你在你的问题中所做的那样)。

5

你在你的例子在做什么,什么都没有做饼干。 session.setAttribute(“key”,valueObject); 在会话中设置一个java对象。会话保存在服务器上。 sessionid是唯一传达给客户端的东西。它可以是一个cookie或它可以在URL中。会话中的属性未被序列化为字符串。在另一方面

Cookies是发送回客户端的字符串。客户有责任存储他们的cookies(有些人将其关闭)并将它们返回给服务器。

从一个复杂的对象的图形化设置cookie的值将需要序列化和反序列化。会话属性不会。

如果你想读一个cookie,使用此:

@CookieValue("key") String cookie 

在控制器的参数列表。 cookie变量将填充来自名为“key”的cookie的值。

设置cookie,电话:

response.addCookie(cookie); 
+0

谢谢!我个人认为这是这个线程/问题中最有用和最正确的答案。 – Javatar 2013-11-07 10:23:34